深度学习文章4:计算图像数据集的均值

来源:互联网 发布:经典小说推荐 知乎 编辑:程序博客网 时间:2024/06/03 12:58

在前一篇文章中我们已经知道了如何将自己的图像数据转换为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
  • 1
  • 2
  • 1
  • 2

我们来简单分析下这条指令:

  • 参数一: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
  • 1
  • 2
  • 1
  • 2

具体的python脚本内容如下:

import numpy as npimport sys,caffeif 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 )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

编辑好之后保存退出,然后调用脚本:

python convert_mean.py mean.binaryproto mean.npy
  • 1
  • 1

两个参数:

  • 第一个参数:mean.binaryproto,二进制的均值文件名。
  • 第二个参数:mean.npy,生成的python格式均值文件。

我们可以看到生成后的文件:

这里写图片描述

请保存好这个文件,在之后的单张图像的分类测试中,我们将使用到。

0 0
原创粉丝点击