2015-10-16 4 views
6

При использовании caffe для создания обучающего набора данных, содержащего изображения, нам нужно создать базу данных в специальном формате, например, lmdb, но есть ли возможность перейти к пакетной обработке изображений caffe, например, vector<cv::Mat>?Caffe + Opencv без lmdb

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

ответ

6

Caffe может принимать много типов входов, в зависимости от используемого слоя ввода. Некоторые из методов ввода, которые доступны:

  1. данных
  2. MemoryData
  3. HDF5Data
  4. ImageData т.д.

В файле модели, первый слой, который вы найдете будет Layer type: Data, который использовал lmdb or leveldb в качестве метода ввода. Преобразование набора изображений в эти базы данных довольно просто, поскольку Caffe уже предоставляет инструменты для преобразования изображений.

Layer type: MemoryData считывает данные непосредственно из памяти, что будет чрезвычайно полезно при использовании входных данных камеры, которые будут переданы как вход Caffe во время фазы тестирования. Использование этого слоя для обучения очень не рекомендуется.

Layer type: ImageData принимает текстовый файл в качестве входного сигнала. Текстовый файл содержит все имена изображений вместе с их полным путем и номером класса. Caffe использует OpenCV для чтения изображений в этом слое. Он также заботится обо всех преобразованиях изображения. Таким образом, вместо того, чтобы использовать OpenCV для чтения изображения, а затем перейти на уровень MemoryData, рекомендуется использовать ImageData.

Формат .txt, из которого ImageData слой считывает изображение должно быть:

/path/to/the/image/imageName.jpg classNumber

Использование LMDB или LevelDB настоятельно рекомендуется, потому что ImageData не должен работать хорошо, если путь или имя изображения содержит пробелы или когда какое-либо изображение повреждено.

Подробная информация о различных слоях может быть найдена here.

Память выделяется в графическом процессоре в зависимости от модели и размера партии. Если происходит переполнение памяти, вы можете попытаться уменьшить размер партии. Caffe легко обработал базу данных Imagenet с 1,2 миллионами изображений. Таким образом, с оптимальным размером партии алгоритм должен работать без каких-либо проблем.

+0

Почему использование MemoryData не рекомендуется для обучения? Также есть ли разница в скорости чтения из lmdb и из ImageData? – mrgloom

+1

MemoryData не рекомендуется для новичков, так как это может усложнить работу, если обучение не прогрессирует, как ожидалось. Кроме того, преобразования, сделанные на изображении, устаревают с уровня MemoryData, что означает, что в будущих выпусках использовать MemoryData среднее значение вычитания изображений, обрезки, изменения размера и т. Д. Должно выполняться снаружи до передачи данных на слой memorydata. –

 Смежные вопросы

  • Нет связанных вопросов^_^