用caffe训练自己的数据集(一)

本文主要参考了:https://blog.csdn.net/heimu24/article/details/53581362

                    https://blog.csdn.net/gaohuazhao/article/details/69568267

准备工具linux系统,caffe框架,淘宝上获取的图片。

整个过程分为,三部分,一、是对数据进行处理,转化为caffe能应用的数据类型。二、搭建网络,进行训练。三、利用训练好的数据进行分类。

一、下载数据集

首先从网上下载需要的数据集。下载地址,百度网盘:https://pan.baidu.com/s/1o77w1wI

下载完后解压,里面会有四个文件,如图所示


只保留train和val即可,因为我们后面用这两个文件来自己生成train.txt和val.txt.

在caffe的examples文件夹下新建一个myfile4文件夹,在这个文件加下建立一个data文件夹,把刚才下载的train和val保存到data文件夹中。

二、生成.txt文件
首先在myfile4下面建立一个.sh文件,我的文件名为:create_filelist.sh。内容如下:

#!/usr/bin/env sh
DATA=examples/myfile4/data    #数据来源的路径 
MY=examples/myfile4/data      #生成的txt文件存储位置

echo "Create train.txt..."
rm -rf $MY/train.txt          #先把文件中原有的同名文件删除
	
find $DATA/train -name 15001*.jpg | cut -d '/' -f4-5 | sed "s/$/ 0/">>$MY/train.txt    
find $DATA/train -name 15059*.jpg | cut -d '/' -f4-5 | sed "s/$/ 1/">>$MY/train.txt
find $DATA/train -name 62047*.jpg | cut -d '/' -f4-5 | sed "s/$/ 2/">>$MY/train.txt
find $DATA/train -name 68021*.jpg | cut -d '/' -f4-5 | sed "s/$/ 3/">>$MY/train.txt
find $DATA/train -name 73018*.jpg | cut -d '/' -f4-5 | sed "s/$/ 4/">>$MY/train.txt
find $DATA/train -name 73063*.jpg | cut -d '/' -f4-5 | sed "s/$/ 5/">>$MY/train.txt
find $DATA/train -name 80012*.jpg | cut -d '/' -f4-5 | sed "s/$/ 6/">>$MY/train.txt
find $DATA/train -name 92002*.jpg | cut -d '/' -f4-5 | sed "s/$/ 7/">>$MY/train.txt
find $DATA/train -name 92017*.jpg | cut -d '/' -f4-5 | sed "s/$/ 8/">>$MY/train.txt
find $DATA/train -name 95005*.jpg | cut -d '/' -f4-5 | sed "s/$/ 9/">>$MY/train.txt

echo "Create test.txt..."
rm -rf $MY/val.txt

find $DATA/val -name 15001*.jpg | cut -d '/' -f4-5 | sed "s/$/ 0/">>$MY/val.txt
find $DATA/val -name 15059*.jpg | cut -d '/' -f4-5 | sed "s/$/ 1/">>$MY/val.txt
find $DATA/val -name 62047*.jpg | cut -d '/' -f4-5 | sed "s/$/ 2/">>$MY/val.txt
find $DATA/val -name 68021*.jpg | cut -d '/' -f4-5 | sed "s/$/ 3/">>$MY/val.txt
find $DATA/val -name 73018*.jpg | cut -d '/' -f4-5 | sed "s/$/ 4/">>$MY/val.txt
find $DATA/val -name 73063*.jpg | cut -d '/' -f4-5 | sed "s/$/ 5/">>$MY/val.txt
find $DATA/val -name 80012*.jpg | cut -d '/' -f4-5 | sed "s/$/ 6/">>$MY/val.txt
find $DATA/val -name 92002*.jpg | cut -d '/' -f4-5 | sed "s/$/ 7/">>$MY/val.txt
find $DATA/val -name 92017*.jpg | cut -d '/' -f4-5 | sed "s/$/ 8/">>$MY/val.txt
find $DATA/val -name 95005*.jpg | cut -d '/' -f4-5 | sed "s/$/ 9/">>$MY/val.txt

echo "All done"
对一些语句进行解释:
find $DATA/train -name 15001*.jpg 是在文件加下找到所有前几位名为15001的图片

 cut -d '/' -f4-5   是以'/'为分界符,找到第四至五段的内容截取下来

sed "s/$/ 0/"     在截取的文件名后面加一个空格和一个标签0

MY/train.txt    存储到train.txt中

在caffe目录下运行该文件,命令为:./examples/myfile4/create_filelist.sh。运行完后,会在myfile4/data文件夹下生成train.txt和val.txt文件。得到的train.txt的内容如下:

三、转化为db文件

接着把.txt文件转换成caffe能识别的db文件。还是在myfile4下建立该文件,文件名为create_lmdb.sh。内容如下:

#!/usr/bin/env sh
MY=examples/myfile4

TRAIN_DATA_ROOT=/home/sst/caffe/examples/myfile4/data/
VAL_DATA_ROOT=/home/sst/caffe/examples/myfile4/data/

echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb
build/tools/convert_imageset \
--resize_height=32 \
--resize_width=32 \
--shuffle \
$TRAIN_DATA_ROOT \
$MY/data/train.txt \
$MY/img_train_lmdb

echo "Create test lmdb.."
rm -rf $MY/img_val_lmdb
build/tools/convert_imageset \
--resize_height=32 \
--resize_width=32 \
--shuffle \
$VAL_DATA_ROOT \
$MY/data/val.txt \
$MY/img_val_lmdb  

echo "All Done.."
对代码进行一些解释:
MY=examples/myfile4设置lmdb文件要存储的位置。
TRAIN_DATA_ROOT=/home/sst/caffe/examples/myfile4/data/ 该图片存储的绝对路径。是从linux的根目录开始的
VAL_DATA_ROOT=/home/sst/caffe/examples/myfile4/data/  数据列表的存储位置
build/tools/convert_imageset 这句是利用caffe自带的图片处理工具对图片进行处理。

convert_imageset命令行使用格式 convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME     FLAGS是处理的参数,像图片的大小,随机抽取还是怎么样。ROOTFOLDER是图片存放的绝对目录。LISTFILE是文件列表清单。DB_NAME是生成的文件存放的位置。想要了解更详细的自行百度,我也不太清楚。

运行这个文件./examples/myfile4/create_lmdb.sh运行完后会在myfile4文件夹下生成img_val_lmdb和img_train_lmdb文件夹里面就是我们想要的caffe能识别的db文件。

四、计算均值

计算均值的原因是保证所有特征都在0附近,在大多数情况下,我们并不关心所输入图像的整体明亮程度,比如对象识别任务中,图像的整体明亮程度,并不会影响图像中存在的是什么物体,我们对图像的平均亮度感兴趣,所以可以减去这个值来进行均值规整化。

创建的文件名为,create_meanfile.sh   代码如下:

EXAMPLE=examples/myfile4
DATA=examples/myfile4/
TOOLS=build/tools

$TOOLS/compute_image_mean $EXAMPLE/img_train_lmdb $DATA/mean1.binaryproto

echo "Done."

也是利用caffe自带的均值处理工具进行处理。

$EXAMPLE/img_train_lmdb要处理的文件的位置,$DATA/mean1.binaryproto文件的存储位置

像上面一样运行该文件,就会得到均值文件。

至此,图像的前期处理已经结束。接下来就是要进行正式的训练

猜你喜欢

转载自blog.csdn.net/sst___/article/details/79847697