YoloV9改进策略:下采样改进|自研下采样模块(独家改进)|疯狂涨点|附结构图

文章目录

  • 摘要
  • 自研下采样模块及其变种
    • 第一种改进方法
  • YoloV9官方测试结果
  • 改进方法
  • 测试结果
  • 总结

摘要

本文介绍我自研的下采样模块。本次改进的下采样模块是一种通用的改进方法,你可以用分类任务的主干网络中,也可以用在分割和超分的任务中。已经有粉丝用来改进ConvNext模型,取得了非常好的效果,配合一些其他的改进,发一篇CVPR、ECCV之类的顶会完全没有问题。

本次我将这个模块用来改进YoloV9,实现大幅度涨点。

自研下采样模块及其变种

第一种改进方法

将输入分成两个分支,一个分支用卷积,一个分支分成两部分,一部分用MaxPool,一部分用AvgPool。然后,在最后合并起来。代码如下:

import torch
import torch.nn as nndef autopad(k, p=None, d=1):  # kernel, padding, dilation"""Pad to 'same' shape outputs."""if d > 1:k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]  # actual kernel-sizeif p is None:p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-padreturn pclass Conv(nn.Module):"""Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)."""default_act = nn.SiLU()  # default activationdef __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):"""Initialize Conv layer with given arguments including activation."""super().__init__()self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)self.bn = nn.BatchNorm2d(c2)self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()def forward(self, x):"""Apply convolution, batch normalization and activation to input tensor."""return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):"""Perform transposed convolution of 2D data."""return self.act(self.conv(x))class DownSimper(nn.Module):"""DownSimper."""def __init__(self, c1, c2):super().__init__()self.c = c2 // 2self.cv1 = Conv(c1, self.c, 3, 2, d=3)self.cv2 = Conv(c1, self.c, 1, 1, 0)def forward(self, x):x1 = self.cv1(x)x = self.cv2(x)x2, x3 = x.chunk(2, 1)x2 = torch.nn.functional.max_pool2d(x2, 3, 2, 1)x3 = torch.nn.functional.avg_pool2d(x3, 3, 2, 1)return torch.cat((x1, x2, x3), 1)

结构图:
在这里插入图片描述
左侧卷积中d=3,代表使用空洞卷积或者是膨胀卷积,可以带来更大的感受野。d=3,k=3等同卷积核为9.

YoloV9官方测试结果

yolov9 summary: 580 layers, 60567520 parameters, 0 gradients, 264.3 GFLOPsClass     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 15/15 00:02all        230       1412      0.878      0.991      0.989      0.732c17        230        131       0.92      0.992      0.994      0.797c5        230         68      0.828          1      0.992      0.807helicopter        230         43      0.895      0.977      0.969      0.634c130        230         85      0.955      0.999      0.994      0.684f16        230         57      0.839      0.965      0.966      0.689b2        230          2          1      0.978      0.995      0.647other        230         86       0.91      0.942      0.957      0.525b52        230         70      0.917      0.971      0.979      0.806kc10        230         62      0.958      0.984      0.987      0.826command        230         40      0.964          1      0.995      0.815f15        230        123      0.939      0.995      0.995      0.702kc135        230         91      0.949      0.989      0.978      0.691a10        230         27      0.863      0.963      0.982      0.458b1        230         20      0.926          1      0.995      0.712aew        230         25      0.929          1      0.993      0.812f22        230         17      0.835          1      0.995      0.706p3        230        105       0.97          1      0.995      0.804p8        230          1      0.566          1      0.995      0.697f35        230         32      0.908          1      0.995      0.547f18        230        125      0.956      0.992      0.993      0.828v22        230         41      0.921          1      0.995      0.682su-27        230         31      0.925          1      0.994      0.832il-38        230         27      0.899          1      0.995      0.816tu-134        230          1      0.346          1      0.995      0.895su-33        230          2       0.96          1      0.995      0.747an-70        230          2      0.718          1      0.995      0.796tu-22        230         98      0.912          1      0.995      0.804

改进方法

将代码复制到common.py中,如下图:
在这里插入图片描述

在yolo.py中的parse_model函数中增加DownSimper,如下图:
在这里插入图片描述
代码:

        elif m is DownSimper:c2 = args[0]c1 = ch[f]args = [c1, c2]

修改models/detect/yolov9.yaml配置文件,代码如下:

# YOLOv9 backbone
backbone:[[-1, 1, Silence, []],  # conv down[-1, 1, DownSimper, [128]],  # 1-P1/2# conv down[-1, 1, DownSimper, [256]],  # 2-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 3# conv down[-1, 1, DownSimper, [512]],  # 4-P3/8# elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 5# conv down[-1, 1, DownSimper, [512]],  # 6-P4/16# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 7# conv down[-1, 1, DownSimper, [512]],  # 8-P5/32# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 9]# YOLOv9 head
head:[# elan-spp block[-1, 1, SPPELAN, [512, 256]],  # 10# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 7], 1, Concat, [1]],  # cat backbone P4# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 13# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 5], 1, Concat, [1]],  # cat backbone P3# elan-2 block[-1, 1, RepNCSPELAN4, [256, 256, 128, 1]],  # 16 (P3/8-small)# conv-down merge[-1, 1, Conv, [256, 3, 2]],[[-1, 13], 1, Concat, [1]],  # cat head P4# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 19 (P4/16-medium)# conv-down merge[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 22 (P5/32-large)# routing[5, 1, CBLinear, [[256]]], # 23[7, 1, CBLinear, [[256, 512]]], # 24[9, 1, CBLinear, [[256, 512, 512]]], # 25# conv down[0, 1, Conv, [64, 3, 2]],  # 26-P1/2# conv down[-1, 1, Conv, [128, 3, 2]],  # 27-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 28# conv down fuse[-1, 1, Conv, [256, 3, 2]],  # 29-P3/8[[23, 24, 25, -1], 1, CBFuse, [[0, 0, 0]]], # 30  # elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 31# conv down fuse[-1, 1, Conv, [512, 3, 2]],  # 32-P4/16[[24, 25, -1], 1, CBFuse, [[1, 1]]], # 33 # elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 34# conv down fuse[-1, 1, Conv, [512, 3, 2]],  # 35-P5/32[[25, -1], 1, CBFuse, [[2]]], # 36# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 37# detect[[31, 34, 37, 16, 19, 22], 1, DualDDetect, [nc]],  # DualDDetect(A3, A4, A5, P3, P4, P5)]

修改train_dual.py脚本中的超参数,代码如下:

   	parser.add_argument('--weights', type=str, default='', help='initial weights path')parser.add_argument('--cfg', type=str, default='models/detect/yolov9.yaml', help='model.yaml path')parser.add_argument('--data', type=str, default=ROOT / 'data/VOC.yaml', help='dataset.yaml path')parser.add_argument('--epochs', type=int, default=100, help='total training epochs')parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs, -1 for autobatch')parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')parser.add_argument('--workers', type=int, default=0, help='max dataloader workers (per RANK in DDP mode)')parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')parser.add_argument('--name', default='exp', help='save to project/name')parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')

测试结果

yolov9 summary: 595 layers, 58708576 parameters, 0 gradients, 274.0 GFLOPsClass     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 15/15 00:35all        230       1412      0.952      0.974       0.99      0.738c17        230        131      0.981      0.992      0.995      0.832c5        230         68      0.963      0.985      0.995      0.847helicopter        230         43      0.968       0.93      0.972      0.635c130        230         85      0.988      0.996      0.995      0.669f16        230         57      0.976      0.947      0.975      0.687b2        230          2      0.767          1      0.995      0.516other        230         86      0.981      0.907      0.968      0.573b52        230         70      0.969      0.971      0.985      0.812kc10        230         62      0.986      0.984      0.989      0.835command        230         40      0.988          1      0.995       0.82f15        230        123      0.965      0.992      0.989      0.697kc135        230         91      0.984      0.989      0.981      0.725a10        230         27          1      0.794      0.976      0.495b1        230         20      0.979          1      0.995      0.682aew        230         25      0.944          1      0.995      0.802f22        230         17          1      0.881      0.992      0.717p3        230        105      0.981      0.992      0.995       0.81p8        230          1      0.756          1      0.995      0.697f35        230         32       0.99      0.938      0.982       0.55f18        230        125      0.981      0.992      0.991      0.829v22        230         41       0.99          1      0.995      0.684su-27        230         31      0.985          1      0.995      0.849il-38        230         27      0.987          1      0.995       0.84tu-134        230          1      0.756          1      0.995      0.895su-33        230          2       0.99          1      0.995      0.747an-70        230          2      0.838          1      0.995      0.848tu-22        230         98          1          1      0.995      0.832

总结

本文自研下采样模块,实现YoloV9的涨点。欢迎大家在自己的数据集上做尝试。

代码:

链接:https://pan.baidu.com/s/1QFrpJuHOaDpKTEmBIIxdYw?pwd=cpvq 
提取码:cpvq

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

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

相关文章

【电控笔记5.4】pwm延迟

PWM延迟 1标准采样法 Td=MCU计算延迟+输出延迟 Tcon=电流控制周期 Ts=PWM载波周期 Td=1.5Ts(6.3节 ) 电流环跟PWM采样周期同步 2修改采样法

AR HUD_VSLAM+显示技术

智能座舱的一个重要技术方向是表达与展示。HUD可以将驾驶相关的信息,如车速、导航等投射到驾驶员的视线上方,避免驾驶员的目光离开前方道路。这种显示方式可以提供关键信息的实时展示,减少驾驶员的分心。 HUD的技术原理就是通过光学系统将信息…

【PCL】教程global_hypothesis_verification 通过验证模型假设来实现 3D 对象识别与位姿估计...

测试程序1 milk.pcd milk_cartoon_all_small_clorox.pcd 终端输出1: Model total points: 12575; Selected Keypoints: 193 Scene total points: 307200; Selected Keypoints: 7739 [pcl::SHOTEstimation::computeFeature] The local reference frame is not valid!…

初入单元测试

单元测试:针对最小的功能单元(方法),编写测试代码对其进行正确性测试 Junit可以用来对方法进行测试,虽然是有第三方公司开发,但是很多开发工具已经集成了,如IDEA。 Junit 优点:可以灵活的编写测试代码&am…

【C++】类和对象初探:类的实例化与对象生命周期管理,解析this指针的奥秘

欢迎来到CILMY23的博客 本篇主题为: 类和对象初探:类的实例化与对象生命周期管理,解析this指针的奥秘 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 感谢观看,支持的可以给…

医学影像图像去噪:滤波器方法、频域方法、小波变换、非局部均值去噪、深度学习与稀疏表示和字典学习

医学影像图像去噪是指使用各种算法从医学成像数据中去除噪声,以提高图像质量和对疾病的诊断准确性。MRI(磁共振成像)和CT(计算机断层扫描)是两种常见的医学成像技术,它们都会受到不同类型噪声的影响。 在医学影像中,噪声可能来源于多个方面,包括成像设备的电子系统、患…

[RTOS 学习记录] 工程管理工具make及makefile

[RTOS 学习记录] 工程管理工具make及makefile 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记,记录目的是为了个人后续回顾复习使用。 前置内容: 开发工具 Borland C/C 3.1 精简版 文章目录 1 make 工具2 makefile 的内容结构3…

MLLM | InternLM-XComposer2-4KHD: 支持336 像素到 4K 高清的分辨率的大视觉语言模型

上海AI Lab,香港中文大学等 论文标题:InternLM-XComposer2-4KHD: A Pioneering Large Vision-Language Model Handling Resolutions from 336 Pixels to 4K HD 论文地址:https://arxiv.org/abs/2404.06512 Code and models are publicly available at https://gi…

使用 ollama 部署最新的Llama 3 70B本地模型

一、ollama是什么? 在本地启动并运行大型语言模型。运行Llama 3,Mistral, Gemma, Code Llama和其他模型。自定义并创建您自己的。 综合优点: 快速下载容器自动运行大模型,现在下载,马上上手。本地利用 cpu 运行大模型&#xff0c…

【Hadoop】-Apache Hive概述 Hive架构[11]

目录 Apache Hive概述 一、分布式SQL计算-Hive 二、为什么使用Hive Hive架构 一、Hive组件 Apache Hive概述 Apache Hive是一个在Hadoop上构建的数据仓库基础设施,它提供了一个SQL-Like查询语言来分析和查询大规模的数据集。Hive将结构化查询语言(…

视频教程下载:ChatGPT驱动的SEO、网络营销、生产力提升

用户遇到的一个常见问题是在ChatGPT对话过程中难以保持清晰的目的和专注。这可能导致互动无效和浪费时间。这门课程将教给各种创意人士——艺术家、制造者、博主、讲师和内容创作者——如何制定理想的提示配方,从而产生更有成效的对话和更高的回报。 这是一门关于如…

【入门篇】本章包括创建云项目、数据库的使用、云存储管理、云函数的基本使用、实战举例(小程序之云函数开发入门到使用发布上线实操)

云函数 云函数相当于服务器接口的概念,它并属于小程序端代码。它是以函数的形式运行后端代码来响应事件以及调用其他服务。运行环境是Node.js。 一、基创建云函数项目 打开微信开发者工具: 打开微信开发者工具,并登录你的微信开发者账号。 创建项目: 如果还没有创建项目,你…

7. Django 模型与数据库

第7章 模型与数据库 Django对各种数据库提供了很好的支持, 包括PostgreSQL, MySQL, SQLite和Oracle, 而且为这些数据库提供了统一的API方法, 这些API统称为ORM框架. 通过使用Django内置的ORM框架可以实现数据库连接和读写操作. 本章以SQLite数据库为例, 分别讲述Django的模型…

Ai-WB2 系列模组SDK接入亚马逊云

文章目录 前言一、准备二、亚马逊云物模型建立1. 注册亚马逊账号,登录AWS IoT控制台,[注册地址](https://aws.amazon.com/cn/)2. 创建好之后点击登录3. 创建物品以及下载证书 三、连接亚马逊云demo获取以及配置1. 下载源码2. 按照顺序执行下面指令3. 修改…

用友U8-Cloud api/hr接口存在SQL注入漏洞

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 U8 Cloud是由用友推出的新一代云ERP系统&#xff0…

20240331-1-基于深度学习的模型

基于深度学习的模型 知识体系 主要包括深度学习相关的特征抽取模型,包括卷积网络、循环网络、注意力机制、预训练模型等。 CNN TextCNN 是 CNN 的 NLP 版本,来自 Kim 的 [1408.5882] Convolutional Neural Networks for Sentence Classification 结…

hadoop安装记录

零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)jdk [rootnode1 ~]# java -version java version "1.8.0_311" Java(TM) SE Runtime Environment (build 1.8.0_311-b11) Java HotSpot(TM) 64-Bit Server VM (…

编写一款2D CAD/CAM软件(十六)交互绘制图形

绘制步骤 以交互绘制圆形为例: 点击鼠标左键,确定圆心位置;抬起鼠标,移动鼠标,半径随鼠标位置变化;点击左键确定半径,完成圆的绘制。 绘制结果 Code /// j-operator-create-circle.h#pragma…

Facebook的区块链应用深度分析

去中心化身份验证的意义 在当今数字化社会中,身份验证的重要性不言而喻。对于Facebook这样的大型社交媒体平台来说,确保用户的身份真实性和数据的安全性是至关重要的。传统的中心化身份验证方式存在一定的安全风险和可信性问题,而去中心化身…