caffe模型文件解析_使用pycaffe解析mean.binaryproto中的均值图像并显示

7862c03df81c74cd1ddb38c6fafc662e.gif

点击上方蓝字关注我们

微信公众号:OpenCV学堂

关注获取更多计算机视觉与深度学习知识

mean.binaryproto文件生成

用Caffe框架训练图像相关的视觉任务时候,在预处理的时候会先求图像的均值,这个均值其实是整个数据集的图像均值,Caffe中提供了一个工具来计算数据集的均值,该工具就是compute_image_mean,只要调用一下,就会生成一个mean.binaryproto文件。

c665cacf0acff4c63b66ef551f25d736.png

compute_image_mean工具

这个文件是一个二进制文件,可以通过python读取的。但是读取出来的值并不是真正的均值,而且一张图像,很多人使用第三方框架调用Caffe训练好的模型时候就不知道如何找到预处理时候的均值了。这个要从mean.binaryproto文件的生成说起,它是通过compute_image_mean工具转换的,这个工具的实现代码如下:

https://github.com/BVLC/caffe/blob/master/tools/compute_image_mean.cpp

其中有两个部分值得关注,我分别框出来了。最终得到mean.binaryproto里面是均值图像,在第一部中计算完成。得到均值打印到LOG里面去了,并没有保存下来。但是我们从这部分代码知道了如何从均值图像计算得到各个通道的均值了。

05d358a6fbf9240f36c96f929d9714a1.png

读取与解析

搞清楚这件事情之后,就可以通过python读取mean.binaryproto文件,然后直接得到均值图像,记得它的存储顺序是NCHW,所以要矩阵转换为HWC,因为N为1可以去掉的。最终得到输出的通道值,OpenCV有个cv.means函数调用一下即可打印出来,知道减去的means是多少了。实现代码如下:

mean_blob = caffe.proto.caffe_pb2.BlobProto()
mean_blob.ParseFromString(open(MEAN_FILE, 'rb').read())

# 将均值blob转为numpy.array
data = caffe.io.blobproto_to_array(mean_blob)
data = data.reshape(3, 32, 32)
data = data.transpose((1, 2, 0))
print(data.shape)
m = cv.mean(data)
print(m)
cv.imshow("means", np.uint8(data))
cv.waitKey(0)
cv.destroyAllWindows()

使用上述代码即可查看均值图像,而且得到图像数据集各个通道均值,前提是有caffe python支持。

PS:这个问题其实上个周末的时候别人问我的!我就记录分享一下!

 推荐阅读 

OpenCV4系统化学习路线图-视频版本!

五分钟搞定OpenCV4 + QT5集成与代码测试

OpenCV4.2 + OpenVINO2020安装配置与应用演示

OpenVINO深度学习推理框架 开发技术系列文章汇总

单应性矩阵应用-基于特征的图像拼接

OpenCV图像拼接改进算法之完美拼接

干货 | 基于特征的图像配准用于缺陷检测

OpenCV | 二值图像分析的技巧都在这里

OpenCV二值图像分析之形态学应用技巧

图像色彩空间与应用转换

五分钟学会C++高效图表绘制神器调用

没想到图像直方图有这么多应用场景

基于灰度共生矩阵(GLCM)的图像纹理分析与提取

OpenCV中一个最容易搞错的形态学操作

OpenCV+OpenVINO实现人脸Landmarks实时检测

OpenCV4+OpenVINO实现图像的超分辨

利用单应性矩阵实现文档对齐显示

a85272c88b3dba84383ba33c19e4b51f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值