caffe入门学习:从我们的数据转化成为caffe可以使用的数据格式
大部分情况下我们都会从网络上下载部分图片,来进行训练网络,但是caffe使用的数据格式却和我们下载得到的却有所不同,需要把我们使用的数据格式来进行转化。caffe提供了caffe-master/build/tools/convert_imageset这个命令来对数据进行转化。
首先看看这个命令的使用方法:
具体信息convert_imageset如下:
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
flags:存储一系列的图片集合
rootfolder:必须是从根目录下的绝对路径指向图片的存储位置:
listfile:图片文件的清单列表, 每行存数的是图片的名称个图片的路径:
db_name:最终存储的文件的名称:
这里我们需要对原来的数图片数据集合进行处理,得到可用的rootfloder:
rootfloder的产生:切换路径到examples/images下,会看到两张图片,输入以下命令
find . -name *cat.jpg | cut -d '/' -f2 | sed "s/$/ 1/">>$DATA/train.txt
find . -name *bike.jpg | cut -d '/' -f2 | sed "s/$/ 2/">>$DATA/tmp.txt
cat $DATA/tmp.txt>>$DATA/train.txt
rm -rf $DATA/tmp.txt
稍微解释一下:find . -name * cat.jpg用于查找文件,得到./cat.jpg格式的数据
之后用cut -d 和-f来得到后面的cat.jpg的字符串。-d后面加上切分标志,得到一个(.)和一个(cat.jpg),-f2 表示取cat.jpg。sed主要是用于处理文件的一行用的,“s/$/ 1”表示把每行文件的后面替换成为空格+1的模式。"s/a/b/"g用于把a换成b。cat A>>B用于把A文件的内容添加到B的后面。最终得到的文件如下:
cat.jpg 1
fish-bike.jpg 1
下面使用convert_imageset函数:切换到build/tools下面:
./convert_imageset --shuffle \ //使用shuffle
--resize_height=256 --resize_width=256 \ //图片的大小都会调用opencv来获得固定的大小
/opt/modules/caffe-master/examples/images/ \ // 图片的绝对存储路径
/opt/modules/caffe-master/examples/images/train.txt \ // 文件的列表信息
/opt/modules/caffe-master/examples/images/img_train_lmdb \ //最终生成的数据库保存的路径
就会在最终的目录下得到索要文件:
data.mdb lock.mdb