【目标检测】(6) YOLOV2 目标检测在V1基础上的改进

各位同学好,今天和大家分享一下 YOLOV2 目标检测算法的原理,建议大家先学习一下 YOLOV1,可以看我的上一篇文章:https://blog.csdn.net/dgvv4/article/details/123767854

YOLOV1 尽管速度非常快,但精度低,定位性能较差,召回率低,检测小目标和密集目标的效果较差。因此 YOLOV2 做了如下的改进


1. Batch Normalization

Batch Normalization 将神经元的输出减去均值除以标准差,变成以0为均值,标准差为1的分布。由于很多激活函数,如 sigmoid 和 tanh 函数在0附近是非饱和区,如果激活函数的输入太大获太小的话,就陷入了激活函数的饱和区,导致梯度消失,难以训练使用 Batch Normalization 强行将神经元的输出集中到0附近。

Batch Normalization 在模型训练阶段和测试阶段不同。

在训练阶段,如果batch_size=32时,即每个batch处理32张图片,每张图片经过一个神经元都会输出一个响应值,那么某层的某个神经元就会输出32个响应值;对这32个响应值求均值、标准差、再做标准化;将标准化之后的响应乘以\gamma再加上\beta,其中每个神经元都需要训练一组\gamma, \beta这样就将神经元的输出限制在以0为均值且1为标准差的分布中,输出限制在非饱和区加快收敛,防止过拟合。

在测试阶段,均值、方差、\gamma\beta 都使用训练阶段全局求出的结果。例如测试的均值使用训练阶段很多batch的均值的期望

公式如下,\epsilon 是一个很小的数,防止分母为0,

BN(X_{test}) = \gamma \frac{X_{test}-\mu _{test}}{\sqrt{\sigma _{test}^{2}}+\epsilon } + \beta


2. 高分辨率的分类器

一般的图像分类网络都是以较小的分辨率在imagenet数据集上训练的,如224*224。而YOLOV1的模型输入图像的分辨率是448*448,那么在较小分辨率下训练的网络再拿到大分辨率的目标检测模型中去训练,网络训练时就需要从小分辨率切换到大分辨率,导致性能的降低。YOLOV2直接在448*448的图像分类数据集上训练骨干网络,使网络适应大分辨率,提高了3.5%的map


3. 先验框

在YOLOV1中,图像被划分成7x7的网格,每个网格生成2个预测框,哪个预测框和真实检测框的IOU交并比大,那个预测框就负责拟合真实检测框,交并比小的预测框就被淘汰了。两个预测框没有长宽限制,都是随机变化的。而在YOLOV2中预测框有了初始的参考框,预测框只需要在原有的位置上微调,调整偏移量就可以了。

在YOLOV2中一张图片被划分成13*13个网格,每个网格有5种长宽尺度大小不同的先验框,即5种不同的长宽比。每个先验框对应一个预测框,预测只需要输出预测框相对于先验框的偏移量。

人工标注的真实检测框的中心点落在哪个网格内,就应该由该网格中产生的先验框中与真实检测框IOU交并比最大的那个先验框来预测,预测结果是预测框相较于自己的先验框的偏移量


4. 模型输出结果

在YOLOV1中没有使用先验框,图片被划分成7*7的网格,每个网格生成2个预测框,每个预测框包含4个位置参数和1个置信度参数,每个网格有包含20个分类类别的条件概率因此每个网格有5+5+20个参数模型输出特征图的shape就是[7,7,30]

在YOLOV2中,图片被划分成13*13的网格,每个网格生成5个先验框,每个先验框包含4个位置参数、1个置信度参数、20个类别的条件概率。因此每个网格有5*(4+1+20)=125个参数模型输出特征图的shape就是[13,13,125]

如下图,模型输入图像shape为[416,416,3],经过一系列卷积操作,输出 13*13*125 的tensor,每个网格包含5个先验框,每个先验框有(5+20)*5个参数


5. 预测框微调

模型输出 预测框相较于先验框的偏移量坐标偏移量(tx,ty),宽高偏移量(tw,th)。其中(tx,ty)可以是从负无穷到正无穷的任何数,为了防止坐标偏移过大,给偏移量添加sigmoid函数 \sigma (tx),将坐标偏移量限制在0-1之间,将预测框的中心点限制在它所在的网格内

如下图,(cx,cy)是先验框中心点所在的网格的左上坐标(归一化后的坐标)(pw,ph)是和真实框交并比最大的先验框的宽高。由于目标物体可能很大,预测框也很大,将先验框的宽高乘以指数ex


6. 损失函数

YOLOV2 遍历了13*13个网格的所有预测框,

(1)第一项是置信度误差。先验框和真实检测框的IOU交并比是否小于阈值。小于则为1,否则为0。将先验框和检测框的中心点重合计算交并比。让不负责预测物体的先验框的置信度越接近0越好

(2)第二项是预测框与先验框的位置误差。判断是否是前12800次迭代,是否是模型训练的早期。满足则为1,否则为0。让先验框的位置参数(x,y,w,h)与预测框的位置参数尽量接近

(3)第三项是IOU最大的先验框负责检测物体。是为1,否为0。这里假设真实检测框由IOU最大的先验框预测对于那些IOU大于阈值但非最大值的先验框,就忽略它的损失定位误差要求真实检测框的位置和预测框的位置尽可能接近,置信度误差要求先验框与真实框的IOU和预测框的置信度尽可能一致,分类误差要求真实框的类别和预测框的类别尽可能一致。


7. 细粒度特征

把浅层的网络输出的特征图分成两个分支,一个分支卷积操作,另一个分支将特征图拆分成四份并在通道维度上堆叠,将两个分支叠加,那么该特征图既包含了底层的细粒度信息,以及经过卷积后的高层的信息。整合了不同尺度的信息,有利于小目标的检测。

拆分方法等同于YOLOV5的focus方法,如下图,将一张特征图变成四张,每张特征图的长宽缩减为原来的一半,通道数变成了原来的四倍

猜你喜欢

转载自blog.csdn.net/dgvv4/article/details/123772756