Я пытаюсь создать TFRecords из пользовательского набора видеоданных, и у меня возникают проблемы с полным пониманием того, как их настроить.
Чтобы подготовить свои данные к хранению, я написал сценарий, который для данного видеопотока выводит трехмерный куб формы [N_FRAMES, WIDTH, HEIGHT, CHANNEL]
. После этого я создаю tfrecord следующим образом:
def _int64_feature(self, value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _bytes_feature(self, value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
def createDataRecord(self, file_name, locations, categories):
writer = tf.python_io.TFRecordWriter(file_name)
feature = {}
for loc, category in zip(locations, categories):
data = self.3DVideo(loc) # the final array of shape [N_FRAMES, WIDTH, HEIGHT, CHANNEL]
feature['height'] = self._int64_feature(self.height)
feature['width'] = self._int64_feature(self.width)
feature['depth'] = self._int64_feature(self.depth)
feature['data'] = self._bytes_feature(data.tostring())
feature['category'] = self._int64_feature(category)
example = tf.train.Example(features=tf.train.Features(feature=feature))
writer.write(example.SerializeToString())
writer.close()
Тогда моя текущая функция синтаксического анализатора выглядит следующим образом
def readDataRecord(self, record):
filename_queue = tf.train.string_input_producer([record], num_epochs=1)
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
feature =
{'height': tf.FixedLenFeature([], tf.int64),
'width': tf.FixedLenFeature([], tf.int64),
'depth': tf.FixedLenFeature([], tf.int64),
'data': tf.FixedLenFeature([], tf.string),
'category': tf.FixedLenFeature([], tf.int64),
}
example = tf.parse_single_example(serialized_example, features=feature)
video3D_buffer = tf.reshape(example['data'], shape=[])
video3D = tf.decode_raw(video3D_buffer, tf.uint8)
label = tf.cast(example['category'], tf.int32)
return video3D, label
С учетом сказанного, мои вопросы:
Я знаю, что readDataRecord()
не так, поскольку он работает с отдельными кадрами. Как именно заставить его вернуть отдельные трехмерные кубы формы [N_FRAMES, WIDTH, HEIGHT, CHANNEL]
вместе с их соответствующей категорией?
Это даже хорошая идея, чтобы просто сохранить весь 3D-куб?
Любая помощь или руководство будет принята с благодарностью:)
PS: Я рассмотрел другие методы, включая video2tfrecord , но большинство из них, похоже, сохраняют отдельные кадры для каждого видео, и я этого не хочу.