YOLO概述
一. 目标检测
目标检测(Object Detection)是计算机视觉里的一个重要领域
其主要任务是识别和定位视频图片中的特定物体,如人、车辆、动物、物体等,并将其标注出来
早期的时候,目标检测主要使用提取特征给分类器(SVM)进行分类的方法。这些方法通常基于图像的低级特征,如边缘、纹理和颜色等,以及一些经验规则来识别目标。
然而,基于特征的方法在处理复杂场景、光照变化和目标变形等方面存在一定的局限性。
随着深度学习的兴起,基于深度神经网络的目标检测方法取得了巨大的突破
基于深度学习的目标检测算法如下
- Faster R-CNN: 引入了区域提议网络,可以同时生成候选目标区域和对每个区域进行分类,从而实现了准确且高效的目标检测
- YOLO: 基于深度学习的实时目标检测算法,将目标检测任务转化为一个回归问题,通过单个卷积神经网络直接预测目标的类别和位置,实现了实时的目标检测
- SSD :在多个不同层次的特征图上进行目标检测,通过多个尺度的特征图来检测不同大小的目标
- Mask R-CNN :在Faster R-CNN的基础上增加了对目标实例的分割(Instance Segmentation)能力,可以同时预测目标的类别、位置和像素级的分割掩码
- RetinaNet :引入一种称为Focal Loss的损失函数来解决目标检测中的类别不平衡问题,使得算法在处理大量背景样本和少量目标样本时表现更好
目标检测的一般处理流程
- 图像预处理:首先对输入图像进行预处理操作,如调整大小、归一化、去噪等
- 特征提取:从图像中提取有助于识别目标的特征。常用的特征提取方法包括边缘检测、颜色直方图、纹理特征等
- 候选区域生成:在目标检测中,通常会生成一些可能包含目标的候选区域。这些候选区域可以通过使用滑动窗口、图像分割或深度学习等方法来生成
- 目标分类:对于每个候选区域,目标检测算法会使用分类器或深度神经网络来判断该区域是否包含目标。常用的分类器包括支持向量机(SVM)、卷积神经网络(CNN)等
- 目标定位(边界框回归):如果某个候选区域被分类为目标,则目标检测算法会进一步定位目标在图像中的准确位置,通常使用边界框(Bounding Box)来表示目标的位置
- 后处理:对检测结果进行后处理操作,如非极大值抑制(Non-maximum Suppression)来消除重叠的检测框,以及过滤掉置信度低的检测结果
其主干分为三部分
-
Backbone(主干网络)
目标检测网络的基础部分,负责从输入图像中提取特征
常用的特征提取网络包括VGGNet、ResNet、MobileNet等。这些网络通常是预训练的,在大规模图像分类任务上取得了较好的性能 -
Neck(特征融合层)
这一部分负责将主干网络提取的特征进行融合和调整,以便更好地适应目标检测任务。常见的操作包括特征金字塔(FPN)、空间金字塔池化(SPP)、多尺度特征融合等
融合后的特征将被传递给检测头进行目标分类和边界框回归 -
Detection head(检测头)
主要负责对融合后的特征进行目标分类和边界框回归
检测头输出的结果是检测到的目标类别和位置信息
二. YOLO介绍
YOLO(You Only Look Once)是一种流行的目标检测算法,它的特点是实时性能较强。
传统的目标检测算法通常分为两个阶段:首先使用区域提取方法生成候选目标区域,然后对这些候选区域进行分类和边界框回归
这种两阶段的方法在速度上较慢,尤其对于实时应用而言不太适用
YOLO通过将目标检测任务转化为回归问题,将输入图像分成一个固定大小的网格,并预测每个网格中可能存在目标的边界框和类别
对于候选框的提取和分类,只需要进行一次前向传递,大大提高了检测速度
2.1 YOLOv1
核心思想:将整张图片作为网络的输入,直接在输出层对BBox的位置和类别进行回归
基本思想
分类器输出的是一个类别,而目标检测器输出的是一个框
我们不仅要识别出对应的类别,还需要确认框的大小和位置
朴素的思想是采用滑动窗口分类方法,挨个遍历所有大小和位置的候选框,进行分类,这种方法操作复杂并且十分耗时
由于框的信息可以用一个向量来表示,这与传统分类输出类别的one-hot向量没有本质区别
所以可以将输出换成候选框的向量信息,同时增加一个置信度,转化成回归问题,多类别就如one-hot一样增加长度,小目标再增加一个维度
然而这种回归只能输出一个目标,当然我们也可以设置多个向量,但毕竟不能完全匹配目标
因此我们将图像进行网格划分,每个网格由一个候选框向量负责
尽管进行网格划分能检测更多目标,但有时候同样会出现一个网格中有多个目标的情况,另外在所有网格中确定最终目标也是问题
一个朴素的想法是进行聚类,但聚类的方式首先要知道最终目标到底有多少个,这同样是我们需要解决的问题
NMS(非极大值抑制)
两个框重合度(交集/并集)很高,大概率是同一个目标,那就只取一个框
- 通过置信度排序得到第一个框,置信度最大
- 利用重合度,把与第一个框重合的其他框去掉(抑制掉)
- 重复第一个过程,选取其他没有抑制掉的框,同时对剩下的框进行抑制
具体实现方法
- 划分为S×S个网格,每个网格负责一个目标
- 对于每个网格,预测B个边界框,每个边界框由五个参数构成,分别为框的信息和置信度
- 对于每个边界框,预测C个目标类别的概率
- 根据边界框的置信度和类别的概率,计算每个每个边界框包含目标的置信度
- 定义损失函数,包括边界框信息回归损失、置信度分类损失、类别分类损失
- 用标注图像数据集对网络进行训练,通过反向传播算法调整网络参数
- 进行图像输入和目标检测
2.2 YOLOv2
Batch Normalization
high resolution classifier
Convelutional With Anchor Boxes(预定义边界框)同时限制边界框在图像内
Passthrough layer:将低层特征与高层特征连接
Multi-scale Training(多尺寸训练)
Darknet-19
2.3 YOLOv3
多尺度检测头,reasblock,darknet53