如果图片已经下载到本地的电脑上了,首先需要创建的就是图片列表清单(LISTFILE),并将其保存为txt格式。
1.编写shell脚本
以caffe程序中自带的图片为例进行讲解,图片在caffe下的目录是/examples/images,里面有4张图片,选择cat.jpg和fish_bike.jpg分别表是两个类别。
接下来创建一个sh脚本文件,调用Linux命令生成图片清单:
lichunlin@ThinkPad-T420:~$ cd caffe/
lichunlin@ThinkPad-T420:~/caffe$ cd examples/
lichunlin@ThinkPad-T420:~/caffe/examples$ cd images
lichunlin@ThinkPad-T420:~/caffe/examples/images$ sudo vim create_filelist.sh
此处若提示没有vim命令,则先安装vim
sudo apt-get install vim
sudo vim create_filelist.sh执行以后会出现如下界面
首先键盘按字母i,开始插入以下代码:
# /usr/bin/env sh
DATA=/home/lichunlin/caffe/examples/images #这个是我电脑中图片的根目录
echo "Create train.txt"
rm -rf $DATA/train.txt
echo "finding...."
find $DATA -name *cat.jpg | cut -d '/' -f7 | sed "s/$/ 0/">>$DATA/train.txt
find $DATA -name *bike.jpg | cut -d '/' -f7 | sed "s/$/ 1/">>$DATA/tmp.txt
echo "find over..."
cat $DATA/tmp.txt>>$DATA/train.txt
rm -rf $DATA/tmp.txt
echo "Done.."
输入完成后,先按esc,然后输入冒号“:”,再输入 “wq!” (感叹号别忘了) 回车即可
晚上上述操作后,输入以下代码即可执行这一脚本,即可得到训练的文件列表。
lichunlin@ThinkPad-T420:~/caffe/examples/images$ sh create_filetext.sh
2.使用的Linux命令简介
命令名称 | 命令含义 |
---|---|
rm | 删除文件 |
find | 寻找文件 |
cut | 截取路径 |
sed | 在每行最后加上标注。本例中是将找到的“*cat.jpg”文件加入标注为0,找到的“*bike.jpg”文件加入标注为1 |
cat | 将两个类别合并到一个文件里 |
生成文件结果
执行脚本以后,最终生成如下的一个train.txt文件:
这里的执行结果若显示为其他形式,如:
example 0
example 1
这种形式,则说明截取路径有问题,即cut命令用的有问题,cut命令的使用可以参考我的这篇博客:博客链接
这里需要特别提示一下的是,类别标签需要从0开始,因为C++中数组总是从0开始的,Caffe利用这一特性将类别和数组的索引结合在一起,否则就会训练不出来。
当然,当图片很少的时候,手动编写这个列表清单就可以了,但在图片很多的情况下,就需要用脚本文件来自动生成了。在以后的实际应用中,还需要对应的val.txt和test.txt文件,方法都是一样的。在训练中,val.txt称为训练集,test.txt称为测试集。
生成的这个train.txt文件,可以作为第三个参数直接使用。执行过后就拥有了一个训练集的数据库。