前言

前面已经演示了如何把图像文件标注成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数据集相关推荐

  1. Ubuntu 16.04下Caffe-SSD的应用(二)——准备与处理VOC2007数据集

    前言 前面已经介绍如何在Ubuntu上编译Caffe-SSD的CPU版本,那接下来就试一下用Caffe-SSD训练数据得到模型,并对模型进行测试. 我配置的环境是Ubuntu 16.04 LST 64 ...

  2. Ubuntu 16.04下安装Caffe(GPU版本 GTX970)

    Ubuntu 16.04下安装Caffe(GPU版本 GTX970) 个人分类: Deep Learning 2018年8月6日更新说明:距上次安装成功没多久,显卡驱动莫名失效,没有解决,索性重装了系 ...

  3. 分享如何在Ubuntu 16.04下CUDA8.0

    分享一篇在Ubuntu 16.04下CUDA8.0的安装过程的记录笔记. 1.安装驱动 最简单的安装方式是直接在"系统设置->软件和更新->附加驱动"中安装 这样的话, ...

  4. Ubuntu 16.04下的LAMP环境配置

    在学习开发过程中,每当遇到新的问题时,通常都能在网上搜到解决的方法,但是网上的方法千千万,有些是已经过时了的,有些是跟自己开发环境不同的,总是不能第一时间能找到答案. 而当时遇到的问题可能在今后的开发 ...

  5. ubuntu 环境下调试mysql源码_【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装

    Ubuntu 16.04下 Mysql5.7.17源码编译与安装 系统环境 一. 系统安装条件 1.cmake MySQL使用cmake跨平台工具预编译源码,用于设置mysql的编译参数. sudo ...

  6. Ubuntu 16.04 下安装VMware Tools(三行命令搞定,亲测好使)

    Ubuntu 16.04 下安装VMware Tools(三行命令搞定,亲测好使): 第一行命令:sudo apt-get upgrate 第二行命令:sudo apt-get install ope ...

  7. ubuntu 16.04下切换python版本小结

    主要是记录ubuntu 16.04下python环境配置. 对于ubuntu 16.04,由于本身是自带python,这样就减少了在windows下的下载和环境变量配置,非常不错.但是他本身是自带两个 ...

  8. ubuntu 16.04下安装mysql

    ubuntu 16.04下安装mysql 从官网下载mysql-apt-config_0.8.12-1_all.deb,下载地址为:https://dev.mysql.com/downloads/re ...

  9. Ubuntu 16.04 下安装运行 Suricata

    介绍 Suricata是一个免费.开源.成熟.快速.健壮的网络威胁检测引擎.Suricata引擎能够进行实时入侵检测(IDS).内联入侵预防(IPS).网络安全监控(NSM)和离线pcap处理.Sur ...

  10. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)

    Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题) 参考文章: (1)Ubuntu 16.04下用Wine运行的软件出现方块的解决思路( ...

最新文章

  1. 根据类名与字段名称取值(可用于循环取实体所有值非常好用)
  2. 通过PRINT过程制作报表
  3. linux下查看进程占用端口和端口占用进程命令
  4. 在.NET开发中的单元测试工具之(1)——NUnit
  5. 【Qt】QModbusDeviceIdentification类
  6. 怎样取消无线配置服务器,如何 去掉无线配置服务器
  7. 团队行为心理学读书笔记(2)招聘背后的心理学
  8. stm32cubemx中文_用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)
  9. 拔光所有头发编写的双色球系统,完整代码详解,用的全是Java基础的知识,另外,我这个里面特意留了一个BUG,谁要是能找出来,我就去他评论区下面唱征服!!
  10. rj45管脚定义_RJ45接口定义
  11. 抖音seo,抖音优化系统,抖音seo矩阵系统源码技术搭建
  12. 苹果iphone手机蓝牙自动打开故障怎么解决
  13. Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI20)
  14. 椭圆机会不会练出肌肉腿
  15. 百度语音识别注册流程
  16. Jetson Nano 人工智能计算
  17. C4D octane学习笔记(一)
  18. verilog写的一个简洁实用的PWM模块
  19. 微信视频号如何直播游戏效果最好?教你最简单的方法
  20. 安卓版微信内置浏览器无法触发onchange事件

热门文章

  1. python的xpath用法_python之Xpath语法
  2. 面试题整理12 求字符串括号最大深度子串
  3. opencv KNN 模型不能保存的问题
  4. win32下安装mingw32和cmake来编译opencv2.4.9
  5. JBoss 系列八十五: JBoss Modules 简单介绍
  6. 刷题-CC150-Java实现
  7. JavaScript 内置对象(一):Array 对象(构造函数、属性和方法)
  8. Hadoop的调度器总结
  9. 多个类的DLL封装及调用
  10. Stanford UFLDL教程 独立成分分析