web-dev-qa-db-ja.com

TensorFlow:自分の画像でのトレーニング

TensorFlowは初めてです。 独自の画像をトレーニングするデータセットが可能な画像認識のヘルプを探しています。

新しいデータセットをトレーニングする例はありますか?

37
VICTOR

TensorFlowで独自のデータを入力する方法に興味がある場合は、 このチュートリアル をご覧ください。
また、StanfordでCS230のベストプラクティスを含むガイドを作成しました こちら


新しい回答(tf.data付き)およびラベル付き

tf.datar1.4を導入すると、プレースホルダーやキューなしで画像のバッチを作成できます。手順は次のとおりです。

  1. 画像のファイル名と対応するラベルのリストを含むリストを作成します
  2. これらのファイル名とラベルを読み取るtf.data.Datasetを作成します
  3. データを前処理する
  4. 次のバッチを生成するtf.data.Datasetからイテレーターを作成します

コードは次のとおりです。

# step 1
filenames = tf.constant(['im_01.jpg', 'im_02.jpg', 'im_03.jpg', 'im_04.jpg'])
labels = tf.constant([0, 1, 0, 1])

# step 2: create a dataset returning slices of `filenames`
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))

# step 3: parse every image in the dataset using `map`
def _parse_function(filename, label):
    image_string = tf.read_file(filename)
    image_decoded = tf.image.decode_jpeg(image_string, channels=3)
    image = tf.cast(image_decoded, tf.float32)
    return image, label

dataset = dataset.map(_parse_function)
dataset = dataset.batch(2)

# step 4: create iterator and final input tensor
iterator = dataset.make_one_shot_iterator()
images, labels = iterator.get_next()

これで、プレースホルダーを介してデータを供給せずに、sess.run([images, labels])を直接実行できます。


古い回答(TensorFlowキューを使用)

まとめると、複数のステップがあります:

  1. ファイル名のリストを作成します(例:画像へのパス)
  2. TensorFlowファイル名キューを作成します
  3. 各画像の読み取りとデコード、固定サイズへのサイズ変更(バッチ処理に必要)
  4. これらの画像のバッチを出力します

最も簡単なコードは次のとおりです。

# step 1
filenames = ['im_01.jpg', 'im_02.jpg', 'im_03.jpg', 'im_04.jpg']

# step 2
filename_queue = tf.train.string_input_producer(filenames)

# step 3: read, decode and resize images
reader = tf.WholeFileReader()
filename, content = reader.read(filename_queue)
image = tf.image.decode_jpeg(content, channels=3)
image = tf.cast(image, tf.float32)
resized_image = tf.image.resize_images(image, [224, 224])

# step 4: Batching
image_batch = tf.train.batch([resized_image], batch_size=8)
70