YOLOv10改进教程|C2f-CIB加入注意力机制

news2024/10/5 19:09:55


  一、 导读

        论文链接:https://arxiv.org/abs/2311.11587

        代码链接:GitHub - CV-ZhangXin/AKConv

 YOLOv10训练、验证及推理教程


二、 C2f-CIB加入注意力机制

2.1 复制代码

        打开ultralytics->nn->modules->block.py文件,复制SE注意力机制(也可以自行换成别的)代码,并创建C2fCIBAttention代码,如下图所示:

class SE(nn.Module):
    def __init__(self, channel, reduction=16):
        super().__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)


class C2fCIBAttention(nn.Module):
    """Faster Implementation of CSP Bottleneck with 2 convolutions."""

    def __init__(self, c1, c2, n=1, shortcut=False, lk=False, g=1, e=0.5):
        """Initialize CSP bottleneck layer with two convolutions with arguments ch_in, ch_out, number, shortcut, groups,
        expansion.
        """
        super().__init__()
        self.c = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, 2 * self.c, 1, 1)
        self.cv2 = Conv((2 + n) * self.c, c2, 1)  # optional act=FReLU(c2)
        self.m = nn.ModuleList(CIB(self.c, self.c, shortcut, e=1.0, lk=lk) for _ in range(n))
        self.atten = SE(C2)

    def forward(self, x):
        """Forward pass through C2f layer."""
        y = list(self.cv1(x).chunk(2, 1))
        y.extend(m(y[-1]) for m in self.m)
        return self.atten(self.cv2(torch.cat(y, 1)))

    def forward_split(self, x):
        """Forward pass using split() instead of chunk()."""
        y = list(self.cv1(x).split((self.c, self.c), 1))
        y.extend(m(y[-1]) for m in self.m)
        return self.cv2(torch.cat(y, 1))

        并在上方声明C2fCIBAttention类。

        在nn.models.__init__.py中声明 C2fCIBAttention。

2.2 修改tasks.py 

       打开ultralytics->nn->tasks.py,如图所示操作。

​2.3 修改yolov10n.yaml

        将yolov10n.yaml文件中的C2fCIB替换为C2fCIBAttention。

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]

backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, PSA, [1024]] # 10

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 19 (P4/16-medium)

  - [-1, 1, SCDown, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIBAttention, [1024, True, True]] # 22 (P5/32-large)

  - [[16, 19, 22], 1, v10Detect, [nc]] # Detect(P3, P4, P5)


 2.5 修改train.py文件

        在train.py脚本中填入yolov10n.yaml路径,运行即可训练。


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

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

相关文章

快排的实现

引言 作为c语言库函数的一种,快排在排序中的地位毋庸置疑. 而更加具体的实现如图: 快排的实现(递归实现) 原理 单趟:先假定第一个数设为key,如果左边指针的值比key大,且右边指针的值比key小,则将其交换.…

无线领夹麦克风有什么用,揭秘唱歌不费力的无线麦克风

随着自媒体行业的快速扩张,人们对音频录制设备的要求日益增长,麦克风作为核心设备之一,其重要性不言而喻。技术的演进使得麦克风从简单的无线小蜜蜂发展到多功能的数字领夹麦克风,满足了多样化的录制需求。然而,一个视…

昇思MindSpore学习总结八——模型保存与加载

在训练网络模型的过程中,实际上我们希望保存中间和最后的结果,用于微调(fine-tune)和后续的模型推理与部署,接下来将介绍如何保存与加载模型。 1.构建模型 import numpy as np import mindspore from mindspore impo…

别再被大模型骗了,一个小技巧,让LLaMa3诚信度提升65%

人工智能正以惊人的速度发展,大语言模型(LLM)作为其中的"明星",展现了令人赞叹的语言理解和生成能力。然而,在享受大语言模型带来便利的同时,我们也必须正视其在诚实性和安全性方面所面临的挑战。 近期,华中…

CSF视频文件格式转换WMV格式(2024年可用)

如果大家看过一些高校教学讲解视频的话,很可能见过这样一个难得的格式,".csf ",非常漂亮 。 用暴风影音都可以打开观看,会自动下载解码。 但是一旦我们想要利用或者上传视频的时候就麻烦了,一般网站不认这…

3个企业级最佳实践,教你ByteHouse云数仓这么用

随着各业务场景各行业数字化转型加快,数据量呈爆炸式增长。在拥有庞大数据的同时,业务也在分析、查询与响应层面,对数据库系统性能提出了更高要求。云原生技术推动了分布式数据库系统的迭代升级,对云数仓技术而言,“写…

MacBook关闭谷歌浏览器双指左右移动(扫动)前进后退功能

这个功能真的很反人类,正常上下滑动页面的时候很容易误操作,尤其是当你在一个页面上做了很多的编辑工作后误触发了此手势,那真叫一个崩溃! 其实这应该是 Macbook 触控板提供的一个快捷操作,跟浏览器本身估计没关系&am…

mysql-sql-第十三周

学习目标: sql 学习内容: 37.查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>60,中等为:70-80,优良为:80-90,优秀…

使用Comsol进行边坡稳定性分析的例子——详细步骤(第二部分)

使用Comsol进行边坡稳定性分析的例子——详细步骤 研究1方法结果书接上回 在FOS参数的帮助下,对材料强度进行参数化。在第二个研究步骤中添加 FOS 的辅助扫描。对于某些 FOS 值,解不会收敛,并且设置为最后一个 FOS 值的默认图将给出错误。禁用此研究的默认绘图以避免出现错误…

65、基于卷积神经网络的调制分类(matlab)

1、基于卷积神经网络的调制分类的原理及流程 基于卷积神经网络(CNN)的调制分类是一种常见的信号处理任务,用于识别或分类不同调制方式的信号。下面是基于CNN的调制分类的原理和流程: 原理: CNN是一种深度学习模型&a…

root密码忘了怎么办(从系统引导过程解决)

目录 1.Linux系统密码忘记 2.系统引导过程 2.1 systemd 2.2 GRUB和GRUB2 2.3 运行级别 3.修复MBR扇区故障和GRUB引导故障 3.1 MBR扇区故障 3.2 GRUB引导故障 1.Linux系统密码忘记 我们在生活中经常遇到这类困扰,就是某个账号还是账户密码忘了,这…

Llama也能做图像生成?文生图模型已开源

导读 基于next-token prediction的图像生成方法首次在ImageNet benchmark超越了LDM, DiT等扩散模型,证明了最原始的自回归模型架构同样可以实现极具竞争力的图像生成性能。 Llama也能做图像生成?文生图模型已开源 香港大学、字节跳动提出了基于自回归模…

【AI大模型】大型模型飞跃升级—文档图像识别领域迎来技术巨变_图像识别大模型

写在前面 2023年12月31日,第十九届中国图象图形学学会青年科学家会议在广州举行,由中国图象图形学学会主办。 该会议的目标是促进青年科学家之间的交流与合作,以提升我国在图像图形领域的科研水平和创新能力。 由中国图象图形学学会和上海合合…

如何将音频文件发送至摄像头

目前再很多互联互通的场景下,如AI盒子再从摄像头上取视频分析,分析出发生某个事件,需要反向通过摄像头的喇叭播放语音,发出告警提示,使用场景如下 盒子上对于此类场景的需求往往不能满足,或者为这个需求需要…

Day8: 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项

题目232. 用栈实现队列 - 力扣(LeetCode) class MyQueue { public:MyQueue() {}void push(int x) { // 出栈input.push(x);}int pop() {// 如果出栈为空,把入栈元素全都转移到出栈if (output.empty()) {while (!input.empty()) {int itop i…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第52课-语音控制机器人

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第52课-语音控制机器人 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…

彭涛 | 2024年6月小结

6月是忙碌的一个月,换办公室,买家具,群发售,新小伙伴入职等等 1、出海小报童 这个月时间主要做小报童,从刚开始设计内容大纲,到写作,后续拉新花费了大量时间。 比如我们要去调研同行&#xff0c…

新能源行业必会基础知识-----电力市场概论笔记-----中长期合约电力市场

新能源行业知识体系-------主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/139946830 目录 1. 合约市场2. 双边交易3. 集中交易4. 挂牌交易及互联网中长期电力交易平台5. 中长期交易的优势 1. 合约市场 什么是合约市场 …

从选题到定稿:软考高级系统架构设计师论文写作全攻略

一、论文考试概述 软考系统架构设计师考试的最后一门是论文写作,安排在下午进行,时长两小时,要求撰写约3000字的论文,以45分为及格线。时间紧迫,不容过多犹豫与思考,因此需迅速选定并着手撰写。论文题目通…

【数据结构】C语言实现二叉树

C语言实现二叉树 导读一、二叉树的数据类型二、二叉树的初始化2.1 补充知识点——传址传参2.2 补充知识点——指针传参 三、二叉树的创建3.1 通过添加结点创建BST3.2 通过结点序列创建二叉树3.2.1 由遍历序列手算构建二叉树3.2.1.1 构建步骤3.2.1.2 习题演练3.2.1.3 小结 3.2.2…