1

1週間前にTensorFlowで作業を始めました。基本的な問題がいくつかあります。png画像からTFRecordsファイルを作成する方法

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

"input_pipeline"を参照する多くのチュートリアルと多数のドキュメントがありますが、これらのチュートリアルでは自分のイメージを使用して独自のデータベースを作成する方法を明確に説明していません。

私はいくつかのサブフォルダといくつかのサブフォルダを持っています。ラベルは画像の名前にあります(0または1 - バイナリ分類)。

これらの画像を取得する方法は、(グロブ)行谷です:

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

をだから私の質問は次のとおりです。

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

本当にありがとうございます!私はこの問題を約2日間抱えており、MNITとImageNetに関する具体的な回答しか見つけられませんでした。

ありがとうございます!

+0

は必要ありません、TensorFlowキューは、効率的に個別のPNGファイルを扱うことができる - https://www.tensorflow.org/versions/r0.10/how_tos/reading_data/index.htmlあなたのための –

答えて

0

何百万もの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 
    
  • documentation for tf.image.encode_png()は、画像の形状を持つべきであると述べています[height, width, channels]、グレースケールの場合はchannels = 1、グレースケール+アルファの場合はchannels = 2、RGBカラーの場合は3、RGBカラー+アルファ(RGBA)の場合はchannels = 4です。 tfrecordsへの変換

+0

感謝回答!自分のデータベース(SEMのグレースケール画像)を使用しています。最後の 'tfrecord_writer.write(example.SerializeToString())'はTFRecordsファイルを保存しますか?ファイルに名前を付けるのはどこですか? +画像を32x32テンソルまたは1024ベクトルとしてロードする必要がありますか? – roishik

+0

私の喜び。私は私の答えにいくつかの行を追加した、それはあなたのために物事を明確にする必要があります。 – MiniQuark

関連する問題