JLU-IPVR
听笙
首先说一下计算均值有什么用。在模型进行训练和测试的过程中,当图片减去均值后,会提高速度和精度,因此,一般在各种模型中都会有去均值的这么一个操作。
这里需要注意,将计算出的均值文件保存为一个均值文件,一般都是在训练集上来计算均值。在网络训练的过程中,测试集和训练集都减去这么一个均值。
本文要讲解的是两种去均值的操作。
一:二进制格式的均值计算
caffe中使用的均值数据格式是binaryproto格式的,在caffe的源码中提供了一个cpp文件compute_image_mean.cpp,经过编译之后会在E:\caffe\caffe-master\Build\x64\Release文件夹下有compute_image_mean.exe文件,我们可以直接使用这个可执行文件对数据进行均值的计算。
使用批处理文件bat.
compute_image_mean.exe--backend="leveldb" D:\Caffe\caffe-master\data\mnist\mnist_test_leveldbD:\Caffe\caffe-master\data\mnist\val_mean.binaryproto
二:python格式的均值计算
如果我们要使用python接口,或者我们要进行特征可视化,可能就要用到python格式的均值文件了。首先,我们用levedb/lmdb格式的数据,计算出二进制格式的均值,然后,再转换成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 )
将这个脚本保存为convert_pythonmean.py。
使用方式为:
C:\Users\LJL\Desktop\windows-caffe\convert_pythonmean.pyC:\Users\LJL\Desktop\windows-caffe\train_mean.binaryproto C:\Users\LJL\Desktop\windows-caffe\mean.npy