赞
踩
YOLO v1~v3都是由YOLO之父Joseph Redmon大神提出,YOLO v1首次将检测问题制定为回归问题,在此之前都是采用分类的方式来解决目标检测问题(例如RCNN系列),YOLO v1的最大优势就是速度快;v2在v1的基础上针对检测精度进行改进,v3结合当时一些新颖的技术对v2做了一些重要的改进,被作者谦虚地戏称为TECH REPORT。
在yolo v1提出之前,RCNN系列的检测步骤大体为:“生成候选区域–>特征提取–>分类器判断类别–>非极大值抑制筛选–>边界框位置精修”,步骤比较繁琐,相应的推理速度也比较慢。YOLO v1开创性地使用单个神经网络直接预测边界框和物体类别,整体流程只包含“图像resize–>神经网络预测–>非极大值抑制”三个步骤,检测速度极快。
将目标检测指定为回归问题的主要思想如下图所示:
简单点说,就是将输入图像划分为
S
×
S
S×S
S×S个网格,如果物体的中心落在某个网格内,那么这个网格就负责检测该物体。每个网格预测B个边界框和一个类别概率,其中每个边界框预测x,y,w,h,confidence共5项,因此最终的预测为size为
S
×
S
×
(
B
∗
5
+
C
)
S×S×(B*5+C)
S×S×(B∗5+C)的tensor。
YOLO v1所使用的网络结构如下,输入图像尺寸为448×448,经过一系列卷积层、池化层和全连接层后得到4096的特征向量,然后重排为7×7×30的tensor,即7×7×(2×5+20),表示将图像划分为7×7个grid,每个grid预测B=2个边界框和20个类别概率
损失函数由位置损失、置信度损失和类别损失三部分组成:
需要注意的点如下:
大边界框和小边界框产生的宽高误差需要区别看待,因为同样的误差(10个像素),对于大边框(200×100像素)来说可能偏差很小,但是对于小边界框(20×10像素)来说偏差会比较大。因此,在求宽高损失时使用了平方根,尽可能地消除大尺寸边界框与小尺寸边界框之间的差异。
(图片来源:https://zhuanlan.zhihu.com/p/115759795)
由于图像中大多数grid不包含待检测物体,包含待检测物体的grid占比很小,因此需要增大其损失的比重。论文中设置 λ c o o r d = 5 \lambda_{coord}=5 λcoord=5, λ n o o b j = 0.5 \lambda_{noobj}=0.5 λnoobj=0.5
根据图像的宽度和高度将边界框的宽度w和高度h归一化到0~1之间,回归偏移量代替直接回归坐标,使得预测的x,y也落在0到1之间。将参数限制在0到1之间能够降低网络学习难度,加快网络收敛速度。
每个grid会预测两个或多个边界框,但是在训练时,只对和gt最接近的边界框计算损失,这样设置后每个grid预测的多个边界框会出现功能分化,倾向于预测不同大小和宽高比。
v2在v1的基础上引入了各种trick,做到better,faster和stronger
提出了一个新的backbone–Darknet-19,对于224×224的输入,FLOPs为8.52 billion,相比VGG的30.69 billion要快得多。
分类与检测联合训练:当输入是检测数据集时,整个loss执行反向传播;当输入是分类数据集时,只计算分类loss并进行反向传播。
由于检测数据集中包含的都是狗或猫这样的大类,但是分类数据集中包含了不同品种的猫狗,因此作者提出了WorldTree来合并类别。
[1] You Only Look Once: Unified, Real-Time Object Detection
[2] YOLO9000:Better, Faster, Stronger
[3] YOLOv3: An Incremental Improvement
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。