Изменение Caffe для приема 16-битных данных внутри lmdb

Я пытаюсь внести некоторые изменения в Caffe, чтобы принять мои 16-битные данные.
Мне удалось создать набор данных lmdb, заполненный 16-битным беззнаковым, некодированным изображением 256x256 вместо обычных 8-битных беззнаковых данных caffe, сохраненных как " string », как и обычный 8-битный lmdb, который можно создать с помощью image_convert или утилит DIGITS.
Я изменил io.py функции array_to_datum и datum_to_array, чтобы создать этот lmdb с 16-битными« строковыми »данными. Теперь, если я использую этот lmdb в кафе (всего 4 класса), сети работают, но не сходятся. Я сильно подозреваю, что неправильно читает мои данные. Проблема в том, что io.py функции array_to_blobproto и blobproto_to_array, похоже, не делают каких-либо различий между внутренним содержимым данных, и я не могу найти код, в котором мне нужно изменить для работы с 16-битными.
Может ли кто-нибудь дать мне подсказку, где работать на?

Изменить: возиться с кодом, я думаю, что одна из возможностей должно заключаться в создании нового уровня данных или нового слоя данных изображения, если я хочу работать непосредственно с png без прохождения lmdb. Но попытка изменить этот код C ++ для меня - нетривиальная задача, особенно. Я не могу легко следить за потоком данных внутри кода. Я вижу, что новый слой можно написать на питоне. Как вы думаете, новый уровень входных данных мог бы работать нормально или замедлил бы производительность cnn?


person Paolo Russo    schedule 26.03.2016    source источник


Ответы (1)


Я мало знаю о преобразовании и адаптации интерфейса caffe / lmdb, но это кажется очень рискованным путем, если вы не на 100% уверены в том, что делаете.
Например, вы изменили функции io в интерфейс python, но я не думаю, что caffe использует этот интерфейс при запуске из командной строки (например, $CAFFE_ROOT/build/tools/caffe train ...). Вы изучали функции cpp io в _2 _ файл?

Я настоятельно рекомендую альтернативный путь: используйте двоичные входы hdf5 вместо lmdb.
Вы можете преобразовать 16-битные изображения, которые у вас есть, в float32 и сохранить их в файлах hdf5, а затем ввести их в caffe через слой "HDF5Data".

Дополнительные сведения о hdf5 и caffe см. в этой теме.

person Shai    schedule 27.03.2016