YOLOv5 | 鬼魅(幽灵)卷积 | 改进Ghost卷积轻量化网络

GHostNet网络最通俗易懂的解读【不接受反驳】 如下图所示,是由ResNet-50中的第一个残差块生成的某些中间特征图的可视化。从图中我们可以看出,这里面有很多特征图是具有高度相似性的(在图中分别用不同的颜色示意),换句话说,**就是存在许多的冗余特征图。,即每组的channel数量为1),尽管形式上两者有比较大的差别:分组卷积只进行一次卷积操作即可,而深度可分离卷积需要进行两次——先。之所以在写在前面中提到,本文的题目一定要先是分组卷积再是深度可分离卷积,因为在我看来后者是前者的极端情况(分组卷积的。第二次卷积输出即为深度可分离卷积的输出。 阅读详情

 


专栏目录 :《YOLOv5入门 + 改进涨点》专栏介绍 & 专栏目录 | 目前已有90+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进


目录

原理简介

代码实现

yaml文件实现

检查是否添加执行成功 

完整代码分享 

论文创新必备

启动命令


由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络 (CNN) 很困难。特征图中的冗余是那些成功的 CNN 的一个重要特征,但在神经架构设计中很少被研究。一种新颖的 Ghost 模块,可以通过廉价的操作生成更多的特征图。基于一组内在特征图,以低廉的成本应用一系列线性变换来生成许多鬼特征图,这些特征图可以充分揭示内在特征背后的信息。Ghost 模块可以作为即插即用组件来升级现有的卷积神经网络。 Ghostbottleneck旨在堆叠Ghost模块,然后可以轻松建立轻量级的GhostNet。Ghost 模块是基线模型中卷积层的令人印象深刻的替代品,并且GhostNet 可以比 MobileNetV3 实现更高的识别性能,并且在 ImageNet ILSVRC2012 分类数据集上具有相似的计算成本。

 ⭐欢迎大家订阅我的专栏一起学习⭐

🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀

       YOLOv5涨点专栏:http://t.csdnimg.cn/CNQ32

YOLOv8涨点专栏:http://t.csdnimg.cn/tnoL5

YOLOv7专栏:http://t.csdnimg.cn/HsyvQ

💡魔改网络、复现论文、优化创新💡 

首先引入 Ghost 模块,利用一些小过滤器从原始卷积层生成更多特征图,然后开发一个具有极其高效架构和高性能的新 GhostNet。

原理简介
卷积层和建议的 Ghost 模块的图示,用于输出相同数量的特征图。 Φ 代表廉价操作

深度卷积神经网络通常由大量卷积组成,这会导致巨大的计算成本。尽管 MobileNet 和 ShuffleNet 等最近的工作引入了深度卷积或洗牌操作,以使用较小的卷积滤波器(浮点数操作)构建高效的 CNN,但剩余的 1 × 1 卷积层仍然会占用大量内存和失败。

其中*是卷积运算,b是偏置项,Y ∈ Rh′×w′×n是n个通道的输出特征图,f ∈ Rc×k×k×n是该层的卷积滤波器。另外,h′和w′分别是输出数据的高度和宽度,k×k分别是卷积滤波器f的内核大小。在这个卷积过程中,所需的 FLOP 数量可以计算为 n·h′·w′·c·k·k,由于滤波器数量 n 和通道数量 c 通常为数十万,因此该数量通常高达数十万。非常大(例如 256 或 512)。

利用 Ghost 模块的优点,我们引入了专为小型 CNN 设计的 Ghost 瓶颈(G-bneck)。如图 3 所示,Ghost 瓶颈似乎类似于 ResNet [16] 中的基本残差块,其中集成了多个卷积层和快捷方式。所提出的 Ghost 瓶颈主要由两个堆叠的 Ghost 模块组成。第一个 Ghost 模块充当扩展层,增加通道数量。我们将输出通道数与输入通道数之比称为扩展比。第二个 Ghost 模块减少了通道数量以匹配快捷路径。然后将快捷方式连接在这两个 Ghost 模块的输入和输出之间。批量标准化(BN)[25]和ReLU非线性在每一层之后应用,除了按照MobileNetV2的建议在第二个Ghost模块之后不使用ReLU。上述Ghost瓶颈是针对步长=1的情况。对于stride=2的情况,捷径由下采样层实现,并在两个Ghost模块之间插入stride=2的深度卷积。实际上,这里的 Ghost 模块中的主要卷积是逐点卷积,以提高其效率。 

代码实现
class C3Ghost(C3):
    """C3 module with GhostBottleneck()."""

    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
        """Initialize 'SPP' module with various pooling sizes for spatial pyramid pooling."""
        super().__init__(c1, c2, n, shortcut, g, e)
        c_ = int(c2 * e)  # hidden channels
        self.m = nn.Sequential(*(GhostBottleneck(c_, c_) for _ in range(n)))


class GhostBottleneck(nn.Module):
    """Ghost Bottleneck https://github.com/huawei-noah/ghostnet."""

    def __init__(self, c1, c2, k=3, s=1):
        """Initializes GhostBottleneck module with arguments ch_in, ch_out, kernel, stride."""
        super().__init__()
        c_ = c2 // 2
        self.conv = nn.Sequential(
            GhostConv(c1, c_, 1, 1),  # pw
            DWConv(c_, c_, k, s, act=False) if s == 2 else nn.Identity(),  # dw
            GhostConv(c_, c2, 1, 1, act=False),  # pw-linear
        )
        self.shortcut = (
            nn.Sequential(DWConv(c1, c1, k, s, act=False), Conv(c1, c2, 1, 1, act=False)) if s == 2 else nn.Identity()
        )

    def forward(self, x):
        """Applies skip connection and concatenation to input tensor."""
        return self.conv(x) + self.shortcut(x)

ghost模型的整个结构照搬了mobilenetv3,只是把基本单元给替换掉了,将原本的一步卷积变为两步卷积,第一步首先进行常规卷积,但是减少了输出通道数,第二步在第一步的基础上进行深度可分离卷积(仅取第一步),这里深度可分离卷积跟常规深度可分离卷积有点区别,常规深度可分离卷积(仅取第一步)的输入输出通道数完全相等,卷积核数量也等于输入通道数,这里输出通道数可能是输入通道数的整数倍,卷积核数量等于输出通道数。此外,第二步卷积还有并行的一个连接分支,这个分支直接就是第一步卷积的输出。ghost卷积模块的输出通道数等于第一步卷积后的通道数c加上第二步卷积后的通道数n*c,所以最终通道数为(n+1)*c。此操作的依据是经过观察,发现大部分卷积操作后,输出的特征图很多通道之间存在很高的相似性,那我们就可以经过第一步卷积得到那些没有相似性的通道,然后经过第二步卷积得到剩余那些有相似性的通道

yaml文件实现
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3Ghost, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3Ghost, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3Ghost, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3Ghost, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3Ghost, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3Ghost, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3Ghost, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3Ghost, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]
检查是否添加执行成功 

出现的网络结构变成C3变成C3ghost,则说明添加成功

完整代码分享 

链接: https://pan.baidu.com/s/1N3-7dEdVoMC-QuIGUFpASg?pwd=dwey 提取码: dwey 复制这段内容后打开百度网盘手机App,操作更方便哦

如果报错,请看

解决Yolov5的RuntimeError: result type Float can‘t be cast to the desired output type long int 问题_yolov5 runtimeerror: result type float can't be ca-CSDN博客

启动命令
python train.py model=/path/yolov5_ghost.yaml ...
论文创新必备

​

​

即插即用的涨点模块之变体卷积(Ghost卷积)详解及代码,可应用于检测、分割、分类等各种算法领域 来源:CVPR2020官方代码:https://github.com/huawei-noah/ghostnetGhost 模块是一种针对卷积神经网络(CNN)的创新设计,特别适用于嵌入式设备,这些设备通常具有有限的内存和计算资源。Ghost 模块的核心思想是利用已有的特征图(feature maps)通过低成本的线性变换生成更多的“幽灵”特征图(ghost feature maps),从而提高网络的计算效率。 阅读详情

相关推荐

轻量级网络GhostNet--对卷积的新设计解决特征图冗余的问题

论文地址:华为诺亚方舟实验室 2020 CVPR 《GhostNet: More Features from Cheap Operations》 该论文提供了一个全新的Ghost模块,旨在通过廉价操作生成更多的特征图。基于一组原始的特征图,作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的“Ghost”特征图(Ghost feature maps)。该Ghost模块即插即用,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。

panghuzhenbang的博客 5913

轻量级网络Ghostnet(GhostConv(幻影卷积)、Ghost BottleNeck)详解

该论文提供了一个全新的Ghost模块,旨在通过廉价操作生成更多的特征图。基于一组原始的特征图,作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的“Ghost”特征图(Ghost feature maps)。该Ghost模块即插即用,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。

weixin_43960370的博客 4万+

YOLOv5改进——普通卷积和C3模块更换为GhostConvV2卷积和C3GhostV2模块

解决方法如下:在utils文件夹下,打开torch_utils.py文件,找到model_info函数进行修改。在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。在models文件夹下,新建yaml文件,这里命名为yolov5-GhostNetv2.yaml。--cfg:选用刚刚在models下建立的yolov5-GhostNetv2.yaml。目前主要对--weight、--cfg、--data进行参数设置。--data:选用上面修改过路径的coco.yaml。

2302_80099075的博客 2341

Ghost模块

Ghost模块

zfjBIT的专栏 6832

YOLOv8 | 鬼魅(幽灵)卷积 | 改进Ghost卷积轻量化网络

卷积层和建议的 Ghost 模块的图示,用于输出相同数量的特征图。Φ 代表廉价操作深度卷积神经网络通常由大量卷积组成,这会导致巨大的计算成本。尽管 MobileNet 和 ShuffleNet 等最近的工作引入了深度卷积或洗牌操作,以使用较小的卷积滤波器(浮点数操作)构建高效的 CNN,但剩余的 1 × 1 卷积层仍然会占用大量内存和失败。其中*是卷积运算,b是偏置项,Y ∈ Rh′×w′×n是n个通道的输出特征图,f ∈ Rc×k×k×n是该层的卷积滤波器。

kay_545 4102

yolov8涨点系列之替换幽灵卷积GhostConv

yolov8涨点系列之替换幽灵卷积GhostConv

zhang1379的博客 3562

图像处理-20241101

软池化,ghost卷积,超参数化卷积,注意力机制,csp,letterBox

zxjiaya的博客 1693

WPF插件架构-如何动态加载封装好的第三方DLL的界面

插件架构中如何自动加载第三方DLL中的UI界面

lg24k的博客 1871

GhostNet

论文地址 文章目录前言一、论文解读1.Ghost卷积设计2.Gbneck残差模块设计3.GhostNet网络架构二、代码实现1.卷积模块2.残差模块实现3.网络实现三、验证模型总结 前言 Ghostnet提出自己的架构设计思路:特征图的冗余是深度神经网络成功的一个重要特征。Ghostnet倾向于以一种代价低廉的线性操作来获取它们,而不是避免冗余的特性映射! 一、论文解读 1.Ghost卷积设计 在本文中,我们引入了一个新的Ghost模块,用更少的参数生成更多的特征。具体来说,将深度神经网络中的普通卷.

qq_44840741的博客 7954

了解随机振动疲劳分析中 Ansys nCode DesignLife 的平均应力校正

通过选择静态环境,我们可以将其结果视为疲劳计算的平均应力,如图 3 所示,因此从静态偏移载荷工况中提取的平均应力用于转移预测雨流计数中所有循环的平均值。您可以通过观看下面的教学视频获得宝贵的见解,该视频将指导您完成利用 Ansys nCode DesignLife 分析平均应力对随机振动载荷下结构的影响的过程。它基于 R 比率或平均应力水平。另一方面,平均应力校正可以帮助消除平均应力的负面影响,提高结果的保真度。Ansys nCode 提供先进的平均应力校正技术,使工程师能够考虑平均应力对疲劳寿命的影响。

jkh920184196的博客 1514

【Unity】Unity性能分析解决方案——UPR

由Unity中国团队提供的一套性能优化解决方案,其是一系列性能工具的集合,并可将收集的数据进行可视化。

Davidorzs的博客 1004

【目标检测实验系列】YOLOv5创新点:模型与Ghost卷积结构结合,降低参数量和GFLOPs的同时,保持精度不下降,模型轻量化必备!(内含源代码,超详细改进代码流程)

【目标检测实验系列】YOLOv5创新点:模型与Ghost卷积结构结合,降低参数量和GFLOPs的同时,保持精度不下降,模型轻量化必备!(内含源代码,超详细改进代码流程)

弗兰-随风小欢的博客 6202

软硬件协同设计的大小端问题

缘起 最近需要在soc系统内做协处理器,加速AES加密运算,寄存器一次读取32bit,AES一次处理128bit,因此在数据拼接的时候,需要考虑大小端的问题,特来记录一番。 一、什么是大小端 大小端的问题发生在寄存器和内存间传递数据,这点非常重要,很多地方简单地说是数据存储方式,其实不准确。追根溯源,大小端问题是在设计load,store指令的时候考虑的,因此本质是寄存器和内存交互的问题,其他地方不会发生。 比如c语言里定义一个变量int a=ox1234,那么查看在线汇编平台的对应汇编代码: # 给2号寄

http://www.icfgblog.com/ 609

ghost的网络结构和实现代码总结(torch)

ghost的网络结构和实现代码总结(torch)

BIT_Legend的博客 6345

腾讯WeKnora开源了!手把手教你用Docker+Ollama本地部署多模态知识库(附避坑指南)

本文详细介绍了腾讯开源的多模态知识库工具WeKnora的本地部署方法,通过Docker和Ollama实现完全离线运行。文章包含环境准备、核心组件配置、Ollama模型集成、系统启动验证及高级性能调优等实战内容,特别适合需要构建私有化知识库的中小团队和个人开发者。

weixin_30664051的博客 473

主流双目相机技术参数横向评测:从ZED到INDEMIND的深度解析

本文对主流双目相机进行了深度横向评测,涵盖ZED、Bumblebee、Leap Motion、DUO 3D及INDEMIND等国内外产品。文章详细解析了分辨率、帧率、视场角、基线等核心参数,并结合科研、机器人导航、无人机、工业检测等典型应用场景,提供了实战选型指南,帮助读者根据具体需求挑选最合适的双目视觉解决方案。

weixin_29212867的博客 636

YOLOv5的模型构建源码详解|CSDN创作打卡

深度学习入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 一、碎碎念前情提要 在前面我们已经介绍了YOLOv5的网络框架等,传送门???????????? YOLOv5网络结构详解_tt丫的博客-CSDN博客 那要怎么把它具体地搭建起来呢?那就让我们从源码(YOLOv5源码中的yolo.py的class Model)入手吧 二、def __init__ 1、加载解析yaml配置文件(包含网络参数等等) class Model(nn.

tt丫的博客 8726

【Yolo12改进策略】MRFA 小核协同,构建巨大的感受野,同时保持高斯型分布|即插即用|ICCV2025

本文将介绍如何将 UniConvNet 论文中的核心模块——感受野聚合器集成到 Yolo12中,通过一种新颖的“小核协同”范式,在不显著增加计算开销的前提下,显著提升模型的感受野质量和检测精度。在目标检测中,模型要识别一个物体,不仅需要看到物体的局部特征,更需要理解其周围的上下文信息。传统卷积网络通过堆叠小卷积核(如 3x3)来扩大“感受野”,但这个过程缓慢且效率低下。而近期流行的大核卷积,虽然感受野大,但会破坏“距离越近、影响越大”的自然分布,且带来巨大的计算负担。MRFA 找到了一条“中间道路”:它通过

m0_47867638的博客 921

YOLOv5 源码解析 —— 卷积神经单元

YOLOv5源码中,模型是依靠yaml文件建立的。而yaml文件中涉及到的卷积神经网络单元都是在models文件夹中的common.py声明的,所以自行设计网络结构之前有必要详解这个文件。

荷碧TongZJ 的水文 1万+

我的世界进阶模组开发教程——制作机械动力附属模组

摘要: Create是Minecraft的机械动力模组,其代码结构分为多个关键模块: 数据生成系统:通过CreateRecipeProvider基类实现配方自动化生成,支持多步骤序列化装配配方(SequencedAssemblyRecipeGen),采用建造者模式链式调用; 注册管理:CreateRegistrate扩展了Registrate库,统一管理方块、流体、实体等注册,集成标签页分类和工具提示定制; 伤害系统:DamageTypeTagGen为机械伤害(如钻头、风扇火焰)定义原版兼容的标签; 客户端

qq_24992377的博客 2078

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/

汇总一些卷积操作

Coding... 7415

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

GhostNet(CVPR2020)

参考:https://www.wanglichun.tech/2020/03/08/ghostnet/ 论文链接:https://arxiv.org/abs/1911.11907 作者解读:https://zhuanlan.zhihu.com/p/109325275 开源代码:pytorch :https://github.com/iamhankai/ghostnet.pytorch/blob/master/ghost_net.py 本篇论文是发表于CVPR2020的一篇轻量级网络的论...

weixin_62848630的博客 3425

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【保姆级教程|YOLOv8替换卷积】替换改进GhostConv模块(轻量化网络)(包运行)(毕设、小论文必看)

博客主要详细教学了在YOLOv8中替换GhostConv的超详细步骤,基本大家只要按步骤来就肯定可以复现成功,后续博主也会再更新一些关于YOLOv8的其他改进方法,期待大家多多关注!!!大家有想看的内容也可以在评论区留言!

anzhi_1211的博客 7994

目标检测算法——YOLOv5/YOLOv7改进结合轻量型Ghost模块

将轻量型的Ghost模块与YOLOv5算法相结合,进一步降低网络参数量,使模型轻量化的同时加快网络推理速度。

加勒比海带66——【YOLO魔法搭配&论文投稿咨询&Python科研绘图】 2万+

GhostNet学习记录:

简单的记录一下对ghostnet的学习。1、要解决的问题:作者提出,在一个训练好的神经网络中,会存在很多的冗余特征,如下图(图出自论文),而这些冗余的特征可以通过一些廉价的操作从别的特征图变换中得到。因此作者的想法是,通过卷积得到一部分的特征,然后通过一些廉价的操作从这些特征图中得到冗余的特征。2、ghost卷积:卷积过程:(1)先通过卷积生成一部分的特征图。(2)对每个通道通过廉价的线性变换(其实就是对每个通道进行一次卷积,等价于深度卷积)。

liyun52的博客 834

YOLOv9独家原创改进|加入幽灵卷积Ghost Convolution模块,轻量化!

由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络是困难的。特征图中的冗余是那些成功的细胞神经网络的一个重要特征,但在神经结构设计中很少进行研究。本文提出了一种新的Ghost模块,通过少量的计算生成更多的特征图。基于一组内在特征图,我们以低廉的成本应用一系列线性变换来生成许多重影特征图,这些重影特征图可充分揭示内在特征背后的信息。所提出的Ghost模块可以作为即插即用组件来升级现有的卷积神经网络。Ghost瓶颈被设计为堆叠Ghost模块,然后可以轻松地建立轻量级GhostNet。

深度学习炼丹师,偶尔分享炼丹技术! 8122
上一篇: YOLOv8 | 鬼魅(幽灵)卷积 | 改进Ghost卷积轻量化网络
下一篇: YOLOv2,v3,v4,v5,FCOS,YOLOX总结(anchor base/anchor free)
kay_545
kay_545 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄5年 3万+粉丝 442原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay_545

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值