私はPythonでTensorFlowを使用していますが、tf.train.Exampleプロトコルバッファを含むTFRecordsファイルにデータを保存しています。 (これらは高、幅、画像ある次のコード例では)IはTensorFlowセッションを実行する必要なしに、各実施例に格納されたフィールドを抽出しようとしています。そして、試行錯誤によって、私は次のコードが正常に動作することが分かっ:TensorFlowセッションを実行せずにprotobufでtfrecordsファイルから画像を抽出する
import numpy as np
import tensorflow as tf
def _im_feature_to_im(example, key):
feature_ser = example.features.feature[key].bytes_list.SerializeToString()
feature_ser_clean = feature_ser[4:]
image = np.fromstring(feature_ser_clean, dtype=np.uint8).reshape((height, width))
return image
for serialized_example in tf.python_io.tf_record_iterator(tfrec_filename):
example = tf.train.Example()
example.ParseFromString(serialized_example)
# traverse the Example format to get data
height = example.features.feature['height'].int64_list.value[0]
width = example.features.feature['width'].int64_list.value[0]
image = _im_feature_to_im(example, 'image')
ので: int型のフィールドが容易に抽出されています。 しかし、私の質問は、画像の抽出に関するものです:元の画像を取得するためにバイト配列の先頭から4バイトを削除する必要があるのはなぜですか?そこにいくつかのヘッダーがありますか?
ありがとうございます。私は最初のバイトをスキップして、MSB = 0のバイトに達するまでMSB = 1のすべてのバイトをスキップし続ける必要があり、それはスキップされる最後のバイトです。今では、ハードコードされた4バイトを削除する代わりに、コードを置き換えることができます(これは、保存された情報の他のケースでは正しくありません)。 – user2736930