RepGhost 解析

news2024/12/25 9:21:39

paper:RepGhost: A Hardware-Efficient Ghost Module via Re-parameterization

official implementation:https://github.com/chengpengchen/repghost

存在的问题 

特征重用feature reuse是轻量网络设计中常用的一种技术,现有的方法通常使用拼接操作concatenation operator来重用其它层的feature map,从而保持大的通道数以及大的网络容量。尽管拼接操作是parameter-free和FLOPs-free的,但它在硬件设备上的计算成本是不可忽略的。这是因为参数和FLOPs并不是模型实际运行时直接的成本指标(延迟latency是),作者通过实验证明,由于其复杂的内存拷贝,concatenation操作要比add操作低效的多。

本文的创新点

为了解决上述问题,本文提供了一个新的视角来实现特征重用——结构重参数化。本文并不仅仅是将重参数化技术直接应用到现有的Ghost module中,而是利用重参数技术改进Ghost module从而实现更快的推理。作者通过重参数化实现隐式特征重用,替代了拼接操作,提出了一种新的在硬件上高效的RepGhost module。然后又在RepGhost模块的基础上设计了一个高效的RepGhost bottleneck以及RepGhostNet。

本文的贡献总结如下

  • 本文指出,在硬件高效的结构设计中,拼接操作对于特征重用不是无成本和必不可少的,并提供了一个新的视角——通过结构重参数化来实现特征重用。
  • 本文设计了一种新的RepGhost module,可以实现隐式特征重用,并设计了一种比GhostNet和MobileNetV3更hardware-efficient的RepGhostNet。
  • 通过实验表明,本文提出的RepGhostNet在多个视觉任务上比之前的最先进的轻量级网络的性能更好,并且延迟更低。

方法介绍

作者首先对比了拼接和相加操作的延迟,以GhostNet 1.0x为例,把所有的拼接操作换成相加进行对比,结果如表1所示,可以看出,拼接的延迟基本是相加的两倍。

Re-parameterization vs. Concatenation

设 \(y\in \mathbb{R}^{N\times C_{out}\times H\times W}\) 表示通道数为 \(C_{out}\) 的输出,\(x\in \mathbb{R}^{N\times C_{in}\times H\times W}\) 表示待被处理和重用的输入。 \(\Phi_{i}(x),\forall i=1,...,s-1\) 表示会应用到 \(x\) 上的其它网络层比如卷积或BN层。通过拼接进行特征重用可以表示如下

其中 \(Cat\) 是拼接操作。它保留现有特征,并把信息处理留给其它操作。例如一个拼接操作后通常会接一个1x1卷积层用来处理通道信息。

结构重参数化在训练时利用一些线性操作来生成不同的特征图,并在推理时通过参数融合将多个操作融合为一个。也就是说它将融合过程从特征空间转移到权重空间,这可以被视为一种隐形的特征重用。通过结构重参数化进行特征重用可以表示如下

 

特征融合过程是在权重空间中完成的,这不会引入任何额外的推理时间,使得最终的架构比使用拼接的更高效。 

RepGhost Module

图3展示了原始的Ghost module如何一步步演化成RepGhost module的,其中(a)是原始的Ghost module

Add Operator. 由于拼接的低效,首先把所有的concatenation换成add,得到(b)。

Moving ReLU Backward. 为了可以进行重参数化,把depthwise卷积后的ReLU移到add后面,得到(c)。 

Re-parameterization. 作为一个可重参数化的module,(c)可以更加灵活,因此作者把identity mapping分支换成了BN,引入了非线性,得到(d)。这就是训练阶段完整的RepGhost module

Fast Inference. 利用重参数化技术,(c)和(d)都可以融合成(e),即推理阶段的RepGhost module。

Building our Bottleneck and Architecture

RepGhost Bottleneck. 基于图4(a)的Ghost bottleneck,作者用RepGhost module替换掉所有的Ghost module来直接构建RepGhost bottleneck。但是RepGhost module中的add操作和Ghost module中的concatenation操作得到的输出通道不同,前者是后者的一半,直接改变下一层的输入通道会严重影响网络的性能。为了解决这个问题,RepGhost bottleneck保持和Ghost bottleneck一样的输入和输出通道,如图4(b)所示,RepGhost bottleneck做了两点改变,一是中间通道减小一半,即第一个module的输出通道。二是第二个module的输入通道增大一倍,这样就可以保持输入和输出通道与Ghost bottleneck一致。推理阶段重参数化后的bottleneck如图4(c)所示。

RepGhostNet. 由于RepGhost bottleneck和Ghost bottleneck的输入输出大小通道都相同,作者简单地将GhostNet中的Ghost bottleneck换成RepGhost bottleneck来构建RepGhostNet,网络的详细结构如表2所示。其中输入经过一个普通3x3卷积得到通道数为16的输出,最后经过普通的1x1卷积和全局平均池化来得到网络输出。根据输入大小,将RG-bneck分为5个部分,除了最后一组,每组的最后一个bottleneck进行stride=2的下采样。

 

实验结果

在ImageNet数据集上,和其它一些轻量模型的结果对比如表3所示

在下游任务目标检测和实例分割任务上,结果对比如表4所示

 

在基于ARM结构的移动手机上进行测试,ImageNet上top-1精度和延迟的变化曲线如图1所示

 

在iphone12上与MobileOne的对比

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

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

相关文章

[元带你学: eMMC协议详解 10] Device 识别流程 与 中断模式

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC协议详解》 全文2700字,重点需掌握设备识别过程(CMD1 -> CMD2 -> CMD3), 这很常用, 也是最容易出现异常的地方。其他…

Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】

B站视频地址: https://www.bilibili.com/video/BV1KX4y1a7N9 Git学习文档:https://d9bp4nr5ye.feishu.cn/wiki/PeDPw3mm3iFA36k9td9cVeignsZ 在很长一段时间里,我对Git的操作只限于:提交代码,拉取代码,合…

研报精选230528

目录 【行业230528华金证券】传媒行业深度研究:AIGC最新应用与场景研究 【行业230528国海证券】电动船舶行业深度报告:绿色智能大势已至,驶向电化百亿蓝海 【行业230528华西证券】纺织服装行业周报:5月增长放缓无碍中长期出清逻辑…

Linux下的yum和vim

目录 一、Linux软件包管理器yum1.1 何为软件包?1.2 rzsz工具1.3 如何安装和卸载软件?1.4 Linux的软件生态 二、vim文本编辑器 一、Linux软件包管理器yum 1.1 何为软件包? 软件包可以理解成是windows下别人提前编译好的安装包程序&#xff0…

任务7 课程信息管理系统

系列文章 任务7 课程信息管理系统 已知课程的信息包括:课程编号,课程名称,课程性质(必修、选修),课时,学分,考核方式(考试、考查课),开课学期&a…

day41_servlet

今日内容 零、 复习昨日 一、Cookie 二、Session 三、拦截器 四、登录认证、全局编码格式 零、 复习昨日 注解 热部署 请求转发 重定向 路径问题 总结使用经验: 无论请求路径是多层是单层,在写路径时都从/开始,即从根开始如果是服务器动作,从/开始直接写如果是浏览器动作,从/开…

CVPR 2018 | Spotlight论文:单摄像头数秒构建3D人体模型

想把自己的身体形象投射进电子游戏里?现在已经是很容易的事了。人工智能算法此前已被广泛应用于虚拟现实头像、监视、服装试穿或电影等多种任务的人体建模上,但大多数方法需要特殊的照相设备来检测景深,或从多个角度探查人体。近日,来自德国布伦瑞克工业大学和 Max Planck …

js获取Element元素的常用方法

js中获取Element元素的常用方法有以下四种: 【方法一】根据元素ID:document.getElementById() 【方法二】根据元素标签:document.getElementsByTagName() 【方法三】根据元素class名:document.getElementsByClassName() 【方法…

yolov5刚开始train时的环境问题

torch会自动被requirement.txt替换 在对yolov5_5.0进行pip install requirement.txt后,yolo5_5.0会将虚拟环境中中的torch替换为2.0.1版本的,但要注意查看该torch是否为gpu版本,查看方式如下:打开Anaconda Prompt,激活…

渗透测试 | 端口扫描

0x00 免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…

推荐系统算法详解

文章目录 基于人口统计学的推荐算法用户画像 基于内容的推荐算法相似度计算基于内容推荐系统的高层次结构特征工程数值型特征处理类别特征处理时间型特征处理统计型特征处理 推荐系统常见反馈数据基于UGC的推荐TF-IDFTF-IDF算法示例1. 引入依赖2. 定义数据和预处理3. 进行词数统…

12.区块链系列之比特币NFT

1. NFT协议Ordinals 2023年1月30日,比特币核心开发者Casey Rodarmor创建了NFT协议Ordinals Ordinals序数: 比特币的最小单位是Satoshi聪,1BTC1亿聪,每个聪的比特币都是同质化代币,它们之间并没有任何差别。Ordinals给聪打上了编号&#xff0…

vue3项目创建步骤,以及项目运行失败的原因和解决方法

vue3项目创建步骤,以及项目运行失败的原因和解决方法 vue3项目创建前提:搭建node.js环境第一步:创建一个空文件夹第二步:打开空文件夹,如图所示第三步:在此输入cmd,并按下回车键,进入…

Mysql面试必知的知识点-干货分享

文章目录 底层索引为什么使用B树,而不用B树?为什么Innodb索引建议必须建主键?为什么主键推荐使用整形自增?Mysql底层索引只有B树吗?联合索引底层长什么样子?数据库隔离级别中串行化是怎么实现的?查询方法需要加事务吗?大事务有什么影响? 底层索引为什么使用B树,而不用B…

Ai时代降临,我们的未来又在哪里?

文章目录 背景AI智能迭代进步码农的未来展望借助gpt快速成长总结 背景 随着人工智能的不断发展,自然语言处理技术也一直在不断的进步和发展,GPT(Generative Pre-trained Transformer)模型作为自然语言处理领域最前沿的技术之一&a…

什么是Redission可重入锁,其实现原理是什么?

一、概述 Redission是一个可重入锁,它可以在分布式系统中用于实现互斥锁。这种锁可以允许多个线程同时获取锁,但在任何给定时间只有一个线程可以执行受保护的代码块。 Redission锁提供了一种简单的方法来保证在分布式系统中的互斥性,同时支…

chatgpt赋能python:Python中的父类方法和super函数

Python中的父类方法和super函数 在Python中,我们经常会涉及到继承父类的方法和属性。当我们在子类中重写一个父类方法时,有时我们需要在子类方法中访问父类方法,可以使用Python的内置函数super()来实现。 什么是父类方法 在面向对象编程中…

runway gen2

来自Runway文生成视频ai大模型Gen-2_哔哩哔哩_bilibili来自Runway文生成视频ai大模型Gen-2,距离视频制作自由又近了一步。, 视频播放量 1651、弹幕量 0、点赞数 21、投硬币枚数 2、收藏人数 42、转发人数 22, 视频作者 旭升说, 作者简介 一起聊下互联网的那些事&…

10大白帽黑客专用的 Linux 操作系统

平时在影视里见到的黑客都是一顿操作猛如虎,到底他们用的都是啥系统呢? 今天给大家分享十个白帽黑客专用的Linux操作系统。 ▍1. Kali Linux Kali Linux是最著名的Linux发行版,用于道德黑客和渗透测试。Kali Linux由Offensive Security开发&…

[k8s]Kubernetes简介

文章目录 Kubernetes介绍术语Label StatefulSet 存储类VolumePersistent Volume IP地址Node IPPod IPService Cluster IPExternal IP PodPod定义Pod生命周期与重启策略NodeSelector(定向调度)NodeAffinity(亲和性调度)PodAffinity…