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

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

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

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

542c98f378f37a31eb2db608721d64fa62f61eb6

玩具检测器

代码在我的GitHub repo上。

地址:https://github.com/priya-dwivedi/Deep-Learning/tree/master/tensorflow_toy_detector

第一步:收集数据

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

8ee9992aa1f9718e71d3dfcfe2e58a5d077bcab0


玩具的不同角度

第二步:为图像添加注释

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

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

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

6b6233236693fc337ae6ceb0f235e094381bccf5


使用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种不同的模型,可以在执行速度和放置包围盒的精度之间进行权衡。见下表:

9037d8193c226bf388ed667dcd1c1d30a0851fac


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中的图像,我们可以看到这个模型很快就变得准确了。

d79ff6f8511d26bc1de25de50c3ba8766f16b20d


4236115ac27fd327e6ccc853179a4bdd6c99bf50


1d642425b7efced06ee8aca96856ff26e6f98b2a

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

第六步:测试模型

为了测试这个模型,我们首先选择一个模型检查点(通常是最新的),然后导出到一个冻结的推理图中。这个脚本也可以在我的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_com

目录
相关文章
|
14天前
|
缓存 监控 API
构建高效可扩展的RESTful API:后端开发的实践指南
【4月更文挑战第26天】在现代Web开发中,构建一个高效、可扩展且易于维护的RESTful API是后端工程师必须面对的挑战。本文将深入探讨如何利用最佳实践和流行技术,设计出符合REST架构原则的服务端接口。我们将重点讨论API版本控制、资源路由、数据库优化、缓存策略以及安全性考虑等方面,旨在为开发者提供一套综合性解决方案,帮助其提升API的性能与可靠性。
|
8天前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
10天前
|
缓存 监控 JavaScript
Node.js中构建RESTful API的最佳实践
【4月更文挑战第30天】本文介绍了在Node.js中构建RESTful API的最佳实践:选择合适的框架(如Express、Koa)、设计清晰的API接口(遵循HTTP动词和资源路径)、实现认证授权(JWT、OAuth 2.0)、错误处理、限流缓存、编写文档和测试,以及监控性能优化。这些实践有助于创建健壮、可维护和易用的API。
|
10天前
|
机器学习/深度学习 算法 安全
深度学习在图像识别中的应用与挑战构建高效可扩展的RESTful API:后端开发的实战指南
【4月更文挑战第30天】 随着计算机视觉技术的飞速发展,深度学习在图像识别领域取得了显著的成果。本文将探讨深度学习技术在图像识别中的应用及其所面临的挑战。首先,我们将介绍深度学习的基本原理和关键技术,然后分析其在图像识别中的优势和应用案例。最后,我们将讨论当前深度学习在图像识别领域所面临的主要挑战和未来的发展趋势。
|
11天前
|
缓存 监控 API
|
15天前
|
缓存 安全 API
构建高效可扩展的RESTful API:后端架构的艺术
【4月更文挑战第25天】 在数字化时代的浪潮中,一个稳定、高效且易于扩展的后端系统是企业成功的关键。本文将探讨如何构建一个满足现代业务需求的RESTful API。我们将深入分析关键设计原则,如模块化、服务分层、缓存策略以及数据库优化,并讨论这些原则如何融入实际开发流程中。通过具体案例和最佳实践,我们的目标是为读者提供一套实用的工具和方法,以支持他们自己的后端开发工作。
|
18天前
|
缓存 JSON 负载均衡
构建高效RESTful API的最佳实践
【4月更文挑战第22天】在当今互联网应用的开发中,后端系统的核心通常体现在API的设计和实现上。一个设计良好、性能优异的RESTful API能够极大地提升应用的响应速度及用户体验。本文将探讨在构建高效RESTful API时应当遵循的一系列最佳实践,包括合理的数据结构设计、缓存策略、负载均衡技术以及API版本管理等。通过这些实践,可以确保API服务的高性能与易维护性,并适应不断变化的业务需求。
|
21天前
|
消息中间件 缓存 算法
构建高效的后端API:优化方法与实践
随着互联网技术的迅速发展,构建高效的后端API已成为现代软件开发中的重要挑战。本文将探讨一些优化方法与实践,以帮助开发人员提高后端API的性能和可靠性。我们将讨论如何通过缓存、异步处理、数据库优化以及代码优化等方式来提升后端API的响应速度和吞吐量,从而为用户提供更好的体验。
|
23天前
|
机器学习/深度学习 API TensorFlow
TensorFlow的高级API:tf.keras深度解析
【4月更文挑战第17天】本文深入解析了TensorFlow的高级API `tf.keras`,包括顺序模型和函数式API的模型构建,以及模型编译、训练、评估和预测的步骤。`tf.keras`结合了Keras的易用性和TensorFlow的性能,支持回调函数、模型保存与加载等高级特性,助力提升深度学习开发效率。
|
25天前
|
监控 JavaScript 安全
构建微服务架构下的API网关
【4月更文挑战第15天】在微服务架构中,API网关扮演着至关重要的角色。它作为系统的唯一入口,不仅负责请求的路由、负载均衡和认证授权,还涉及到监控、日志记录和服务熔断等关键功能。本文将探讨如何构建一个高效且可靠的API网关,涵盖其设计原则、核心组件以及实现策略,旨在为后端开发人员提供一套实用的指导方案。
41 4

热门文章

最新文章