首发于Urlteam
目标检测笔记二:Object Detection API 小白实践指南

目标检测笔记二:Object Detection API 小白实践指南

简介:

本文使用公开数据去运行Tensorflow 新推出的 Object Detection API 带大家实验 Faster RCNN 的 training,Faster RCNN 是 object detection 中的經典方法, 而 object detection 主要是由 classification 与 localization 所組成,可以參考 cs231n

网络上已经有一堆原理说明文了,但是纯小白要实践来看看却总是很不知所措,因此本文偏小白详细描述如何运作项目,其次过度封装好的数据,也让小白想应用的时候无从下手,因此本文完成一个简单demo简述如何构建自己的数据集

相关链接:

目录:

  1. 环境安装(ubuntu与window7)
  2. 数据预处理
  3. 修改配置
  4. 开始训练
  5. 测试模型

一.环境安装:

ubuntu

1:TensorFlow环境二选一:

亲测用使用公开数据CPU需要在i5下跑一晚上,GPU只要30分钟,建议安装TensorFlow 1.00

pip install tensorflow  # For CPU
pip install tensorflow-gpu  # For GPU

2:依赖环境

sudo apt-get install protobuf-compiler python-pil python-lxml
sudo pip install jupyter,matplotlib,pillow,lxml

3:务必需要的操作

必须编译Protobuf库,在object_detection同级目录打开终端运行:

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

将object_detection加入到环境变量

打开.bashrc 修改下面PYTHONPATH为你的object_detection的路径

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

4:环境监测

在object_detection同级目录打开终端运行:

python object_detection/builders/model_builder_test.py

结果没有报错,并且返回若干秒数据,则说明环境搭建成功。

window 7

在window下回麻烦的多

1:打开下载好的tensorflow model文件夹

2:安装protoc在github.com/google/proto下载protoc-3.4.0-win32.zip。解压后在bin目录下有 protoc.exe。我将bin和include两个文件夹,移到C:\Windows目录下(在path的即可),然后再mdels(或者models-master)文件夹下运行如下命令:

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

没有报错即正确

3:安装tensorflow model 以及slim

在models-master 目录下运行

python setup.py install

如果你这时候运行测试命令会报错:

python object_detection/builders/model_builder_test.py
ImportError: No module named nets

则需要进一步安装slim,在models-master\slim目录下也运行

python setup.py install

4:配置path环境变量,如下:

C:\Users\Administrator\Desktop\obj\models-master\models-master:C:\Users\Administrator\Desktop\obj\models-master\models-master\slim;

5:测试成功



二.数据预处理

Tensorflow对象检测API必须使用TFRecord的档案格式,我用的是2007年的数据集,如果你手边有2012年的--year要改成2012. 详细内容可参考标准TensorFlow格式Pascal VOC数据集,我存放一份在百度云的链接。。含预训练好的模型,和2007年的数据

数据预处理

解压缩VOCtrainval然后运行create_pascal_tf_record.py来处理成TFRecord。

# From tensorflow/models/object_detection
tar -xvf VOCtrainval_11-May-2007.tar
python create_pascal_tf_record.py --data_dir=VOCdevkit \
   --year=VOC2007 --set=train --output_path=pascal_train.record
python create_pascal_tf_record.py --data_dir=VOCdevkit \
   --year=VOC2007 --set=val --output_path=pascal_val.record

这个create_pascal_tf_record.py做的事情分为三个部分

  • 将每张图片注释参数(图片的宽度与高度,对象边界框,类名称,…等)跟标签映射(类ID跟类名称的对应关系)读出来并塞进tf.train.Example协议缓冲区
  • 将tf.train.Example协议缓冲区序列化为字符串
  • 最后tf.python_io.TFRecordWriter把字符 串写入TFRecords

三.修改配置

直接从项目中复制一个样本出来改(object_detection/samples/configs/)我是使用的是 faster_rcnn_resnet101_voc07.config

配置文件分成五个部分,

  1. model模型的框架 meta-architecture, feature extractor…
  2. train_config,定义 optimizer (Momentum, Adam, Adagrad…), fine-tune model
  3. eval_config,定义valuation估值指标
  4. train_input_config,定义作为训练数据集与标签映射路径
  5. eval_input_config,定义作为估值数据集的路径与标签映射路径

主要修改这三部分

1:自定义路径指定模型位置

fine_tune_checkpoint: “PATH_TO_BE_CONFIGURED/model.ckpt”

通常在进行训练时不会从头开始训练,大部份会利用别人已经训练好的参数来微调以减少训练的时间fine_tune_checkpoint的数值为:你定义的faster_rcnn_resnet101_coco_11_06_2017位置(例如:"object_detection/faster_rcnn_resnet101_coco_11_06_2017/model.ckpt")

2:指定训练数据的label和record数据文件

label文件 官方已经有提供放在 object_detection/pascal_val.record

train_input_reader: {
tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pascal_train.record" }
label_map_path: "PATH_TO_BE_CONFIGURED/pascal_label_map.pbtxt"}

3:指定测试数据的label和record数据文件

eval_input_reader: {
tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pascal_val.record" }
label_map_path: "PATH_TO_BE_CONFIGURED/pascal_label_map.pbtxt"
}

四.启动训练

构建标准项目结构,建立demo目录为主文件夹

  • demo目录下包含(train和eval,config文件)
  • train目录下包含(faster_rcnn_resnet101_coco_11_06_2017的解压后文件)
  • eval是为空的,用于存放之后跑测试的文件

另外我比较喜欢在新建一个dete文件夹,存放上面处理后的record数据文件,和pascal_label_map .pbtxt类别映射表文件

然后开始运行吧!

python object_detection/train.py \
   --logtostderr \
   --pipeline_config_path=${定义的Config} \
   --train_dir=${训练结果要存放的目录}

如果你是按照上诉的标准结构的话则:

python train.py \
   --logtostderr \
   --pipeline_config_path="./demo/***.config" \
   --train_dir="./demo/train/"}

运行需要较大内存5-8G,训练时日志如下

当你的loss到0.5以下,基本就算训练的比较准了,可以在运行eval来看看你的测试结果。

五.测试模型:

python object_detection/eval.py \
   --logtostderr \
   --pipeline_config_path=${定义的Config} \
   --checkpoint_dir=${训练模型存放的目录} \
   --eval_dir=${测试结果要存放的目录}

之后再针对这个demo启动tensorboard

tensorboard --logdir demo

之后浏览器查看127.0.1.1:6006,在image下即可看到具体的识别结果了。



六:训练自己定义的数据

github.com/luyishisi/te


相关链接:

原创文章,转载请注明: 转载自URl-team

编辑于 2019-11-22

文章被以下专栏收录