skimage.io.imread vs caffe.io.load_image
这两周在跑一个模型,我真的是被折腾的要崩溃了。
最后原因就是数据类型的问题,你说是不是应该管小黑屋啊。
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吧。
skimage.io.imread vs caffe.io.load_image的更多相关文章
- (转)opencv 代替caffe.io.load_image
self.net.blobs[, , self.image_resize, self.image_resize) #image = caffe.io.load_image(image_file) im ...
- [Java IO]04_系统标准IO
System表示系统类,它有3个与 Java IO 有关的常量. System.out——系统标准输出 System.in——系统标准输入 System.err——错误信息输出 System.out ...
- 异步IO比同步阻塞IO性能更好吗?为什么?
最近在看node.js, 介绍中提到node是异步io的方式实现, 性能比同步阻塞io的更好. 对于一个request而言, 如果我们依赖io的结果, 异步io和同步阻塞io都是要等到io完成才能继续 ...
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...
- 泛函编程(37)-泛函Stream IO:通用的IO处理过程-Free Process
在上两篇讨论中我们介绍了IO Process:Process[I,O],它的工作原理.函数组合等.很容易想象,一个完整的IO程序是由 数据源+处理过程+数据终点: Source->Process ...
- Linux IO Scheduler(Linux IO 调度器)
每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request.I/O调度器的基本目的是将请求按照它们对应在块设 ...
- 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- Linux Network IO Model、Socket IO Model - select、poll、epoll
目录 . 引言 . IO机制简介 . 阻塞式IO模型(blocking IO model) . 非阻塞式IO模型(noblocking IO model) . IO复用式IO模型(IO multipl ...
- 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...
随机推荐
- Unity3d C# 创建 物体
using UnityEngine; using System.Collections; public class create : MonoBehaviour { // Use this for i ...
- 效率工具(fswatch,rsync)
mac 安装 brew: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...
- python的基础数据类型
Python基础数据类型 定义: int => 数字类型 str => 字符串数据类型 bool =>布尔值,True False list 列表,用来存放大量数据 [ ...
- Cloudera Manager卸载笔记
1.通过管理平台分别停止组件服务和Cloudera Management Service 2.通过管理平台注销并移除Parcles (在控制台注销并移除,无论是安装的Parcles还是未安装的Parc ...
- td标签里内容不换行
在一些页面开发中,除自己操作外,引起换行的情况一般有: Ex一.td标签里内容长度过长引起换行: Ex二.div标签(或其他标记)里内容有文本和图片引起换行: 解决方法: 针对例子一用<nobr ...
- Spring-cloud学习线路
学习本学习路线学习完,大家将会对微服务.Spring Cloud.Docker.Kubernetes有一个系统.全面的认识.通过学习,将能掌握相关的知识体系,并能够投入到项目实战中去. 本学习路线采用 ...
- 用IDEA创建一个SpringBoot项目
next后等待项目构建完成 运行方法一: 方法二:
- python面试题——前端(23题)
2.谈谈你对websocket协议的认识. 3.什么是magic string ? 4.如何创建响应式布局? 5.你曾经使用过哪些前端框架? 6.什么是ajax请求?并使用jQuery和XMLHttp ...
- 微信小程序电商实战-商品列表流式布局
今天给大家分享一下微信小程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~ 流式布局概念 流式布局也叫百分比布局 把元素的宽,高,margin,padding不再用固定数值,改用百分 ...
- css取消a标签在移动端点击时的背景颜色
一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(255, 255, 255, 0);-webkit-user-select: none;-moz ...