赞
踩
1、YOLOv1的核心思想就是:网络将整张图像作为输入,并直接在输出层回归得到bounding box的位置和类别,即one-stage的思想;
2、而Faster RCNN的思想:先通过RPN网络提取proposals,再通过两个分支进行bbox回归和bbox分类,即two-stage的思想;
由于是one-stage的思想,但是又需要去预测出bbox和对应类别,因此使用了划分为S
×
\times
×S个网格grid的方式,每个grid负责预测B个bounding box,还要预测B个对应的置信度分数confidence,以及每个grid对应的C个类别概率。因此每个网格预测得到的向量维度为4
×
\times
×B+B+C,最终得到的预测特征图应该为S
×
\times
×S
×
\times
×(5B+C)。
B个bounding box(使用[x, y, w, h]四个值表示即可):需要注意的是,[x, y, w, h]需要归一化到0-1之间,坐标的x,y用对应网格的offset归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。例如,输入图像的宽和高为width和height,该网格grid cell的坐标为(x0, y0),则预测出的bbox的坐标应进行如下归一化:
confidence可以用来表示grid cell / 预测出的bbox是否含有object,以及预测的object有多准确两个信息,Pr(object)表示的是grid cell是否包含object,如果包含为1,否则为0。因此,如果包含object,confidence的值就是预测的bbox和GT之间的IoU值
注意预测的C个类别信息是针对每个grid cell的,而confidence信息是针对每个bounding box的。
网络包含24个卷积层和2个全连接层,YOLOv1的最后一层采用了线性激活函数
ϕ
(
x
)
\phi(x)
ϕ(x),其它层采用了Leaky ReLU。两个全连接层:第一个全连接层将输入特征图展平,输出通道数为4096;第二个全连接层输入通道数4096,输出通道数为7
×
\times
× 7
×
\times
× 30=1470。
网络的输入为448 × \times × 448(注意:由于该网络中全连接层已经固定,因此输入只能为448 × \times × 448)。
损失函数由三部分组成:位置损失、置信度损失、分类损失,都采用sum-squared error计算
a)预测出的bbox由四个值就可以表示:(x, y, w, h),于是我们可以通过计算预测值与GT之间的误差平方和作为损失函数。
b)但是需要注意的是,不是所有的bbox都要参与loss的计算,只有第i个网格内包含object且该网格中预测的B个bbox中与GT bbox具有最大的IoU的第j个bbox才会参与loss的计算。则其余的bbox不参与loss的计算。损失函数中
1
i
j
o
b
j
1_{ij}^{obj}
1ijobj就表示这个意思。
c)对不同大小的bbox预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。因此损失函数中的w和h的两项采用了
w
\sqrt{w}
w
和
h
\sqrt{h}
h
来计算。可以看出,同样的偏移,小bbox对应的损失会更大,会使网络更关注于小bbox。
a)首先对于所有的grid cell的所有bbox都要计算预测的confidence与GT之间的损失
b)对于包含object的grid cell来说,置信度分数的ground truth为
C
i
=
1
×
I
O
U
p
r
e
d
t
r
u
t
h
C_i = 1 \times {IOU}_{pred}^{truth}
Ci=1×IOUpredtruth ,也就是说由于预测出的bbox是变化的,所以训练过程中GT是需要不断地进行计算的
c)对于没有object的grid cell来说,置信度分数
C
i
=
0
C_i=0
Ci=0,也需要进行损失函数的计算
分类损失是只针对包含object的grid cell进行计算,因此GT值就是该object的类别
推理和预测过程中,输入图像得到预测结果,进行后处理:
对于C个类别中的每个类别,进行如下操作:
a)计算该类别的每个bbox的class specific confidence score,低于设定的阈值的bbox,将其score设为0,即删除掉该bbox
b)对其余的bbox进行score的排序,从高到低选择bbox,进行如下操作:首先将该bbox添加到输出列表;然后遍历其余bbox(score为非0且不在输出列表的)并计算二者之间的IoU值;最后,根据IoU阈值,高于阈值的bbox的score设为0
c)执行b操作直到所有的bbox要么在输出列表,要么score为0时,该类别的NMS结束
遍历完C个类别,NMS最终的结果就是输出列表中的bbox
优点:
缺点:
BN层的作用:在训练过程中,网络每层输入的分布一直在改变, 会使训练难度加大,对网络的每一层的输入(每个卷积层后)都做了归一化,这样网络就不需要每层都去学数据的分布,收敛会更快。
1.选择K个样本作为初始聚类中心
2.对于数据集中每个样本,计算它到K个聚类中心的距离,并将其分到距离最小的聚类中心所对应的簇中
3.对于K个聚类后的簇,重新计算它的聚类中心
4.重复上面的步骤2和3,直到达到某个终止条件(迭代次数、最小误差变化)
d(box, centroid) = 1 − IOU(box, centroid)(box:其他框, centroid:聚类中心框)
softmax:1)用于单标签的多分类问题,即从多个分类中选取一个正确答案。 Softmax 综合了所有输出值的归一化,因此得到的是不同概率之间的相互关联 。2)各类别概率之和为1 ,也就是说我们加大某一类别的概率必然导致其他类别减小——各类别之间相互关联,是互斥的。
sigmoid:1)用于多标签的多分类问题,可以选取多个标签作为正确答案,它是将任意实数值归一化映射到[0-1]之间,2)各类别概率之和则不一定为1 ,各个输出值依次独立的经过激活函数的映射,某一个类别概率增大可能也伴随另一个类别概率增大——各类别之间相互独立,不互斥。
例如:
多标签问题:一部电影即是剧情片又是爱情片,各类别之间不互斥——sigmoid;
多分类问题:一个动物图谱只能是一类动物,各类别之间互斥——softmax;
1)验证了大量先进的技巧对目标检测性能的影响
2)
1)将Leaky ReLu激活函数替换为Mish激活函数
2)将DarkNet53的每个stage中的结构修改为CSP,即上图中的ResBlock_body:两个分支,分别使用两个卷积split_conv0, split_conv1,一个分支是做原始的残差块的堆叠,另一分支连接到最后;两个分支的特征图进行cat并经过一个1*1卷积得到最后结果。
YOLOv4:https://blog.csdn.net/weixin_43334693/article/details/129248856
YOLOv5:https://blog.csdn.net/weixin_43334693/article/details/129312409
参考链接:
YOLO学习笔记——第一篇YOLOv1
【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)
YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5、YOLOv6、YOLOv7
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。