因为自己在网络上查到的资料对于一个新手来说虽然指明了方向,但是在细节上没有给出很好的实例,因此我把自己训练的过程记录下来。
【实验环境】
物理内存:64G Free:7.5G CPU个数:3,单个CPU物理核数:8
操作系统:Linux
备注:具有GPU运算能力
【实验目标】
使用自己的图片集,以及caffe框架,对imagenet进行训练,得到自己的model。
【前期准备】
1. 安装并配置caffe环境
【实验过程】
1. 数据集准备
获取训练图片集与验证图片集,并产生train.txt与val.txt,内容为图片路径与分类标签;将图片进行大小重设,设置为256*256大小;使用create_imagenet.sh脚本将2组图片集转换为lmbp格式。
2. 计算图像均值
使用make_imagenet_mean.sh计算图像均值,产生imagenet_mean.binaryproto文件。
3. 设置网络参数
拷贝caffe-master/model/bvlc_reference_caffenet中的文件,修改train_val.prototxt,solver.prototxt中的运行参数,并进行路径的修改;拷贝caffe_master/examples/imagenet中的train_caffnet.sh文件,对路径进行修改。
4. 运行train_caffnet.sh
【实验过程详细版】
备注一下目录的情况,这样比较调理啦:
Caffe根目录:caffe_root=/home/james/caffe/
图片类数据:caffe_root/data/mydata
命令参数类数据:caffe_root/examples/mytask
注:默认我们手动添加的除图片以及.txt之外的文件都属于命令参数类数据,运行的时候注意路径就好,另外,我门在实验的时候换了别人的电脑,因此存在caffe根路径前后不一致的状况,大家注意一下就好。
1. 数据集准备
a. 准备训练图片集以及验证图片集
新建caffe_root/data/mydata,分别将图片集放置于caffe_root/data/mydata/train与caffe_root/data/mydata/val下面
b. 准备图片清单
在caffe_root/data/mydata下面新建两个文件train.txt与val.txt,train.txt中的内容为:
1.jpg 7
2.jpg7
3.jpg 7
…
以上格式为图片名称+空格+类标(数字)的格式,val.txt的格式也是一样的(同样需要类标)。
此步可以使用create_filelist.sh进行批量添加图片路径至train.txt。create_filelist.sh内容需要按照自身图片的名称与类标情况进行修改,并持续运行(因为是在文件后面追加)内容如下:
#!/usr/bin/env sh
#!/bin/bash
DATA=/home/james/caffe/data/mydata/val
MY=/home/james/caffe/data/mydata
for i in {3122..3221}
do
echo $i.jpg 3 >> $MY/val.txt
done
echo "All done"
以上命令意思是,在val文件夹下面的图片中,名称为3122.jpg至3221.jpg的图片都是第3类,因此就会在val.txt写入:
3122.jpg 3
3123.jpg 3
…
注意:此时可能会报出bad loop variable的错误,这是由于Ubuntu bash的版本的原因,可以自行查看如何解决。
c. 调整图片大小至256*256
因为之前没有仔细看caffe的相关文件,后来才知道可以使用之自动调整大小,因此此步采用的是自己调用命令进行调整大小。如果不调整图片大小的话,在运行后面命令的时候是会报错的。
可以使用convert256.sh进行转换。注意,该命令中用到了imagemagick工具,因此如果自己没有安装的话,还需要安装该工具(命令为:sudo apt-get install imagemagick)。convert256.sh内容如下:
for name in/home/james/caffe/data/mydata/train/*.jpg; do
convert -resize 256x256\! $name $name
done
d. 构建图片数据库
要让Caffe进行图片的训练,必须有图片数据库,并且也是使用其作为输入,而非直接使用图片作为输入。使用create_imagenet.sh脚本将train与val的2组图片集转换为lmbp格式。create_imagenet.sh内容如下:
#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train +val data dirs
EXAMPLE=/home/james/caffe/examples/mytask
DATA=/home/james/caffe/data/mydata
TOOLS=/home/james