YOLOv10优改系列一:YOLOv10融合C2f_Ghost网络,让YoloV10实现性能的均衡

简介: 本文介绍了YOLOv10的性能优化,通过融合Ghost模块和C2f结构,实现了网络性能的均衡。GhostNet通过GhostModule和GhostBottleNeck减少参数量,适用于资源有限的场景。YOLOv10-C2f_Ghost在减少参数和计算量的同时,保持了与原始网络相当或更好的性能。文章还提供了详细的代码修改步骤和可能遇到的问题解决方案。

一、Ghost Net介绍

🌳论文地址点击
🌳源码地址点击
🌳论文摘要:GhostNet是一种轻量级的深度学习模型,通过GhostModule和GhostBottleNeck实现高效特征提取。GhostModule通过1x1卷积和深度可分离卷积生成更多特征图,减少参数量。GhostBottleNeck则是GhostModule的瓶颈结构,用于构建网络深度。GhostNet适用于资源有限的场景,如移动设备上的图像分类任务。
🌳主要思想:(1)对卷积进行改进(2)加残差连接
🌳解决方法

  1. Ghost模块通过减少卷积核的数量来降低参数数量和计算量。例如,如果输出特征图的数量是原始卷积的两倍,那么Ghost模块会先通过普通卷积生成一半数量的特征图,然后通过深度可分离卷积生成另一半特征图,这样总体的参数数量和计算量就减少了。尽管GhostNet减少了参数和计算量,但它仍然能够提供与原始网络相当或更好的性能

🌳工作原理
   GhostNet的核心是Ghost模块,它通过廉价操作生成更多的特征图。在标准的卷积操作中,输出特征图是通过输入特征图与卷积核的卷积得到的。Ghost模块首先使用普通卷积生成一部分特征图(称为intrinsic特征图),然后通过深度可分离卷积(depthwise convolution)等廉价操作生成额外的特征图(称为ghost特征图)。最后,将这两部分特征图拼接起来,形成最终的输出特征图。

   在后续的版本GhostNetV2中,引入了一种新的注意力机制,称为DFC(Decoupled Fully Connected)注意力,它通过全连接层捕捉长距离像素之间的依赖关系,进一步提高了网络的性能。

🌳网络结构和相关图
在这里插入图片描述
可以很明显地看到很多特征图存在着非常类似的特征,只不过是颜色的深浅的区别,为了减少计算的复杂度,很自然地就会去想是不是可以去除这些过于类似的冗余特征图。然而,作者在文中指出冗余的特征图对于模型的精度还是起着很重要的作用的,因此不能简单地减少特征图的生成数量来实现高效计算。
在这里插入图片描述
GhostModule,将普通的卷积分为了两步,先生成主要的特征图,再由主要的特征图做简单的卷积变换生成幻象特征图,这样可以大大减少计算的开销。

在这里插入图片描述

Ghost Bottlenecks是由Ghost Module组成的瓶颈结构,其实本质上就是用Ghost Module,来代替瓶颈结构里面的普通卷积。

Ghost Bottlenecks有两个种类(输入进来的步长为1选第一种,输入进来的步长为2选第二种),如下图所示。先来看第一个Ghost Bottleneck,可以分为两个部分,分别是主干部分和残差边部分。在主干部分,使用两个ghost模块对输入的特征层进行特征提取;在残差边部分,什么都不处理,直接将输入和输出进行逐元素求和。这样,第一个瓶颈结构就构建完成了,由于它的步长为1,所以不会对输入进来的特征图进行高和宽的压缩,它的功能是加深网络的深度。

当我们需要对特征层的宽高进行压缩的时候,需要设置第二个Ghost Bottlenecks,即在Bottlenecks里添加一些卷积层。在主干部分里,首先用ghost module进行特征提取,提取完成后使用一个步长为2的深度可分离卷积对输入特征层进行高和宽的压缩,然后再用一个ghost模块进行特征提取。在残差边部分,也会添加上一个步长为2的深度可分离卷积和1x1的普通卷积,然后将输入和输出进行相加。第二个瓶颈结构的步长为2,它的功能就是改变输入特征层的宽高。

二、C2f和C2f_Ghost复杂度对比

YOLOv10默认使用C2f模块
YOLOv10-C2f_Ghost:针对主干网络部分的C2f替换成C2f_Ghost模块

YOLOv10s summary: 402 layers, 8074092 parameters, 8074076 gradients, 24.8 GFLOPs
YOLOv10s-C2f_Ghost summary: 468 layers, 7346756 parameters, 7346740 gradients, 20.3 GFLOPs
在这里插入图片描述

三、核心代码修改

3.1 修改yaml配置文件

复制一份ultralytics\cfg\models\v8\yolov10.yaml下的yolov8.yaml文件到v8根目录文件my_code/yolov10/my_files/yamls
在YOLOv10根目录创建一个my_files/yamls的文件夹,将yolov10/ultralytics/cfg/models/v10/yolov10s.yaml复制一份到yolov10/my_code/yolov10/my_files/yamls/yolov10s.yaml,然后yolov10/my_code/yolov10/my_files/yamls/yolov10s.yaml复制一份为yolov10/my_code/yolov10/my_files/yamls/yolov10s-C2f_Ghost.yaml。
在这里插入图片描述
下面是yolov10s-C2f_Ghost.yaml配置文件

配置文件,可通过关注公众号【AI应用视界】(或者扫描最下面的二维码关注)
    输入关键字 yolov10+c2f_ghost自动获取

3.2 创建模块文件

ultralytics\nn\modules,在此路径下新建专门存放我们新添加的模块文件夹my_file(好区分),然后在此文件夹下新建ghost.py,添加以下内容:

核心模块文件,可通过关注公众号【AI应用视界】(或者扫描最下面的二维码关注)
    输入关键字 yolov10+c2f_ghost自动获取

3.3 修改task.py文件

在ultralytics\nn文件夹中找到tasks.py文件,并对以下内容(#todo)进行添加。

  1. 第一步,导入C2f_Ghost
  2. 第二步,在parse_model函数中加入下面虚线中的代码
###############################################第一步
from ultralytics.nn.modules import C2f_Ghost # 导入C2f_Ghost 模块
#################################################
###############################################第二步
        elif m is AIFI:
            args = [ch[f], *args]
        #---------------------------------------------------add
        elif m in [C2f_Ghost]:
            c1, c2 = ch[f], args[0]
            if c2 != nc:  # if not output
                c2 = make_divisible(min(c2, max_channels) * width, 8)
            args = [c1, c2, *args[1:]]
            if m in [C2f_Ghost]:
                args.insert(2, n)  # number of repeats
                n = 1
        #---------------------------------------------------add
        elif m in {HGStem, HGBlock}:
            c1, cm, c2 = ch[f], args[0], args[1]
            args = [c1, cm, c2, *args[2:]]
            if m is HGBlock:
                args.insert(4, n)  # number of repeats
                n = 1
#################################################

3.5 修改__init__.py文件

ultralytics\nn\modules_init_.py,首先在ultralytics\nn\modules新建my_file文件夹,在此文件夹下创建ghost.py,并添加导入此模块,以及在__all__中写入此模块名。

...................
from .my_file.ghost import C2f_Ghost # add

__all__ = (
    "Conv",
    "Conv2",
    #-----------------
    "C2f_Ghost",
    #-----------------
    "LightConv",

3.6 修改训练代码

from ultralytics import YOLOv10
import os
os.environ["GIT_PYTHON_REFRESH"] = "quiet"
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
if __name__ == '__main__':
    model = YOLOv10('my_files/yamls/yolov10s.yaml')
    result = model.train(data="data/data.yaml", epochs=100, workers=1, batch=1, imgsz=416, amp=False, device="cpu")

###################################################################################  恢复训练代码,注释掉上面的部分
# model = YOLOv10("runs/det/train/weights/best.pt")  # 指定想要恢复训练的pt文件
# if __name__ == '__main__':
#     model.train(data="data/data.yaml", resume=True, imgsz=416, batch=16, workers=4, epochs=100, amp=False, project="runs/det")  # 恢复训练模型

运行此代码即可将C2f_Ghost结合YOLOv10进行训练

四、问题总结

  1. ModuleNotFoundError: No module named ‘timm’:
  2. ModuleNotFoundError: No module named ‘einops’
  3. ModuleNotFoundError: No module named ‘hub_sdk’:
  4. ModuleNotFoundError: No module named ‘mmcv’

微信公众号搜索方式:1.AI应用视界;2.可根据CSDN下方名片进行搜索

在这里插入图片描述

目录
相关文章
|
4月前
|
机器学习/深度学习 自然语言处理 数据可视化
基于图神经网络的自然语言处理:融合LangGraph与大型概念模型的情感分析实践
本文探讨了在企业数字化转型中,大型概念模型(LCMs)与图神经网络结合处理非结构化文本数据的技术方案。LCMs突破传统词汇级处理局限,以概念级语义理解为核心,增强情感分析、实体识别和主题建模能力。通过构建基于LangGraph的混合符号-语义处理管道,整合符号方法的结构化优势与语义方法的理解深度,实现精准的文本分析。具体应用中,该架构通过预处理、图构建、嵌入生成及GNN推理等模块,完成客户反馈的情感分类与主题聚类。最终,LangGraph工作流编排确保各模块高效协作,为企业提供可解释性强、业务价值高的分析结果。此技术融合为挖掘非结构化数据价值、支持数据驱动决策提供了创新路径。
275 6
基于图神经网络的自然语言处理:融合LangGraph与大型概念模型的情感分析实践
|
2月前
|
机器学习/深度学习 数据采集 算法
贝叶斯状态空间神经网络:融合概率推理和状态空间实现高精度预测和可解释性
本文将BSSNN扩展至反向推理任务,即预测X∣y,这种设计使得模型不仅能够预测结果,还能够探索特定结果对应的输入特征组合。在二元分类任务中,这种反向推理能力有助于识别导致正负类结果的关键因素,从而显著提升模型的可解释性和决策支持能力。
210 42
贝叶斯状态空间神经网络:融合概率推理和状态空间实现高精度预测和可解释性
|
7月前
|
编解码 异构计算
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
474 10
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
|
7月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
255 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
4月前
|
存储 消息中间件 弹性计算
阿里云服务器ECS计算型c7和通用算力型u1在适用场景、计算性能、网络与存储性能等方面的对比
阿里云ECS服务器u1和c7实例在适用场景、性能、处理器特性等方面存在显著差异。u1为通用算力型,性价比高,适合中小企业及对性能要求不高的场景;c7为企业级计算型,采用最新Intel处理器,性能稳定且强大,适用于高性能计算需求。u1支持多种CPU内存配比,但性能一致性可能受底层平台影响;c7固定调度模式,确保高性能与稳定性。选择时可根据预算与性能需求决定。
265 23
|
7月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
374 62
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
5月前
|
传感器 存储 算法
基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真
本程序基于ECC(椭圆曲线密码学)簇内分组密钥管理算法,对无线传感器网络(WSN)进行MATLAB性能仿真。通过对比网络通信开销、存活节点数量、网络能耗及数据通信量四个关键指标,验证算法的高效性和安全性。程序在MATLAB 2022A版本下运行,结果无水印展示。算法通过将WSN划分为多个簇,利用ECC生成和分发密钥,降低计算与通信成本,适用于资源受限的传感器网络场景,确保数据保密性和完整性。
|
6月前
|
机器学习/深度学习 测试技术 网络架构
FANformer:融合傅里叶分析网络的大语言模型基础架构
近期大语言模型(LLM)的基准测试结果显示,OpenAI的GPT-4.5在某些关键评测中表现不如规模较小的模型,如DeepSeek-V3。这引发了对现有LLM架构扩展性的思考。研究人员提出了FANformer架构,通过将傅里叶分析网络整合到Transformer的注意力机制中,显著提升了模型性能。实验表明,FANformer在处理周期性模式和数学推理任务上表现出色,仅用较少参数和训练数据即可超越传统Transformer。这一创新为解决LLM扩展性挑战提供了新方向。
170 5
FANformer:融合傅里叶分析网络的大语言模型基础架构
|
7月前
|
机器学习/深度学习 编解码 计算机视觉
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
312 10
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
|
7月前
|
人工智能 监控 物联网
写在2025 MWC前夕:AI与移动网络融合的“奇点时刻”
2025年MWC前夕,AI与移动网络融合迎来“奇点时刻”。上海东方医院通过“思维链提示”快速诊断罕见病,某金融机构借助AI识别新型欺诈模式,均展示了AI在推理和学习上的飞跃。5G-A时代,低时延、大带宽特性支持端云协同,推动多模态AI感知能力提升,数字孪生技术打通物理与数字世界,助力各行业智能化转型。AI赋能移动网络,实现智能动态节能和优化用户体验,预示着更聪明、绿色、高效的未来。
122 1

热门文章

最新文章