本文只介绍在caffe框架下生成lmdb格式的数据,因为在caffe框架下训练和测试都只能用lmdb格式的数据:
准备:
1、ubuntu 18.04
2、新建data文件夹,内含train和test两个文件夹
3、train文件夹和test文件夹里面分别含img和xml两个文件夹,里面分别是原图像(.jpg格式)和标签(.xml格式,用LabelImage标注工具生成)
4、在train文件夹里,通过命令行敲入:ls img/* > img.txt 生成一个包含图像路径的txt文本文件,再次通过命令行敲入:ls xml/* > xml.txt;test文件夹同样如此。
5、编写脚本文件(根据4中生成的两个txt文本文件),这里用的是python脚本(也可以编写shell脚本)生成一个train.txt文本文件,里面一行对应一张图片的路径和对应一张图片的标注,脚本如下:
text1=open("/data_1/chepai_detection_SSD/train/img.txt","r") text2=open("/data_1/chepai_detection_SSD/train/xml.txt","r") new_text=open("/data_1/chepai_detection_SSD/train/train.txt","w") text1_context=text1.readlines() text2_context=text2.readlines() for each_line1 in text1_context: each_line1=each_line1.strip() common_part=each_line1.split('/')[3].split('.')[0] for each_line2 in text2_context: each_line2 = each_line2.strip() common_part2=each_line2.split('/')[3].split('.')[0] if common_part2==common_part: new_text.write(each_line1+' '+each_line2+'\n') new_text.close() text1.close() text2.close()
6、根据5中生成好的train.txt文本文件,编写脚本(这里用的是shell脚本)调用caffe中自带的create_annoset.py脚本文件生成lmdb格式的数据。
#!/bin/bash
caffe_dir="/home/sjw/SSD/caffe" #修改到自己的caffe目录
export PYTHONPATH=$PATHONPATH:/home/sjw/SSD/caffe/python
#create_list.sh
dataset_name="lmdb_data" #生成的lmdb名称
data_root_dir="/data_1/chepai_detection_SSD/data" #数据主目录,其中包含train和test两个文件夹
data_list_dir="/data_1/chepai_detection_SSD/ssd/" #保存生成的文件列表txt的地方
mapfile="${data_list_dir}labelmap_voc.prototxt"#标签分为几类的配置文件
redo=1
anno_type="detection"
db="lmdb"
min_dim=0
max_dim=0
width=0
height=0
extra_cmd="--encode-type=png --encoded"
echo "========== Beging create data... =========="
if [ $redo ]
then
extra_cmd="$extra_cmd --redo"
fi
for subset in trainval
do
python $caffe_dir/scripts/create_annoset.py --anno-type=$anno_type --label-map-file=$mapfile --min-dim=$min_dim --max-dim=$max_dim --resize-width=$width --resize-height=$height --check-label $extra_cmd ${data_root_dir} ${data_list_dir}$subset.txt ${data_list_dir}$db/$dataset_name"_"$subset"_"$db ${caffe_dir}/examples/$dataset_name
done
echo "========== create data done! =========="
其中labelmap_voc.prototxt"#标签分为几类的配置文件的建立如下:
item {
name: "none_of_the_above"
label: 0
display_name: "background"
}
item {
name: "cat"
label: 1
display_name: "cat"
}
item {
name: "dog"
label: 2
display_name: "dog"
}