当前位置:首页 > 技术知识 > 正文内容

YOLOv7速度精度超越其他变体,大神AB发推,网友:还得是你

maynowei6个月前 (09-01)技术知识59

Pine 发自 凹非寺
量子位 | 公众号 QbitAI

前脚美团刚发布YOLOv6, YOLO官方团队又放出新版本。

曾参与YOLO项目维护的大神Alexey Bochkovskiy在推特上声称:

官方版YOLOv7比以下版本的精度和速度都要好。



在论文中,团队详细对比了YOLOv7和其他变体的性能对比,并介绍v7版本的新变化。



话不多说,YOLOv7有多强一起来看实验结果。

速度、精度都超越其他变体

论文中,实验以之前版本的YOLO和最先进的目标检测模型作为基准。

表格是YOLOv7模型在相同的参数设置下与其他版本的比较:

数据标绿代表性能相较于之前版本有所提升,参数量和计算量相较于之前版本,大部分均有所减少,AP也有所提升。

即使在云GPU模型上,最新模型仍可以保持较高的AP,与此同时计算量和参数量相较于之前模型也均有所下降。



YOLOv7可以很好地平衡速度与精度。

与现有的通用GPU和移动GPU的目标检测模型进行比较:

YOLOv7在速度(FPS)和精度(AP)均超过其他目标检测模型。

比如,在输入分辨率为1280时,将YOLOv7与YOLOR进行比较,YOLOv7-W6的推理速度比YOLOR-P6快8fps,检测率也提高了1%AP。





性能是怎么提升的?

改进实时目标检测模型的性能,往往要从以下几点入手:

1、更快更强的网络架构;
2、更有效的特征集成方法;
3、更准确的检测方法;
4、更精确的损失函数;
5、更有效的标签分配方法;
6、更有效的训练方法。

YOLOv7主要从4、5、6入手设计性能更好的检测模型。

首先,YOLOv7扩展了高效长程注意力网络,称为Extended-ELAN(简称E-ELAN)

在大规模的ELAN中,无论梯度路径长度和块的数量如何,网络都能达到稳定状态。

但是如果无限地堆叠计算块,这种稳定状态也可能会被破坏,参数利用率也会降低。

E-ELAN对基数(Cardinality)做了扩展(Expand)、乱序(Shuffle)、合并(Merge cardinality),能在不破坏原始梯度路径的情况下,提高网络的学习能力。

在架构方面,E-ELAN只改变了计算块中的体系结构,没有改变过渡层的体系结构。



除了保持原来ELAN的设计架构外,E-ELAN还可以引导不同的计算块组来学习更多样化的特性。

而后,YOLOv7采用基于级联的(Concatenation-based)模型缩放方法。

模型缩放是指调整模型的一些属性,生成不同尺度的模型,以满足不同推理速度的需求。

然而,模型缩放如果应用于基于连接的架构,当扩大或缩小执行深度时,基于连接的翻译层的计算块将减少或增加。

由此可以推断,对于基于级联的模型,不能单独分析不同的缩放因子,必须一起考虑。

基于级联的模型缩放方法是一个复合模型缩放方法,当缩放一个计算块的深度因子时,同时也要计算该块输出通道的变化。

然后,对过渡层以相同的变化量进行宽度因子缩放,这样就可以保持模型在初始设计时的特性,并保持最优结构。



在论文研究中,作者还设计了有计划的重新参数化卷积(Planned re-parameterized convolution)

RepConv在VGG中有比较优异的性能,但当它直接应用于ResNet、DenseNet或者其他架构时,精度会明显降低。

这是因为RepConv中的直连(Identity connection)破坏了ResNet中的残差和DenseNet中的连接。

因此,论文研究中使用没有直连的RepConv(RepConvN)来设计网络结构。



在YOLOv7的标签分配机制中,需要同时考虑网络预测结果与基准,然后将软标签(综合考虑,优化之后的标签)分配到“label assigner”机制。

那么接下来,“软标签要分配给auxiliary head还是lead head呢?”

论文提出了一种新的标签分配法,如下图中的(d)(e),基于lead head预测,生成从粗到细的层次标签,分别用于lead headauxiliary head的学习。

图(d)让较浅的auxiliary head学习lead head已经学习到的信息,而输lead head则可以更专注于为学习到的残差信息。

而e图中,会生成两组软标签,即粗标签和细标签。auxiliary head不如lead head学习能力强,因此要重点优化它的召回率,避免丢失掉需要学习的信息。



目前,YOLOv7已官方开源,有兴趣的伙伴可以戳下文链接。

参考链接:
[1] https://twitter.com/alexeyab84/status/1544877675004788739

[2] https://arxiv.org/abs/2207.02696
[3] https://github.com/WongKinYiu/yolov7/releases

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

相关文章

去哪儿暑期PM实习一月记:在互联网公司做产品实习是怎样一种体验

人人都是产品经理旗下【起点学院】推出产品经理“365天”成长计划,BAT大牛带你学产品! 在毕业前的最后一个暑假,缘分使然找了几个月暑期实习之后进入了去哪儿,申请提前入职工作至今正好满一个月。原先有在...

Go 语言中的 RWMutex 源码解析、使用场景及应用分析

Go 语言标准库的 sync 包提供了一些非常重要的并发原语来帮助程序开发者处理并发任务。本文将详细解析 sync 包中的 RWMutex,即读写互斥锁(Reader/Writer Mutex),并结...

大量类加载器创建导致诡异FullGC(类的加载器有什么用)

“ 由 GC 问题带你全面了解 JDK8 Metaspace”01—现象最近接手了一个同事的项目,某一天接口的响应耗时突然增加了很多,由几十ms 增加到了几十秒。首先查看机器上的日志,有调用第三方接口...

什么?Java 中的锁还有状态?(java中的锁都有哪些类型)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...

一个快要被忘记的数据库开发岗位,但应该被尊重

数据库测试,似乎是被人遗忘的数据库职业,但依然是不错的选择。底下是我在某站找的招聘启事,就连蚂蚁金服都在积极寻找数据库测试人:要说我经历的项目,大大小小也有几十个,从 C/S, B/S, 再到 B/C...

超详细的Oracle19c修改数据库用户名教程

概述由于开发很多视图指定了某个用户名,故需修改数据库用户名srmpro为srm。以下为操作过程..1、停止应用防止修改用户名密码后应用一直在发起错误连接,可事先查询哪个IP在连接数据库,然后断开对应连...