yolov7 paper阅读笔记

2023-11-08

不同于现有的主流方法,yolov7的主要改进点在优化训练过程,
包括优化modules 和 优化方法,这些会加强traing cost从而提高object detect的accuracy, 但是不会提高inference cost(时间开销),

这个改进方法和优化方法叫做trainable bag-of-freebies。

最近,模型的re-parameterization和动态label assignment在模型训练和object detection中都是重要话题。

yolov7因此Propose了planned re-parameterized model
根据动态label assignment存在的问题:怎么给多个output layers branches分配动态的targets,yolov7提出了coarse-to-fine lead guided label assignment.
compound scaling,
可减掉40%的参数和50%的计算量。

model re-parameterization
相当于组合了多个计算的modules into one at inference stage.
分为module-level 和 model-level.
model level的有2种常用的方法:
1.用不同training data训练同一模型,得到多个weight, 求这些weight的平均
2.把不同迭代次数的weight求平均
但设计好的一些re-parameterization方案并不适用于所有的网络结构,因此,yolov7重新设计了一个re-parameterization和相关的应用策略。

model scaling
根据计算设备的不同scale up or down一个模型
可scale的因素有:图像size, layer数量,channel数量,特征金字塔层数
这个方向network architecture search(NAS)可以自动搜索合适的缩放因子,缺点是计算量很大
目前这个方向的方法都是在研究各个单独的缩放因素(假设各因素独立),而不是整体研究。
yolov7提出一个混合因素的缩放方案。

结构设计
目前很多设计实效性方案的考虑多是参数的数量,计算量等,
本文考虑的是梯度路径,参考CSPVoVNet和ELAN的结构,
因为ELAN中提出如何设计efficient network: 控制最短和最长的梯度路径,deeper net就可以learn和收敛更快。
然后yolov7在ELAN的基础上提出了Extended-ELAN(E-ELAN), 结构如下(真够复杂的):
在这里插入图片描述
在大规模的ELAN中,梯度长度和stacking number of computation blocks已经达到了一种稳定的状态,
如果继续增加computational blocks, 这种稳定的状态会遭到破坏,
proposed E-ELAN使用expand, shuffle, merge机制,在不破坏原有梯度path的基础上增强学习能力。

用group convolution来扩展channel和computation blocks的基数。
computational layer中所有的计算block共用相同的group parameter和channel multiplier。
得到的feature map会shuffle到g个组,然后连接起来,
每个group的channel数和原始结构的channel数是一样的。

model scaling for concatenation-based models
model scaling的目的在于满足不同的推断速度需要(计算量的不同)
级联模型只scale一个因素的话,会影响in-degree和out-degree, 见图,
所以,提出了同时scale几个factor, 比如图3的scale depth的时候,还要考虑到它对输出有什么变化,要同时scale width。
这样会保持模型最初的设计,保持最优的结构。

在这里插入图片描述
planned re-parameterized convolution
re-parameterization直接用在不同的网络,可能效果不好。
经过测试,发现RepConv不能用在ResNet结构中,如果用RepConv结构,就不用identity connection,
下面是测试的一些结构
在这里插入图片描述
deep supervision 与 head
deep supervision经常用在训练很深的网络,主要通过在网络中间层增加附加的head以辅助训练。
本文中,把和最终output相关的较lead head, 辅助训练的叫auxiliary head
在这里插入图片描述

label assignment
以前的训练是直接把output和ground truth的label直接结合起来
而最近通过output的分布等信息,和ground truth综合考虑,通过某种方法产生soft label,
比如YOLO就是通过把预测的边框和ground truth的IOU作为soft label。

目前存在的问题是还没有文献指出如何分配soft label给auxiliary head和lead head,
已有的方法是分别分配的,而yolov7是用lead head的预测值同时分配给auxiliary head和lead head
理由是认为lead head有更强的学习能力,学习出来的soft label更能表现data和target的关联性。
在这里插入图片描述
coarse to fine label
产生两种soft label, 即coarse label 和 fine label
fine label和lead head产生的soft label一样
coarse label就是把正样本的条件放松一些,让更多的grid被认为是positive target,
理由是aux head没有lead head那么强的学习能力,因此让更多的positive信息给它,集中在优化recall的方式。
最后的output会从高recall结果里选择高precision的。

但是要注意coarse label必须和fine label是接近的,
为了抑制不好的coarse positive,yolov7在decoder中加了一些限制,动态调整coarse label和fine label的比重,保证fine label的优化上边界始终比coarse label要高。

some tricks in training
conv-bn-activition中的BN, CNN与BN直接连接
把卷积层的feature map和YOLOR的implicit knowledge结合:把implicit knowledge在推断时提前计算,作为一个向量,这个向量可以和bias, 卷积层的weight相结合(加/乘)
EMA model,作为最后的inference model

不同的版本
yolov7-tiny(edge GPU), yolov7(normal GPU), yolov7-W6(cloud GPU)
yolov7-E6(proposed E-ELAN)
其中激活函数:
yolov7-tiny: ReLU, 其它:SiLU

baseline:
前一版本的YOLO和YOLOR

与前几版yolo的实验对比
在这里插入图片描述
Ablation study
scale:
综合scale width 和 depth 与 单独scale这俩的对比实验:
在这里插入图片描述
re-parameterized model:
验证级联和residual-based model,
选择3-stacked ELAN 和 CSPDarknet验证,
验证ELAN时,把3x3卷积放到不同的位置
在这里插入图片描述
验证dark block时,由于原来的block没有3x3卷积,因此重新设计了一个block进行验证
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

yolov7 paper阅读笔记 的相关文章

随机推荐

  • Java将Word转换成PDF

    最近项目需要做在线预览文档功能 要求对word文档后台转为pdf 遇到了很多问题 因此记录一下 网上有很多将Word转换成PDF的方式 这里我试了几种比较简单的方式 POI aspose spire和documents4j 1 POI PO
  • Mac OS : 源码安装nginx (不需homebrew)

    下载 nginx http nginx org download nginx 1 19 10 tar gz 解压到 usr local 下载 pcre https ftp pcre org pub pcre pcre 8 44 tar gz
  • 数据属性的类型

    数据属性的类型 原文 https blog csdn net qq 33457248 article details 79594782 数据集由数据对象组成 一个数据对象代表一个实体 数据对象又称样本 实例 数据点或对象 属性 attrib
  • 数据结构——链表练习题

    题目一 思路 双指针 当listA和listB其中一个位空时 两个列表就不存在相交 返回NULL 当listA和listB都不为空链表时 指针phead1和phead2同时分别遍历listA和listB 遍历完后 再去分别遍历listB和l
  • c++运算符优先级归纳

    C 一共有 18个优先级 运算中按优先级进行性计算 当优先级相同时 根据结合性规则来决定 结合性 1 从左到右 L R 操作数和操作符结合的顺序大部分是从左到右结合性的 例如 单独的算术运算符 2 从右到左 R L 最典型的是赋值运算符 当
  • lecture 8:OLS回归模型

    先学习这个资料 OLS自编算法 不调用函数 重要的英文参考资料 Using Python for Introductory Econometrics kevinsheppard讲授Python做计量 相关分析 1 相关系数的计算公式 r x
  • Java核心技术 卷Ι 1~2)Java 的基本程序设计结构、类和对象

    文章目录 一 Java 的基本程序设计结构 1 强制类型转换 2 检测字符串是否相等 二 类和对象 一 Java 的基本程序设计结构 1 强制类型转换 double x 9 99987 int i int x System out prin
  • 跟着代码随想录练算法——二叉树(JS)(下)

    跟着代码随想录练算法 二叉树 106 从中序与后序遍历序列构造二叉树 https leetcode cn problems construct binary tree from inorder and postorder traversal
  • HttpClient进行timeout设置及存活机制设置

    package com example demo config import lombok Data import org springframework boot context properties ConfigurationPrope
  • docker学习记录--使用Xshell连接docker上的Centos镜像

    1 下载docker https download docker com win stable Docker 20Desktop 20Installer exe 2 安装选择默认 3 配置以下国内镜像 registry mirrors ht
  • POJ 2456 疯牛(二分+贪心)

    疯牛 时间限制 1000 ms 内存限制 65535 KB 难度 4 描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000
  • 过拟合产生的原因和解决方案

    最近在研究室内定位的问题 总是过拟合 之前研究问题太过草率 这次计划将问题彻底的研究明白 过拟合 简单来说就是在训练集表现好 在测试集 验证集 表现差 从表现来看可以理解成模型复杂也好 还是你的数据有问题也好 总之最后模型学习到了你现在数据
  • vue 数组按时间排序

  • 一文理解Kafka如何保证消息顺序性

    要想实现消息有序 需要从Producer和Consumer两方面来考虑 如果对Kafka不了解的话 可以先看这篇博客 一文快速了解Kafka 针对消息有序的业务需求 还分为全局有序和局部有序 全局有序 一个Topic下的所有消息都需要按照生
  • 用spss做mk检验_SPSS中对问卷数据进行探索因子分析的详细操作与结果解读

    一 什么是探索因子分析 探索因子分析主要用于对问卷数据进行统计分析 通常我们在做问卷分析的时候 如果我们设计的题项没有明确的维度划分 而我们又需要了解这些题项的维度 这时我们就需要对这题项进行探索因子分析 通过在SPSS中进行探索因子分析
  • Docker世界 -- 基础篇(入门)

    一 Docker概述 1 1 Docker 为什么会出现 一款产品从开发到上线 从操作系统 到运行环境 在到应用配置 作为开发 运维之间的协作 我们需要关心很多东西 这也是很多互联网公司都不得不面对的问题 特别是各种版本的迭代之后 不同版本
  • Python 3 安装 redis 客户端

    1 去GIThub 上下载 redis py 2 然后进入源码目录 执行 sudo python3 setup py install 就可以了 这里踩了一个坑 就是我按照GITHub上介绍的方式 sudo python setup py i
  • 区块链矿工如何以七个步骤处理挖掘工作并进行交易

    你有没有想过区块链的挖掘过程如何进行的 或者你的交易如何得到确认并添加到了区块链 好吧 我也是如此 由于我找不到任何明确的逐步解释这个过程文章 我决定深入研究并自己编写指南 以下是区块链交易如何通过七个步骤从你的钱包处理到区块链中 imag
  • git 第一次push error: failed to push some refs to

    第一次将本地文件push到远程时报错 error failed to push some refs to 远程地址 原因可能是github仓库中的README md文件不在本地代码目录中或要先pull 遇到错误要善用git的提示 报错信息后
  • yolov7 paper阅读笔记

    不同于现有的主流方法 yolov7的主要改进点在优化训练过程 包括优化modules 和 优化方法 这些会加强traing cost从而提高object detect的accuracy 但是不会提高inference cost 时间开销 这