实践三:使用谷歌物体检测API训练自己的数据集

一.环境安装:

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

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

二.数据预处理

解压缩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做的事情分为三个部分
1,将每张图片注释参数(图片的宽度与高度,对象边界框,类名称,…等)跟标签映射(类ID跟类名称的对应关系)读出来并塞进tf.train.Example协议缓冲区
2,将tf.train.Example协议缓冲区序列化为字符串
3,最后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目录为主文件夹
1,demo目录下包含(train和eval,config文件)
3,train目录下包含(faster_rcnn_resnet101_coco_11_06_2017的解压后文件)
3,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下即可看到具体的识别结果了。

训练自己的数据集

数据集准备:
在objcet_detect同级目录

export PYTHONPATH=$PYTHONPATH:`pwd`

如果版本没有slim路径则加上

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

在create_pascal_tf_record.py中去掉’aeroplane_’。
这里写图片描述
训练验证

#生成训练集record  
python object_detection/dataset_tools/create_pascal_tf_record.py --data_dir=`自己的训练数据集路径` --year=VOC2007 --set=train --output_path=`你想保存的训练集的record路径`  
#生成验证集record  
python object_detection/dataset_tools/create_pascal_tf_record.py --data_dir=`自己的验证数据集路径` --year=VOC2007 --set=val --output_path=`你想保存的验证集的record路径` 

针对kitti数据集

python object_detection/dataset_tools/create_kitti_tf_record.py --data_dir='/KITTI/'  --output_path='/object_detection/data/kitti/'

下载预训练模型
将下载好的模型进行解压,并将.ckpt的三个文件拷贝到models目录下。将./object_detection/samples/configs/ssd_inception_v2_coco.config复制到models目录下并做如下修改:
1)num_classes:修改为之前修的的.pbtxt文件中的类别数目
2)将所有’PATH_TO_BE_CONFIGURED’修改为自己之前设置的路径将下载好的模型进行解压,并将.ckpt的三个文件拷贝到models目录下。
开始训练

python object_detection/train.py --train_dir='object_detection/log/kitti/train/' --pipeline_config_path='object_detection/models/ssd_inception_v2_coco.config'

模型可视化

tensorboard --logdir='object_detection/log/kitti/train/'

训练完成后会生成三个.cpkt的文件,利用这三个文件生成一个.pb文件,生成代码如下:

python object_detection/export_inference_graph.py \  
    --pipeline_config_path 'object_detection/models/ssd_inception_v2_coco.config' \  
    --trained_checkpoint_prefix 'object_detection/log/kitti/train/model.ckpt-10000' \  
    --output_directory object_detection/log/kitti/train/model/

利用.pb文件进行目标检测

# /home/whsyxt/Desktop/zhuzhao/github_code/object_detection/log/kitti/train/train/model.ckpt-10000.meta
python object_detection/train.py --train_dir='./log/kitti/train' --pipeline_config_path='./data/kitticonfig/ssd_inception_v2_coco.config'
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值