应公司要求,利用谷歌最近开源的Google object_detection API对公司收集的数据集进行训练,并检测训练效果。通过一两天的研究以及维持四天的训练(GTX 1060  6GB),终于成功的在自己数据集上训练的任务。测试效果感觉还行,虽没有达到谷歌官方公布的数据集上跑的识别效果,但是识别率也还过得去,这主要是因为数据集没有官方做的那么规范。下图为本人挑选的一张识别率较好的图片(识别哈尔滨啤酒):

下面把本人如何一步步在自己的数据集上训练的详细步骤做个总结,一是方便自己以后操作起来更快的再次上手训练,二是方便大家能好的实现该API的一些需求。

需要说明的:

1:本教程用的模型权重参数为faster_rcnn_resnet101_coco  ,可点击进行模型的下载。

2:数据集格式需要为转换成tensorflow要求的tfrecord的形式。

3:本文在GTX 1060  6GB的显卡上训练了四天

4:如何安装tensorflow等一些依赖库,本文不再赘述,请参考:安装依赖库教程链接

过程:

1:下载Google object_detection API:

下载地址

2:数据集准备:

数据集需要符合API所需的TFRecord格式,官方提供的数据集格式为PASCAL VOC格式,API已经为我们提供了将此格式转为TFRecord的代码. 但是这里我们需要注意一个细节:create_pascal_tf_record.py中的

examples_path = os.path.join(data_dir, year, 'ImageSets', 'Main',
                             'aeroplane_' + FLAGS.set + '.txt')

去掉'aeroplane_'。

同时,将文件中的

flags.DEFINE_string('label_map_path', 'data/pascal_label_map.pbtxt',
                    'Path to label map proto')

data/pascal_labe_map.pbtxt改为自己的数据集label

然后在“tensorflow/models/object_detection/”目录下运行以下命令

[python] view plain copy
  1. #生成训练集record
  2. python create_pascal_tf_record.py --data_dir=`自己的训练数据集路径` \
  3. --year=VOC2007 --set=train --output_path=`你想保存的训练集的record路径`
  4. #生成验证集record
  5. python create_pascal_tf_record.py --data_dir=`自己的验证数据集路径` \
  6. --year=VOC2007 --set=val --output_path=`你想保存的验证集的record路径`

注意,在data目录下选择一个.pbtxt文件,将该文件改为自己数据集的label。 
执行上述两个命令后会在data文件夹下生成两个record文件。

3:下载预训练模型

按照上文“需要说明的”第一条下载预训练模型,将下载好的模型进行解压,并将.ckpt的三个文件拷贝到models目录下。将object_detection/samples/configs/faster_rcnn_resnet101_voc07.config复制到models目录下并做如下修改:
1)num_classes:修改为之前修的的.pbtxt文件中的类别数目
2)将所有'PATH_TO_BE_CONFIGURED'修改为自己之前设置的路径

4:开始训练

执行上述三步之后我们可以开始训练了,此处需要注意两点,不然会出现模块导出错误,在tensorflow/models分别运行:

[python] view plain copy
  1. protoc object_detection/protos/*.proto --python_out=.
  2. export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

然后进入到obeject_detection目录下,运行一下命令:

[python] view plain copy
  1. python train.py --train_dir='想要保存训练模型的路径' --pipeline_config_path='你采用的.config文件路径'

5:模型可视化

运行上述四步之后您基本上只需等着模型运行完成即可,如果您想要可视化您的模型,可以运行:

[python] view plain copy
  1. tensorboard --logdir=’上面第4点提到的train_dir路径‘

然后在你的浏览器输入0.0.0.0:6006就能看到模型一些相关参数的可视化结果了。

训练完成后会生成三个.cpkt的文件,将这三个文件复制到tensorflow/models下,可利用这三个文件生成一个.pb文件,生成代码如下:

[python] view plain copy
  1. python object_detection/export_inference_graph.py \
  2. --input_type image_tensor \
  3. --pipeline_config_path ’你的.config文件路径’ \
  4. --checkpoint_path model.ckpt-‘CHECKPOINT_NUMBER’ \
  5. --inference_graph_path output_inference_graph.pb

这样你就可以利用.pb文件进行目标检测了,具体步骤请参考: github.com/tensorflow/m

6:参考

https://zhuanlan.zhihu.com/p/27469690

https://github.com/tensorflow/models/blob/master/object_detection/g3doc/installation.md

https://github.com/tensorflow/models/blob/master/object_detection/g3doc/running_pets.md

目标检测(Google object_detection) API 上训练自己的数据集相关推荐

  1. 使用tensorflow object_detection API完成目标检测(object_detection API使用)

    硬件环境 操作系统:ubuntu16.04LTS 显卡:GTX1080Ti 10G显存 内存32G 代码托管在码云,因为github实在是太慢了,老是timeout,翻墙也不行,搞了半天搞不定,突然看 ...

  2. 墨尘目标检测4--yoyo3模型解析及训练自己的数据集

    YOLOv3相比于之前的yolo1和yolo2,改进较大,主要改进方向有: 1.主干网络修改为darknet53,其重要特点是使用了残差网络Residual,darknet53中的残差卷积就是进行一次 ...

  3. (二)目标检测模型的评测与训练技巧

    转载自知乎:https://zhuanlan.zhihu.com/p/34142321 关于作者: @李家丞同济大学数学系本科在读,现为格灵深瞳算法部实习生. -------------------- ...

  4. GPU端到端目标检测YOLOV3全过程(上)

    GPU端到端目标检测YOLOV3全过程(上) Basic Parameters: Video: mp4, webM, avi Picture: jpg, png, gif, bmp Text: doc ...

  5. Yolov5不止于目标检测,在图像分类上的落地应用!

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标检测]技术交流群 后台回复[2D检测综述]获取鱼眼检测.实时检测.通用2D检测等近 ...

  6. 【目标检测】在图像上画bounding box框,生成带真实标签gt的图片

    [目标检测]在图像上画bounding box框,生成带真实标签gt的图片 问题/Motivation 数据格式 用到的库 实际代码` 结果展示 问题/Motivation 在制作完数据集后,想看一下 ...

  7. Facebook 开源3D目标检测框架VoteNet,曾刷新两大数据集最高精度

    点击我爱计算机视觉标星,更快获取CVML新技术 VoteNet为Facebook何恺明等人于今年4月在论文Deep Hough Voting for 3D Object Detection in Po ...

  8. 【目标检测实战】目标检测实战之一--手把手教你LMDB格式数据集制作!

    文章目录 1 目标检测简介 2 lmdb数据制作 2.1 VOC数据制作 2.2 lmdb文件生成 lmdb格式的数据是在使用caffe进行目标检测或分类时,使用的一种数据格式.这里我主要以目标检测为 ...

  9. 使用Google object_detection API与opencv实现简单的动态目标实时检测

    这是我第一次在CSDN上发博客,如有错误或不满可以向我指出或联系我,希望这篇文章能够帮助一些人. 现在是第二次修改版 人工智能很火,我也尝试自己去做一些小小的东西,最近自己训练了一个检测黑框眼镜的模型 ...

最新文章

  1. 20180929 VIM进入编辑模式、VIM命令模式常用操作
  2. leetcode算法题--最大整除子集
  3. mysql数据库永久设置手动提交事务(InnoDB存储引擎禁止autocommit默认开启)
  4. IOS开发设置应用程序App启动图片
  5. linux 算法函数,数据结构——算法之(012)( linux C 全部字符串操作函数实现)...
  6. fn:replace()函数
  7. mysql重连服务器失败_java – MySQL连接器错误“服务器时区值中...
  8. 优先队列priority_queue的使用方式
  9. 用html5做一个简单网页_用新款ws2812灯带做一个简单的窗花
  10. java用for语句实现菱形_编写Java程序,应用for循环打印菱形、三角形
  11. c 判断文件是否存在_C++基础:判断文件是否存在的方法
  12. Linux基本操作(6)——Linux 重写rm 命令 实现回收站功能
  13. 立即释放.net下的com组件
  14. Atitit 增强代码健壮性 出错继续执行恢复模式,就像vbs那样我以为我可以使用Try/Catch,但是我找不到异常后是否可以继续执行代码,并且找不到如何在最后显示错误消息。目录PHP
  15. 微机综合保护装置怎么选择?在高压柜中起什么作用?
  16. vc2012编译speex (编译通过)
  17. Linux性能基础:CPU、内存、磁盘等概述
  18. Android dp2px
  19. Java图片处理:ico格式转PNG/JPG等格式
  20. 字节跳动后端开发实习生面试经验

热门文章

  1. 当前主要使用的python版本_如何获取当前使用的Python版本信息?(代码示例)
  2. word转pdf图片模糊怎么办_迅捷PDF转换器如何将word转为长图?word转图片方法
  3. java B2B2C Springboot电子商务平台源码-Feign 基本使用
  4. Linux系统设置全局的默认网络代理
  5. Java数据结构与算法(六) 希尔排序
  6. 干货!top白帽子 Gr36_ 手把手教你挖漏洞|2017 先知白帽大会
  7. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
  8. 2016最新cocoapods版本更新,以及多个版本的问题
  9. python 2.6.6安装MySQL-python模块
  10. 设置Cocos2D屏幕横向或纵向的方法