位置: IT常识 - 正文

ghostnet(ghostnet改进)

编辑:rootadmin
ghostnet

推荐整理分享ghostnet(ghostnet改进),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ghostnetv2代码,ghostnet改进,ghostnet网络结构图,ghostnet论文,ghostnets翻译中文,ghostnets翻译中文,ghostnetv2代码,ghostnets翻译中文,内容如对您有帮助,希望把文章链接给更多的朋友!

        CVPR 2020:华为GhostNet,超越谷歌MobileNet,已开源 - 知乎来自华为诺亚方舟实验室的一篇工作近日被CVPR 2020接受,提出了一种新型的端侧神经网络架构,GhostNet。作者:韩凯、王云鹤等。该架构可以在同样精度下,速度和计算量均少于SOTA算法。 该论文提供了一个全新的Ghos…https://zhuanlan.zhihu.com/p/109325275GhostNet论文解析:Ghost Module - 知乎简介: GhostNet是2020CVPR录用的一篇对卷积操作进行改进的论文。文章的核心内容是Ghost模块(Ghost Module), 可以用来替换任何经典CNN网络中的卷积操作,突出优势是轻量高效,实验证明使用了Ghost Module的Mobi…https://zhuanlan.zhihu.com/p/109420599GhostNet 解读及代码实验(附代码、超参、日志和预训练模型) - 知乎文章首发于极市平台微信公众号(ID:extrememart) 一、前言 二、论文阅读 三、代码实验 实验1. 训练模型 实验2. 计算Weights和FLOPs 实验3. 可视化特征图 四、Ghost Module下一步工作 方案1: 借助baselin…https://zhuanlan.zhihu.com/p/115844245对GhostNet中Ghost Module的理解以及对原论文的质疑 - 知乎GhostNet是华为诺亚方舟实验室提出的新型轻量化神经网络,在此次CVPR2020上横空出世,因为本人最近一直在了解一些轻量化手段,所以看到“超越MobileNetV3”这种标题的时候也不由得对其产生了兴趣,但深入了解之后…https://zhuanlan.zhihu.com/p/121757597

        ghostnet生动的阐述了会编故事的重要性,文章给一个自己的操作上了个大帽子,听起来有普遍的理论意义,ghostnet整体的架构和mobilenetv3是一致的,核心思想就是在bottleneck中用了两个ghost layer,ghost layer是一个3x3conv+3x3depthwise conv,去掉了1x1conv,意思是通过线性变化可以产生redundancy in feature map,这种redundancy其实可以理解成feature map的特征增强,conv的输入中引入了更多的特征数据。

1.Abstract

        作者说the redundancy in feature maps is an important characteristic of those successful CNNs,cnn中特征图的冗余很重要,什么是特征冗余?其实就是特征相似的某一维度的卷积输出,在Ghost模块中通过cheap operations生成了更多的特征图,Based on a set of intrinsic feature maps, we apply a series of linear transformations with cheap cost to generate many ghost feature maps that could fully reveal information underlying intrinsic features. 在基于intrinsic特征图,用了一系列的cheap cost的线性转化来生成许多能够充分揭示潜在intrinsic特征的ghost feature maps。意思就是在常规卷积生成的特征图上,作者用了一些线性变换,又生成一些所谓的ghost特征图,ghost特征就是相似的冗余特征,相似的冗余特征又是cnn之所有有效的关键。

        但是,1.作者的这篇论文并没有给出线性变换真正有效的生成了所谓的ghost特征图,2.冗余特征是不是在cnn中起到了很大的作用,不一定,有可能conv+depth-wise只是简单的数据增强,3.所谓线性变换,作者用了dp-conv+relu,用了dp-conv还是线性的,加了relu其实不是线性的。

如上图,红色的,绿色的和蓝色的图都是一对,叫做冗余信息,小扳手就是cheap operation,特征图是resnet50第一个residual block后的输出。ghost就是幽灵的意思,ghostnet意思就是这些重影的这些特征图,名字取得好啊。

1.Introduction

        ResNet-50 [16] has about 25.6M parameters and requires 4.1B FLOPs to process an image of size 224 x 224.

       在well-trained的深度神经网络中,丰富甚至冗余信息的特征图保证了对输入数据的充分理解。例如,图1中展示的resnet50中生成的输入数据的一些特征图,其中存在许多similar pairs of feature maps,就像彼此的ghost一样。特征图中的冗余可能是成功的深度神经网络中的一个重要的特征,我们倾向于采用冗余特征图,而不是避免使用,但是要用一个cost-efficient的方式来利用冗余特征图。作者说这种similar pairs of feature maps就是ghost现象,这种现象是要利用的,所以有了后面conv+dp-conv,dp-conv是一一对应的conv,对每个维度的特征图用一个单一的核去生成对应的特征图,能够有效的构造这种pairs。(dp-conv可能自己都不知道自己还有这么个用处,用于产生 ghost pairs,当然文章也说你换个其他的线性转换也行,换其他的大概率不work)

2.Approach

2.1 ghost module for more features

ghostnet(ghostnet改进)

        这里有一点其实也挺重要的,作者说mobilenetv2等引入了dp-conv+pt-conv(dp用来分组,pt用来建立channel之间的练习,dp就是分组卷积,pt就是1x1卷积),这种方式构造高效cnn,但是剩余的1x1卷积让占用了大量的内存和flops。因此在ghost module里面是没有1x1conv的。

作者先说了常规卷积的做法,常规卷积的输出n个特征图中经常包含很多冗余,他们中彼此相似,指出其实不需要大量的flops和参数逐个去生成这些冗余特征图。作者先用常规cnn生成m个特征图(n/2),然后对这些特征图一一对应进行某种线性变换,生成对应的pair特征图(n/2),最后将这些特征图concat变成n,最外层连接一个shortcut,至于线性变换,是什么,其实就是3x3dp-conv。dp-conv确实是线性变换,但是实际的操作中,作者并不是dp-conv,而是dp-conv+bn+relu这样的非线性组合。作者的解释是depth wise也是一种卷积,其实可以学到很多仿射变换的效果(因为cuda不支持仿射变换的高效处理),确实带着relu会有一点理解偏差,但是初衷还是说用更简单的(比如平移、旋转、镜面反射、差分等等)。

每一个ghostbottleneck是由2个ghost layer组成的,结合代码来看一些,ghostbottleneck如下:

class GhostBottleneck(nn.Module): """ Ghost bottleneck w/ optional SE""" def __init__(self, in_chs, mid_chs, out_chs, dw_kernel_size=3, stride=1, act_layer=nn.ReLU, se_ratio=0.): super(GhostBottleneck, self).__init__() has_se = se_ratio is not None and se_ratio > 0. self.stride = stride # Point-wise expansion self.ghost1 = GhostModule(in_chs, mid_chs, relu=True) # Depth-wise convolution if self.stride > 1: self.conv_dw = nn.Conv2d(mid_chs, mid_chs, dw_kernel_size, stride=stride, padding=(dw_kernel_size-1)//2, groups=mid_chs, bias=False) self.bn_dw = nn.BatchNorm2d(mid_chs) # Squeeze-and-excitation if has_se: self.se = SqueezeExcite(mid_chs, se_ratio=se_ratio) else: self.se = None # Point-wise linear projection self.ghost2 = GhostModule(mid_chs, out_chs, relu=False) # shortcut if (in_chs == out_chs and self.stride == 1): self.shortcut = nn.Sequential() else: self.shortcut = nn.Sequential( nn.Conv2d(in_chs, in_chs, dw_kernel_size, stride=stride, padding=(dw_kernel_size-1)//2, groups=in_chs, bias=False), nn.BatchNorm2d(in_chs), nn.Conv2d(in_chs, out_chs, 1, stride=1, padding=0, bias=False), nn.BatchNorm2d(out_chs), ) def forward(self, x): residual = x # 1st ghost bottleneck x = self.ghost1(x) # Depth-wise convolution if self.stride > 1: x = self.conv_dw(x) x = self.bn_dw(x) # Squeeze-and-excitation if self.se is not None: x = self.se(x) # 2nd ghost bottleneck x = self.ghost2(x) x += self.shortcut(residual) return x

如果有降采样,在两个ghost layer之间用dp-conv来降维。ghost layer如下:

class GhostModule(nn.Module): def __init__(self, inp, oup, kernel_size=1, ratio=2, dw_size=3, stride=1, relu=True): super(GhostModule, self).__init__() self.oup = oup 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) return out[:,:self.oup,:,:]

primary_conv是常规卷积,cheap operation是线性转换。输出时是两者concat,组成一个ghost pairs。因为上面对dp-conv的另类解释,用于生成similiar pairs of the feature map,所以不需要向之前的mobilenetv2那样前面加1x1conv和后面加1x1conv了,1x1conv的数量大大减少了,但是多了生成n/s的常规卷积块。

Analysiz on complexities.用ghost模块升级普通卷积的理论家速比是s,s就是对常规卷积输出n的特征图的分块,在作者这里stride=1的话是2,通道维度直接降一般,再和dp-conv生成出来的n/2concat,刚好还是n,shortcut支路过来的是直接add的(add完是不改变通道数目的)

4.experiments

4.1 toy experiments

这里有个很有意思的实验,作者想观察原始的特征图和通过线性变换生成的特征图两者之间的重建误差,图1上是resnet50的第一个residual block输出的特征图,作者选了红绿蓝色三对,把左边的输入,右边做输出,使用一个小的depthwise conv来学习两者之间的映射,下图表明,三对之间的mse都很小,就说明其实depthwise conv其实是对常规卷积产生特征图做了很好的重建,就是生成了所谓的ghost。

visualization of feature map. 

 图5是常规卷积生成的,图4左右红色是常规卷积生成的一半通道的特征图,右边是在左边特征图基础上用线性转换又提了特征的,图4强化了作者认为在深度神经网络中很重要的similar pairs。这里最大的问题是常规操作出来的pairs的占比是不知道的,理论上就认为pair起了很大的问题是不科学的,也不一定就是pair起了作用,也有可能就是边边角角的特征起了作用,dp-conv相当于在常规卷积上又提了一遍特征而已,虽然是对应通道提取的。看起来更像是做了更多的特征图数据增强,产生了不同尺度的特征,3x3的dp-conv感受野也是不同的,和常规conv出来的特征图出来concat,完全有可能是多尺度融合的结果。后面从数据增强的角度出发,n/2,一半是常规卷积,一半是depthwise conv,concat,那n/4呢,感觉可以切n/4,1/4conv,1/4dp-conv,1/4conv+dp-conv,1/4conv+conv,再concat,以此等等,感觉就是feature-map的数据增强增强,The redundancy in feature maps is an important characteristic,那也别冗余了,别ghost了,就是数据增强很重要。

        论文最大的问题就是故事编的好,理论站不住脚。但是整体来看去掉了1x1conv,在bottleneck中引入了ghost layer,ghost layer里面用常规卷积先降维,在一一对应depthwise conv产生对应channel的特征图,直接concat。ghostnet之前也在我自己的项目上试过,效果一般。

2021.12.8:paperwidthcode 上imagenet top1 精度:75.7%,top5:92.7%,参数量:7.3m

本文链接地址:https://www.jiuchutong.com/zhishi/298802.html 转载请保留说明!

上一篇:我在字节的这两年(字节在互联网什么地位)

下一篇:【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上)(大数据实时数仓)

  • 华为gt3用什么芯片(华为gt3用什么芯片最好)

    华为gt3用什么芯片(华为gt3用什么芯片最好)

  • 抖音公会可以直接退出吗(抖音公会可以直接发工资吗)

    抖音公会可以直接退出吗(抖音公会可以直接发工资吗)

  • 快手能帮别人充值吗(快手帮别人充值的快币怎么要求退回)

    快手能帮别人充值吗(快手帮别人充值的快币怎么要求退回)

  • 小米9黑屏打不开(小米9手机黑屏打不开怎么办 四个方法解决)

    小米9黑屏打不开(小米9手机黑屏打不开怎么办 四个方法解决)

  • 腾讯视频怎么多人登录同一账号(腾讯视频怎么多台手机登录)

    腾讯视频怎么多人登录同一账号(腾讯视频怎么多台手机登录)

  • 华为nova7呼吸灯怎么设置(华为nova7呼吸灯设置)

    华为nova7呼吸灯怎么设置(华为nova7呼吸灯设置)

  • 手机贴钢化膜有气泡怎么办(手机贴钢化膜有白边怎么办)

    手机贴钢化膜有气泡怎么办(手机贴钢化膜有白边怎么办)

  • 微信高风险用户什么意思(微信高风险用户图片)

    微信高风险用户什么意思(微信高风险用户图片)

  • 0x00000074电脑蓝屏(0x00000074电脑蓝屏怎样修复)

    0x00000074电脑蓝屏(0x00000074电脑蓝屏怎样修复)

  • 苹果刷机后激活锁怎么跳过(苹果刷机后激活锁怎么解除)

    苹果刷机后激活锁怎么跳过(苹果刷机后激活锁怎么解除)

  • b站实名认证怎么解除(b站实名认证怎么跳过拍照)

    b站实名认证怎么解除(b站实名认证怎么跳过拍照)

  • 抖音无法下载只能复制链接(抖音没办法下载怎么办)

    抖音无法下载只能复制链接(抖音没办法下载怎么办)

  • 华为畅享9e支持OTG吗(华为畅享9e支持快充功能吗)

    华为畅享9e支持OTG吗(华为畅享9e支持快充功能吗)

  • 音频线大三芯和小三芯区别(音频线三芯和两芯哪个好)

    音频线大三芯和小三芯区别(音频线三芯和两芯哪个好)

  • 华为mate30pro怎么贴膜(华为mate30pro怎么刷机)

    华为mate30pro怎么贴膜(华为mate30pro怎么刷机)

  • 为什么被挡访客必须要黄钻(为什么被挡访客可以进入空间)

    为什么被挡访客必须要黄钻(为什么被挡访客可以进入空间)

  • 苹果照片为什么有感叹号(苹果照片为什么会动)

    苹果照片为什么有感叹号(苹果照片为什么会动)

  • 如何使用nfc坐地铁(如何使用nfc坐地铁刷卡)

    如何使用nfc坐地铁(如何使用nfc坐地铁刷卡)

  • xsmax双卡双待怎么弄(xsmax双卡双待怎么装)

    xsmax双卡双待怎么弄(xsmax双卡双待怎么装)

  • 定制电商App的优势是什么(定制电商app的优势和劣势)

    定制电商App的优势是什么(定制电商app的优势和劣势)

  • win8控制面板在哪里(win8.1的控制面板在哪里)

    win8控制面板在哪里(win8.1的控制面板在哪里)

  • google浏览器应用程序无法启动,因为应用程序的并行配置不正确的完美解决方案(chrome谷歌浏览器)

    google浏览器应用程序无法启动,因为应用程序的并行配置不正确的完美解决方案(chrome谷歌浏览器)

  • 一只棕颈鹭正在德索托堡公园里捕猎,佛罗里达州 (© Brian Lasenby/Getty Images)(一只棕色)

    一只棕颈鹭正在德索托堡公园里捕猎,佛罗里达州 (© Brian Lasenby/Getty Images)(一只棕色)

  • 增值税发票能不能报销
  • 登记会计账簿的内容包括
  • 非正常损失的货物,增值税做什么科目
  • 取得虚开普票怎样补增值税
  • 租金营改增
  • 受托代销商品款是什么科目
  • 支付税盘服务费怎么做账
  • 支票的填写前应检查有哪些内容
  • 投资收益可以计入营业收入吗
  • 高薪技术企业研发人员人数
  • 建安行业外地预缴工会经费
  • 民间非营利组织会计制度
  • 劳务分包发票税率是多少2020
  • 银行承兑贴息率是年利率吗
  • 安全教育经费计算方法
  • 可转债转换为股权投资的企业所得税处理
  • 内插法计算内部收益率公式
  • 中药饮片加成率超的原因
  • 免税收入与不征税收入的区别与联系
  • 企业银行承兑汇票
  • 建筑劳务公司开票税率是多少
  • 怎么检查windows版本
  • Win10 21H2 Build 21354 ISO 太阳谷官方镜像预览版下载
  • exe是什么进程
  • PHP:session_encode()的用法_Session函数
  • PHP:Memcached::getServerByKey()的用法_Memcached类
  • 递延所得税的计税基础
  • php strlen 中文
  • html怎么嵌套php
  • 备用金支出没有发票怎么办
  • 领用包装物会计处理
  • 特斯拉 ai day
  • 这可能是最好的144平米小平层户型
  • 手把手教大家
  • yii框架教程
  • 计提坏账准备会影响应收账款账面价值吗
  • electron引入vue
  • node.js最新版本
  • 织梦如何使用
  • SQLite教程(十一):临时文件
  • 小微企业短小频急
  • 长期待摊费用借方负数什么意思
  • access数据库提示升级
  • 开矿泉水发票怎么开?
  • 折旧费属于什么总账科目
  • 应付账款重分类是什么意思
  • 开具成品油发票时注意事项是?
  • 员工给兄弟公司的感谢信
  • 长期合同价格怎么定
  • 企业进项税额如何账务处理
  • 行政单位年结
  • etc发票当天可以打印吗
  • 班班通一直正在启动什么原因
  • ubuntu邮箱客户端
  • 苹果电脑如何提高网速
  • window系统怎么截屏屏幕
  • window7截图工具无法使用
  • win10不能注销登录
  • w8系统文件夹怎么设置密码
  • javascriptcsdn
  • cocos2dx ActionManager播放动画回调问题
  • QOpenGLWindow 、QOpenGLWidget 和 QPainter混合渲染方法初探
  • javascript语言介绍
  • jquery 滑块
  • shell字符串截取加替换
  • 层盖住下拉列表框问题解决方案
  • 音频焦点图广告
  • 简述matlab中控制系统的数学描述类型
  • python从入门到精通
  • js中cookie的用法
  • jQuery基于muipicker实现仿ios时间选择
  • Android--VideoPlay--视频播放器
  • python中的stringvar
  • 广东税务总局发票怎么开
  • 企业自建厂房在建工程会计账务处理
  • 保险赔款是免征还是不征?
  • 进项发票的税收分类编码怎么查询
  • 监督医院的单位
  • 已经开票的房子还能退吗
  • 河南三门峡税务社保缴费电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设