YOLOV1
论文思想:
- 将一副图像分成SXS个网络(grid cell),如果某个object的中心落在这个网格中,则这个网络就负责预测这个object
- 每个网格要预测B个bounding box ,每个bounding box除了要预测位置之外(x,y,w,h 其中x,y表示针对于中心网格所处的位置,范围处于0-1之间,w,h是物体与整个图像而言之间的比值,范围也是处于0-1之间),还要附带预测一个confidence值(
P
r
(
O
b
j
e
c
t
)
∗
I
O
U
p
r
e
d
i
c
t
t
r
u
t
h
P_r(Object)*IOU_{predict}^{truth}
Pr(Object)∗IOUpredicttruth),每个网格还要预测C个类别分数。
最终计算的时候我们计算的是目标概率乘上每个网格的置信度,即 P r ( C l a s s ) ∗ I O U p r e d t r u t h P_r(Class)*IOU_{pred}^{truth} Pr(Class)∗IOUpredtruth
损失函数
-
bounding box损失
λ c o o o r d ∑ i = 0 S 2 ∑ j = 0 B I i j o b j [ ( x i − x i ^ ) 2 + ( y i − y i ^ ) 2 ] + λ c o o o r d ∑ i = 0 S 2 ∑ j = 0 B I i j o b j [ ( w i − w i ^ ) 2 + ( h i − h i ^ ) 2 ] \lambda_{cooord}\sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{obj}[(x_i-\hat{x_i})^2+(y_i-\hat{y_i})^2]+\lambda_{cooord}\sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{obj}[(\sqrt{w_i}-\sqrt{\hat{w_i}})^2+(\sqrt{h_i}-\sqrt{\hat{h_i}})^2] λcooord∑i=0S2∑j=0BIijobj[(xi−xi^)2+(yi−yi^)2]+λcooord∑i=0S2∑j=0BIijobj[(wi−wi^)2+(hi−hi^)2]
由于x,y表示的是相对位置,而w,h表示的是相对大小,针对于不同大小的目标而言,偏移相同的距离,小目标产生的误差比大目标要大,因此我们需要更加关注小目标的情况,所以我们可以进行开根号处理 -
confidence损失
∑ i = 0 S 2 ∑ j = 0 B I i j o b j [ ( C i − C i ^ ) 2 + λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B I i j n o o b j ( C i − C i ^ ) 2 \sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{obj}[(C_i-\hat{C_i})^2+\lambda_{noobj}\sum_{i=0}^{S^2}\sum_{j=0}^BI_{ij}^{noobj}(C_i-\hat{C_i})^2 ∑i=0S2∑j=0BIijobj[(Ci−Ci^)2+λnoobj∑i=0S2∑j=0BIijnoobj(Ci−Ci^)2 -
class损失
∑ i = 0 S 2 I i j o b j ∑ c ∈ c l a s s ( p i ( c ) − p i ^ ( c ) ) 2 \sum_{i=0}^{S^2}I_{ij}^{obj}\sum_{c\in class}(p_i(c)-\hat{p_i}(c))^2 ∑i=0S2Iijobj∑c∈class(pi(c)−pi^(c))2
其中 I i o b j I_i^{obj} Iiobj表示第i个网格中是否存在物体, I i j o b j I_{ij}^{obj} Iijobj表示利用第j个标定框取预测第i个网格。
YOLOv1存在的问题
(YOLOv1算法定位不准确导致)
- YOLOv1本身对边界框较为敏感(SXS的格子中,每个格子只预测两个边界框,并且每个边界框只预测一个类别),当出现鸟群的时候,预测效果不是很好。
- YOLOv1的边界框中本身是从数据中提取边界框的大小尺寸,所以当数据的尺寸发生变化的时候,效果并不是很好。
YOLOV2
YOLOv1版本本身的召回率和定位的效果交叉,因此YOLOv2版本主要用于解决此类问题,做出了以下七点尝试。
-
归一化处理
可以帮助模型收敛,对模型进行正则化处理,且Dropout层可以移。
-
高分辨率分类器
与传统的采用224X224的分类器不一样,我们主要采用448X448的分辨率,可以提高4%的mAP。
-
基于anchor的目标边界框预测
去预测偏移而不是坐标可以简化模型,并且让网络更加容易去训练,此时map下降了0.3%但是召回率上升了7%,召回率上升意味着有更大的改进空间。大的物体,往往占据图像的中心位置,所以最好在中心位置有一个位置来预测这些物体
-
边界框聚类
采用K-means聚类的方式来anchor的大小,获得先验知识,因为当先验框的效果更好,网络的预测效果也更好。 -
直接位置预测
当直接对位置进行预测的时候,每个网格左上角的边界框可能不是预测自己本身,因此会导致模型的不稳定性,我们仍然可以预测其中的偏移,将数值规定在0-1之间,这样可以使模型更加的稳定。 -
细腻度特征
利用passthrough layer将图像的尺寸变为原来的1/4,通道数变为原来的四倍,可以不减少图像的信息,并且去结合更底层的信息,知道图像更多的细节。 -
多尺度训练
由于v1网络中采用了固定分辨率大小的图片,因此当输入的数据发生变化的时候,训练的效果不是很好,早v2中每迭代10次,随机的更换模型的输入分辨率,模型的鲁棒性效果更好。