使用pycaffe解析mean.binaryproto中的均值图像并显示
共 1797字,需浏览 4分钟
·
2022-11-24 21:15
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
mean.binaryproto文件生成
用Caffe框架训练图像相关的视觉任务时候,在预处理的时候会先求图像的均值,这个均值其实是整个数据集的图像均值,Caffe中提供了一个工具来计算数据集的均值,该工具就是compute_image_mean,只要调用一下,就会生成一个mean.binaryproto文件。
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里面去了,并没有保存下来。但是我们从这部分代码知道了如何从均值图像计算得到各个通道的均值了。
读取与解析
搞清楚这件事情之后,就可以通过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:这个问题其实上个周末的时候别人问我的!我就记录分享一下!
好消息!
小白学视觉知识星球
开始面向外开放啦👇👇👇
下载1:OpenCV-Contrib扩展模块中文版教程 在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。 下载2:Python视觉实战项目52讲 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。 下载3:OpenCV实战项目20讲 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。 交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~