使用自己的数据集“煮caffe”时候需要生成train.txt 和 val.txt。但是,没有找到一个有效的方法。今天跟大家分享一下使用shell自动生成train.txt 和 val.txt
脚本没有容错性 谨慎使用 勿喷
无原理,看步骤。
1 数据集格式要求
文件布局
这样布局也是caffe的要求,shell 下边会贴出来或者→shell脚本下载地址
train中
train文件夹下的图片
val中结构
说明: val需要有train一致的结构外,还需要把各个文件中的图片,复制到val文件下。
2 Shell 代码
filepath2txt.sh
#!/usr/bin/env sh
# 说明
# dictionary: train{d1{f1,f2,...},d2{f1,f2,...},...} val{d1{f11,f12,...},d2{f21,f22,...},.... f11,f12,.....,f21,f2,...,....}
# train
# -d1
# f1.jpeg
# f2.jpeg
# f3.jpeg
# f4.jpeg
# ....
# -d2
# f1.jpeg
# f2.jpeg
# f3.jpeg
# f4.jpeg
# ....
# ...
# val
# -d1
# -d2
# ...
# all images in di need copy to val/ again.
rm -f train.txt
rm -f val.txt
echo "filepath2traintxt"
sh ./filepath2traintxt.sh
echo "Done"
echo "filepath2valtxt"
sh ./filepath2valtxt2.sh
echo "Done"
filepath2traintxt.sh
#!/usr/bin/env sh
# 深度遍历
deepls(){
for x in "$1/"*
do
#echo $x
if [ -f $x ]
then
echo $x $I|cut -d '/' -f3-4 >> $NAME
fi
if [ -d $x ]
then
(deepls "$x")
I=`expr $I + 1`
fi
done
}
I=0
DEST_PATH="./train"
NAME="./train.txt"
deepls $DEST_PATH
filepath2valtxt2.sh
#!/usr/bin/env sh
# 深度遍历
deepls(){
for x in "$1/"*
do
#echo $x
if [ -f $x ]
then
echo $x $I|cut -d '/' -f4-5 >> $NAME
fi
# if [ -d $x] error
done
}
deep(){
for x in "$1/"*
do
if [ -d $x ]
then
deepls "$x"
I=`expr $I + 1`
fi
done
}
I=0
DEST_PATH="./val"
NAME="./val.txt"
deep $DEST_PATH