前言
前面已經(jīng)演示了如何把圖像文件標注成VOC2007數(shù)據(jù)集,標注完成之后,就要把數(shù)據(jù)轉(zhuǎn)換成caffe支持的數(shù)據(jù)格式lmdb。
處理數(shù)據(jù)
1.在caffe_ssd/data/下新建一個叫VOCdevkit的目錄,把標注好的VOC2007目錄放到這個目錄下面。 (1)JPEGImage目錄下應該有標注過的原圖像文件 (2)Annotations目錄有標注的xml文件,這是一一對應的。 (3)JPEGImages目錄下的Main現(xiàn)在應該是空的。 2.運行以下腳本,把數(shù)據(jù)集分成訓練集、測試集、交叉驗證集。這個腳本放在VOC2007目錄下面。 (1) createMainTxt.py 腳本里的目錄是我的存放目錄,要做相應的更改,trainval_percent=0.8 train_percent=0.8這兩個參數(shù)是訓練與驗證集的比例,可以自己改動。
import os
import random xmlfilepath=r'/home/linux/caffe/caffe_ssd/data/VOCdevkit/VOC2007/Annotations'
saveBasePath=r"/home/linux/caffe/caffe_ssd/data/VOCdevkit/" trainval_percent=0.8
train_percent=0.8
total_xml = os.listdir(xmlfilepath)
num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr) print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/trainval.txt'), 'w')
ftest = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/train.txt'), 'w')
fval = open(os.path.join(saveBasePath,'VOC2007/ImageSets/Main/val.txt'), 'w') for i in list: name=total_xml[i][:-4]+'\n' if i in trainval: ftrainval.write(name) if i in train: ftrain.write(name) else: fval.write(name) else: ftest.write(name) ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
(2)運行完以上腳本,在JPEGImages目錄下的Main多出四個文件,關(guān)于這四個文件是干嗎用的,可以參考前面的博客。 3.從caffe_ssd/data/VOC0712目錄把這三個文件復制到VOC2007目錄下。
(1)更改create_list.sh腳本,以下我按我自己的目錄更改的,具體要改的地方按照前面博客。
#!/bin/bashroot_dir=/home/linux/caffe/caffe_ssd/data/VOCdevkit
sub_dir=ImageSets/Main
bash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
for dataset in trainval test
dodst_file=$bash_dir/$dataset.txtif [ -f $dst_file ]thenrm -f $dst_filefifor name in VOC2007doif [[ $dataset == "test" && $name == "VOC2012" ]]thencontinuefiecho "Create list for $name $dataset..."dataset_file=$root_dir/$name/$sub_dir/$dataset.txtimg_file=$bash_dir/$dataset"_img.txt"cp $dataset_file $img_filesed -i "s/^/$name\/JPEGImages\//g" $img_filesed -i "s/$/.jpg/g" $img_filelabel_file=$bash_dir/$dataset"_label.txt"cp $dataset_file $label_filesed -i "s/^/$name\/Annotations\//g" $label_filesed -i "s/$/.xml/g" $label_filepaste -d' ' $img_file $label_file >> $dst_filerm -f $label_filerm -f $img_filedone# Generate image name and size infomation.if [ $dataset == "test" ]then/home/linux/caffe/caffe_ssd/build/tools/get_image_size $root_dir $dst_file $bash_dir/$dataset"_name_size.txt"fi# Shuffle trainval file.if [ $dataset == "trainval" ]thenrand_file=$dst_file.randomcat $dst_file | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' > $rand_filemv $rand_file $dst_filefi
done
更改之后保存,運行腳本
sudo ./create_list.sh
出現(xiàn)以下提示代表成功 此時會VOC2007下多出三個txt文件。 (2)更改標簽文件labelmap_voc.prototxt,自己標注了多少類要改多少類,但0那個類不能改,我自己標注的,總共6類。
item {name: "none_of_the_above"label: 0display_name: "background"
}
item {name: "R"label: 1display_name: "R"
}
item {name: "C"label: 2display_name: "C"
}
item {name: "D"label: 3display_name: "D"
}
item {name: "G"label: 4display_name: "G"
}
item {name: "Q"label: 5display_name: "Q"
}
item {name: "J"label: 6display_name: "J"
}
(3)更改create_data.sh文件,這個文件是生成lmdb數(shù)據(jù)的,我按我的目錄改。
cur_dir=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
root_dir=/home/linux/caffe/caffe_ssdcd $root_dirredo=1
data_root_dir="/home/linux/caffe/caffe_ssd/data/VOCdevkit"
dataset_name="VOC2007"
mapfile="$root_dir/data/VOCdevkit/$dataset_name/labelmap_voc.prototxt"
anno_type="detection"
db="lmdb"
min_dim=0
max_dim=0
width=0
height=0extra_cmd="--encode-type=jpg --encoded"
if [ $redo ]
thenextra_cmd="$extra_cmd --redo"
fi
for subset in test trainval
dopython $root_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 $root_dir/data/VOCdevkit/$dataset_name/$subset.txt $data_root_dir/$dataset_name/$db/$dataset_name"_"$subset"_"$db examples/$dataset_name
done
保存,運行,出現(xiàn)以下信息運行成功。 在VOC2007目錄下多了lmdb的目錄。
結(jié)語
以上數(shù)據(jù)轉(zhuǎn)換完成,接下就是訓練了。
總結(jié)
以上是生活随笔 為你收集整理的Ubuntu 16.04下Caffe-SSD的应用(八)——处理标注好的VOC2007数据集 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。