Как организовать запись данных LMDB, чтобы слой данных Caffe мог их прочитать? - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно создать быструю, эффективную подпрограмму с минимальными издержками для хранения пар ключ / значение в LMDB для последующего потребления уровнем данных Caffe (т. Е. Без связи с кучей внешних библиотек).

Я просмотрел файлы caffe.proto, caffe.pb.h и caffe.pb.cc и несколько других, относящихся к буферам протокола Google, чтобы понять класс Datum, который является «значением» в записях LMDB.

Лучшей для меня ставкой, по-видимому, является аудит метода datum.SerializeToString (), который берет все структуры данных и вложенные структуры, составляющие Datum, и преобразует их в некое строковое значение.Однако после изучения глубины протобуфа Google я не смог найти, где определен этот метод.

Может ли кто-нибудь указать мне правильное направление?И, очевидно, если есть более быстрый / лучший / более дешевый способ понять, как следует структурировать значение Datum, то я определенно буду к этому открыт.Спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

Я думаю, что вы ищете caffe.io.array_to_datum метод: это интерфейс Python-оболочки для caffe protobuf, преобразующий массив numpy (и необязательную целочисленную метку) в объект Datum.
Есть более полный пример того, как читать / писать LMDB для caffe с использованием интерфейса Python здесь .
Если вы просто хотите преобразовать список изображений с метками в LMDB, вы можете использовать convert_imageset инструмент, который поставляется с кофе.

...