3

Я совершенно новый в глубоком обучении, и у меня возникают некоторые проблемы с использованием сети глубокого обучения caffe. В принципе, я не нашел никакой документации, объясняющей, как я могу решить ряд вопросов и проблем, с которыми я имею дело прямо сейчас.Файлы LMDB и то, как они используются для сети глубокого обучения caffe

Пожалуйста, позвольте мне сначала объяснить мою ситуацию.

У меня есть тысячи изображений, и я должен сделать над ними ряд операций предварительной обработки. Для каждой операции предварительной обработки я должен сохранить эти предварительно обработанные изображения как 4D-матрицы, а также сохранить вектор с метками изображений. Я буду хранить эту информацию в виде файлов LMDB, которые будут использоваться в качестве входных данных для глубокого обучения caffe googletet.

Я попытался сохранить мои изображения как файлы .HD5, но конечный размер файла составляет 80 ГБ, что невозможно обработать с памятью, которую у меня есть.

Итак, другой вариант использует файлы LMDB, не так ли? Я довольно новичок в этом формате, и я ценю вашу помощь в понимании того, как их создавать в Matlab. В основном, мои вопросы новичков:

1- Эти файлы LMDB имеют расширение .MDB, правильно? является ли это расширение тем же, что и Microsoft Access? или правильный формат - .lmdb, и они разные?

2- Я нахожу это решение для создания файлов .mdb (https://github.com/kyamagu/matlab-leveldb), создает ли он формат файла, необходимый для caffe?

3- Для кофе, должен ли я создать один .mdb-файл для меток и других изображений, или оба могут быть полями того же .mdb-файла?

4- Когда я создаю файл .mdb, я должен пометить поля базы данных. Можно ли пометить одно поле как изображение и другое как метку? понимает ли кто-нибудь, какое поле означает?

5 что делает функция (в https://github.com/kyamagu/matlab-leveldb) database.put ('key1', 'value1') и database.put ('key2', 'value2')? Должен ли я сохранять свои 4-мерные матрицы в одном поле и вектор меток в другом?

ответ

7

Нет связи между файлами LMDB и файлами MS Access.

Как я вижу у вас есть два варианта:

  1. Используйте «convert_imageset» инструмент - он находится в CAFFE в папке инструментов для преобразования списка файлов изображений и метки для lmdb.
  2. Вместо «слоя данных» используйте «слой данных изображения» в качестве входа в сеть. Этот тип слоя принимает файл со списком имен файлов изображений и ярлыков в качестве источника, поэтому вам не нужно создавать базу данных (другое преимущество для обучения - вы можете использовать опцию перетасовки и получить несколько лучшие результаты обучения)

Чтобы использовать слой данных изображения, просто замените тип слоя с Data на ImageData. Исходный файл - это путь к файлу, содержащему в каждой строке путь к файлу изображения и метке, разделенной пробелом. Например:

/path/to/filnename.png 23 

Если вы хотите сделать некоторые предварительной обработку данных без сохранения препроцессированного файла на диск вы можете использовать преобразование, доступное по CAFFE (зеркало и кадрирование) (см здесь для информации http://caffe.berkeleyvision.org/tutorial/data.html) или внедрить собственный DataTransformer.

+0

Большое вам спасибо за ваш ответ. Но оба ответа мне не очень помогают. Я не хочу читать список файлов из каталогов, так как у меня есть 250 тыс. Изображений, и я попытаюсь выполнить над ними ряд операций предварительной обработки. Я не хочу сохранять их на диске, поэтому я хотел бы сделать операции предварительной обработки в matlab и сохранить предварительно обработанные файлы и метки как LMDB напрямую. Это возможно? – mad

+0

Можете ли вы помочь мне в использовании слоя данных изображения? как синтаксис, который я должен использовать в моем файле .prototxt? Я думаю, что это менее дорогое решение для меня, учитывая, что создавать файлы mdb сложно, как я хочу. – mad

+0

добавил некоторые пояснения к ответу –

1

Caffe не использует LevelDB - но it usesLMDB 'Lightning' db from Symas

Вы можете попробовать использовать this Matlab LMDB обертка я лично не имел никакого опыта с использованием LMDB с Matlab, но есть хорошая библиотека для этого из Python: py-lmdb

База данных LMDB - это ключ/значение db (аналогично HashMap на Java или dict в Python). Чтобы хранить 4D-матрицы, вам нужно понять, что Caffe использует для сохранения изображений в формате LMDB.

Это означает, что лучший способ конвертировать изображения в LMDB для Caffe будет делать это с Caffe.

There are examples in Caffe о том, как конвертировать изображения в LMDB - я бы попытался их повторить, а затем изменить скрипты для использования ваших изображений.

+4

Caffe может использовать как LMDB, так и LevelDB –

+0

Спасибо за ваш ответ, теперь я понимаю формат файла caffe. Но я не хочу использовать подход caffe для создания файлов LMDB, поскольку я должен хранить изображения в папках. Я сделаю серию операций предварительной обработки в 245000 изображениях и хочу протестировать каждую из них в глубокой сети googlenet. Мой лучший вариант выполняет операции предварительной обработки, не сохраняя их на диск и напрямую создавая файлы LMDB. – mad