2

我正在尝试对 Caffe 进行一些修改以接受我的 16 位数据。
我成功创建了一个 lmdb 数据集,其中填充了 16 位无符号、未编码的 256x256 图像,而不是通常的 caffe 8 位无符号数据,保存为“字符串”,就像可以使用image_convertDIGITS 实用程序创建的通常的 8 位 lmdb 一样。
我已经更改了io.py函数array_to_datumdatum_to_array以便在 16 位“字符串”数据中创建这个 lmdb。现在,如果我在 caffe 上使用这个 lmdb(只有 4 个类),网络会运行但不会收敛。我强烈怀疑没有正确读取我的数据。问题是,io.py函数array_to_blobprotoblobproto_to_array内部数据内容似乎没有任何区别,
谁能给我一个关于在哪里工作的提示?

编辑:在代码中乱七八糟,我认为如果我想直接在 png 上工作而不通过 lmdb,那么一种可能性应该是创建一个新的数据层或一个新的图像数据层。但是尝试修改 C++ 代码对我来说并不是一件容易的事,尤其是。我不能轻易地跟踪代码中的数据流。我看到新层可以用python编写。你认为新的输入数据层可以很好地工作还是会降低 cnn 的性能?

4

1 回答 1

0

我对转换和调整 caffe/lmdb 接口知之甚少,但如果您不能 100% 确定自己在做什么,这似乎是一条非常冒险的道路。
例如,您更改了 python 接口中的 io 函数,但我不认为 caffe 在从命令行运行时使用此接口(例如,$CAFFE_ROOT/build/tools/caffe train ...)。您是否查看过io.cpp文件中的 cpp io 函数?

我强烈建议另一种路径:使用 hdf5 二进制输入而不是 lmdb。您可以将您必须的 16 位图像转换为 float32 并将它们存储在 hdf5 文件中,然后将它们通过层
输入到 caffe 。"HDF5Data"

在此线程中阅读有关 hdf5 和 caffe的更多信息。

于 2016-03-27T06:57:02.473 回答