2017-04-20 15 views
1

データをtfrecordファイルにエンコードしました。各画像に対して、複数のラベルを含む複数の境界ボックスをその画像と共にエンコードします。今、私のデータがTensorflow/slimデータセット型で正しくデコードされているかどうかを確認したいと思います。私は、次のテストを書く:Tensorflowスリムデータセットの実際のデータを確認する方法

def test2(sess): 
    labels_to_class = read_label_file(label_fname) 
    reader = tf.TFRecordReader 
    keys_to_features = { 
    'image/encoded': tf.FixedLenFeature(
    (), tf.string, default_value=''), 
    'image/format': tf.FixedLenFeature((), tf.string, default_value='jpg'), 
    'image/object/labels': tf.VarLenFeature(dtype=tf.int64), 
    'image/object/truns': tf.VarLenFeature(dtype=tf.int64), 
    'image/object/occluds': tf.VarLenFeature(dtype=tf.int64), 
    'image/object/bbox/xmin': tf.VarLenFeature(dtype=tf.int64), 
    'image/object/bbox/xmax': tf.VarLenFeature(dtype=tf.int64), 
    'image/object/bbox/ymin': tf.VarLenFeature(dtype=tf.int64), 
    'image/object/bbox/ymax': tf.VarLenFeature(dtype=tf.int64), 
    } 
    items_to_handlers = { 
    'image': slim.tfexample_decoder.Image('image/encoded', 'image/format'), 
    'object/label': slim.tfexample_decoder.Tensor('image/object/labels'), 
    'object/truncated': slim.tfexample_decoder.Tensor('image/object/truns'), 
    'object/occluded': slim.tfexample_decoder.Tensor('image/object/occluds'), 
    'object/bbox': slim.tfexample_decoder.BoundingBox(
     ['ymin', 'xmin', 'ymax', 'xmax'], 'image/object/bbox/'), 
    } 

    decoder = slim.tfexample_decoder.TFExampleDecoder(
    keys_to_features, items_to_handlers) 

    dataset = slim.dataset.Dataset(
    data_sources=filename_queue, 
    reader=reader, 
    decoder=decoder, 
    num_samples=sample_num, 
    items_to_descriptions=_ITEMS_TO_DESCRIPTIONS, 
    num_classes=_NUM_CLASSES, 
    labels_to_names=labels_to_class) 

    provider = slim.dataset_data_provider.DatasetDataProvider(dataset) 

    keys = provider._items_to_tensors.keys() 

    print(provider._num_samples) 
    for item in provider._items_to_tensors: 
    print(item, provider._items_to_tensors[item]) 

    [image, label] = provider.get(['image', 'object/label']) 

    print('AAA') 

    sess.run([image, label]) 

    print('BBB') 

私は上記のコードを実行すると、それは示しています

6 
image Tensor("case/If_2/Merge:0", shape=(?, ?, 3), dtype=uint8) 
object/label Tensor("SparseToDense:0", shape=(?,), dtype=int64) 
object/occluded Tensor("SparseToDense_1:0", shape=(?,), dtype=int64) 
record_key Tensor("parallel_read/common_queue_Dequeue:0", dtype=string) 
object/bbox Tensor("transpose:0", shape=(?, 4), dtype=int64) 
object/truncated Tensor("SparseToDense_2:0", shape=(?,), dtype=int64) 
AAA 

は次に、プログラムはエラーメッセージを設けることなく、永遠にそこに停止します。 プログラムは、適切なサンプル番号(6)と私がエンコードしたテンソルの正しいタイプを示しましたが、テンソルの値をチェックしたいと思います。 とにかく値を確認できますか?

ありがとうございました。

-----------------アップデート--------------------私は追加

コード次のとおりです。

tf.train.start_queue_runners() 

print('Start verification process..') 

for i in range(provider._num_samples): 
    [image, labelList, truncList, occList, 
     boxList] = provider.get([ 
     'image', 'object/label', 'object/truncated', 
     'object/occluded', 'object/bbox']) 
    enc_image = tf.image.encode_jpeg(image) 
    img, labels, truns, occluds, boxes = sess.run(
     [enc_image, labelList, truncList, occList, boxList]) 

    f = tf.gfile.FastGFile('out_%.2d.jpg' % i, 'wb') 
    f.write(img) 
    f.close() 

    for j in range(labels.shape[0]): 
    print('label=%d (%s), truc=%d, occluded=%d at [%d, %d, %d, %d]' % (
     labels[j], labels_to_class[labels[j]], truns[j], 
     occluds[j], boxes[j][0], boxes[j][1], 
     boxes[j][2], boxes[j][3])) 

答えて

1

イメージとラベルを評価するためには、おそらくキューランナーを起動する必要があります。

+0

私に例を挙げてください。私はオンラインでグーグルを行ったが、誰も働いていない。ありがとうございました。 – Brandon

+0

session.runを呼び出す前にtf.train.start_queue_runners()を追加してください –

+0

あなたの提案をお寄せいただき、ありがとうございます。しかし、1つの問題があります。私がテストプログラムを走らせるとき、画像の読み取り命令は毎回ランダムであり、重複している可能性があります。たとえば、6つのレコードの検証を行い、ロードされたイメージデータがアイテム0,1,1,2,1,5からのもので、別の時刻が1,2,3,4,0,1です。これは何が原因でしょうか? 1つのレコードを1回だけ読み込むことを制限する方法はありますか?ありがとうございました。 – Brandon

関連する問題