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:计算图像数据集的均值的主要内容,如果未能解决你的问题,请参考以下文章

计算用于咖啡分类的HDF5数据集的平均值

翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?

计算列子集的行均值

没有 UDF 的 Spark 数据集的加权平均值

“平均值”是啥意思?

图像清晰度计算方法