YOLOV1学习总结

#You Only Look Once#

一.前言

这一篇我们将进入YOLOV1的学习。

传统的一些目标检测系统大多采用重用分类器来执行检测,计算量大,检测时间长。

  • DPM(Deformable Parts Model采用传统的SVM分类器,通过人工制造模板,使用滑动窗口方法暴力搜索整个待识别框
  • R-CNN通过region proposal(待选区域)产生大量的可能包含待检测物体的bounding box(边界框),再使用分类器去判断这些bounding box中是否存在物体以及物体的所属类别probability和confidence,最后再回归预测

本篇介绍的YOLOV1是目前比较流行的目标检测算法,速度快、结构简单

二.YOLOV1的特点

与传统的目标检测算法不同:

1. YOLO将目标检测看作是一个单一的回归问题,使用单个神经网络,直接从图像像素得到边界框、类别概率、置信度,是一个端到端的目标检测模型,它可以分别出哪些对象是存在的,它们在哪里。

2. YOLO在整个图像上训练,并能直接优化检测性能。

问题:什么是端到端?

端到端:指的是输入的是原始数据,输出的是最后的结果。

这样做缩减了人工预处理和后续处理,增加模型整体的契合度

优点:

1. YOLO的速度非常快
2. YOLO在整个图像上进行推断,背景误检测率低

YOLO在训练和测试的时候都会顾及整个图像,隐式地包含了类的上下文信息,与Fast R-CNN相比,YOLO将背景误检测的数量少了一半

3.YOLO具有泛化表征的能力

缺点:

1. YOLO无法很好地检测小物体

原因:

①YOLO对其边界框施加了很强的空间约束

每个网格单元只能预测两个框,且只能包含一个类,限制了我们预测邻近的小目标的数量。

②YOLO很难泛化新的不常见的长宽比的目标

论文中这样说:

1)YOLOV1将图片分成S×S的网格(论文中是7×7的网格),网络到后面的感受野较大,小目标的特这边给无法在后面的7×7grid中体现

2)网格只有7×7,当两个物体靠的很近(它们的中心点都落入同一个cell中),YOLO只能预测出其中的一个,因此丢失了很多目标

3)每个网格只有两个bounding box,当待识别的物体长宽比不常见时效果就很差

不过,YOLOV2会在这个基础上加入anchor,提高了对于小目标检测的鲁棒性。

三.YOLOV1的检测方法

3.1 图像特征的组成

YOLO将输入的图像划分成S×S的网格,当物体的中心点落入其中的一个网格中,这个网格就负责预测该物体,一个网格只能预测一个物体且只能预测一个类别(缺点),会生成两个预测框。

S×S个网格,每个网格需要预测B个bounding box和C个类

对于每个网格:

1)预测B个预测框(生成框的中心点必须在网格中)

2)每个预测框包含5个元素(x,y,w,h,c)

x、y:bounding box预测框的中心坐标相对于该box归属的网格左上角的偏移量(0-1之间)

在上图中,绿色虚线框代表grid cell,绿点表示该grid cell的左上角坐标,为(0,0);红色和蓝色框代表该grid cell包含的两个bounding box,红点和蓝点表示这两个bounding box的中心坐标。有一点很重要,bounding box的中心坐标一定在该grid cell内部,因此,红点和蓝点的坐标可以归一化在0-1之间。在上图中,红点的坐标为(0.5,0.5),即x=y=0.5,蓝点的坐标为(0.9,0.9),即x=y=0.9。

w、h:是指该bounding box的宽和高,但也归一化到了0-1之间,表示相较于原始图像的宽和高(即448个像素)。比如该bounding box预测的框宽是44.8个像素,高也是44.8个像素,则w=0.1,h=0.1。

红框的x=0.8,y=0.5,w=0.1,h=0.2。

3.2 网络设计

YOLO的网络结构参考GoogleNet(如何参考?待写)

输入图像尺寸为448×448,共经过24个卷积层,2个全连接层,最后reshape输出图像大小为7×7×30(30 = B * 5 + C) ,此时B = 2,C = 10

  • CNN网络预测生成7×7×1024的张量
  • 两个全连接层执行全连接回归,进行7×7×2边界框预测
  • 各层使用Leaky ReLU,最后一层使用线性激活函数
  • 训练时采用Dropout和数据增强避免过拟合

  • 定义置信度(预测框与真实标签框之间的联合部分的交集IOU)
    confidence = Pr(Object) * IOU_pred truth
    若单元网格中存在目标则Pr(Object) = 1,反之为0--->confidencr = 0
  • 预测C类的条件概率
    Pr(Classi | Object) (前提:网格单元包含目标)
  • 每个框特定类别置信度分数
    Pr(Classi | Object) * Pr(Object) * IOU_pred truth = Pr(Classi) * IOU_pred truth

注意:这些分数既是对该类出现在框里的概率的编码,也是对预测的框与目标匹配程度的编码

3.3 损失函数

共分为3类损失:坐标损失(localization)、置信度损失(confidence)、分类损失(classification)

1)置信度和分类预测损失不多说:

置信度损失 = 对于obj负责的box(1)来预测损失(第一行)+ 不对obj负责的box(1)预测损失(第二行)

简而言之:

  • 第一行: 负责检测物体的那个框的置信度误差。
  • 第二行: 不负责检测物体的那个框的置信度误差。

分类损失 = 对obj负责的框预测损失

2)这里最需要注意的就是坐标损失

正常情况下:我们总秉持着一视同仁的原则,但这会给YOLO的坐标损失带来很大的误差

可现实情况不允许,存在着大小框。

如果大框的损失大一点,不会带来什么问题,bounding box肯定也还会在物体周围,

但是如果小框的损失一大,那么bounding box会带来巨大的偏差

采用了开根号处理,让小框损失权重更大,惩罚机制就会对小框损失的惩罚加重。

参考文章:https://blog.csdn.net/weixin_43334693/article/details/129011644

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风的暖色调

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

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

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

打赏作者

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

抵扣说明:

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

余额充值