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