问题描述
在windows平台上,本地训练SSD_512得到了对应的权值参数文件,加载模型进行前向测试的时候,发现调用caffe.io.Transformer中的resize处理函数速度太慢,打算用opencv的resize做替换,因此更改了输入图片到模型中的预处理过程,使用caffe.io.Transformer进行预处理的过程如下:

import numpy as np
import sys,os
# 设置当前的工作环境在caffe下
caffe_root = '/home/xxx/caffe/'
# 我们也把caffe/python也添加到当前环境
sys.path.insert(0, caffe_root + 'python')
import caffe
os.chdir(caffe_root)#更换工作目录 # 设置网络结构
net_file=caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt'
# 添加训练之后的参数
caffe_model=caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'
# 均值文件
mean_file=caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy' # 这里对任何一个程序都是通用的,就是处理图片
# 把上面添加的两个变量都作为参数构造一个Net
net = caffe.Net(net_file,caffe_model,caffe.TEST)
# 得到data的形状,这里的图片是默认matplotlib底层加载的
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
# matplotlib加载的image是像素[0-1],图片的数据格式[weight,high,channels],RGB
# caffe加载的图片需要的是[0-255]像素,数据格式[channels,weight,high],BGR,那么就需要转换 # channel 放到前面
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
# 图片像素放大到[0-255]
transformer.set_raw_scale('data', 255)
# RGB-->BGR 转换
transformer.set_channel_swap('data', (2,1,0)) # 这里才是加载图片
im=caffe.io.load_image(caffe_root+'examples/images/cat.jpg')
# 用上面的transformer.preprocess来处理刚刚加载图片
net.blobs['data'].data[...] = transformer.preprocess('data',im)
#注意,网络开始向前传播啦
out = net.forward()
# 最终的结果: 当前这个图片的属于哪个物体的概率(列表表示)
output_prob = output['prob'][0]
# 找出最大的那个概率
print 'predicted class is:', output_prob.argmax()

  

用opencv2中的resize函数替换之后,检测的结果很差,最终通过比较两种resize方式对同一张图片处理后结果的差异,发现两种方式存在不同,虽然说差异很小,但是也会严重影响检测结果,原因可能如下:

模型不够鲁棒
caffe中的resize和opencv中的resize的默认插值方式可能不同,这点需要看源码进行确认
在ubuntu上不存在这个问题,猜想可能是在windows下的caffe不是官方提供的,可能处理方式存在差异
最终,全部采用caffe.io.Transformer的方式进行图片的预处理,检测结果恢复正常。

此外,测试了opencv2和opencv3,发现用opencv2处理图片,检测的效果更好,原因未知!
---------------------
作者:tsq292978891
来源:CSDN
原文:https://blog.csdn.net/tsq292978891/article/details/78918413
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. [git]撤销的相关命令:reset、revert、checkout
  2. Eclipse高级使用技巧
  3. Web中的图标
  4. JavaWeb学习总结(十三)--数据库连接池
  5. ClassLoader相关内容
  6. How Do I Deploy a Windows 8 App to Another Device for Testing?
  7. Windows单击右键没有共享选项怎么办
  8. Spring常用注解介绍【经典总结】
  9. mysql 查询各数据库的占用大小
  10. scrapy爬取极客学院全部课程
  11. Jarvis OJ 一些简单的re刷题记录和脚本
  12. golang实现tcp编程
  13. 内存大厂威刚发布速度高达550MB/s的固态硬盘SU750
  14. mime模块响应或设置Node.js的Content-Type头
  15. Django模型层(2)
  16. Python字典按值排序、包含字典的列表按字典值排序的方法
  17. POJ 1284 Primitive Roots 数论原根。
  18. 【Asp.net入门01】动态网站基础知识
  19. d3.js(v5.7)的attr()函数完善(添加obj支持)
  20. mongodb副本集优先级设置

热门文章

  1. bzoj 1151: [CTSC2007]动物园zoo
  2. Codeforces Round #355 (Div. 2) D. Vanya and Treasure
  3. 如何启用内置的Win10 OpenSSH客户端(转)
  4. Hive项目开发环境搭建(Eclipse\MyEclipse + Maven)
  5. Nmap扫描教程之基础扫描详解
  6. BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
  7. JavaScript 的装饰器:它们是什么及如何使用
  8. [Java]jdbc[转]
  9. Codeforces Round #374 (Div. 2) B. Passwords 贪心
  10. 本地hosts文件IP地址解析