欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Ubuntu >内容正文

Ubuntu

Ubuntu 16.04下Caffe-SSD的应用(八)——处理标注好的VOC2007数据集

发布时间:2025/3/21 Ubuntu 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Ubuntu 16.04下Caffe-SSD的应用(八)——处理标注好的VOC2007数据集 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言

前面已经演示了如何把图像文件标注成VOC2007数据集,标注完成之后,就要把数据转换成caffe支持的数据格式lmdb。

处理数据

1.在caffe_ssd/data/下新建一个叫VOCdevkit的目录,把标注好的VOC2007目录放到这个目录下面。

(1)JPEGImage目录下应该有标注过的原图像文件

(2)Annotations目录有标注的xml文件,这是一一对应的。

(3)JPEGImages目录下的Main现在应该是空的。

2.运行以下脚本,把数据集分成训练集、测试集、交叉验证集。这个脚本放在VOC2007目录下面。
(1) createMainTxt.py
脚本里的目录是我的存放目录,要做相应的更改,trainval_percent=0.8 train_percent=0.8这两个参数是训练与验证集的比例,可以自己改动。

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多出四个文件,关于这四个文件是干吗用的,可以参考前面的博客。

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

出现以下提示代表成功

此时会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数据的,我按我的目录改。

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

保存,运行,出现以下信息运行成功。

在VOC2007目录下多了lmdb的目录。

结语

以上数据转换完成,接下就是训练了。

总结

以上是生活随笔为你收集整理的Ubuntu 16.04下Caffe-SSD的应用(八)——处理标注好的VOC2007数据集的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。