4:计算图像数据集的均值
Posted 莫欺丶少年穷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4:计算图像数据集的均值相关的知识,希望对你有一定的参考价值。
计算图像数据集的均值
在前一篇文章中我们已经知道了如何将自己的图像数据转换为caffe需要的db文件深度学习文章3:将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件 ,在进行模型的训练之前,我们还需要进行一步,就是计算图像数据集的均值。
1.为什么计算图像数据的均值?
通常来讲,在各类深度学习模型中都具有计算图像均值的操作,这是因为图像减去均值后,再进行训练/测试,会大大提高速度和精度,这是我们在进行大量计算时希望可以达到的效果。
在caffe中,我们如何得到这个均值,实际上就是计算所有训练样本的平均值,计算出来后,保存为一个均值文件,在以后的测试中,就可以直接使用这个均值,而不需要重新对带测试的图像进行计算了。
在实际使用中,计算均值需要产生.binaryproto的均值文件,通常我们可以使用caffe提供的脚本直接计算,此外,如果在之后进行测试时也想使用均值,例如调用python接口,就需要生成python接口.npy文件,这个文件可以由之前.binaryproto文件转换得来。下面我们将就这两个文件的产生进行详述。
2.二进制格式的均值文件
在caffe根目录下的build/tools/文件夹下,caffe为我们提供了计算均值的文件compute_mean.cpp,编译后在caffe根目录下的tools文件夹下,我们可以直接调用,需要注意的是,这里计算需要图像的db文件,我们这里以上篇博文深度学习文章3:将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件 产生的训练数据db文件为样例,我们之前的db文件存储在caffe根目录下的examples/myfile/img_train_lmdb文件夹下,以此为例,生成二进制格式均值文件:
cd ~/caffe/
sudo build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
我们来简单分析下这条指令:
- 参数一:examples/myfile/img_train_lmdb,这是我们需要计算均值的训练图像数据集的db文件。
- 参数二:examples/myfile/mean.binaryproto,这是我们计算出来的均值文件的保存位置。
执行结合后可以看到身材高很多个二进制格式均值文件:
这个文件请保存好,在之后的模型训练中我们将使用到。
3.python格式所需要的的均值文件
在训练好模型之后,我们往往需要测试自己的单张图片的类别,通常会使用python接口或c++接口编程方式来实现,在python接口的使用中,我们需要使用python格式的均值文件,这里我们先讲解下生成的方法,便于之后直接使用。
计算python格式的均值文件需要两步:
- 第一步:按照上面生成二进制格式的均值文件的说明生成二进制格式的文件。
- 第二步:编写python脚本将二进制格式的均值文件转换。
新建一个名为convert_mean.py的文件,
cd ~/caffe/examples/myfile/
sudo gedit convert_mean.py
具体的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
两个参数:
- 第一个参数:mean.binaryproto,二进制的均值文件名。
- 第二个参数:mean.npy,生成的python格式均值文件。
我们可以看到生成后的文件:
请保存好这个文件,在之后的单张图像的分类测试中,我们将使用到。
以上是关于4:计算图像数据集的均值的主要内容,如果未能解决你的问题,请参考以下文章