文章目录
前言
论文地址:yolov1
- YOLOv1(You Only Look Once version 1)是由Joseph Redmon等人于2016年提出的一种单阶段(one-stage)目标检测算法。
- 它的核心思想是将目标检测问题转化为回归问题,通过单个神经网络直接预测图像中物体的类别和位置。
核心思想
- 检测视为回归问题:YOLOv1将目标检测视为一个单一的回归问题,通过一次前向传播就能预测出图像中所有物体的类别和位置。
- 网格划分:将输入图像划分为S×S的网格(grid cell),每个网格负责预测B个候选框(bounding box)以及这些候选框的置信度和C个条件类别概率。
网络结构
网络结构借鉴了 GoogLeNet 。24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代GoogleNet的 inception modules )。
最后网络输出的是7730的tensor。
算法原理
- 在yolov1将作者将一个448x448的原图片分割为7x7=49个grid cell;
- 每个grid cell预测预测一个物体,每个grid cell有B个Bounding box,每个Bounding box包含的坐标信息和置信度信息,以及该grid cell包含的目标物体属于C个class类别中某一类的概率(训练数据集为voc2012,包含20个class类别,C=20),所以每一个grid cell对应 5x2+20=30个预测参数。
通用公式: SxS个网格,每个网格要预测B个bounding box还要预测C个categories,输出就是S x S x (5×B+C)的一个tensor。
注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的;
从上图可以看出经过卷积神经网络输出的是一个7 x7 x30的tensor;每一个gride cell中可以预测两个目标,上图中的边界框1和边界框2 分别代表两个目标的位置信息和置信度信息;
算法流程
- Resize成448 x448,图片分割得到7 x7网格(gride cell)。
- CNN提取特征和预测:卷积部分负责提取特征,全连接部分负责预测。
- 过滤bbox(通过nms)
关于标定框
- 网络的输出是S x S x (5*B+C) 的一个 tensor(S-尺寸,B
标定框个数,C-检测类别数,5-标定框的信息)。 - 5分为4+1: 4代表标定框的位置信息。框的中心点(x,y),框的高宽h,w;
- 1表示每个标定框的置信度以及标定框的准确度信息。
框的中心点 (x,y)的解释
表示Bounding box预测框的中心坐标相较于该Bounding box的中心点归属于grid cell左上角的偏移量,取值在0-1之间。如下图,绿点是grid cell的左上角(0,0),红色和蓝色框是该grid cell包含的2个Bounding box,二者中心坐标分别为红点和蓝点。二者的(x,y)分别是(0.5,0.5)和(0.9,0.9)
注意:Bounding box的中心坐标一定是在其对应grid cell里面,因此红点和蓝点的坐标可以归一化到0-1之间。
框的宽高(w,h)的解释
表示Bounding box预测框的宽和高相对于原图片宽和高的比例。yolov1输入图像是448*448,假设Bounding box预测框的宽和高是44.8个像素,则w=0.1,h=0.1。
置信度 c的解释:
置信度confidence,用于表征网格中是否有目标物的概率以及预测的边框位置的准确度。对于边界框位置的准确度,通常(使用预测的Bounding box与物体真实的边界框的)交并比IoU(Interaction over Union)来衡量。IoU越接近于1,表明目标物边框与边界框重合度越高。置信度计算公式为:
P r ( o b j e c t ) ∗ I O U p r e d t r u t h Pr(object)*IOU^{truth}_{pred} Pr(object)∗IOUpredtruth
- 边代表包含这个标定框的格子里是否有目标。有=1,没有=0。
- 右边代表标定框的准确程度,右边的部分是把两个标定框(一个是Ground truth,一个是预测的
标定框)进行一个IOU操作,即两个标定框的交集比并集,数值越大,即标定框重合越多,越准确。
class类别概率详解
我们可以计算出各个标定框的类别置信度(class-specific confidence scores/ class scores):表达的是该标定框中目标属于各个类别的可能性大小以及标定框匹配目标的好坏。
每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score。
P
r
(
C
l
a
s
s
i
/
o
b
j
e
c
t
)
∗
P
r
(
o
b
j
e
c
t
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
=
P
r
(
C
l
a
s
s
i
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
Pr(Class_i/object)*Pr(object)*IOU^{truth}_{pred} =Pr(Class_i)*IOU^{truth}_{pred}
Pr(Classi/object)∗Pr(object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth
损失函数
yolov1损失函数包括三部分:边界框损失(Bounding box loss)、置信度损失(confidence loss)和分类损失(classification loss),其中置信度损失又可以细分为包含目标的Bbox的置信度损失和未包含目标的Bbox的置信度损失两种。计算方法如下:
坐标损失
其中,
- 前半部分表示负责检测目标物的Bounding box中心点定位误差。
- 后半部分表示负责检测目标物的Bounding box宽高定位误差。
注意:这里对宽和高的损失处理分别取了根号,因为如若不取根号,损失函数往往更倾向于调整尺寸比较大的预测框。例如20个像素点的偏差,对于800x600的预测框几乎没有影响,此时IoU值还是很大,但是对于30x40的预测框影响就很大。取根号就是为了尽可能消除大尺寸框和小尺寸框之间的差异。其本质也就是尺度归一化。
置信度损失
- 前半部分表示负责检测目标物的Bounding box的置信度损失。
- 后半部分表示不负责检测目标物的Bounding box的置信度损失。
分类损失
- 表示负责检测目标物的grid cell的分类损失。
优缺点
- 优点:
检测速度快,能够实现实时检测。
泛化能力强,能够应用于新的领域和输入。 - 缺点:
对小目标和密集目标的检测性能较差。
每个网格只能预测一个物体,无法处理一个网格中存在多个物体的情况。
如有错误欢迎指正,如果帮到您请点赞加收藏!
关注我的微信公众号:回复"深度学习资料"领取深度学习相关资料(100本人工智能书籍),实时更新深度学习相关知识!