YOLO(你只看一次)是一个实时对象检测算法,它是第一个平衡预测质量和速度的算法。这类最强大的模型是建立在卷积神经网络上的,这次也不例外。所谓的“目标检测模型”,意思是不仅可以用它来指示在给定的照片中出现了什么目标,还可以用它来指示目标的位置和数量。
这种模型在机器人和汽车工业中都有应用,因此速度是至关重要的。自2015年以来,该算法已经进行了三次迭代,并为TinyYOLO等移动设备设计了各种变体。移动版本的精度是有限的,但它的计算要求也较低,允许它运行得更快。
2 DataSet像在深度学习中一样,创建模型的第一步是准备一个数据集。监督学习是观察有标记的例子并在数据中发现不明显但一致的模式。必须承认,创建数据集是一项相当乏味的任务。这就是为什么我准备了一个脚本,它将允许您下载我的国际象棋数据集,并查看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格式的标签示例如下所示。
4 Environment setupYOLO最初是在称为Darknet的深度学习的利基框架中编写的。从那时起,创建了许多其他实现,其中大多数使用两个非常流行的Python平台-Keras和PyTorch。在所有可用的解决方案中,有一个我特别喜欢。它提供了用于训练和检测的高级API,而且还具有许多有用的功能。使用它时,我们所有的工作都归结为准备数据集和创建一些配置文件,然后将职责转移到库中。
环境设置也非常简单,因为它取决于运行以下命令的过程,您可以在下面找到这些命令(假设您已经在计算机上安装了Python和Git)。最好从项目目录执行命令,以实现上面显示的结构。还值得一提的是,还可以通过Docker创建环境(这对于Windows用户尤其有用)。您可以在此处找到有关此主题的更多说明。
5 Configuration 我在上一段中提到过,现在我们要做的就是 创建几个配置文件,它们定义了我们的训练和测试集的位置,对象类的名称,并提供了有关所用神经网络的体系结构的指南 。 首先, 我们需要将数据集分为训练和测试集。 我们借助两个.txt文件来完成此操作。它们每个都包含通向数据集中特定图像的路径。为了加快工作速度,我准备了一个Python脚本,该脚本将为我们自动创建这些文件。您所需要做的就是指出数据集的位置,并定义训练和测试集之间的百分比划分。下面显示了train.txt / test.txt文件的片段。.data是我们需要提供的最终文件。让我们使用下一个项目的例子国际象棋检测器来讨论其内容。在这种情况下,我有12个要识别的唯一对象类。
接下来,我们给出定义哪些照片属于训练和测试集的文件的位置,最后给出带有标签名称的先前讨论的文件的位置。为了使一切正常工作,应将文件Chess.data, chess_train.txt, chess_test.txt和Chess.names移至project / yolov3 / data目录。
5 Training 现在我们准备开始训练。正如我前面提到的, 我们使用的库具有高级API,因此终端中的一个命令和一些参数足以启动此过程 。但是,在下面发生了几件重要的事情,这些事情显着增加了我们获得最终成功的机会。首先,我们可以应用迁移学习-我们不必从头开始培训。我们可以使用在不同数据集上训练的模型的权重,这可以缩短我们自己的网络的学习时间。我们的模型可以使用基本形状的知识,并专注于将此信息链接到我们要识别的新型对象。
其次,图书馆进行数据扩充-因此,它会根据我们提供的照片生成新的示例。因此,即使只有很少的数据集(几百张图像),我们也可以训练模型。我们使用的库还向我们提供了由于扩增而创建的图像样本。在下面,您可以查看在我的篮球探测器的训练过程中创建的示例。
6 Detection 最后,快乐的时刻到了!我们致力于创建模型的工作得到了回报,因为我们现在可以使用它来查找在任何照片中寻找的对象。再一次,这是一个非常简单的任务,我们可以在终端中使用一个简单的命令来完成。执行之后,我们将在输出目录中找到预测结果。值得一提的是, 我们还可以对来自网络摄像头的视频进行实时预测 ,当我们想通过演示演示给每个人留下深刻印象时,这尤其有用。 潮水自会来去,但心志得坚若磐石。即便成不了那根定海神针,也至少不是那随意被拍上岸的野鬼游魂。 长按关注 "AI深度视线"