我正在尝试对Caffe进行一些修改以接受我的16位数据
我成功创建了一个lmdb数据集,其中填充了16位无符号,未编码的256x256图像,而不是通常的caffe 8位无符号数据,保存为“字符串”,可以使用image_convert
或DIGITS创建通常的8位lmdb公用事业。
我已更改io.py
函数array_to_datum
和datum_to_array
,以便以16位“字符串”数据创建此lmdb。
现在,如果我在caffe上使用这个lmdb(只有4个类),网络会运行但不会收敛。我强烈怀疑这不是正确读取我的数据。
问题是,io.py
函数array_to_blobproto
和blobproto_to_array
似乎没有区分内部数据内容,我找不到我应该修改处理16位的代码。登记/>
任何人都可以给我一个暗示在哪里工作?
编辑: 在代码中乱搞,我认为如果我想直接在png上工作而不需要通过lmdb,那么可能应该创建一个新的数据层或一个新的图像数据层。但是尝试修改C ++代码对我来说并不是一项微不足道的任务,尤其是。我无法轻松跟踪代码中的数据流。我看到新层可以用python编写。您认为新的输入数据层可以很好地工作还是会降低cnn的性能?
答案 0 :(得分:0)
我对转换和改编caffe / lmdb界面了解不多,但如果你不是100%肯定你正在做的事情,这似乎是一条非常冒险的道路。
例如,您在python界面中更改了io函数,但我不认为caffe在从命令行运行时使用此界面(例如,$CAFFE_ROOT/build/tools/caffe train ...
)。您是否查看了io.cpp
文件中的cpp io函数?
我强烈建议使用替代路径:使用hdf5二进制输入而不是lmdb
您可以将您拥有的16位图像转换为float32并将其存储在hdf5文件中,然后通过"HDF5Data"
图层将它们输入到caffe。
详细了解hdf5和caffe in this thread。