YOLO综述

YOLO目标检测算法原理及应用
版本 作者 时间 备注
V1.0.0 Zhe Chen 2021.1.27 YOLO系列学习笔记

前言

什么是目标检测?

在这里插入图片描述

**目标检测 **的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视觉领域最具有挑战性的问题。

计算机视觉中关于图像识别有四大类任务:

  • 分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
  • 定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。
  • 检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个目标的的位置并且知道目标物是什么。
  • 分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

目标检测中的核心问题?

除了图像分类之外,目标检测要解决的核心问题是:

  1. 目标可能出现在图像的任何位置。

  2. 目标有各种不同的大小。

  3. 目标可能有各种不同的形状。

    如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采用经典的滑动窗口+图像缩放的方案解决通用目标检测问题的成本太高。

基础知识

  • IoU(Intersect over union): 交并比。指目标预测框与真实框的交集和并集的比例。后续的CIoU、DIoU、GIoU都是IoU的变种优化。

在这里插入图片描述

  • mAP(mean Average Precision): 所有类别的平均精度求和除以所有类别。

YOLO

目标检测架构分为两种,一种是two-stage(R-CNN),一种是one-stage(YOLO),区别就在于 two-stage 有候选框提取(region proposal) 过程,类似于一种海选过程,网络会根据候选区域生成位置和类别,而 one-stage 直接从图片生成位置和类别。

相对于R-CNN系列的"看两眼"(候选框提取与分类),YOLO只需要Look Once。YOLO统一为一个回归问题,而R-CNN将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题)。

YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。

之前刚开始接触物体检测算法的时候,老是分不清deep learning中,物体检测和图片分类算法上的区别,弄得我头好晕,终于在这篇paper上,看到了解释。

物体检测和图片分类的区别:图片分类不需要定位,而物体检测需要定位出物体的位置,也就是相当于把物体的bbox检测出来,还有一点,物体检测是要把所有图片中的物体都识别定位出来。

YOLO

YOLOv1-开山之作

统一检测

作者将目标检测的流程统一为单个神经网络。该神经网络采用整个图像信息来预测目标的bounding boxes的同时识别目标的类别,实现端到端实时目标检测任务。

  • 将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。

在这里插入图片描述

  • 每个网络需要预测B个BBox的位置信息(x, y, w, h)和confidence(置信度)信息,一个BBox对应着四个位置信息和一个confidence信息。confidence代表了所预测的box中含有object的置信度和这个box预测的object有多准的两重信息:

在这里插入图片描述

​ 而YOLOv1中的S=7, B=2, Pascal VOC有20个类别标签,C=20,所以最终的预测是一个7×7×30的张量。

在这里插入图片描述

网络结构

在这里插入图片描述

YOLOv1采用卷积神经网络,开始由卷积层提取图像特征,全连接层预测输出概率。模型结构类似于GoogleNet,如图3所示。作者还训练了YOLO的快速版本(fast YOLO)。Fast YOLO模型卷积层和filter更少。最终输出为7×7×30的tensor。

训练方法

作者采用sum-squared error为目标函数来优化,下图为总的loss训练:

在这里插入图片描述

作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为0.9,学习速率延迟为0.0005. Learning schedule为:第一轮,学习速率从0.001缓慢增加到0.01(因为如果初始为高学习速率,会导致模型发散);保持0.01速率到75轮;然后在后30轮中,下降到0.001;最后30轮,学习速率为0.0001.
作者还采用了dropout和 data augmentation来预防过拟合。dropout值为0.5;data augmentation包括:random scaling,translation,adjust exposure和saturation。

  • 这里有一个小的细节问题:作者为什么设置定位损失的宽和高为开根号的平方和呢?

在这里插入图片描述

这里,作者用到了一个trick,稍微缓解了yolo对大目标和小目标检测精度的平衡。这就是后续作者要进行改进的地方。

预测

对于PASCAL VOC数据集,模型需要对每张图片预测98个bounding box和对应的类别。对于大部分目标只包含一个box;其它有些面积大的目标包含了多个boxes,采用了Non-maximal suppression(非最大值抑制)来提高准确率。

  • NMS(非最大值抑制): 抑制目标框中的重合框。目的就是要去除冗余的检测框,保留最好的一个。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0BrUyRT5-1611736648084)(picture/NMS.png)]

缺点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmLkY56q-1611736648087)(picture/yolodetectionsystem.png)]

  • YOLOv1的每一个网格只预测两个Boxes和一个类别,这导致了模型对相邻近的目标预测准确率下降。因此YOLOv1对成群结队的目标(比如:一群鸟)识别准确率较低。
  • YOLOv1是从数据中学习预测bounding boxes,因此,对新的尺寸或者不常见角度的目标无法识别。
  • YOLOv1的loss函数对small bounding boxes 和large bounding boxes的error平等对待,影响了模型识别的准确率,因此yolov1对小目标检测不适用。
  • 所有的误差来源是来自定位不准确的原因。

效果比对

如表4-1所示,在准确率保证的情况下,YOLO速度快于其它方法,下表 PASCAL VOC 2007数据集测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6NK67XU-1611736648089)(picture/yolo1result1.png)]

总结

  • YOLOv1每个小方格只能预测一类物体,对于小目标检测很难。
  • 在损失函数中,对小物体变化的置信度和大物体变化的置信度惩罚相同,实际小物体变化应该加大惩罚。
  • YOLOv1在2007+2012上训练,mAP为63.4%,45fps。
  • Faster R-CNN ZF在2007+2012上训练,mAP为62.1%,18fps。
  • YOLOv1比Faster R-CNN有更多的定位错误。
  • YOLOv1比Faster R-CNN有更少的背景错误。
  • YOLOv1具有一定的鲁棒性,具有普适性,可以适用于实时目标检测。

YOLOv2-Better,Faster,Stronger

性能对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqaYfSv7-1611736648092)(picture/yolo2.png)]

从测试效果来看,YOLOv2在当时主流框架的对比下,生命力还是很强的。

YOLOv2中的各种尝试 – Better

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ZtJF00a-1611736648094)(picture/yolo2map.png)]

Batch Normalization(批量归一化)-- improve 2% in mAP

批量归一化使得在收敛方面得到了显著改进,同时消除需要其他形式的正则化。通过对YOLO中所有卷积层添加批量归一进行标准化,我们在mAP上得到了超过2%的改进。批量正常化也有助于使模型规范化。使用批量归一化,我们删除dropout,也可以防止过度拟合。

High Resolution Classifier(更好分辨率的分类器)-- improve 4% in mAP
  • YOLO1中的输入尺寸是224×224,
  • YOLO2中采用448×448,可以得到4%的mAP提升。
Convolutional with Anchor Boxes(引入anchor)
  • YOLO1中采用bounding box通过卷积层直接得到坐标。
  • YOLO2中采用预测anchor offset能够简化这个问题,使得网络更容易去学习。
  • 不采用Anchor时,得到69.5mAP和81% recall;采用anchor时,得到69.2mAP和88% recall。虽然mAP有一定的下降,但是召回率有7%的提升。
Dimension Clusters(维度的集群)

采用k-means聚类的方法来获得anchor的个数。

Direct location prediction(方向位置预测) – improve 5% in mAP
  • 作者发现:如果直接采用anchor boxes的方式运用到yolo时,模型会很不稳定,因为没有对 t x 和 t y t_x和t_y txt

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Metroplitan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值