1750 * 1750の画像をTensorflowにフィードしようとしていますが、tf.image.decode_jpeg()関数を使用して画像をTensorに変換した後、データにラベルを付けてフィードする方法がわかりません。
現在、私のコードは:
import tensorflow as tf
import numpy as np
import imageflow
import os, glob
sess = tf.InteractiveSession()
def read_jpeg(filename_queue):
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
my_img = tf.image.decode_jpeg(value)
my_img.set_shape([1750, 1750, 1])
print(value)
return my_img
#####################################################
def read_image_data():
jpeg_files = []
images_tensor = []
i = 1
WORKING_PATH = "/Users/Zanhuang/Desktop/NNP/DATA"
jpeg_files_path = glob.glob(os.path.join(WORKING_PATH, '*.jpeg'))
for filename in jpeg_files_path:
print(i)
i += 1
jpeg_files.append(filename)
filename_queue = tf.train.string_input_producer(jpeg_files)
mlist = [read_jpeg(filename_queue) for _ in range(len(jpeg_files))]
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
images_tensor = tf.convert_to_tensor(images_tensor)
sess.close()
さて、前に述べたように、データをフィードしてラベルを付ける必要があります。 CIFAR-10チュートリアルファイルを見たことがありますが、ラベルはファイルに保存されており、そのようにしないことを計画しています。
私はTensorflowを初めて使用するので、できるだけ詳細に応答してください。
ありがとう!
何をしようとしているかに応じて、考慮すべきいくつかの方向があります。
任意のJPEGファイルで推論を実行したいだけの場合(つまり、ラベルは必要ありません)、事前トレーニングされたInceptionネットワークにJPEG画像をフィードするclassify_image.pyの例に従うことができます。
github.com/tensorflow/models/blob/master/tutorials/image/imagenet/classify_image.py
JPEG画像のsmallカスタムデータセットでモデルをトレーニング(または微調整)する場合は、この例を見てください。 JPEG画像の小さなセットからモデルをトレーニングする方法。
github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py
JPEG画像のlargeカスタムデータセットでモデルをトレーニング(または微調整)したい場合、多くの個々のJPEGファイルの読み取りは非効率的で、トレーニングが大幅に遅くなります。
JPEGイメージのディレクトリをシリアル化されたJPEGイメージを含むシャーディングされたRecordIOに変換するinception /モデルライブラリで説明されている手順に従うことをお勧めします。
github.com/tensorflow/models/blob/master/research/inception/inception/data/build_image_data.py
変換スクリプトの実行手順は、次の場所にあります。
変換を実行した後、開始/モデルで使用される画像前処理パイプラインを採用/コピーできます。
github.com/tensorflow/models/blob/master/research/inception/inception/image_processing.py