3.2.1 如何对Layer做参数配置(Data Layer参数配置为例)
1)layer {
name: "cifar"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "cifar10_train_lmdb"
batch_size: 100
backend: LMDB
}
}
//详细见上面代码解析
-
所有数据预处理都在这里设置:
transform_param
{
scale: 0.00390625
mean_file_size: “examples/cifar10/mean.binaryproto" #用一个配置文件来进行均值操作
mirror: 1 # 1表示开启镜像,0表示关闭,也可用ture和false来表示
crop_size: 227 # 剪裁一个 227*227的图块,在训练阶段随机剪裁,在测试阶段从中间裁剪
}
注:通常数据的预处理(如减去均值, 放大缩小, 裁剪和镜像等),Caffe使用OpenCV做处理。
3.2.2 将图片数据转化为LMDB数据
1)方法一:并未实践成功,但列举过程,可以了解转化为LMDB数据细节问题。
创建图片文件列表清单,一般为一个txt文件,一行一张图片。
#先准备两个文件夹:train 和test
#
#新建一个文档,命名为label_name.txt
#编辑类别标签
$ ls train/adress | sed "s:^:adress/:" | sed "s:$: 1:">>t_train.txt
// 列举路径train/adress 下的所有图片,在每个图片前面加上类别名:adress,后面加上类别标签1
#生成train列表清单
#同理运行类别road
$ls train/road | sed "s:^:road/:" | sed "s:$: 0:">>t_train.txt
#train列表清单中继续添加road类别图片
#同理
$ls test/adress | sed "s:^:adress/:" | sed "s:$: 1:">>t_test.txt
$ ls test/road | sed "s:^:road/:" | sed "s:$: 0:">>t_test.txt
#生成测试集列表清单
使用Caffe工具命令,转化成lmdb数据库
Convert_imageset[FLAGS][ROOTFOLDER/][LISTFILE][DB_NAME] |
需要带四个参数: FLAGS:图片参数组 gray: 是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为false
|
#到train和test文件夹目录下:
$convert_imageset --resize_width=40 --resize_height=40 /home/wtj/数据转换格式/train/ ./t_train.txt ./t_train.lmdb
#我这边显示未找到convert_imageset 命令,度娘也没人和我出现同样问题,于是换下面另一种数据转换实现方法。
-
方法二:
以caffe程序中自带的图片为例,进行讲解,图片目录是 example/images/, 两张图片,一张为cat.jpg, 另一张为fish_bike.jpg,表示两个类别。
我们创建一个sh脚本文件,调用linux命令来生成图片清单:
$cd caffe
$sudo vi examples/images/create_filelist.sh
#编辑这个文件,输入下面代码保存
# /usr/bin/env sh DATA=examples/images //图片相对路径 echo "Create train.txt..." //输出 rm -rf $DATA/train.txt //rm:删除文件 ,重复生成会显示错误 find $DATA -name *cat.jpg | cut -d '/' -f3 | sed "s/$/ 1/">>$DATA/train.txt //在上述路径下找到图片名为XX.jpg的图片,在每行最后面加上标注1 输入到列表train.txt。 find $DATA -name *bike.jpg | cut -d '/' -f3 | sed "s/$/ 2/">>$DATA/tmp.txt //cut:截取路径 cat $DATA/tmp.txt>>$DATA/train.txt //将tmp.txt文档合并到train.txt中 rm -rf $DATA/tmp.txt //删除tmp.txt echo "Done.." |
这步先不运行,在最后运行生成的train.txt列表如下
当然,图片很少的时候,手动编写这个列表清单文件就行了。如方法一,生成的这个train.txt文件,就可以作为第三个参数,直接使用了。
#调用命令生成最终的lmdb格式数据
#由于参数比较多,因此编写一个sh 脚本来执行命令
#caffe目录下,创建sh脚本文件:
$ sudo vi examples/images/create_lmdb.sh
#编辑
#!/usr/bin/en sh DATA=examples/images //进入指定路径 rm -rf $DATA/img_train_lmdb //删除该路径下已经生成的img_train_lmdb文件 build/tools/convert_imageset --shuffle \ //shuffle,随机打乱图片顺序 --resize_height=256 --resize_width=256 \ //修改图片尺寸变为256*256 /home/wtj/caffe/examples/images/ $DATA/train.txt $DATA/img_train_lmdb //图片保存绝对路径 |
#最后运行脚本
$sudo sh examples/images/create_lmdb.sh