深度学习(26)——YOLO系列(5)

深度学习(26)——YOLO-v7(5)

咱就是说,需要源码请造访:Jane的GitHub在这里


不知不觉YOLO系列已经出了四篇了,原本想着两三篇就差不多了,但是奈何YOLO是个大家,学都学不完,今天是YOLOv7理论,所以熟悉的可以预测到下一个就是v7代码了。

絮絮叨叨

在我们的认知中训练和推理(预测)的网络一定要是一样的,但是YOLO-v7即将颠覆我们的认知,训练和推理的网络可以不同。为了提高推理的效率,YOLO-v7在推理过程中做了两个改进

  • 一般情况一个convolution层(conv层)后加一个batchnormalization(BN层),将两者融合为一个conv层计算
  • VGG在2014年提出一个观点因为英伟达底层的原理,3 * 3的卷积效果和计算速率是所有卷积中效果最好的,所有YOLO-v7在推理过程中将所有卷积都替换为3 * 3卷积

1. conv和BN的融合

  • batchnormalization是将一个channel的数值标准化,使其尽量集中在一个片区
    【BN的计算公式↓】 其中γ和β是两个可学习的变量,γ控制缩放,β控制偏移,尽可能让一个channel都集中在(0,0)
    在这里插入图片描述

  • 怎么融合呢??

    • 卷积的格式无非是y=wx+b,将上式拆开↓,可以发现和卷积有相同的格式:在这里插入图片描述
      在这里插入图片描述
    • 卷积以后BN在这里插入图片描述
    • 整合以后可以得出整合后的w和b是下面这样,就可用这样的卷积实现了在这里插入图片描述

2. 3*3卷积的替换

YOLO-v7中除了3 * 3就是1 * 1 的卷积了,所以这里其实就是怎么将1 * 1的卷积转化成3 * 3卷积:

(1)1*1卷积有什么作用?

这个问题是前段时间ly留给我的问题,当时只想到了升维降维和特征提取,今天查了一下详细记录:具体大家可以参考这篇:blog

  • 降维和升维
  • 跨通道的特征整合
  • 增加非线性特性,在保持特征尺度不变的情况下,将网络做的更deep
  • 减少计算量

(2)怎么将1 * 1卷积核转化为3 * 3卷积核

将11卷积周围加padding就可,需要注意的是原图也要在周围增加padding。计算方式是一样的。
残差连接的方式使用的卷积也不是直接拿来,乘以一个对角元素都为1的3
3卷积即可

3. 正样本分配策略

(1)什么是正样本匹配??

特征图中每个点都会有预测结果,为了提高效率,只有正样本参与loss的计算,那哪些是正样本呢?
距离groundtruth中心点附近的点才是正样本

(2)为什么要用正样本匹配?

甲方可能希望你无论检测的效果如何,都希望你能检测出来,就是希望recall值提高,所以在前期不想YOLOv5等前期版本只有一个正样本,这里给正样本更多选择(lead有三个点,aux有五个点)。

(3)lead的三个点

假设蓝色的点是距离groundtruth最近的点,那么对他进行0.5的偏移就到了他的右侧和下册,所以就又多了两个点,一共三个点。
在这里插入图片描述

(4)aux的五个点

和上面类似,为什么是五个点呢,aux采用的偏移量是1,所以上下左右都是正样本,一共五个

(5)最后的loss和哪些正样本有关?

以lead为例,根据上述得到的三个点对对候选框做选择,怎么选呢?

  • 初筛:0.25<groundtruth与anchor长宽比例<4
  • 计算IOU
  • 计算类别预测损失

根据上述损失排名后选择topk,但是有时会出现断崖式下降的,所以将topk进行累加后重新定义k(如:如果之前的k为10 ,累加后和为7的k变为7,累加和为5将k更新为5)

4. AUX辅助头

  • YOLO-v5的输入size是640,YOLO-v7中可以取1280,间隔取值,将12801280的特征间隔1转化为4个640640的特征图,在channel维度增加了,进网络的时候还是640,隐性的增大了图片尺寸
  • 原本有四个输出层,现在每个输出层都有一个辅助输出头,相当于增加了一个输出,一共有8个输出层

5. 网络结构

在这里插入图片描述
里面没有很亮眼的地方,就是特征的拼接,和YOLO-v5有很多地方都是异曲同工,SPP思想和PAN思想,可以看上篇。
今天又是充实的一天,先这样,886!

猜你喜欢

转载自blog.csdn.net/qq_43368987/article/details/131380404