Caffe может принимать много типов входов, в зависимости от используемого слоя ввода. Некоторые из методов ввода, которые доступны:
- данных
- MemoryData
- HDF5Data
- 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 миллионами изображений. Таким образом, с оптимальным размером партии алгоритм должен работать без каких-либо проблем.
Почему использование MemoryData не рекомендуется для обучения? Также есть ли разница в скорости чтения из lmdb и из ImageData? – mrgloom
MemoryData не рекомендуется для новичков, так как это может усложнить работу, если обучение не прогрессирует, как ожидалось. Кроме того, преобразования, сделанные на изображении, устаревают с уровня MemoryData, что означает, что в будущих выпусках использовать MemoryData среднее значение вычитания изображений, обрезки, изменения размера и т. Д. Должно выполняться снаружи до передачи данных на слой memorydata. –