2

1 週間前に TensorFlow を使い始めたばかりで、基本的な問題がいくつかあります。

主なものは、すべてのデータを含む TFRecords を作成する方法が見つからなかったことです。このプロセスは、数百万の 32x32 ピクセルの画像で自分のネットワークをトレーニングするために必要であることを理解しました。

「input_pipeline」を参照する多くのチュートリアルと多くのドキュメントを見つけましたが、それらのチュートリアルのいずれも、自分のイメージを使用して自分のデータベースを作成する方法を明確に説明していません。

いくつかの主要なフォルダーといくつかのサブフォルダーがあり、それぞれに約 300,000 個の png 画像があり、ラベルは画像の名前 (0 または 1 - バイナリ分類) にあります。

これらの画像を取得する方法は、(グロブ) 行を​​使用することです。

"/home/roishik/Desktop/database/train/exp*/*png"
"/home/roishik/Desktop/database/train/exp*/tot*/*png"

だから私の質問は:

これらの画像とそのラベルを含む TFRecords ファイルを作成するにはどうすればよいですか?

私は本当にあなたの助けに感謝します! 私はほぼ 2 日間この問題に悩まされていましたが、MNIT と ImageNet に関する具体的な回答しか見つかりませんでした。

ありがとう!

4

1 に答える 1

4

何百万もの 32x32 画像? CIFAR とまったく同じように聞こえます。TensorFlow Modelsを確認してください。CIFAR10をダウンロードして TFRecords に変換するスクリプトが含まれています: download_and_convert_data.py。データが CIFAR でない場合でも、とにかくコードをチェックしてください。おそらく役に立ちます。

CIFAR10 をロードするコードは次のようになります。

with tf.Graph().as_default():
    image_placeholder = tf.placeholder(dtype=tf.uint8)
    encoded_image = tf.image.encode_png(image_placeholder)

    with tf.Session('') as sess:
        for j in range(num_images):
            [...] # load image and label from disk
            image = [...]
            label = [...]

            png_string = sess.run(encoded_image,
                                  feed_dict={image_placeholder: image})

            example = dataset_utils.image_to_tfexample(
                png_string, 'png', _IMAGE_SIZE, _IMAGE_SIZE, label)
            tfrecord_writer.write(example.SerializeToString())
            [...]

関数は次のimage_to_tfexample()ようになります。

def image_to_tfexample(image_data, image_format, height, width, class_id):
    return tf.train.Example(features=tf.train.Features(feature={
        'image/encoded': bytes_feature(image_data),
        'image/format': bytes_feature(image_format),
        'image/class/label': int64_feature(class_id),
        'image/height': int64_feature(height),
        'image/width': int64_feature(width),
    }))

関数は次のようになりますint_64_feature()(bytes_feature()関数は似ています)。

def int64_feature(values):
    if not isinstance(values, (tuple, list)):
        values = [values]
    return tf.train.Feature(int64_list=tf.train.Int64List(value=values))

編集

さらにいくつかの詳細:

  • は次のTFRecordWriterように作成されます (これにより、ファイルも作成されます)。

    with tf.python_io.TFRecordWriter(training_filename) as tfrecord_writer:
        [...] # use the tfrecord_writer
    
  • ドキュメントにtf.image.encode_png()は、画像には shape が必要であると[height, width, channels]記載されています。channels = 1グレースケールの場合channels = 2はグレースケール + アルファ、RGB カラーの場合は 3、channels = 4RGB カラー + アルファ (RGBA) の場合は 3 です。

于 2016-09-13T07:45:02.670 に答える