【YOLO v7】论文笔记

2023-10-31

【YOLO v7】论文笔记

文章地址及源码

文章:https://arxiv.org/abs/2207.02696
源码:https://github.com/WongKinYiu/yolov7

研究背景及主要贡献

针对目标群体:
执行实时目标检测的计算设备通常是一些移动CPU或GPU,和NPU(由主要制造商开发的各种神经处理单元)。
常见NPU有:the Apple neural engine (Apple), the neural compute stick (Intel), Jetson AI edge devices (Nvidia), the edge TPU (Google), the neural processing engine (高通), the AI processing unit (联发科), and the AI SoCs (Kneron)。
上述一些边缘设备专注于加速不同的操作,例如普通卷积、深度卷积或MLP操作。
在本文中,作者提出的实时对象检测器主要希望能够支持从边缘到云端的移动GPU和GPU设备
研究背景及主要研究内容:
最近,实时目标检测器的发展集中在高效架构的设计上。
对于CPU: 有PP-picoDet等,针对GPU:有YOLOX, YOLOR等。
以上等网络等都追求更高效的架构设计。
(1)不同于当前主流检测器,除结构优化之外,YOLO v7主要集中在训练过程的优化,即增加训练代价以增加精度,但是不影响推理代价,作者称之为trainable bag-of-freebies
近期,模型重参数和动态标签匹配都成为网络训练和目标检测的主要研究内容。
(2)a.作者针对模型重参数,分析了其应用到不同网络层的梯度传播路径概念,提出了planned re-parameterized model. b.针对标签匹配, 分析了对于有多个输出层的情况,怎么分配dynamic target到不同输出层。提出了coarse-to-fine lead guided label assignment.
(3)提出了扩展(extend)和复合缩放(compound scaling)以使目标检测器可以有效利用参数和计算。
(4) 相比以前的作品精度速度领先很多~~~

Related work 里作者一些有趣的总结

作者认为实时目标检测器需要的六个特征:
(1) 更快、更强的网络架构;(2) 一种更有效的特征集成方法;(3) 更精确的检测方法;(4) 更robust的损失函数;(5) 一种更有效的标签分配方法;(6)一种更有效的训练方法。

作者将模型重参数技巧视作一种集成技巧,分为:module-level ensemble and model-level ensemble。

作者总结了模型缩放(model scaling)常用手段:
(1)通常使用different scaling factors来权衡网络参数量,计算量,推理速度和精度, such as resolution (size of input image), depth (number of layer), width (number of channel), and stage (number of feature pyramid)
(2)使用NAS(Network architecture search)

Architecture

3.1. Extended efficient layer aggregation networks

在这里插入图片描述
作者提出了一个新的网络结构(准确说应该backbone的一个block,backbone我也不知道长啥样,没看代码),就叫Extended efficient layer aggregation networks(E-ELAN),就是上图的(d).
现在从(a)开始说起,VoVNet是一个concatenation-based models,区别于常见的plain结构和残差结构。
(b)是(a)的CSP变体,CSP大家应该都知道,从YOLO v4时就一直在用的结构。CSPVoVNet除了考虑到参数量、计算量、计算密度、ShuffleNet v2提出的内存访问成本(输入输出通道比,架构分支数量,element-wise等),还分析了梯度路径,以使不同层的权重能够学习到多样化的特征
(c)就“如何设计一个高效的网络”得出结论,通过控制最短最长的梯度路径,更深的网络可以有效的学习和收敛。 ELAN我照着作者给的参考文献都没找到这个东西在哪里。。。真的存在吗?
(d)作者基于ELAN提出E-ELAN,通过使用expand, shuffle, merge cardinality来实现在不破坏原有梯度路径的情况下提升网络的学习能力单纯的从图2的(d)来看的话就是通过超参数g来确定扩张的通道数,和分组卷积的个数,保证每个组内的通道数和原来的ELAN的通道数相同,这里g=2。中间的stack in computational block也不知道是什么鬼,主要找不到ELAN。E-ELAN可以指导计算块的不同组来学习多样化特征(感觉就是channel shuffle的作用)。

3.2. Model scaling for concatenation-based models

在这里插入图片描述
类似于plainNet 或者ResNet等结构,scaleing model 的depth或者width不会影响每一层的入度和出度,所以可以独立分析每个scaling factor (width, depth)对参数量和计算量的影响。

问题:但是对于concatenation-based models,如图3 (a)->(b)的过程,改变depth, width也会随之变化,导致后续网络层的输入width发生变化,从而使后续层的输入channel和输出channel的ratio发生变化,从而导致模型的硬件使用率下降。
解决方案: 根据depth的变化计算相应模块输出channel的变化,即width,然后根据变化比例调整后续transition层的width的变化。即图3 ( c ) 的过程。

Trainable bag-of-freebies

4.1. Planned re-parameterized convolution

在这里插入图片描述

通过使用梯度流传播路径来分析重参数卷积如何和不同网络结合。
首先介绍下RepConv 在一个卷积层中结合了 3 × 3 convolution, 1 × 1convolution, and identity connection ,训练时像残差结构那样并联,推理时将三个结构参数合并到一起,形成单个卷积,这就是重参数,具体可以参考 https://zhuanlan.zhihu.com/p/344324470 ,讲的很详细。
问题:作者认为由于RepConv本来就有identity connection, 而直接接入到resnet或者densenet的级联中会对不同的特征图提供更多的梯度多样性,从而破坏网络结构。
方法:使用不包含identity connection的RepConv(RepConvN)来构建Planned re-parameterized convolution,就图四那一堆,但并不知道作者用的是哪种,作者后续的实验也只是把RepConv加到ELAN上做消融实验。实际上图四中的(b)就是YOLO v6中使用的Repblock block,而(h)正是PP YOLO-E中的 ResRep block,所以这里并不算啥创新吧, 之前别人都用过了。

4.2. Coarse for auxiliary and fine for lead loss

在这里插入图片描述

这里应该算是本文除过E-ELAN第二个贡献很大的地方了。
作者使用深度监督思路,如图5的(a)-> (b), 在网络的中间层添加了额外的辅助头结构(auxiliary head),以此作为辅助损失(assistant loss)来给浅层网络权重提供指导。即网络有auxiliary head和最终的lead head两个头结构
所以针对此模式还尚无专门的标签匹配方法,作者说常用的就是( c )这种给两个头分别安排标签匹配工作。

这里作者先介绍了之前的标签匹配有hard label和soft label两种,其中hard label就是根据固定规则设置正负样本(比如使用iou阈值)。而soft label的生成 就是动态标签匹配,即根据预测输出的质量和分布与ground truth ,使用一些计算和优化方法来生成soft label(比如TAL, OTA, ASSD, SimOTA,YOLO使用BBOX的预测和真值的IOU作为置信度label)。作者将soft label的生成称作“ label assigner”。

文章中作者提出了图5(d)Lead head guided label assigner 和(e)Coarse-to-fine lead head guided label assigner 两种思路:

Lead head guided label assigner :使用lead-head的预测值和真值通过优化过程生成soft label, soft label 用于auxiliary head 和lead-head, 作者将这个学习过程成为一种广义残差学习,通过让更浅层的auxiliary head 直接学习lead-head已经学习到的信息,lead-head将能够更集中的学习还为学习过的residual 信息。

Coarse-to-fine lead head guided label assigner : 生成两种soft label, coarse label 和fine label. 其中fine label生成方式和(d)中相同,而coarse label 则通过扩充正样本(更多网格被视为positive target),从而放宽正样本匹配过程,得到更多的正样本。目的是为了让auxiliary head 更专注recall 的优化。由于有些粗标签和细标签的额外权重接近,会造成不好的最终预测结果,所以作者在decoder增加了限制,使coarse positive grid 不能很好的生成soft label。

作者提的两种思路也仅仅是两种思路,具体的soft label assignment 使用的是什么优化策略,以及loss等都没有介绍,文章说都在appendix中,可惜附录文件也没看到。代码里应该有。

7.21 这里补充一下关于soft label的详细选取方法:采用yolo v5正负样本匹配法(hard label)+simOTA(soft label, 源自YOLOX)的组合方式
流程如下:

①使用yolov5正负样本分配策略分配正样本。(YOLO v5,这里可以看yolov4_u5版复现—5. compute_loss配合代码讲解的正负样本分配策略)

②计算每个样本对每个GT的Reg+Cla loss(Loss aware)(simOTA)

③使用每个GT的预测样本确定它需要分配到的正样本数(Dynamic k) (simOTA)
3.1 先获取和GT的IOU前10的样本,
3.2 然后对10个IOU求和取整,作为当前GT的Dynamic k,至少为1
3.3 10这个数字不敏感,5~15都可以取

④为每个GT取loss最小的前dynamic k个样本作为正样本 (simOTA)

⑤人工去掉同一个样本被分配到多个GT的正样本的情况(全局信息) (simOTA)

其实主要是将simOTA中的第一步“使用中心先验”替换成“yolov5中的策略”。
关于正负样本的详细确定方法总结思路来源于这篇文档

4.3. Other trainable bag-of-freebies

指出了一些已经存在的免费训练策略,也说在appendix中说明,
这里有三点
(1)Batch normalization in conv-bn-activation topology:其实就是在推理阶段将BN和BN前的Conv融合,得到一个Conv,可以加速推理过程,这里有个讲解很详细: https://zhuanlan.zhihu.com/p/110552861
(2) YOLOR中的隐式知识与卷积特征映射以及加法和乘法方式相结合:YOLOR中的隐式知识可以在推理阶段通过预计算简化为向量。该向量可以与之前或后续卷积层的偏差和权重相结合。YOLOR没看过~
(3)EMA(Exponential Moving Average)指数移动平均值

精度对比

在这里插入图片描述

可以看出YOLO v7 36.9M参数量, AP51.4, FPS 161,完全领先于之前最好的PP-YOLOE,PP-YOLOE需要L级别才能和YOLO v7精度打平,但是FPS只有78。
YOLO v7的缺点应该是参数量比较大,不适合CPU等和一些低算力NPU,不过作者也说了他面向的对象是各种GPU。我感觉对于一些算力好的NPU应该效果也会很好,毕竟36.9也不是很大,不然也可以退而求其次使用“tiny”(看起来不是很tiny)版本

一些粗浅笔记,只是个人学习记录,有错误的地方大家可以纠正我~

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

【YOLO v7】论文笔记 的相关文章

  • Git commit格式 详解

    我们在使用git进行版本控制的时候 commit的格式是有要求的 我们可以先去看一些顶级项目他们的commit的格式是怎样的 angular在github上的commit信息 我们可以发现 commit都有一些前缀 比如说 feat tes
  • VRTK简要说明

    1 导入VRTK开发包 下方三个为基础控件 用于识别硬件设备以及相关配置 2 移动功能简介 3 ui交互事件 将VRTK UICanvas 组件添加到Canvas下可用ui所有事件 1 问题容易出现ui穿透 所以在做的时候要防止穿透 最好不
  • sqli-labs通关大全(更新至Less60)

    sqli labs通关 less1 less10 箭雨镜屋 CSDN博客 sqli labs通关 less11 less20 箭雨镜屋 CSDN博客 sqli labs通关 less21 less30 箭雨镜屋 CSDN博客 sqli la
  • config:fail,Error: 系统错误,错误码:63002,invalid signature

    经过半天的尝试 终于把这个解决了 本文章比较是和 前端用 hash分享下这个问题吧 看了好多文章都没解决了我的问题 直接上干货 1 首先出一张基本的问题图 2 针对上面这个图第2点内 hash 做个讲解 因为我前端用的 hash模式 一般网
  • 编码之Base64编码

    Base64编码 是一种基于 64 个可打印字符来表示二进制数据的方法 目前 Base64 已经成为网络上常见的传输 8 位二进制字节代码的编码方式之一 为什么会有 Base64 编码呢 因为有些网络传送渠道并不支持所有的字节 例如 传统的

随机推荐

  • 【Xilinx AX7103 MicroBalze学习笔记2】MicroBlaze 串口发送 Hello World 实验

    目录 实验介绍 硬件设计 Vivado部分 创建工程 搭建Block Design MicroBlaze部分 外围模块部分 时钟模块 Uart部分 管脚绑定 时钟约束 生成Bit流文件 软件设计 SDK部分 板级验证 总结 往期系列博客 实
  • stm32无人机-飞行力学原理

    惯性导航 是一种无源导航 不需要向外部辐射或接收信号源 就能自主进行确定自己在什么地方的一种导航方法 惯性导航主要由惯性器件计算实现 惯性器件包括陀螺仪和加速度计 一般来说 惯性器件与导航物体固连 加速度计测量物体运动的加速度 已知初始状态
  • Java分治算法经典案例之汉诺塔

    分治算法 思想 当我们求解某些问题时 由于这些问题要处理的数据相当多 或求解过程相当复杂 使得直接求解法在时间上相当长 或者根本无法直接求出 对于这类问题 我们往往先把它分解成几个子问题 找到求出这几个子问题的解法后 再找到合适的方法 把它
  • Unable to install “xxx“

    Unable to install xxx Xcode Could not inspect the application package macOS Version 11 4 Build 20F71 Xcode 12 5 1 18212
  • Ubuntu终端使用todesk命令

    Ubuntu终端使用todesk命令 todesk是一款免费的远程控制软件 支持Windows Linux Mac Android iOS等多种平台 可以实现跨设备的远程控制 文件传输 远程打印等功能 本文将介绍如何在Ubuntu终端使用t
  • matlab求图像杰卡德系数,Jaccard similarity coefficient for image segmentation

    This example shows how to segment an image into multiple regions The example then computes the Jaccard similarity coeffi
  • 免费的云服务器,大家推荐哪个呢?

    搭建一个云平台的成本还是很高的 但是就没有企业免费为公众提供服务的吗 其实免费的服务器是有的 各大平台都有 阿里云 腾讯云都有 只是受时间限制的 大多数是7天或者15天 但是某丰云却号称是永久免费的 其实它是有前提的 释放以后的数据也就永远
  • 第一课:使用C++实现图片去水印

    目录 1 功能概述 2 具体实现 2 1 导入OpenCV库和头文件 2 2 读入图像并显示 2 3 提取水印区域 2 4 重构去除水印后的图像 3 完整代码如下 4 实现效果 5 介绍几种PS去水印的方法 5 1 裁剪法 5 2 借图法
  • c1047: [编程入门]报数问题[报3退出]

    有n人围成一圈 顺序排号 从第1个人开始报数 从1到3报数 凡报到3的人退出圈子 问最后留下的是原来的第几号的那位 输入 初始人数n 输出 最后一人的初始编号 样例输入复制 3 样例输出复制 2 思路 约瑟夫环问题 需要考虑 1 成环 即当
  • 2023年软件测试常见面试题100%问必背全套教程

    随着数字化时代的到来 软件测试越来越受到重视 在未来的几年里 软件测试将继续成为信息技术领域中的热门职业之一 如果你是一名正在寻找或准备进入软件测试行业的人 那么这套常见面试题全套教程对你来说会非常有用 这套教程旨在帮助你了解2023年软件
  • Hdfs页面操作文件出现 Permission denied: user=dr.who, access=WRITE, inode=“/“:hadoop:supergroup:drwxr-xr问题解决

    错误描述 Permission denied user dr who access WRITE inode hadoop supergroup drwxr xr x 先开始一直纠结我是用hadoop用户登录操作的 为什么会是dr who d
  • eNSP之安全策略的配置

    命令行模式 FW firewall zone trust 进入trust区域 FW zone trust add int g1 0 0 把g1 0 0加入trust区域 undo add int g1 0 0 取消加入 FW firewal
  • C语言题目解析(一)

    C语言题目解析 1 打印 1 100之间的奇数 1 1 题目描述 1 2 解法思路 1 3 代码 1 4 运行结果 2 打印9 9乘法 诀表 2 1 题目描述 2 2 解题思路 2 3 解法代码 2 4 运行结果 3 打印素数 3 1 题目
  • 禁用cookie和私密浏览模式情况下localstorage需要注意的问题

    localstorage是html5新增的一个功能 用于本地存储 主要解决cookie存储量小的问题 官方建议每个网站最多存储5M大小 localstorage相关的函数 cookieEnabled 移动端在使用localstorage需要
  • TCP和UDP详解

    本篇文章主要是从运输层协议概述 UDP TCP 可靠传输的工作原理 TCP首部格式 TCP可靠传输的实现 TCP流量控制 TCP的拥塞控制 TCP的连接管理这几个方面进行解析 不对之处还望指出 喜欢的可以点赞关注一下 谢谢 一 运输层协议概
  • 写一段js代码,完成字段校验规则:字段的长度必须介于6-20位之间,必须包含大小写字母和数字。...

    var regex new RegExp a z A Z 0 9 a zA Z0 9 6 20 if regex test fieldValue 校验通过 else 校验不通过
  • Dynamics 365 自动化发布工具Spkl介绍

    本篇主要是为了后面讲述CI CD时用到的工具做一个说明 先奉上spkl的github地址 没听说过的可以去查看下 挺不错的工具 我们主要用这个工具来部署WebResource Plugin和Workflow Activities 以及后续的
  • 一篇搞定SpringCloud面试(两万字)

    本文来自一位非常卷的在校学生写的学习笔记 哎 这样太卷了 作为一个苦逼的在读大学生 又要面临半年一度的期末考试了 因为上课没听 我啥都不会 什么通信原理 单片机 饶了我吧 给你们看看我上课在干啥你就知道我为啥啥都不会了 上课笔记 emmm
  • 群晖 NAS WebDAV服务手机ES文件浏览器远程访问【无公网IP内网穿透】

    iOS开发上架主页 在强者的眼中 没有最好 只有更好 我们是移动开发领域的优质创作者 同时也是阿里云专家博主 关注我们的主页 探索iOS开发的无限可能 我们与您分享最新的技术洞察和实战经验 助您在移动应用开发领域取得成功 欢迎访问我们的微信
  • 【YOLO v7】论文笔记

    YOLO v7 论文笔记 文章地址及源码 文章 https arxiv org abs 2207 02696 源码 https github com WongKinYiu yolov7 研究背景及主要贡献 针对目标群体 执行实时目标检测的计