计算机系统应用教程网站

网站首页 > 技术文章 正文

一文教你掌握最先进的实时对象检测系统YOLO

btikc 2024-09-12 12:01:05 技术文章 44 ℃ 0 评论
全文共3866字,预计学习时长20分钟或更长


本文将详细分析如何使用YOLO(You Only Look Once)进行对象检测。要想完全理解这一技术,首先应该知道对象分类、检测和分割之间的区别。


对象分类是什么?


它是系统试图预测图像内容属性的过程,就相当于一个预测图像标签的分类器。


简单来说,如果有一个预测猫和狗的分类系统,该系统(或者说是分类器)将预测输入其中的任何测试图像并进行分类。此时,图像分类的标签为狗和猫两种。


注意:任何分类器只能预测它所训练的类别标签。所以,在上述情况中,即使输入的图像是大象,分类器也只会输出狗或猫。要识别大象,整个系统必须从头开始对大象数据集进行训练(或从预训练的模型中加载)。


对象分类的方法



上图显示了一种使用像素表示抽象特征的通用方法。底层是原始像素,往上是像素组合在一起形成低级特征,低级特征又组合在一起形成高级特征。


我们可以应用任何现有的机器学习、深度学习技术来解决分类问题。包括:

· 图像特征的二分类

· 基于图像特征的支持向量机

· 基于图像特征的人工神经网络

· 基于图像特征的卷积神经网络


其中,CNN(卷积神经网络)是最佳的图像分类架构之一。所有最新模型都在某种程度上结合了CNN,这也证明了它的强大功能。


对象检测



对象检测是与计算机视觉和图像处理相关的计算机技术,它能检测数字图像和视频中的某一类语义对象(如人、建筑物或汽车)。研究较多的对象检测领域包括人脸检测和行人检测。对象检测可应用于计算机视觉的许多领域,包括图像检索和视频监控。


在更传统的意义上,它指检测场景中每个对象,同时对它们的标签进行分类,并找到该对象的边界框(或多边形)。


最后一部分包括以下最新技术:

· YOLO

· RetinaNet

· RCNN

· Fast-RCNN

· Faster-RCNN

· Mask RCNN

YOLO


You Only Look Once是最先进的实时对象检测系统。它最初开发于2015年左右,当时比其他技术都略胜一筹。

YOLO有基于CNN和锚框的简洁架构,并且是一种针对普遍使用问题的实时对象检测技术。随着时代进步,YOLO也不断迭代,变得更快更好,历来版本包括:

· YOLO V1

· YOLO V2

· YOLO V3

YOLO V2的精确性和速度都比V1更好。

YOLO V3的速度虽未升级,但比V2更精确。


参考文献

1. https://arxiv.org/abs/1506.02640

2. YOLO V3:https://pjreddie.com/media/files/papers/YOLOv3.pdf

YOLO是如何运作的?



YOLO将图像分成13×13个单元格:每个单元格负责预测5个边界框。边界框描述包围对象的矩形。YOLO还输出一个置信度,告诉我们预测的边界框实际包含某个对象的程度。


先前的检测系统使用分类器或定位器进行检测,将模型应用于图像的多个位置和尺度,图像的高得分区域作为检测目标。


YOLO则采取了完全不同的方法。它将单个神经网络应用于整个图像,该网络将图像分成区域,预测每个区域的边界框和概率,并依据概率大小对所有边框分配权重。


YOLO V3精确度更高。下图描绘了YOLO V3的整体架构:


如何获取YOLO

YOLO二进制文件(和来源)可从以下来源中下载:

· https://pjreddie.com/darknet/yolo/

· GitHub:https://github.com/pjreddie/darknet

YOLO基于darknet,内置于C中。Darknet 是用C语言和CUDA编写的开源神经网络框架。


如何使用YOLO

I. 获取存储库

git clone https://github.com/pjreddie/darknet


II. 编译来源

可用make直接编译来源。只需转到所获取的darknet目录,并运行以下命令:

https://github.com/pjreddie/darknet


注意: Make使用Makefile,它由编译C源文件的指令组成。

完成make过程后,将得到一个名为darknet的文件,这是一个二进制的可执行文件,可用它来运行YOLO。


III. 获取darknet执行权限

执行命令 ./darknet时,如果你获取权限错误,这意味着用户没有运行二进制文件的可执行权限。只需输入以下命令:

chmod u+x darknet

然后,darknet便可执行。

YOLO结构


I. 配置文件

YOLO完全是即插即用,即可以配置YOLO检测任何类型的对象。事实上,也可以自行修改CNN架构并使用。YOLO通过使用cfg/下的配置文件来实现这一点。

配置文件以.cfg结尾。

配置文件主要包括:

· CNN架构(层次和激活)

· 锚框

· 类别数量

· 学习速率

· 优化技术

· 输入大小

· 概率分数阈值

· 批量大小

基于不同版本,可以有多种配置,例如V1至V3,或者完整的训练到微小的层次。可从下面两个网站中下载不同配置:

· YOLOV3 (full): https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg

· Tiny YOLO V3: https://github.com/pjreddie/darknet/blob/master/cfg/yolov3-tiny.cfg


II. 权重

每个配置都有相应的预训练权重。这里只引用了YOLO V3。

· 完整权重

YOLO V3完整权重下载:

https://pjreddie.com/media/files/yolov3.weights。

共包含9000多个类别。

· 小权重

80个YOLO V3已训练类别的权重 :

https://pjreddie.com/media/files/yolov3-tiny.weights。


测试YOLO

如上所述,所有操作都用darknet的可执行文件运行。假设有一个名为test.jpeg的图像,可以尝试预测对象如下:

./darknet detect yolov3-tiny.cfg yolov3-tiny.weights test.jpeg

通常,.cfg 在 cfg/ 目录下。假设 weights/目录下有 yolov3-tiny,则命令为:

./darknet detect cfg/yolov3-tiny.cfg weights/yolov3-tiny.weights test.jpeg

一旦执行,darknet文件的同一个目录下将会有一个命名为predictions.jpeg的图像。可以查看预测类型以及相应的边界框。


训练

训练稍微复杂一些,因为必须保证事物和配置正确。下面的命令即可做到:

./darknet detector train custom/cfg/obj.data custom/cfg/tiny-yolo.cfg custom/tiny-yolo_100.weights

训练命令分解

这里.cfg和.weights指前面提到的配置和权重文件。首先要使用obj.data文件,内容如下:

classes= 1 
train = custom/cfg/train.txt
valid = custom/cfg/test.txt
names = obj.names 
backup = backup/

obj.names

该文件包含一系列类别名。例如:

cat
dog
background
bike

train.txt

该文件包含一系列将输入网络中的训练图像。文件名很类似:

custom/train-images/11.jpg
custom/train-images/12.jpg
custom/train-images/13.jpg
...
...

这里 train-images/包含所有训练图像。除了图像,该目录还包含与图像对应的边界框文本文件。

于是就得到了 custom/train-images/11.txt,内容为:

0 0.32502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523

第一个数字代表obj.names中对应的id或类别,其余的数字代表边界框。如果有多个类别的多个框,那么应该是:

0 0.32502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523
0 0.52502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523
1 0.32502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523

test.txt

该文件包含一些了测试图像。

注意:在.cfg中,必须将类别的数量更改为obj.names中找到的类别总数。

以上便是使用YOLO的方法。上述演示操作基于Linux系统,Windows系统的步骤也与之类似。

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表