Настройка конвейера данных для обработки видео - PullRequest
0 голосов
/ 30 марта 2020

Я новичок ie в Tensorflow, поэтому я был бы признателен за любую конструктивную помощь.

Я пытаюсь построить извлечение функций и конвейер данных с Tensorflow для обработки видео, где несколько папок содержат видеофайлы с несколькими классами (База данных JHMDB), но немного застряла.

У меня есть особенность, извлеченная в одну папку, на данный момент для разделения сжатых массивов * .npz, в имени файла я также сохранил имя класса.

Первая попытка

Сначала я подумал, что буду использовать этот код с сайта учебных пособий по TF, просто читая файлы из папки:

jhmdb_path = Path('...')


# Process files in folder
list_ds = tf.data.Dataset.list_files(str(jhmdb_path/'*.npz'))

for f in list_ds.take(5):
    print(f.numpy())

def process_path(file_path):
    labels = tf.strings.split(file_path, '_')[-1]
    features = np.load(file_path)

    return features, labels

labeled_ds = list_ds.map(process_path)

for a, b in labeled_ds.take(5):
    print(a, b)

TypeError: expected str, bytes or os.PathLike object, not Tensor

.. но это не работает.

Вторая попытка

Тогда я подумал, что все в порядке, я буду использовать генераторы:

# using generator
jhmdb_path = Path('...')

def generator():
    for item in jhmdb_path.glob("*.npz"):
        features = np.load(item)
        print(item.files)
        print(f['PAFs'].shape)
        features = features['PAFs']

        yield features

dataset = tf.data.Dataset.from_generator(generator, (tf.uint8))
iter(next(dataset))

TypeError: 'FlatMapDataset' object is not an iterator...not working.

В первом случае каким-то образом путь является байтовым типом, и я не смог изменить до str, чтобы можно было загрузить с np.load(). (Если я указываю файл прямо на np.load(direct_path), то странно, но он работает.)

Во втором случае ... Я не уверен, что не так.

Я искал часами чтобы найти решение о том, как построить итеративный набор данных из списка относительно большого и большого количества файлов 'npz' или 'npy', но, похоже, об этом нигде не упоминается (или, может быть, слишком тривиально).

Кроме того, поскольку я не мог протестировать модель до сих пор, я не уверен, что это хороший способ для go. Т.е. для того, чтобы снабдить модель сотнями файлов таким способом, или просто собрать один огромный 3,5 ГБ npz (который все равно поместится в памяти) и использовать его вместо этого. Или используйте TFrecords, но это выглядит сложнее, чем обычные примеры.

Что здесь действительно раздражает, так это то, что руководства TF и ​​вообще все о том, как напрямую загрузить готовый набор данных или как загрузить np массив (ы) или как загружать, изображения, текст, объекты фрейма данных, но нет никакого способа найти реальные примеры того, как обрабатывать большие куски файлов данных, например, в случае извлечения объектов из аудио или видео файлов.

Так что любые предложения или решения будут высоко оценены, и я был бы очень, очень благодарен за то, что что-то наконец заработало! :)

...