以lmdb文件作为输入数据时,如果需要做减均值处理,需要提供图片均值文件。通过对所有训练样本取平均,保存成一个均值文件mean.binaryproto,在测试时也需要使用这个均值相减。那么如何快速生成均值文件?
二进制格式的均值计算:
caffe中是用的均值数据格式是binaryproto。caffe中的tools文件夹下的compute_image_mean.cpp用于计算均值。编译后的可执行程序在build/tools文件夹中,可以直接使用命令:
build/tools/compute_image_mean path/to/train_lmdb path/to/mean.binaryproto
参数:
第一个参数是需要计算均值的数据,格式为lmdb
第二个参数是用于保存结果的文件,为.binaryproto文件
Python格式的均值计算:
如果使用caffe的python接口,那么需要用到python格式的均值文件。首先用lmdb格式的数据计算二进制格式的均值文件,然后再转换成python格式的均值。
创建convert_mean.py:
#!/usr/bin/env python
import numpy as np
import sys,caffe
if len(sys.argv)!=3:
print "Usage: python convert_mean.py mean.binaryproto mean.npy"
sys.exit()
blob = caffe.proto.caffe_pb2.BlobProto()
bin_mean = open( sys.argv[1] , 'rb' ).read()
blob.ParseFromString(bin_mean)
arr = np.array( caffe.io.blobproto_to_array(blob) )
npy_mean = arr[0]
np.save( sys.argv[2] , npy_mean )
调用格式为:
python convert_mean.py mean.binaryproto mean.npy
第一个参数是二进制格式的均值文件,第二个参数是保存python格式的均值的文件名。