用 TensorFlow 目标检测 API 发现皮卡丘!

简介:

在 TensorFlow 众多功能和工具中,有一个名为 TensorFlow 目标检测 API 的组件。这个库的功能正如它的名字,是用来训练神经网络检测视频帧中目标的能力,比如,一副图像。

需要查看我之前的工作的话,点击这里,我解释了在安卓设备上采用 TensorFlow 识别皮卡丘的整个过程。此外,我也介绍了这个库和它的不同架构及其各自特点,以及演示如何使用 TensorBoard 评估训练过程。

数月之后,我开始着手优化我之前训练的检测比卡丘的模型,目的是直接使用 Python、OpenCV、以及 TensorFlow 来检测视频中的目标。源代码可以从我的 GitHub 中获取。

用 TensorFlow 目标检测 API 发现皮卡丘!

比卡丘

这篇文章就是解释我所使用的步骤。首先,我会描述我在最初的模型中发现的问题,以及我是如何优化的。然后,我会讲解如何使用这个新的经过优化的模型,我组建了一个视频检测系统。最后,你将会看到两段检测多个比卡丘的视频。

但开始之前,这里有一个简短的 gif,显示了一些快速检测。

用 TensorFlow 目标检测 API 发现皮卡丘!

比卡丘被检测到

用 TensorFlow 目标检测 API 发现皮卡丘!

这就是比卡丘

模型优化

如上面所述,在以前的工作中,我对比卡丘检测模型做了初始的训练,这个模型的目的是在安卓设备或 Python notebook 上进行皮卡丘检测。然而,我对这个模型的性能并不安全满意,这促使我优化这个系统,因此,写下了这篇文章。

我当时主要关心的是用于构建这个系统的比卡丘数量,230 个。其中 70% 用于训练,而剩余 30% 用于测试。所以,用于训练的数量不多,虽然这在技术上不是问题(因为模型是在执行「okayish」),但我在训练集里增加了 70 张图片(总数依然不是很多,不过总比没有要好)。

结果是,由于我现在拥有更多的图片,我不得不扩展这个模型的训练,而不是从零开始。我使用了早期模型的训练检查点,然后从检查点开始继续进行;前者训练了 15000 次,而新的则训练了 20000 次。下面两幅图表显示了总体的损失和精度 (从 TensorBoard 中获得);很明显,从 15000 次到 20000 次没有太多改变(特别是在损失方面)。

用 TensorFlow 目标检测 API 发现皮卡丘!

损失

用 TensorFlow 目标检测 API 发现皮卡丘!

精度

我做的最后一个(也是小的)修正是修改了 Android 应用的检测阈值。默认值是 0.6,增加到 0.85。

这个优化改变了什么吗? 即使将我的确认偏差放在一边,我也会说,是的。我注意到了一个细小的优化。我注意到的最大变化是,Android 应用中误报的数量有所减少,因为那些物体看起来像黄色的斑点;当然,这可能也是因为阈值增加了。

现在,使用最新的和优化后的模型,在视频中检测比卡丘。继续之前,我需要说明,我将忽略模型冻结和导入的整个过程,因为我之前的工作中已做了解答。

从视频中检测

从视频中进行目标检测并不像听到的那么困难或奇特。从外行角度,我们可以讲视频是一组按顺序排列的图像,所以从视频中进行目标检测和在正常图像中进行检测是非常相似的。为什么非常相似?好吧,由于视频的性质,在将视频输入检测模型之前,视频帧的处理和准备需要多个步骤。我将在下面的章节中将对此做出解释,另外在解释下检测过程,以及如何创建一个新的视频来显示它们。

我的大部分代码都是基于 TensorFlow 目标检测 repo 提供的 Python notebook 实现的。这些代码完成了大部分困难的工作,因为它包括很多功能,可以简化检测过程。我建议你可以看下我的 Script,并作为你阅读下面这几个段落的指导。

从高层视角看,这段代码包括三个主要任务:

加载资源

首先,必须加载冻结的模型、数据标签和视频。为简单起见,我推荐了一个简短、中等大小的视频,因为处理完整部电影需要很多时间。

遍历视频

这个脚本的主要功能是基于一个循环,遍历视频的每一帧。每次遍历过程中,读取帧,并改变其色彩空间。接着,执行实际检测过程,就是寻找所有那些漂亮的黄色皮卡丘。结果是,返回皮卡丘所在位置的边界坐标(如果找到的话)和检测结果的置信度。随后,只要置信度高于给定的阈值,将会创建一个视频帧的副本,其中包含了皮卡丘位置的边界框。对于这个项目,我设置的置信度阈值非常低,20%,因为我发现检测误报数很低,所以决定冒性能的风险来检测到更多的皮卡丘。

创建新的视频

在前面的步骤中,使用新创建的帧副本重新组成一个新的视频,这些帧携带了检测的边界框。为创建这个视频,需要用到 VideoWriter 对象,每次遍历时,帧的副本都会被写入这个对象(不含声音)。

结果和讨论

这两个视频显示了模型的运行过程:


第一个视频的检测非常好。尽管皮卡丘在整个视频中一直举着番茄酱瓶子,在大多数场景中这个模型都能探测到。另一方面,在时间 0:22 时有一个没有被检测到,此外,「大镰刀」(绿螳螂的样子)打碎了番茄酱瓶的镜头(0:40 到 0:44)是误报。

在第二个视频上,这个模型的性能并没有在第一个视频上表现的那么好,主要问题是视频中出现了两个皮卡丘的场景。这种情况下,模型貌似将两个皮卡丘作为一个来检测,而不是分别检测。一个明显的例子是在 0:13 的时候,两个皮卡丘在互相拍打 (悲伤的场景 :(,我知道)。

总结与回顾

在这篇文章中,我介绍了如何使用 TensorFlow 目标检测库在视频中检测比卡丘。文章开头,介绍了一些我之前的工作,使用模型的早期版本在安卓设备上进行目标检测。至于模型,尽管它做了该做的工作,但也有一些我想要解决的问题;这些优化使我完成了这个项目并建立了一个用于视频的检测模型。

新的模型如预想的那样工作。当然,或多或少也有一些不足之处,导致误判,或者没有检测到比卡丘,但模型还是完成了它应该做的工作。作为以后的工作方向,我会为训练集合增加更多不同角度的比卡丘图像。例如,侧视和后视图像,增加数据的多样性,以获得优异的性能。

感谢阅读。我希望这篇指导文章对你能有所帮助。


原文发布时间为:2018-06-5

本文来自云栖社区合作伙伴“雷锋网”,了解相关信息可以关注“雷锋网”。

相关文章
|
4月前
|
机器学习/深度学习 API 算法框架/工具
【Tensorflow+keras】Keras API三种搭建神经网络的方式及以mnist举例实现
使用Keras API构建神经网络的三种方法:使用Sequential模型、使用函数式API以及通过继承Model类来自定义模型,并提供了基于MNIST数据集的示例代码。
63 12
|
4月前
|
机器学习/深度学习 API 算法框架/工具
【Tensorflow+keras】Keras API两种训练GAN网络的方式
使用Keras API以两种不同方式训练条件生成对抗网络(CGAN)的示例代码:一种是使用train_on_batch方法,另一种是使用tf.GradientTape进行自定义训练循环。
49 5
|
4月前
|
UED 开发工具 iOS开发
Uno Platform大揭秘:如何在你的跨平台应用中,巧妙融入第三方库与服务,一键解锁无限可能,让应用功能飙升,用户体验爆棚!
【8月更文挑战第31天】Uno Platform 让开发者能用同一代码库打造 Windows、iOS、Android、macOS 甚至 Web 的多彩应用。本文介绍如何在 Uno Platform 中集成第三方库和服务,如 Mapbox 或 Google Maps 的 .NET SDK,以增强应用功能并提升用户体验。通过 NuGet 安装所需库,并在 XAML 页面中添加相应控件,即可实现地图等功能。尽管 Uno 平台减少了平台差异,但仍需关注版本兼容性和性能问题,确保应用在多平台上表现一致。掌握正确方法,让跨平台应用更出色。
62 0
|
4月前
|
TensorFlow API 算法框架/工具
【Tensorflow 2】Keras API+Estimator的使用
本文介绍了在TensorFlow 2中结合Keras API和Estimator API来构建和训练模型的方法,并提供了一个示例流程,包括构建模型、生成数据集、使用Estimator进行训练以及评估模型性能。
46 3
|
4月前
|
API 算法框架/工具
【Tensorflow+keras】使用keras API保存模型权重、plot画loss损失函数、保存训练loss值
使用keras API保存模型权重、plot画loss损失函数、保存训练loss值
37 0
|
5月前
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
|
7月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
关于Tensorflow!目标检测预训练模型的迁移学习
这篇文章主要介绍了使用Tensorflow进行目标检测的迁移学习过程。关于使用Tensorflow进行目标检测模型训练的实战教程,涵盖了从数据准备到模型应用的全过程,特别适合对此领域感兴趣的开发者参考。
81 3
关于Tensorflow!目标检测预训练模型的迁移学习
|
7月前
|
机器学习/深度学习 API TensorFlow
TensorFlow的高级API:tf.keras深度解析
【4月更文挑战第17天】本文深入解析了TensorFlow的高级API `tf.keras`,包括顺序模型和函数式API的模型构建,以及模型编译、训练、评估和预测的步骤。`tf.keras`结合了Keras的易用性和TensorFlow的性能,支持回调函数、模型保存与加载等高级特性,助力提升深度学习开发效率。
|
7月前
|
机器学习/深度学习 人工智能 API
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
90 0
|
7月前
|
机器学习/深度学习 算法 TensorFlow
【Keras+计算机视觉+Tensorflow】实现基于YOLO和Deep Sort的目标检测与跟踪实战(附源码和数据集)
【Keras+计算机视觉+Tensorflow】实现基于YOLO和Deep Sort的目标检测与跟踪实战(附源码和数据集)
128 1