目标检测算法——YOLOV9——算法详解

一、主要贡献

深度网络输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息。针对 信息丢失问题,研究问题如下:
1)从可逆功能的角度对现有深度神经网络架构进行了理论分析,解释了许多过去难以解释的现象,设计了PGI 辅助可逆分支,可以用于各种深度的网络,并取得了出色的结果。
2)同时考虑了参数数量、计算复杂性、准确性和推理速度,设计的GELAN只使用传统卷积,以实现比基于最先进技术的深度卷积设计更高的参数使用率,同时显示出轻量、快速和准确的巨大优势。
3)结合所提出的PGI和GELAN,设计了YOLOv9在MS COCO数据集上的目标检测性能在各个方面大大超过了现有的实时目标检测器。

PS

截止20240416 的git 代码实现:
1)作者仅仅开源了c和e模型的配置文件,而且只有两个head,共计6个输出头,和论文的9头几乎对不上。
2)所谓的PGI作者解释的很学术范,实现就是复制一个backbone,然后结合辅助分支,感觉这个pgi的故事,其实就是两个不同大小的模型互相蒸馏,然后推理可以只保留某个(或大或小)的主分支。
3)关于GELAN的创新,主要就是ELAN的拓展,允许把里面最简单的CNN,套娃换为CSPNet等。
4)后文那个可视化(不同backbone的随机初始化权重得到的结果就能证明信息保留程度),我是真的没有看懂,首先网络都没有下采样,网络的结构是什么样的?其次我自己的拙见,也有人在issue中提问,这里的丢失信息和网络本来的拟合目标的能力有正相关吗?拟合过程本身也是一个统计并去冗余过程。
综上,个人目前建议大概看看论文就好,还是让子弹飞一飞吧,这个V9的名字靠这两个创新点+真正实现对不上文章感觉。。。。

二、主要思路

PGI

整个PGI的结构论文提到如下图d. 关于PGI讲的故事这里简单用作者在git issue的一张图吧,因为实现其实就是另一个并行backbone+辅助分支,所以感觉看看就好。

GELAN

就是ELAN的扩展,允许讲conv 变为任意模块,并验证有效性。

三、具体细节

正真实现的时候,官方放出来了c 和 e 的模型,都并不是论文中的3个head 9个输出,也在issue中被大家追问(手动狗头),下面是有人画出的c对应的网络图(原作者链接: Summary of YOLOv9 Architecture · Issue #355 · WongKinYiu/yolov9 · GitHub )。
如何来看网络,其实主要参考三个文件:
1)模型配置文件: yolov9/models/detect/yolov9-c.yaml at main · WongKinYiu/yolov9 · GitHub 
2)模型实现文件: yolov9/models/yolo.py at main · WongKinYiu/yolov9 · GitHub 这里作者也实现了不同的类对应不同的分支头数,但是目前开源的代码实现了TripleDetect类,但是没有使用。
3)loss文件: yolov9/utils/loss_tal_dual.py at main · WongKinYiu/yolov9 · GitHub 这里作者实现了三个loss:loss_tal.py、loss_tal_dual.py、oss_tal_triple.py
再围观看一下GELAN的代码
class RepNCSPELAN4(nn.Module):# csp-elandef __init__(self, c1, c2, c3, c4, c5=1):  # ch_in, ch_out, number, shortcut, groups, expansionsuper().__init__()self.c = c3//2self.cv1 = Conv(c1, c3, 1, 1)self.cv2 = nn.Sequential(RepNCSP(c3//2, c4, c5), Conv(c4, c4, 3, 1))self.cv3 = nn.Sequential(RepNCSP(c4, c4, c5), Conv(c4, c4, 3, 1))self.cv4 = Conv(c3+(2*c4), c2, 1, 1)def forward(self, x):y = list(self.cv1(x).chunk(2, 1))y.extend((m(y[-1])) for m in [self.cv2, self.cv3])return self.cv4(torch.cat(y, 1))def forward_split(self, x):y = list(self.cv1(x).split((self.c, self.c), 1))y.extend(m(y[-1]) for m in [self.cv2, self.cv3])return self.cv4(torch.cat(y, 1))

1、input

640*640,正常的预处理。

2、backbone

主要就是多了一条(或两条分支)backhone。
backbone使用了’RepNCSPELAN4 ‘模块。

3、neck & head

主要是增加了辅助头。

4、loss function

loss为DFL Loss + CIoU Loss,匹配策略为TaskAlign样本匹配,和YOLOv8、YOLOE、YOLOv6等算法保持一致。

5、trics

推理时可以去掉分支,见参考链接部分。

6、inference

测试阶段(非训练阶段)过程

四、结果

    1、与sota比较

它比较好,也有网友做了性能和推理速度比较,目前看确实还是有优势的,所以后续持续关注。

    2、消融实验

    GELAN
        PGI
    GELAN & PGI

    可视化

参考链接

三个分支9个头的配置文件: How to use TripleDDetect? · Issue #226 · WongKinYiu/yolov9 · GitHub
结构图: Summary of YOLOv9 Architecture · Issue #355 · WongKinYiu/yolov9 · GitHub 
推理速度对比: yolov5 yolov8 yolov9 speed test on T4 (tensorrt ) · Issue #178 · WongKinYiu/yolov9 · GitHub
训练速度对比: training speed is 3 times slower than yolov8 · Issue #173 · WongKinYiu/yolov9 · GitHub 
去掉分支:  GitHub - spacewalk01/TensorRT-YOLOv9: Cpp and python implementation of YOLOv9 using TensorRT API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/624940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络编程】如何创建一个自己的并发服务器?

hello !大家好呀! 欢迎大家来到我的网络编程系列之如何创建一个自己的并发服务器,在这篇文章中,你将会学习到在Linux内核中如何创建一个自己的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家…

3D目标检测实用技巧(三)- 生成虚拟点

一、引言 本次参考的是VirConv生成虚拟点的方法: VirConv/tools/PENet at master hailanyi/VirConv GitHubVirtual Sparse Convolution for Multimodal 3D Object Detection - VirConv/tools/PENet at master hailanyi/VirConvhttps://github.com/hailanyi/Vir…

手写spring IOC底层源码来模拟spring如何利用多级缓存解决循环依赖的问题

在文章开始之前,先来看一张spring IOC加载过程的脑图吧 Spring IOC的加载过程 首先,当我们去new了一个applicationContext,它底层呢就会把我们配置的bean进行扫描,然后创建成一个一个的beanDefinition放在我们的beanDefinitionMap中,此时就有了一切创造bean的原料信…

计算机网络:MAC地址 IP地址 ARP协议

计算机网络:MAC地址 & IP地址 & ARP协议 MAC地址IP地址ARP协议 MAC地址 如果两台主机通过一条链路通信,它们不需要使用地址就可以通信,因为连接在信道上的主机只有他们两个。换句话说,使用点对点信道的数据链路层不需要使…

宝剑锋从磨砺出,透视雀巢咖啡品牌焕新与产品升级的想象力

自1989年进入中国市场以来,陪伴着国内咖啡行业由启蒙期走向兴盛期的雀巢咖啡,始终坚持以消费者高品质、个性化需求为本位,在保有独特性的基础上持续创新,实现了从无到有的攻克与突破。 近日,深耕中国三十六载的雀巢咖…

2024蓝桥杯每日一题(组合计数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:计算系数 试题二:求组合数1 试题三:求组合数2 试题四:杨辉三角形 试题一:计算系数 【题目描述】 给定一个多项式 (axby)k,请…

数字革命的先锋:Web3对社会的影响

引言 在信息技术飞速发展的当下,Web3作为一个新兴的互联网模式,正在逐渐改变我们的生活方式、商业模式和社会结构。本文将深入探讨Web3的核心特点、它在各个领域中的应用以及对社会产生的深远影响。 1. Web3的核心特点 1.1 去中心化 Web3强调去中心化…

电脑不能上网,宽带调制解调器出现问题如何处理

目录 一、问题说明 二、解决方案 一、问题说明 内网的设备能互联,内网的各个设备无法连外网。 电脑在检测网络时,出现以下提示: 二、解决方案 首先重启光猫(我们是电信宽带)。 如果还是有问题,再重启…

【Blockchain】连接智能合约与现实世界的桥梁Chainlink

去中心化预言机试图实现依赖因果关系而不是个人关系的去信任和确定性结果。它以与区块链网络相同的方式实现这些结果,即在许多网络参与者之间分配信任。通过利用许多不同的数据源并实施不受单个实体控制的预言机系统,去中心化的预言机网络有可能为智能合…

第十五届蓝桥杯题解-数字接龙

题意:经过所有格子,并且不能进行交叉,走的下一个格子必须是当前格子值1%k,输出路径最小的那一条(有8个方向,一会粘图) 思路:按照8个方向设置偏移量进行dfs,第一个到达终…

Achronix FPGA增加对Bluespec提供的基于Linux的RISC-V软处理器的支持,以实现可扩展数据处理

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC 2024年4月——高性能FPGA芯片和嵌入式FPGA(eFPGA)硅知识产权(IP)领域的领先企业Achronix半导体公司,以及RISC-V工具和IP领域的行业领导者Blues…

【论文阅读02】一种基于双通道的水下图像增强卷积神经网络

来源:海洋论坛▏一种基于双通道的水下图像增强卷积神经网络 当前不会的 一、背景: 水下图像增强方法包含有无水下成像模型的水下图像增强方法、基于水下成像模型的水下图像恢复方法、水下成像模型与深度学习相结合的方法以及完全采用深度学习的方…