Ubuntu 16.04下使用TensorFlow Object Detection API 训练VOC2012数据集

本篇默认在安装好tensorflow的基础之上。
准备工作——配置安装tensorflow Object Detection API
首先从github上下载源代码:tensorflow models
下载后,解压到~/home目录下,为了与github目录结构一致,我们将models-master目录重命名为models
得到如下目录结构~/models/research/object_detection
在这里插入图片描述

Protobuf 编译(非常重要)

Tensorflow Object Detection API 用 Protobufs 来配置模型和训练参数. 在用这个框架之前,必须先编译Protobuf 库,切换到这个目录下: tensorflow/models/research/, 
cd ~/tensorflow/models/research/

protoc object_detection/protos/*.proto --python_out=.

tensorflow/models/research/ 和 slim 目录 需要添加到PYTHONPATH环境变量中. 从终端中,切换到tensorflow/models/research/目录,执行:

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

注意: 这条命令在新打开的终端中需要重新执行一次才会在新终端中生效,如果不想那么麻烦,就用下面的命令编辑 ~/.bashrc 文件,把上面的语句添加到末尾.

gedit ~/.bashrc

在research目录下执行

python object_detection/builders/model_builder_test.py

出现如下结果表示编译成功
在这里插入图片描述

下一步你可以跑一个demo,你可以在这个路径下运行jupyter notebook打开笔记本,然后用笔记本打开/object_detection/object_detection_tutorial.ipynb,然后在jupyter下run all,没问题的话最后会出现一张狗和另外一张好多目标的检测图片。
------------------------------------------------------------分割线--------------------------------------------------------------------------接下来就是训练部分了
一、制作voc格式的数据集
1、VOC2007数据集格式

1)JPEGImages文件夹
文件夹里包含了训练图片和测试图片,混放在一起
2)Annatations文件夹
文件夹存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片。
3)ImageSets文件夹
Main存放的是图像物体识别的数据,Main里面有test.txt , train.txt, val.txt , trainval.txt.这四个文件。
具体可以查看voc里面的数据格式。
2、准备数据集,并进行标注
(1) 图片重命名
命名统一为六位数字,从000001开始。
参考:
Tensorflow Object Detection API-如何制作VOC格式数据集
工具来源: https://github.com/whlook/VOCMaker
(2) 图片标注,这里推荐使用labelimg这个工具,自动生成xml文件,地址如下:Labelimg
(3)数据集划分
在实际训练过程中,需要四个文件,分别为test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集。每个文件为对于图片的名字。在VOC2007中,trainval大概是整个数据集的50%,test也大概是整个数据集的50%;train大概是trainval的50%,val大概是trainval的50%。
(4)完成数据集准备
在research目录下新建MyTrainData文件夹,将前面准备好的数据集放入文件夹中

  ------ Annotations 将xml文件全部放到该文件夹里
------ ImageSets
------ Main 其有四个txt文件,test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集。Txt里的内容是即图片名字(无后缀)。
------ JPEGImages 所有的训练图片放到该文件夹里

上述目录及其文件都拷贝到MyTrainData/VOC2007/下。
二、将VOC2007数据集转换为TFRecord格式
1、修改 tensorflow/models/object_detection/create_pascal_tf_record.py 文件第85行和163行。
在这里插入图片描述

这里写图片描述

2、修改tensorflow/models/object_detection/data/pascal_label_map.pbtxt 文件里的类别,如果训练自己的数据这里一定要进行修改:
3、运行命令:
在research目录下,运行下面两条指令,生成train.record和val.record文件

python object_detection/create_pascal_tf_record.py \ --label_map_path=object_detection/data/pascal_label_map.pbtxt \
--data_dir=VOCdevkit --year=VOC2007 --set=train \
--output_path=pascal_train.record
python object_detection/create_pascal_tf_record.py \ --label_map_path=object_detection/data/pascal_label_map.pbtxt \
--data_dir=VOCdevkit --year=VOC2007 --set=val \
--output_path=pascal_val.record

三、下载预训练模型
在object_detection新建train_mymodel文件夹
下载地址:https://github.com/tensorflow/models/blob/master/object_detection/g3doc/detection_model_zoo.md
解压命令例子:

tar -xzvf ssd_mobilenet_v1_coco.tar.gz

将文件里面的model.ckpt.*的三个文件copy到train_mymodel
四、修改配置文件
修改object_detection/samples/configs/ssd_mobilenet_v2_coco.config文件,修改以下6处
(1)num_classes: 3(设为自己的训练集的类别,如果训练voc数据集,无需修改)
(2)fine_tune_checkpoint: “/home/crj/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt”(fine_tune_checkpoint的地址)
(3)train_input_reader:{}中input_path和label_map_path的路径
(4)eval_input_reader:{}中input_path和label_map_path的路径
(5)batch_size:48 通常不能太小,否则会报错
(6)initial_learning_rate: 0.005 不能太小,否则容易陷入局部过拟合
在这里插入图片描述
五、训练
在当前research目录下,运行如下指令:

python object_detection/legacy/train.py --logtostderr --train_dir='/home/sc/models/research/object_detection/data' --pipeline_config_path='/home/sc/models/research/object_detection/samples/configs/ssd_mobilenet_v2_coco.config'

六、tensorboad可视化

tensorboard --logdir=/home/sc/models/research/object_detection/data

浏览器访问 ip:6006,可看到趋势以及具体image的预测结果

七、导出训练数据

python object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path ssd_mobilenet_v2_coco.config --trained_checkpoint_prefix /home/sc/models/research/object_detection/data --output_directory output_inference_graph

在这里插入图片描述

八、测试结果
运行object_detection_tutorial.ipynb并修改其中的各种路径即可
或自写编译inference脚本,如tensorflow/models/object_detection/infer.py:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值