神经网络-GhostNet的网络结构、代码实现

本文讲解的是2020年发布的GhostNet,V1版本 

参考笔记:神经网络学习小记录60——Pytorch GhostNet模型的复现详解-CSDN博客

学习视频:Ghostnet网络介绍与构建_哔哩哔哩_bilibili

源码地址:源码连接

论文地址: https://arxiv.org/pdf/1911.11907


目录

1.前言

2.Ghost Module

3.Ghost Bottleneck

4.GhostNet构建


1.前言

2020年,华为提出了一个轻量级网络GhostNet

在优秀CNN模型中,特征图存在冗余是非常重要的。如下图所示,是对ResNet-50第一个残差块特征图进行可视化的结果,当给一个神经网络输入一张图片时,我们可以获得特别多的特征图。

利用小扳手连接起来的两幅特征图(Ghost对),它们的相似性就特别高,这就是神经网络中存在的特征图冗杂的情况。如果按照传统的思考方式,可能认为这些特征图存在冗余,是多余信息,会想办法避免产生这些高度相似的特征图

但是作者思路清奇,认为CNN的强大特征提取能力和这些相似的特征图(Ghost对)正相关,不去刻意的避免产生这种Ghost对,而是尝试使用一些计算量更低的操作(Cheap Operations)去生成得更多的Ghost对,这样就可以在保证良好检测效果的情况下,减少模型的参数量与提高模型的执行速度

2.Ghost Module

在学GhostNet之前最好理解深度可分离卷积,特别是深度可分离卷积中的逐通道卷积,不了解的可以看我的另一篇博客:

深度可分离卷积及其代码实现-CSDN博客

GhostNet的核心思想就是使用一些计算量更低(Cheap Operations)的操作去生成这些冗余的特征图。

在论文中,作者设计了一个名为Ghost Module的模块,功能是代替普通卷积。

Ghost Module将普通卷积分为两部分,首先进行一个普通的 1 x 1 卷积,这是一个少量卷积,比如正常使用 32 通道的卷积,这里只用 16 通道的卷积,这个 1 x 1 卷积的作用类似于特征整合,生成输入特征层的特征浓缩

然后再作逐通道卷积,它也就是上面提到的Cheap Operations。它利用上一步获得的特征浓缩生成Ghost特征图

Ghost Module其实就是两步简单思想的汇总:

  1. 利用 1 x 1 卷积获得输入特征的必要特征浓缩
  2. 利用逐通道卷积获得特征浓缩的相似特征图(Ghost)

如下图,是普通卷积和Ghost Module的对比

普通卷积、Ghost Module

Ghost Module的代码实现:

#Ghost Module
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__()
        '''
        inp: in_channel
        oup: out_channel,Ghost Module最终的输出通道数oup
        kernel_size: 默认为1,用于1x1卷积层
        ratio: 默认设置为2
        dw_size: 逐通道卷积的卷积核大小
        '''

        #GhostModule最终的输出通道数oup
        self.oup = oup
        #1x1卷积层的输出通道数init_channels
        init_channels = math.ceil(oup / ratio)
        #逐通道卷积的输出通道数new_channels
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值