什么是物体检测?
与许多计算机视觉认知应用相比,对象检测是在图像和视频中识别和定位对象的常用技术之一。
顾名思义——“计算机视觉”,是计算机获得类似人类视觉以查看和识别物体的能力。目标检测可以被视为具有一些高级功能的图像识别。
该算法不仅可以识别/识别图像/视频中的对象,还可以对它们进行定位。换句话说,算法在图像或视频帧中的对象周围创建了一个边界框。
物体检测示例
各种物体检测算法
以下是一些用于对象检测的流行算法:
R-CNN: 基于区域的卷积神经网络
Fast R-CNN: :基于区域的快速卷积神经网络
Faster R-CNN: 更快的基于区域的卷积网络
YOLO: 只看一次
SSD: 单镜头探测器
每种算法都有自己的优缺点。这些算法如何工作的细节超出了本文的范围。
卷积神经网络的架构
曾经晚上放学回家,打开电视看最喜欢的动画片的美好时光,可能大家都经历过。相信我们都喜欢看动画片。那么,如何重温那些日子呢?
今天,我们将学习如何使用 TensorFlow.js 创建端到端的自定义对象检测 Web 应用程序。我们将在自定义数据集上训练模型,并将其作为成熟的 Web 应用程序部署在浏览器上。
如果你对构建自己的对象检测模型感到兴奋,还等什么?让我们深入了解。
本文将创建一个在浏览器上实时检测卡通的模型。随意选择你自己的数据集,因为整个过程保持不变。
创建数据集
第一步是收集要检测的对象的图像。比如最喜欢的动画片是机器猫,史酷比,米奇 老鼠,憨豆先生和麦昆。
这些卡通形象构成了这个模型的类。
为这五个类中的每一个收集了大约 60 张图像。这是数据集外观。
记住:如果你给模型喂垃圾,你就会得到垃圾。为了获得最佳结果,请确保为模型收集足够的图像以从中学习特征。
收集到足够的数据后,让我们继续下一步。
标记数据集
要标记数据集中的对象,我们需要一个注释/标记工具。有很多注释工具可以做到这一点,例如 LabelImg、Intel OpenVINO CVAT、VGG Image Annotator 等。
虽然这些都是业内最好的注释工具,但发现 LabelImg 更容易使用。随意选择你喜欢的任何注释工具,或者直接按照本文进行操作。
下面是一个带注释的图像的示例:围绕感兴趣区域(对象)及其标签名称的边界框。
图片标注
对于每个注释的图像,将生成一个相应的 XML 文件,其中包含元数据,例如边界框的坐标、类名、图像名称、图像路径等。
训练模型时需要这些信息。我们稍后会看到那部分。
下面是 XML 注释文件的外观示例。
注释 XML 文件
好的,一旦你正确注释了所有图像,按照目录结构的以下方式将数据集拆分为训练集和测试集:
数据集的目录结构
在 Google Drive 上上传数据集
登录你的 Google 帐户并将压缩的数据集上传到你的 Google Drive。我们将在模型训练期间获取此数据集。
确保数据集的上传没有因网络问题而中断,并且已完全上传。
Google Drive 上的数据集
在本地机器上克隆以下存储库
https://github.com/NSTiwari/TensorFlow.js-Custom-Object-Detection
此存储库包含一个名为:Custom_Object_Detection_using_TensorFlow_js.pynb的 Colab Notebook。
打开 Google Colab 并将此 Colab Notebook上传到那里。现在,我们将开始实际训练我们的对象检测模型。
我们正在使用 Google Colab,因此你无需在本地机器上安装 TensorFlow 和其他库,因此我们避免了手动安装库的不必要麻烦,如果安装不当可能会出错。
配置 Google Colab
在 Google Colab 上上传笔记本后,检查运行时类型是否设置为“GPU”。
为此,请单击 Runtime –> Change runtime type.
Google Colab 设置
在笔记本设置中,如果硬件加速器设置为'GPU',如下图,你就可以开始了。