这两周在跑一个模型,我真的是被折腾的要崩溃了。

最后原因就是数据类型的问题,你说是不是应该管小黑屋啊。

skimage.io.imread得到的是uint8的数据,而caffe.io.load_image得到的是0-1之间的小数。

img=skimage.io.imread(img_path), uint8,0-255

img=caffe.io.load_image(img_path), float,0-1

这个还不是最关键的,关键是在使用时的实际情况。

caffe里,使用caffe.io.load_image时,需要把值转换为0-255之间,所以要乘255.

img=skimage.io.imread(img_path),uint8,0-255

img=caffe.io.load_image(img_path)*255,float,0-255

然后最关键的平方,在DL中,要减去均值才行是吧,于是

img=skimage.io.imread(img_path)-mean,uint8,0-255

img=caffe.io.load_image(img_path)*255-mean,float,0-255

此时看似没什么问题。但是第一种方式,减掉均值后,很多地方变成0了。这个在对整图操作时,可能影响还不大,但是如果你要考虑局部的信息,比如像素点的局部信息,此时你就等着吧,绝对因为大部分是0,什么都没有了。

而第二种情况,因为是浮点数,减均值后还是有值的,在0附近的小数,于是这个还是比较正常的输入值,对DL来说,当你定位到局部信息时,还是比较真实的。

于是,我是这么做的,把第一种情况得到的图像都乘以1.0,然后就看到图像的像素值变成浮点型了。这样以来,在减均值时,就好了。

img=(skimage.io.imread(img_path))*1.0,uint8,0-255

img=caffe.io.load_image(img_path)*255,float,0-255

这个问题可是困扰了我N天啊,真是个大坑,掉进去了,希望以后再用python时能够注意到这个问题。

罗嗦那么多,其实最重要的是均值要是浮点型的,不要四舍五入,其实img转换根本没什么用在这里,关键还是均值,一定不能是整型数啊。

我真的是绕了个大弯啊,我的天呢。

还有一个坑,如果你读图时赋值给img=skimage.io.imread(img_path)

但是,如果你减均值时这么干的,

img -= mean

那么你必须在读取图像后赶快把img后面乘上1.0了,转成浮点型,要不然的话,减掉均值再赋值给img,还是给转成整型了,于是还是不行啊。

唉,真的是各种坑啊,所以以后还是乖乖用caffe的io吧。

最新文章

  1. linux基本知识1
  2. AT指令(中文详解版)(一)
  3. rabbitmq之back queue草稿
  4. Android之GridView
  5. DOM 元素节点几何量与滚动几何量
  6. Windows下批处理执行MySQL脚本文件
  7. C++的那些事:你真的了解引用吗
  8. zabbix实现原理及架构详解
  9. 深入Java集合学习系列:HashMap的实现原理
  10. Girls' research
  11. 【转】android电池(五):电池 充电IC(PM2301)驱动分析篇
  12. PHP获取生成一个页面的数据库查询次数(转)
  13. service:jmx:rmi:///jndi/rmi
  14. dede标签:定义文件夹
  15. TensorFlow实现线性回归模型代码
  16. 如何删除windows中运行的历史记录
  17. React中路由的基本使用
  18. Window 由于未经处理的异常,进程终止。
  19. C语言课堂题集
  20. 【题解】Luogu P2787 语文1(chin1)- 理理思维

热门文章

  1. "i++"和“++i”的区别
  2. 配置wordpress
  3. jQuery自动完成插件flexselect
  4. Selenium2(WebDriver)中执行JavaScript代码 (转)
  5. Selenium打开IE报错“Protected Mode settings...”解决方法
  6. python 之serial
  7. Broken Keyboard (a.k.a. Beiju Text) UVA - 11988 (链表)
  8. 性能测试工具LoadRunner27-LR之读取Excel数据
  9. WebGL 踩坑系列-2
  10. Visual Studio 要求导入 pfx 密钥以及导入后依然要求导入的解决办法