【实践操作】:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器

TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型。

到目前为止,API的性能给我留下了深刻的印象。在这篇文章中,我将API的对象设定为一个可以运动的玩具。本文将用六个步骤突出API的性能并教你如何构建一个玩具探测器,你也可以根据这六个步骤扩展与实践你想要构建的任何单个或多个对象检测器。

TensorFlow玩具检测器

代码在我的GitHub repo上。地址:https://github.com/priya-dwivedi/Deep-Learning/tree/master/tensorflow_toy_detector

第一步:收集数据

第一步是为你的项目收集图像,你可以从谷歌上下载。在我的例子中,我创建了一个飞机玩具的视频,并使用Opencv从视频中提取图像。这节省了我很多时间。我确保图像是从多个角度拍摄的。你也可以随机改变一些图像的亮度,这样探测器就可以在不同的光线条件下工作了。大致来说,你需要提供总共100-150张图片就足够了。参见下面的一些示例图片:

玩具的不同角度

第二步:为图像添加注释

我使用Labelimg来注释图像,它是一个图形化的图像注释工具。

安装地址:https://github.com/tzutalin/labelImg

这是一个非常有用的工具,注释是在Pascal VOC的格式中创建的,稍后你可以看到这个格式的用处。Labelimg是用Python编写的,并使用Qt作为接口。我使用了Python3 + Qt5这个组合来操作,事实证明是没有问题的(请参见带注释的图像示例)。从本质上说,我们为对象识别x和y的最大值与最小值,并将其传递给模型以及用于训练的图像。

使用labelimg为玩具添加注释

第三步:创建TFR数据集

Tensorflow API想让数据集最终变为TFRecord文件格式。这一步骤可能是最棘手的部分。但是,Tensorflow提供了一些方便的脚本,以帮助你启动- create_pascal_tf_record.py和create_pet_tf_record.py。由于labelimg已经以正确的格式创建了注释,所以我使用最小编辑的create_pet_tf_record.py。同时,这个脚本随机抽取30%的数据并创建了一个验证TFR文件。

需要注意的是,你还需要创建一个label.pbtxt文件,用于将标签名转换为一个数字id。这个过程非常简单:

item {
 id: 1
 name: ‘toy’
}

第四步:创建一个模型配置文件

一旦创建了TFR数据集,那么首先你需要确定你是否将使用现有的模型,并对其进行微调,或者从头开始构建。我强烈推荐使用现有的模型,因为卷积神经网络(CNNs)所了解的大多数特性通常都是对象不可知论的,而对现有的模型进行微调通常是一个简单而准确的过程。但是请注意,如果你决定从头开始构建,你将需要150多个图像,还要花费好几天时间来训练。该API提供了5种不同的模型,可以在执行速度和放置包围盒的精度之间进行权衡。见下表:

TensorFlow检测模型

对于这个项目,我决定使用在coco数据集上训练的faster_rcnn_resnet101。如果你想了解更多关于RCNN的模型的内容,请移步→https://blog.athelas.com/a-brief-history-of-cnns-in-image-segmentation-from-r-cnn-to-mask-r-cnn-34ea83205de4

Tensorflow提供了几个示例配置文件,以开始创建。

示例配置文件地址:https://github.com/tensorflow/models/tree/master/research/object_detection/samples/configs

使用faster_rcnn_resnet101_coco文件,并更新任何需要在文件中配置的路径。记住,不要忘记更新类的个数。

第五步:训练模型

终于!所有困难的(和无聊的)部分都完成了,我们可以开始训练模型了。因为我有一个可以合理使用的GPU,所以我决定在本地进行训练。然而,你也可以在云上进行训练。

你可以同时在两个独立的终端上启动训练工作和评估工作。并启动Tensorboard来监控性能。经过2-3个小时的训练后,可以看到总损失下降到0.077,精确到0.99。通过查看Tensorboard中的图像,我们可以看到这个模型很快就变得准确了。

模型很快就能得到准确的数据

第六步:测试模型

为了测试这个模型,我们首先选择一个模型检查点(通常是最新的),然后导出到一个冻结的推理图中。这个脚本也可以在我的github上找到。我在iPhone上录制的一段新视频中测试了这个模型。在我的前一篇文章中,我使用Python moviepy库将视频解析成帧,然后在每个帧上运行对象检测器,并将结果返回到视频中。

文章地址:https://medium.com/towards-data-science/is-google-tensorflow-object-detection-api-the-easiest-way-to-implement-image-recognition-a8bd1f500ea0

接下来的步骤

  • 在测试过程中,我发现Faster RCNN模型有点慢。接下来,我将探索使用最快的模型-SSD mobilenet,看看是否有明显的准确性下降的问题。
  • 对于这个模型,我只是使用了faster_rcnn_resnet101_coco的模型配置文件中的默认参数。如果它们能被调整以获得更好的性能,那就值得探索了。
  • 通过更多的努力,这个过程可以扩展到其他类别。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-09-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 如何在浏览器使用synaptic.js训练简单的神经网络推荐系统

3884
来自专栏AI科技大本营的专栏

重磅消息 | 深度学习框架竞争激烈 TensorFlow也支持动态计算图

今晨 Google 官方发布消息,称 TensorFlow 支持动态计算图。 原文如下: 在大部分的机器学习中,用来训练和分析的数据需要经过一个预处理过程,输入...

2765
来自专栏计算机视觉战队

实战——目标检测与识别

最近总是有很多入门的朋友问我,我进入计算机视觉这个领域难不难?是不是要学习很多知识?到底哪个方向比较好?。。。。。这些问题其实我也不好回答他们,只能衷心告诉他...

3015
来自专栏云时之间

深度学习与神经网络:基于自建手写字体数据集上的模型测试

在上一篇文章中,我们使用mnist数据集去做了一个识别的小型神经网络,在今天的这篇文章里,我们将要通过使用自建数据集去检验上一篇文章的模型,从而真正的可以去应用...

9257
来自专栏吉浦迅科技

确认过的眼神:这是一份NVIDIA TensorRT 4.0的实战教程

NVIDIA TensorRT是一个高性能的深度学习推理优化器和runtime,为深度学习推理应用程序提供低延迟和高吞吐量。您可以从每个深度学习框架中导入经过训...

5202
来自专栏量子位

Keras 2正式发布,推出深度整合进TensorFlow的新API

允中 编译整理 量子位·QbitAI 出品 今天,深度学习框架Keras在博客上发表文章,介绍了深度整合进TensorFlow的内部版本tf.keras,以及...

3498
来自专栏ATYUN订阅号

【深度学习】图片风格转换应用程序:使用CoreML创建Prisma

WWDC 2017让我们了解了苹果公司对机器学习的看法以及它在移动设备上的应用。CoreML框架使得将ML模型引入iOS应用程序变得非常容易。 ? 大约一年前,...

4878
来自专栏企鹅号快讯

基于自搭建BP神经网络的运动轨迹跟踪控制(二)

1 前言 朋友们~好久没见~。在上一篇基于自搭建BP神经网络的运动轨迹跟踪控制(一)中,首次给大家介绍了如何将BP神经网络模型用于运动控制,并基于matlab做...

2899
来自专栏AI研习社

Github 项目推荐 | 微软开源 MMdnn,模型可在多框架间转换

近期,微软开源了 MMdnn,这是一套能让用户在不同深度学习框架间做相互操作的工具。比如,模型的转换和可视化,并且可以让模型在 Caffe、Keras、MXNe...

4018
来自专栏大数据智能实战

tensorflow model中目标对象检测包的编译和测试

前段时间,谷歌开放了 TensorFlow Object Detection API 的源码,并将它集成到model中。这个代码库是一个建立在 TensorFl...

2658

扫码关注云+社区

领取腾讯云代金券