Object Detection API是谷歌开放的一个内部使用的物体识别系统。2016年 10月,该系统在COCO识别挑战中名列第一。它支持当前最佳的实物检测模型,能够在单个图像中定位和识别多个对象。该系统不仅用于谷歌于自身的产品和服务,还被推广至整个研究社区。
一、代码位置与内置的模型
1、Object Detection
Object Detection 模块的位置与slim的位置相近,同在github.com 中TensorFlow 的models\research目录下。类似slim, Object Detection也囊括了各种关于物体检测的各种先进模型:
- 带有MobileNets的SSD (Single Shot Multibox Detector)。
- 带有Iception V2的SSD.
- 带有Resnet 101的R-FCN (Region-Based Fully Convolutional Networks)。
- 带有Resnet 101的Faster RCNN。
- 带有Inception-Resenet v2的Faster RCNN。
上述每一个模型的冻结权重 (在COCO数据集上训练)可被直接加载使用。
SSD模型使用了轻量化的MobileNet,这意味着它们可以轻而易举地在移动设备中实时使用。谷歌使用了 Faster R-CNN模型需要更多计算资源,但结果更为准确。
2、COCO数据集
在在实物检测领域,训练模型的最权威数据集就是COCO数据集。
COCO数据集是微软发布的一个可以用来进行图像识别训练的数据集,官方网址为http://mscoco.org 其图像主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。
COCO数据集包括91类目标,分两部分发布,前部分于2014年发布,后部分于2015年发布。
- 2014年版本:训练集有82783个样本,验证集有40504个样本,测试集有40775个样本,有270KB的人物标注和886KB的物体标注。
- 2015年版木:训练集有165482个样本,验证集有81208个样本,测试集有81434个样本。
二 、准备工作
1.获取protobuf
Objet Detection API使用protobufs来配置模型和训练参数,这些文件以".proto"的扩展名放models\research\object_detection\protos下。在使用框架之前,必须使用protobuf库将其编译成py文件才可以正常运行。
protobuf库的下载地址为:https://github.com/protocolbuffers/protobuf/releases
选择protoc-3.7.0-win32.zip下载(低版本的,比如2.6.0 会出错)
(1)然后将protoc-3.7.0-win32.tar.gz进行解压,将bin里面的protoc.exe拷到models-master\research中
(2)将bin文件夹加入到环境变量中
(3)打开/model-master/research/目录,按住shift健,点鼠标右键--
在此处打开powershell,输入:
Get-ChildItem object_detection/protos/*.proto|Resolve-Path-Relative|%{.\protoc $_--python_out=.}
如果不显示任何信息,则表明运行成功了,为了检验成功效果,来到models\research\object_detection\protos下,可以看到生成很多.py文件。
3、检查API是否正常
如果前面两步都完成了,下面可以测试一下object detection API是否可以正常使用,还需要两步操作:
- 将models\research\slim下的nets文件夹复制出来放到models\research下。
- 将models\research\object_detection\builders下的model_builder_test.py复制到models\reasearch下。
- 将model-master里面的research和slim都配置好环境变量
-
打开cmd,回到model-master/research/目录下,执行如下命令:
python object_detection/builders/model_builder_test.py
会出现如下情况
表明object detection API正常
4、将Object Detection API加入Python库默认搜索路径
为了不用每次都将文件复制到Object Detection文件夹外,可以将Object Detection加到python引入库的默认搜索路径中,将Object Detection文件整个复制到anaconda3安装文件目录下lib\site-packages下.
这样无论文件在哪里,只要搜索import Objec Detection xxx,系统到会找到Objec Detection。
三 执行已经训练好的模型
之前已经说过Objec Detection API默认提供了5个预训练模型。他们都是使用COCO数据集训练完成的,如何使用这些预训练模型呢?官方已经给了一个用jupyter notebook编写好的例子。首先在research文件下下.
-
打开jupyter notebook,打开model-master/research文件夹
-
接着打开object_detection文件夹,并单击object_detection_tutorial.jpynb运行示例文件
该代码使用Object Detection API基于COCO上训练的ssd_mobilenet_v1模型,对任意图片进行分类识别。
-
找到cell然后运行Run All,如果你的网速够快电脑性能够好,顺利的情况下将会出现正常的结果
-
如果将你想识别的图片加入到object_detection/test_images文件夹下,可以得到自己的识别结果