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

然后在你的浏览器输入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

python export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path /your/path/to/models/modelA/pipeline config file \ --checkpoint_path /your/path/to/models/modelA/train/model.ckpt-* \ --inference_graph_path /your/path/to/models/modelA/train/frozen_inference_graph.pb # 输出的文件名

接下来的步骤

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

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

  1. tfr 计算机硬件,实践操作:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器...

    TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型. 到目前为止,API的性能给我留下了深刻的印象.在这篇文章中,我将API的对象设 ...

  2. 六款值得推荐的Android开源框架简介

    六款值得推荐的Android开源框架简介 技术不再多,知道一些常用的.不错的就够了.下面就是最近整理的"性价比"比较高的Android开源框架,应该是相对实用的. 1.volley ...

  3. 【华为云技术分享】六步教你玩转DevOps上华为云DevCloud实践

    摘要:在"DevOps能力之屋(Capabilities House of DevOps)"中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力. ...

  4. DDD 领域驱动设计落地实践:六步拆解 DDD

    引言 相信通过前面几篇文章的介绍,大家对于 DDD 的相关理论以及实践的套路有了一定的理解,但是理解 DDD 理论和实践手段是一回事,能不能把这些理论知识实际应用到我们实际工作中又是另外一回事,因此本 ...

  5. 【DDD落地实践系列】DDD 领域驱动设计落地实践:六步拆解 DDD

    引言 相信通过前面几篇文章的介绍,大家对于 DDD 的相关理论以及实践的套路有了一定的理解,但是理解 DDD 理论和实践手段是一回事,能不能把这些理论知识实际应用到我们实际工作中又是另外一回事,因此本 ...

  6. 六款值得推荐的 android 开源框架简介

    1.volley  项目地址 https://github.com/smanikandan14/Volley-demo  (1)  JSON,图像等的异步下载:  (2)  网络请求的排序(sched ...

  7. python怎么返回上一步操作_一步一步教你如何用python操作mysql

    工欲善其事,必先利其器.所以第一步,我们先下载第三方库.在这里,我用到的是pymysql库. 下载库:在命令行输入 1pip install pymysql 下载后可检验一下是否成功下载.直接在命令行 ...

  8. 一步一步教你如何用python做词云_一步一步教你如何用Python做词云

    前言 在大数据时代,你竟然会在网上看到的词云,例如这样的. 看到之后你是什么感觉?想不想自己做一个? 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流 ...

  9. dremwere怎样让多个图片并列排放_PPT图片布局不好看?六步教你,看完就会。

    我们平时很多场合需要演示讲解时,少不了使用PPT.尤其目前白领层人士,项目总结.产品介绍.调研报告-无时无刻不被PPT包围,又无时无刻不被PPT设计所困恼. 诚然设计好看实用的PPT需要高质量素材资源 ...

最新文章

  1. Ruby之Tempfile
  2. 嵌入式学习笔记之三 (uboot我来看)
  3. 升级到asp.net core 3.1遇到的json异常
  4. mapreduce程序输出评分8.6分以上的书名和评分_如何选编程入门资料?光评分高怎么够|文末赠书...
  5. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.23
  6. windows mysql 自动备份的几种方法
  7. Boost:异步操作,需要boost :: asio :: async_compose函数的测试程序
  8. 《大数据分析原理与实践》一一第3章 关联分析模型
  9. Mac 下安装配置 Python 开发环境
  10. Android TextView长按复制实现,Android复制文本
  11. 曾国藩:诚敬静谨恒!
  12. python list存储对象_《python解释器源码剖析》第4章--python中的list对象
  13. js动态的属性名如何取该属性的值
  14. 不染用计算机数字,2013年计算机等级考试一级B知识预测题(6)
  15. (转)C# System.Diagnostics.Process.Start使用
  16. C/C++ 取整函数
  17. 不借助 vue-cli 工具自行搭建 vue 项目
  18. 软件架构-zookeeper快速入门
  19. SpringSecurity(二) :授权流程
  20. 极客时间大数据训练营知识总结脑图

热门文章

  1. 抓取一个连续的网页_搞懂各大搜索引擎蜘蛛的抓取规则,快速获得排名!
  2. MyBatis插件使用--分页插件与性能拦截器
  3. hadoop错误,重新格式化namenode后,出现java.io.IOException Incompatible clusterIDs
  4. BZOJ Tyvj 1729 文艺平衡树
  5. 记录EasyUI使用中的问题和解决的方法
  6. 使用Cacti监测系统与网络性能(3)
  7. matlab解决多旅游商问题,多旅行商问题的matlab程序
  8. 梯度的直观理解_关于梯度、旋度和散度的直观理解
  9. pandas.DataFrame删除/选取含有特定数值的行或列实例
  10. <关于并发框架>Java原生线程池原理及Guava与之的补充