当先锋百科网

首页 1 2 3 4 5 6 7

YOLO 目标检测模型

目标检测算法概述

目标检测是计算机视觉领域的基本任务之一,其可以分为两类:基于传统算法和基于深度学习的算法。其中,基于传统算法的目标检测算法主要有:Haar特征、HOG特征、SIFT特征、SURF特征、LBP特征等;基于深度学习的目标检测算法主要有:R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLO等。

基于深度学习的目标检测算法主要分为两大类:两阶段(two-stage)和一阶段(one-stage)。两阶段的算法步骤分为两步:首先选出候选区域,然后对候选区域进行分类。两阶段算法的代表是 R-CNN 系列。一阶段算法直接对图像处理,同时输出物体定位和类别。YOLO(You Only Look Once)就是一种经典的一阶段算法。

更多信息可以参考 目标检测(Object Detection)学习笔记(概述与传统算法与基于深度学习算法

YOLO

在 YOLOv1 提出之前,R-CNN 系列算法在目标检测领域独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性,饱受诟病。

而 YOLO 的主要思想是,把目标检测问题转化为直接从图像中提取边界框和类别概率的单回归问题,一次就可以检测出目标的类别和位置。因此 YOLO 模型的运行速度非常快。

更多细节可以参考 YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)_AI 菌的博客-CSDN博客

YOLOv1

YOLO 把输入图像分为 S × S S\times S S×S 个网格,每个网格预测 B B B 个边界框(bounding box),每个边界框用 5 个预测值表示: x x x y y y w w w h h h confidence \text{confidence} confidence,其中 ( x , y ) (x,y) (x,y) 是边界框的中心坐标, w w w h h h 是边界框的宽度和高度,这 4 个值都被归一化到 [ 0 , 1 ] [0,1] [0,1] 区间,以便于训练。此外,每个网格还需要预测分别属于每种目标类别的条件概率,设目标类别数为 C C C。因此 YOLOv1 最终输出的张量大小为 S × S × ( B × 5 + C ) S\times S \times (B\times 5 + C) S×S×(B×5+C),然后使用非极大值抑制(NMS)算法找到最佳的目标边界框,消除冗余的边界框。下图是 YOLOv1 的网络结构。

请添加图片描述

YOLOv1 使用了 PASCAL VOC 检测数据集,将图像分为 7 × 7 = 49 7\times 7=49 7×7=49 个网格,每个格子预测 2 个边界框,即 S = 7 S=7 S=7 B = 2 B=2 B=2。因为 VOC 数据集中有 20 种类别,故 C = 20 C=20 C=20。因此最终的预测结果是一个 7 × 7 × 30 7\times 7 \times 30 7×7×30 的张量

需要注意的是,上面的网络结构图是有误的,可以参考 YOLO V1 网络结构分析 - 知乎 (zhihu.com)

YOLOv2

YOLOv2 是 YOLO 算法的第二个版本,在 YOLO 模型的基础上,YOLOv2 在每个卷积层后都增加了批量归一化层,并用 anchor box 替代了全连接层预测边界框,提高了目标检测精度和速度。

YOLOv2相较于YOLOv1的改进主要有以下几个方面:

  1. 更换骨干网络:YOLOv2使用了Darknet-19作为特征提取网络,相比于YOLOv1的GoogLeNet,Darknet-19更加轻量化,只有19层卷积层和5层池化层,没有全连接层。Darknet-19使用了更小的卷积核,比如1x1和3x3,避免了7x7这样的大卷积核,减少了计算量和参数量。
  2. 引入批量归一化:YOLOv2在每个卷积层后面都添加了批量归一化(Batch Normalization)操作,可以加速收敛,提高精度,减少过拟合。YOLOv2的论文中指出,使用批量归一化可以提升2.4%的mAP,并且可以去掉Dropout层。
  3. 使用高分辨率分类器:YOLOv2在ImageNet上预训练了一个高分辨率的分类器,输入为448x448,输出为1000类。这样做可以提高特征提取网络对细节的敏感度,有利于检测小物体。然后再将分类器微调为检测器,输入为416x416(为了保证下采样后得到奇数大小的特征图),输出为SxSx(B*5+C)。
  4. 使用锚框:YOLOv2借鉴了Faster R-CNN的思想,引入了锚框(Anchor Boxes)来预测边界框。锚框是一些预定义的具有不同形状和尺寸的边界框,可以通过聚类分析从训练集中得到。YOLOv2使用了k-means聚类算法,并且使用IOU作为距离度量。YOLOv2选择了5个锚框作为每个网格的预测框。使用锚框可以解决YOLOv1中每个网格只能预测一个物体的限制,也可以适应不同形状和大小的物体。
  5. 直接预测边界框位置:YOLOv2改变了边界框位置的预测方式,不再是预测相对于整张图片的坐标和尺寸,而是预测相对于锚框的偏移量和缩放比例。具体来说,对于每个锚框,YOLOv2预测四个值:tx, ty, tw, th。其中tx, ty表示边界框中心相对于网格左上角的偏移量除以网格大小;tw, th表示边界框宽高相对于锚框宽高的对数值。这样做可以使得预测更加稳定和准确。
  6. 使用k-means聚类确定先验框:YOLOv2使用k-means聚类算法来确定先验框(prior boxes)的大小和形状。先验框是一些预定义的具有不同尺寸和长宽比的边界框,可以通过分析训练集中物体的真实边界框来得到。YOLOv2使用IOU作为聚类的距离度量,选择了5个先验框作为每个网格的候选