【问题标题】:Modifying Caffe to accept 16 bit data inside lmdb修改 Caffe 以接受 lmdb 内的 16 位数据
【发布时间】:2016-07-14 02:17:12
【问题描述】:

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

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

【问题讨论】:

    标签: machine-learning neural-network deep-learning caffe lmdb


    【解决方案1】:

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

    我强烈建议另一种路径:使用 hdf5 二进制输入而不是 lmdb。
    你可以将你需要的16bit图片转成float32并存储在hdf5文件中,然后通过"HDF5Data"层输入到caffe。

    阅读有关 hdf5 和 caffe 的更多信息in this thread

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 2016-01-15
      • 2016-02-11
      • 2015-06-14
      • 2016-01-31
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多