![ea314aba933c53e7846393c7e0857567.gif](https://i-blog.csdnimg.cn/blog_migrate/dcc3c90d424c44d3c99c5cb48947a425.gif)
我还提供了一些脚本,允许您下载我预先训练好的模型以及所有配置文件和测试数据集。
https://github.com/SkalskiP/ILearnDeepLearning.py/tree/master/02_data_science_toolkit/02_yolo_object_detection 1 Introduction
YOLO(你只看一次)是一个实时对象检测算法,它是第一个平衡预测质量和速度的算法。这类最强大的模型是建立在卷积神经网络上的,这次也不例外。所谓的“目标检测模型”,意思是不仅可以用它来指示在给定的照片中出现了什么目标,还可以用它来指示目标的位置和数量。
这种模型在机器人和汽车工业中都有应用,因此速度是至关重要的。自2015年以来,该算法已经进行了三次迭代,并为TinyYOLO等移动设备设计了各种变体。移动版本的精度是有限的,但它的计算要求也较低,允许它运行得更快。
![19da5601ae0cfb9b0d21a05b7588eec4.png](https://i-blog.csdnimg.cn/blog_migrate/c22563623f89ba08b8391c0b3258b073.jpeg)
像在深度学习中一样,创建模型的第一步是准备一个数据集。监督学习是观察有标记的例子并在数据中发现不明显但一致的模式。必须承认,创建数据集是一项相当乏味的任务。这就是为什么我准备了一个脚本,它将允许您下载我的国际象棋数据集,并查看YOLO如何处理这个示例。
为了实现这个目标,我们需要收集一组图像并创建匹配的标签文件。图片应该包含我们想要识别的对象。我建议数据集中所有对象类的分布都是均匀的。在我的第一个项目中——篮球探测器——我使用了游戏视频的帧。
不幸的是,YOLO需要一种特定的标签格式,大多数免费标签工具都不支持该格式。为了消除从VOC XML,VGG JSON或其他广泛使用的格式中解析标签的需要, 我们将利用makeense.ai——这是我在GitHub上开发的一个免费开源项 目 。 该编辑器不仅支持直接导出为YOLO格式,而且很直观,并且不需要安装,因为它可以在浏览器中工作 。此外,它还支持旨在仅加速贴标工作的多种功能。看一下使用MakeSense的AI支持的标记过程。
工作完成后,我们可以下载包含.txt文件的.zip。每个此类文件都对应一个标记的图像,并描述照片中可见的目标。如果打开这些文件之一,则会发现每一行都是class_idx x_center y_center width height格式的。其中class_idx代表class_names.txt文件中分配的标签的索引(从0开始计数)。其余参数描述围绕单个对象的边界框。它们可以采用0到1之间的值(相对于图像尺寸)。
幸运的是,大多数时候我们不需要考虑这些细节,因为编辑器将为我们处理所有这些细节。YOLO格式的标签示例如下所示。
![3c8cd6aed62087cd9a2ed60b38a48250.png](https://i-blog.csdnimg.cn/blog_migrate/d1e803149d2a757f8a643637d10623ea.png)
YOLO最初是在称为Darknet的深度学习的利基框架中编写的。从那时起,创建了许多其他实现,其中大多数使用两个非常流行的Python平台-Keras和PyTorch。在所有可用的解决方案中,有一个我特别喜欢。它提供了用于训练和检测的高级API,而且还具有许多有用的功能。使用它时,我们所有的工作都归结为准备数据集和创建一些配置文件,然后将职责转移到库中。
环境设置也非常简单,因为它取决于运行以下命令的过程,您可以在下面找到这些命令(假设您已经在计算机上安装了Python和Git)。最好从项目目录执行命令,以实现上面显示的结构。还值得一提的是,还可以通过Docker创建环境(这对于Windows用户尤其有用)。您可以在此处找到有关此主题的更多说明。
![3c58a22afc2884dbd2d7ad9818546eb9.png](https://i-blog.csdnimg.cn/blog_migrate/6aacd6eaffc28bf6a391b110a2210abe.png)
.data是我们需要提供的最终文件。让我们使用下一个项目的例子国际象棋检测器来讨论其内容。在这种情况下,我有12个要识别的唯一对象类。
接下来,我们给出定义哪些照片属于训练和测试集的文件的位置,最后给出带有标签名称的先前讨论的文件的位置。为了使一切正常工作,应将文件Chess.data, chess_train.txt, chess_test.txt和Chess.names移至project / yolov3 / data目录。
![0628af4fc3a744ccb686956f9acaf306.png](https://i-blog.csdnimg.cn/blog_migrate/cdbd1f4fec78e9a3eec34c14cc1675ff.png)
![cbcd00e48c35649d85965d4e357b56fb.png](https://i-blog.csdnimg.cn/blog_migrate/aca2c4abcb633b61716f229052c46bc5.png)
首先,我们可以应用迁移学习-我们不必从头开始培训。我们可以使用在不同数据集上训练的模型的权重,这可以缩短我们自己的网络的学习时间。我们的模型可以使用基本形状的知识,并专注于将此信息链接到我们要识别的新型对象。
其次,图书馆进行数据扩充-因此,它会根据我们提供的照片生成新的示例。因此,即使只有很少的数据集(几百张图像),我们也可以训练模型。我们使用的库还向我们提供了由于扩增而创建的图像样本。在下面,您可以查看在我的篮球探测器的训练过程中创建的示例。
![886f8ebd7e8614873ca7b0a93289edba.png](https://i-blog.csdnimg.cn/blog_migrate/b12e26f9234df4a0e494fdb132d14fb6.jpeg)
![c87a081351c8b245a12e881cf467188d.png](https://i-blog.csdnimg.cn/blog_migrate/368e78dbf896e028ce71b6b6af9affe4.png)
![832630fa8606f0faf3249371e3a6094a.png](https://i-blog.csdnimg.cn/blog_migrate/9c61cdb1e2b856c9bd85c5752428ca9c.jpeg)
![f3ce15f0d5d074a6b7d89edcefd7a228.png](https://i-blog.csdnimg.cn/blog_migrate/036e797344b68e8fb463f71b9ee974c3.jpeg)
最新人工智能、深度学习、计算机视觉干货奉上!