目录
1、extended effificient layer aggregation networks
2、model scaling for concatenation-based models
3、trainable bag-of-freebies(重要、可在此处改进)
3.1、planned re-parameterized convolution
1、YOLO v7 介绍
主要是对YOLOv4 和 YOLO v5 进行的改进,主要突出在速度之快。
如此之快的目的就是为了做到在边缘设备上做推理计算!
GPU/NPU边缘架构:在YOLOv7 文章中,作者提出的实时目标探测器能够更好地支持边缘移动端 GPU 设备和高算力 GPU 设备。特别是近几年来,实时探测器处在大力适配边缘设备的潮流中。如 MCUNet 和 NanoDet,专注于适配低功耗移动端,以提高边缘设备CPU的推理速度。对于YOLOX 和 YOLOR 等算法,他们专注于提高检测器在GPU上的推理速度。近年来,实时探测器的发展主要集中在高效的结构设计上。
CPU 边缘架构:对于可以在CPU上使用的实时探测器,骨干设计基于MobileNet,Shufflenet 或 Ghostnet。
高算力GPU/NPU:另一些主流的实时检测器是为GPU开发的,它们主要使用ResNet, DarkNet或DLA,然后借鉴CSPNet中的跨级策略来优化架构。
Bag-of-freebies:除了架构优化外,作者提出的方法还集中在训练过程的优化,以提高检测器的准确性,但不增加推理耗时。作者称所提出的模块和优化方法为可训练的免费礼包( bag-of-freebies)。
2、模型改进
1、extended effificient layer aggregation networks
这个就和YOLOv4 和YOLOv5 很像从 depth、width 等方面去缩放。
2、model scaling for concatenation-based models
3、trainable bag-of-freebies(重要、可在此处改进)
3.1、planned re-parameterized convolution
尽管RepConv在 VGG上取得了优异的性能,但将它直接应用于 ResNet 和 DenseNet 或其他网络架构时,它的精度会显著降低。作者使用梯度传播路径来分析不同的重参化模块应该和哪些网络搭配使用。通过分析 RepConv 与不同架构的组合以及产生的性能,作者发现 RepConv 中的identity 破坏了 ResNet 中的残差结构和 DenseNet 中的跨层连接,这为不同的特征图提供了梯度的多样性。(写论文是改进方向)
3.2、辅助训练模块
深度监督是一种常用于训练深度网络的技术,其主要概念是在网络的中间层增加额外的辅助头,以及以辅助损失为指导的浅层网络权重。即使对于像ResNet和DenseNet这样收敛效果好的网络结构,深度监督仍然可以显著提高模型在许多任务上的性能(这个和Nanodet Plus相似,按笔者理解可以当成是深层局部网络的ensemble,最后将辅助头和检测头的权重做融合)。图(a)和(b)分别显示了“没有"和“有"深度监督的目标检测器架构,在本文中,作者将负责最终的输出头称为引导头,将用于辅助训练的头称为辅助头。
4、其他可训练的bag-of-freebies
Batch normalization:目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏差和权
重中。
YOLOR 中的隐式知识结合卷积特征映射和乘法方式:YOLOR中的隐式知识可以在推理阶段将计算值简化为向量。这个向量可以与前一层或后一层卷积层的偏差和权重相结合。
EMA Model:EMA是一种在mean teacher中使用的技术,作者使用 EMA模型作为最终的推理模型。
正样本分配策略是 YOLOv5 和 YOLOX 合并而来的。
怎么样成为一个正样本?
两个阶段:初筛、复筛。
对于每一个候选框,都会算出来一个损失,这个损失是一会要做筛选时用到的。所以说,初筛对每一个anchor(特征图上产生的每一个点),它产生的一个一开始初始框都要设置一个损失,这个损失是由上述三个因素综合决定的。IOU是初筛的核心,它的权重更大。
下面这一点和V5 版本有点像。
AUX辅助输出
解释:比如我想让一个人DOTA玩的特别好,可以加上一些辅助,也训练训练这个人打英雄联盟,因为它们两个比较相似。同时训练两件事。
1)输出更大,这回1280,但是上来就得下采样也是得到 640 实际输入(1280 * 1280 的一张图,拆成 640 * 640 的四张图,在 channel 这个维度上去增加了),和最大池化相比优势(最大池化过于绝对,这个是都留着,但是放在不同的图当中);
2)4 个输出层,每层还是 3 个 anchor,这回一共得 4 * 2 = 8 个输出层了;这个辅助输出是干什么的(我们可以理解为我们要额外引入4个输出层(辅助头),还有四个输出层(主头),它们八个都要去匹配正样本,为什么有主次之分,辅助头在训练的时候有,测试的时候就没有了,所以辅助头也用主头的预测值)
3)但是辅助头在选择正样本时仍使用主头的预测结果;
4)为了增加召回,选择了周围5个区域,也就是偏移量由 0.5->1