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

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

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吧。

转载于:https://www.cnblogs.com/jianyingzhou/p/4571454.html

skimage.io.imread vs caffe.io.load_image相关推荐

  1. skimage.io.imread(), Image.open() 以及 cv2.imread()的区别

    我们在进行数据处理的时候,经常会遇到这样的问题,我应该用什么来打开我的图片呢?接下来我们就来介绍一下常见的两种打开图片的方法,以及区别 1.  img = Image.open(path),这是PIL ...

  2. 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO

    IO分两阶段: 1.数据准备阶段:在该阶段,根据是否等待数据准备,将IO分成阻塞和非阻塞: 2.内核空间复制回用户进程缓冲区阶段:在该阶段,只要程序需要等待复制完成,才能往下运行(尽管这个时间很短), ...

  3. 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型

    1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...

  4. 网络传输中的两个阶段、阻塞IO、非阻塞IO和多路复用

    今天学习了网络传输中的两个阶段.阻塞IO.非阻塞IO和多路复用 一.网络传输中的两个阶段 分别是 waitdata 和 copydata send就是copydata recv是waitdata和co ...

  5. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  6. Linux什么是文件IO,linux中文件IO

    一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...

  7. java canonicalize_java.io.IOException:java.io.WinNTFileSystem.canonicalize0处的无效参数

    我正在使用Eclipse Mars和Tomcat v8.0.30,jre 1.8.0_73.昨天我没有任何问题,但今天我的Tomcat服务器无法启动.弹出一个对话框,它说:"开始在本地主机的 ...

  8. java io 过滤数据,Java IO文件后缀名过滤总结

    实现效果:列出某个目录下的特定后缀名文件(如,列出D盘根目录下txt后缀的文件) import java.io.File; import java.io.FilenameFilter; public ...

  9. druid.io mysql 配置_druid.io 使用mysql存储metadata overlord启动出错

    这是druid.io批量导入数据时出现的问题,当启动overlord节点时,运行的命令如下: java -Xmx2g -Duser.timezone=UTC -Dfile.encoding=UTF-8 ...

最新文章

  1. 2018java二级考试大纲_2018年全国计算机二级java考试简答题练习二
  2. gecco 1.1.0稳定版发布,易用的轻量化爬虫
  3. webstorm2018破解方法
  4. 一句代码实现 HTML5 语音搜索
  5. VC++ 深入详解 学习笔记(5) -- 修改窗口样式续
  6. python爬boss网站_python之requests爬虫Boss数据
  7. python正则表达式中的转义字符_python 正则表达式之转义字符
  8. VC++实现混合静态分裂视窗的方法
  9. 华为Mate X折叠屏手机即将上市:支持5G 升级后置四摄
  10. 60-008-022-使用-命令-yarn-session命令
  11. 谭晓生大闹中国计算机中心,360高管谭晓生不满中国计算机大会拖堂和临时加议程,现场摔话筒发飙...
  12. Java核心技术笔记 1
  13. Linux SMB和NFS文件共享
  14. java 快逸报表_快逸报表V4.0功能说明
  15. 京东发布《未来科技趋势白皮书》,101页详解5大关键技术(附PDF下载)
  16. BigGAN进化出最强形态BigBiGAN:重回表示学习,GAN之父点赞
  17. 《Java数据结构入门》顺序表详解
  18. matlab中Current Folder的修改
  19. 学生信息管理系统代码全篇
  20. 违法?猝死?你肯定不知道程序员还有这些“高危”操作

热门文章

  1. 2003 IIS搭建与配置
  2. 进程——Windows核心编程学习手札系列之四
  3. Leetcode 130. 被围绕的区域 解题思路及C++实现
  4. Leetcode 179. 最大数 解题思路及C++实现
  5. hadoop的同类技术_Hadoop 气数已尽:逃离复杂性,拥抱云计算
  6. @EnableAspectJAutoProxy||AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】
  7. 基于XML的IOC案例
  8. 使用ServletContext对象完成网页计数器
  9. oracle 数据回滚,恢复误删的数据,闪回表功能的使用
  10. CTFshow 命令执行 web45