首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用pycaffe解析mean.binaryproto中的均值图像并显示

使用pycaffe解析mean.binaryproto中的均值图像并显示

作者头像
OpenCV学堂
发布2020-05-13 19:08:59
发布2020-05-13 19:08:59
2.7K0
举报

mean.binaryproto文件生成

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

compute_image_mean工具

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

代码语言:javascript
复制
https://github.com/BVLC/caffe/blob/master/tools/compute_image_mean.cpp

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

读取与解析

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

代码语言:javascript
复制
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支持。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档