GhostNet

news2024/11/17 12:32:47

文章目录

  • 相关文章
  • 一、轻量化网络结构
    • 1. 分组卷积
    • 2. 深度可分离卷积
  • 二、GhostNet
    • 1. 动机
    • 2. Ghost Module

相关文章

https://blog.csdn.net/search_129_hr/article/details/130280697

https://blog.csdn.net/c2250645962/article/details/104601305

一、轻量化网络结构

目的就是减少网络的计算量

同时也需要保证模型的精确度

1. 分组卷积

将输入特征图按通道均分为 g 组,然后对每一组进行常规卷积

由于分组后,每组输入特征图的通道数为 C i n g \frac{C_{in}}{g} gCin ,所以每个卷积核的通道数也降低到 C i n g \frac{C_{in}}{g} gCin

由于每组内进行的是常规卷积,所以每组至少需要一个卷积核,即分组卷积输出通道数至少为 g,如果每组有 n 个卷积核,则输出 C o u t = n × g , n ≥ 1 C_{out} = n \times g, n \ge 1 Cout=n×g,n1, 所以输出通道数是分组数的整数倍

综上所述,分组卷积中要求输入和输出通道数均能整除分组数 g

分组卷积的运算量和参数量的减少,归根结底是一个卷积核本身通道数减少为原来的 g 分之一

2. 深度可分离卷积

一种极致的分组卷积:当分组数等于输入通道数,且等于输出通道数,即 g = C i n = C o u t g=C_{in}=C_{out} g=Cin=Cout 时,我们把分组卷积称为深度可分离卷积,此时每个输出特征图仅仅与一个输入特征图相关,输入和输出一一对应。

由于深度可分离卷积每个输出通道仅由输入的一个通道得来,缺乏了输入通道之间的信息交换,所以通常在后面加一个1x1卷积来实现通道间的信息交换。

二、GhostNet

1. 动机

卷积的目的就是生成多个特征图,要减少卷积操作的运算量,在之前的网络结构中使用了分组卷积和深度可分离卷积的方法,这些是使用新的运算操作来替换掉传统的卷积操作。

GhostNet 这篇文件核心就是观察到通过传统卷积方式得到的特征图之间存在相似。那么能不能通过一种特殊的方式直接利用一个特征图生成另一个与之相似的特征图。

2. Ghost Module

结合上图,传统卷积是 Input 经过 (a) 中卷积层得到通道数为 n 的 Output。

在 Ghost Module 中,Input 先经过传统卷积得到通道数为 m 的特征图,但是最终需要的 Output 是 n 的通道数,Ghost Module 就需要把 m 个通道扩展到 n 个通道。

论文中提到对每个固有特征图进行一系列的线性变换生成 s 个特征图。那么就有等式

n = m × s n = m \times s n=m×s

如何实现扩充操作如下列式子所示:

y i ′ y^{'}_{i} yi 表示由传统卷积得到的第 i i i 个通道的特征图

y i j y_{ij} yij 表示由第 i i i 个通道得到的第 j j j 个特征图

Φ i , j \Phi_{i,j} Φi,j 表示线性变换,是指将第 i i i 个通道的特征图,经过线性变换得到第 j j j 个特征图

???疑问 ???

  • 怎么选择 y i ′ y^{'}_{i} yi , 也就是怎么得到模块中所需要的通过传统卷积产生的特征图?

  • 线性变换的具体操作是什么?

在代码中可以看见下面部分

        init_channels = math.ceil(oup / ratio)
        new_channels = init_channels*(ratio-1)

        self.primary_conv = nn.Sequential(
            nn.Conv2d(inp, init_channels, kernel_size, stride, kernel_size//2, bias=False),
            nn.BatchNorm2d(init_channels),
            nn.ReLU(inplace=True) if relu else nn.Sequential(),
        )

        self.cheap_operation = nn.Sequential(
            nn.Conv2d(init_channels, new_channels, dw_size, 1, dw_size//2, groups=init_channels, bias=False),
            nn.BatchNorm2d(new_channels),
            nn.ReLU(inplace=True) if relu else nn.Sequential(),
        )

    def forward(self, x):
        x1 = self.primary_conv(x)
        x2 = self.cheap_operation(x1)
        out = torch.cat([x1,x2], dim=1)

那么通过代码可以看见所谓的线性变换就是进行了深度可分离卷积

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

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

相关文章

信息收集(一)域名信息收集

前言 信息收集也叫做资产收集。信息收集是渗透测试的前期主要工作,是非常重要的环节,收集足够多的信息才能方便接下来的测试,信息收集主要是收集网站的域名信息、子域名信息、目标网站信息、目标网站真实IP、敏感/目录文件、开放端口和中间件…

052:cesium加载网格地图

第052个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载grid地图。一个 ImageryProvider,它在每个具有可控背景和发光的图块上绘制线框网格。 可能对自定义渲染效果或调试地形很有用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 …

redis 教程 6(Redis 的Pipeline , Lua)

Redis 的Pipeline, Lua PipelinePipeline简介为什么需要PipelinePipeline 性能测试与原生批量命令对比 LuaLua 与事物Lua 的用法Redis 如何管理Lua脚本 Pipeline Pipeline简介 Pipeline(流水线) 能够将一组redis命令进行组装, 通过一次RTT&…

fmriprep2

一. sub-subXXX文件夹 sub-subXXX.html 二. sub-subXXX文件夹 sub-sub097 / anat / figures / func / log / anat / anat文件夹内文件比较多,文件命名规则遵守BIDS要求( https://bids-specification.readthedocs.io/en/stable/05-derivatives/01-introduction.ht…

【国内chatgpt使用方法合集】

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

2023_4_23_VS下Release怎么打断点进行debug

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

MySQL——流程控制函数

在 MySQL 中,流程控制函数是指可以控制存储过程(stored procedure)或函数(function)中执行流程的语句。以下是几个常用的流程控制函数: 1. IF函数 实现IF……ELSE……的效果。 # 如果expr1为true&#x…

深入探究java中的 xxxable和xxxator

前言 相信有一定工作经验的朋友,都见过或者用过xxxable和xxxator ,比如常见的Comparable和Comparator, 还有还有常见并且容易迷糊的Iterable和Iterator, 看这名字,前两个是和比较相关的, 后两个是和迭代相关. 但是命名如此相似的接口, 又有何区别呢?各自的用途又是什么呢? 今…

详解车载设备FOTA测试

作者 | 李伟 上海控安安全测评部总监 来源 | 鉴源实验室 引言:上一篇文章我们以车载Tbox为例介绍了相关的性能测试(车载TBOX嵌入式设备软件的性能测试),本篇我们介绍另外一个重要功能的专项测试:OTA(Over…

MySQL安装及卸载

安装 mysql现在安装的是5.7.mysql的安装方式有两种: 一种是exe方式 另外一种解压版 这次就使用解压版安装 解压缩到非中文目录 编写配置文件 1) 在安装目录下新建my.ini的配置文件 打开文件后缀和隐藏文件显示 2) 新建文件内编写内容 [Client] port 3306 [mysqld] #设置330…

【移植Ardupilot的日志记录方法到linux上】

移植Ardupilot的日志记录方法到linux上 说明日志结构组成日志写入操作预定义日志项运行时添加日志项的方法 单例测试编译方法查看数据其他 说明 采用二进制文件记录,可在mission planer查看 支持所有数据类型记录精巧移植方便可直接在地面站绘制曲线查看可导出生成…

觉非科技发布:基于BEV的数据闭环融合智驾解决方案

2023年上海车展期间,觉非科技基于BEV的数据闭环融合智能驾驶解决方案正式发布。 该方案可通过量产车BEV的实时感知结果,提供完整的城市Map-lite及Map-free数据闭环融合解决方案,并满足城市NOA、记忆通勤/泊车以及感知大模型训练的需要。 车…

OSPF基础配置实验

目录 一、实验要求与拓扑结构 1、实验要求 2、提前规划好的网段以及拓扑结构如下图 二、实验步骤 1、给各个路由器的每个接口配ip 2、运行ospf协议并划分区域 一、实验要求与拓扑结构 1、实验要求 首先划分区域,蓝色区域为Area 0,黄色区域为Area…

MyBatis(十五)MyBatis的逆向工程

前言、 所谓的逆向工程是:根据数据库表逆向生成Java的pojo类,SqlMapper.xml文件,以及Mapper接口类等。 要完成这个工作,需要借助别人写好的逆向工程插件。 思考:使用这个插件的话,需要给这个插件配置哪些…

基于 TensorRT 使用 python 进行推理优化

文章大纲 简介TensorRT 简介构建测试的conda 环境注意事项TensorRT 安装参考文献与学习路径简介 TensorRT 简介 TensorRT是NVIDIA推出的一个高性能的深度学习推理框架,可以让深度学习模型在NVIDIA GPU上实现低延迟,高吞吐量的部署。TensorRT支持Caffe,TensorFlow,Mxnet,P…

【Python】实战:生成无关联单选问卷 csv《压疮风险评估表》

目录 一、适用场景 二、业务需求 三、Python 文件 (1)创建文件 (2)代码示例 四、csv 文件 一、适用场景 实战场景: 问卷全部为单选题问卷问题全部为必填问题之间无关联关系每个问题的答案分数不同根据问卷全部问…

FPGA基于XDMA实现PCIE X8采集AD7606数据 提供工程源码和QT上位机程序和技术支持

1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串行连接,比起 PCI 以及更早期的计算机总线的共享并行架构,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把数据传输率提高到一个很…

倍数+路径之谜

倍数 :用户登录https://www.lanqiao.cn/problems/583/learning/?page5&first_category_id1&sortstudents_count 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 请问在 1 到 2020 中,有多少个…

Java十大排序算法

排序算法 对一序列对象根据某个关键字进行排序 (1)稳定性 在排序中对于相等的两个元素a、b。如果排序前a在b的前边,排序之后a也总是在b的前边。位置不会因为排序而改变称之为稳定。反之,如果排序后a、b的位置可能会发生改变&am…

Java线程池从入门到精通(线程池实战)

参考 java常用线程池及它们的适用场景(JDK1.8) Java线程与线程池实战 线程池的拒绝策略_线程池 RejectedExecutionHandler 拒绝策略 ThreadPoolExecutor原理解析-关闭线程池 代码经验—java获取cpu个数-docker 一、概念 Java 中的线程池核心实现类是 …