Caffe中把数据转换成灰度图

 已经很久没有写过博客,原因是有段时间没整Caffe了。今天心血来潮,微调一个网络,结果困难重重。哎,三天打鱼,两天晒网果然不行。废话少说,直接上干货。

    首先是我的目的是微调网络,原始训练数据是单通道灰度图,因此微调时输入的数据也必须是单通道灰度图,否则出现以下错误:

    Caffe中把数据转换成灰度图_第1张图片

    我遇到的问题是,我的数据明明已经用opencv把彩色图像转换成灰度图,然后保存成灰度图。但是此处还是提示输入的三通道。分析认为虽然opencv已经把彩色图像转换成灰度图,但是在保存的时候还是按照三通道来保存。(只不过三个通道的数值一样,这个我没有验证过,只是这样分析,希望有兴趣的朋友,验证后给我留言,谢谢!)

  既然遇到了问题,那我们怎么解决呢?

  第一种方法(我没有使用,只是个设想,有兴趣的可以试试)

  我的想法是,用opencv首先开辟一个单通道空间,也就是定义一个Mat变量(但是是单通道的,这个很容易),然后把转换成的灰度图复制到上面的单通道空间,然后保存。思想是强迫opencv保存单通道数据。

 第二种方法(已经成功)

 折腾了半天,原来在caffe自带的转换数据程序(convert_imageset.exe)中有个选项。哎,原来只懂个皮毛,就认为自己什么都会了,惭愧惭愧!首先用convert_imageset.exe --help 查看都有哪些选项:

Caffe中把数据转换成灰度图_第2张图片

[FLAGS] 就是参数选项,此函数的具体使用可以参看我的另一篇博客:caffe学习笔记-数据库制作是命令格式(windows版)

具体有哪些参数呢?

Caffe中把数据转换成灰度图_第3张图片

--backend 转换格式 有leveldb,lmdb两种选择

--gray 是否转换成灰度图 --gray=true 转换成灰度图

--resize_height  --resize_width  可以重新调整图片大小

--shuffle  打乱原有数据的顺序,生成一个乱序的数据

补充于:2016/4/8

--shuffle这个参数非常重要,我出现的情况是测试精度不断提高,但是train loss跳来跳去,原因是训练数据的不均匀。在转换数据是令--shuffle=true 将数据打乱,这样可以避免这种情况。


到了这了我们就知道了,只要我们在转换数据时用 convert_imageset --gray=true **** *** ***  **即可了。

问题成功解决了,可悲的是我的电脑配置不行,等待公司服务器中。

祝各位好运!




  

你可能感兴趣的:(Caffe中把数据转换成灰度图)