精华内容
下载资源
问答
  • 分组卷积

    千次阅读 2020-05-09 19:52:20
    Pytorch的分组卷积 新代小新 2019-09-18 16:40:17 488 收藏 1 展开 最近使用pytorch的时候遇到nn.Conv2d和F.conv2d中的groups参数设置问题,查阅了一些相关资料发现网上的回答并不是很清晰明朗,所以自己写一篇关于...

     

    groups = math.gcd(in_channel, depth)
    
    if groups>1:
                groups=groups//4
    self.res_layer = Sequential(
          BatchNorm2d(in_channel),
          Conv2d(in_channel, depth, (3, 3), (1, 1), 1, bias=False,groups=groups), PReLU(depth),

    Pytorch的分组卷积

    新代小新 2019-09-18 16:40:17  488  收藏 1
    展开
    最近使用pytorch的时候遇到nn.Conv2d和F.conv2d中的groups参数设置问题,查阅了一些相关资料发现网上的回答并不是很清晰明朗,所以自己写一篇关于pytorch分组卷积的见解。

    普通卷积
    关于普通卷积的知识可以直接点击链接多通道RGB卷积。

    分组卷积
    分组卷积和普通卷积最大的不同就是卷积核在不同通道上卷积后的操作,在生成一个FeatureMap的前提下,普通卷积是在声明与input_channel相同的数量的卷积核,在各个通道上进行卷积过后求和操作,如图操作。


    普通卷积操作

     分组卷积操作如图,图中的input_channel=groups,因此卷积操作则是一个卷积核对应一个channel进行卷积,然后在channel维度上进行concat。


    分组卷积
    上面所述,可能会看的很懵,下面我们来举个例子,假设我们有一个batch=10的分辨率为32x32的RGB图片,那么在pytorch中输入的数据维度则为[10,3,32,32],我们假设卷积核大小为3,输出12个featuremap(必须设置为input_channel的倍数,后面会继续讲到),即input_channel=3,output_channel=12。

    如果我们直接进行卷积不分组,那么我们需要声明一个大小为[12,3,3,3]大小的weight(pytorch中[output_channel,input_channel, k_size,k_size]),3通道数量的kernel与输入图进行卷积操作求和生成一个featuremap,那么12个featuremap则对应的12个kernel的参数量是[3,3,3]。

    那么如果进行groups=3的分组卷积呢? 那么这个weight的维度为[12,1,3,3]。也就是说我们只需要声明12个大小为[1,3,3]的参数就可以了,如代码所示。

    conv = nn.Conv2d(3,12,kernel_size=3,groups=3)
    conv.weight.size()
    #torch.Size([12, 1, 3, 3])
    如果我们设置的output_channel不能整除input_channel会发生什么呢?

    conv = nn.Conv2d(3,10,kernel_size=3,groups=3)
    conv.weight.size()
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-187-543b4db0291d> in <module>
    ----> 1 conv = nn.Conv2d(3,10,kernel_size=3,groups=3)
          2 conv.weight.size()
     
    ~/anaconda3/envs/pytorch/lib/python3.6/site-packages/torch/nn/modules/conv.py in __init__(self, in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias, padding_mode)
        325         super(Conv2d, self).__init__(
        326             in_channels, out_channels, kernel_size, stride, padding, dilation,
    --> 327             False, _pair(0), groups, bias, padding_mode)
        328 
        329     @weak_script_method
     
    ~/anaconda3/envs/pytorch/lib/python3.6/site-packages/torch/nn/modules/conv.py in __init__(self, in_channels, out_channels, kernel_size, stride, padding, dilation, transposed, output_padding, groups, bias, padding_mode)
         22             raise ValueError('in_channels must be divisible by groups')
         23         if out_channels % groups != 0:
    ---> 24             raise ValueError('out_channels must be divisible by groups')
         25         self.in_channels = in_channels
         26         self.out_channels = out_channels
     
    ValueError: out_channels must be divisible by groups
    会报错。这是因为每个输入通道上的图片不能平均分配给相同数量的kernel进行卷积操作。

    那么我们就很清楚了,普通卷积是在用卷积核在各个通道上进行卷积求和,那么每一张featuremap都会包含之前各个通道上的特征信息;而分组卷积则是按照分组来进行卷积融合操作,在各个分组之间进行普通卷积然后进行融合,融合生成的featuremap仅仅包含其对应分组所有通道的特征信息。
    ————————————————
    版权声明:本文为CSDN博主「新代小新」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010427561/article/details/100988242

    展开全文
  • 这是一篇简短的小文章,主要记录下我对分组卷积(Group convolution)和深度可分离卷积(Depthwise separable convolution)的一点理解。上网看别人写的博客和文章大同小异,他们锻炼了自己的英语翻译能力,也考验了我们...

    这是一篇简短的小文章,主要记录下我对分组卷积(Group convolution)和深度可分离卷积(Depthwise separable convolution)的一点理解。上网看别人写的博客和文章大同小异,他们锻炼了自己的英语翻译能力,也考验了我们读者的理解能力。

    分组卷积(Group convolution)

    这两张图怎么少的了呢:

    第一张图代表标准卷积操作。若输入特征图尺寸为

    equation?tex=H+%5Ctimes+W+%5Ctimes+c_1 ,卷积核尺寸为

    equation?tex=h_1+%5Ctimes+w_1+%5Ctimes+c_1 ,输出特征图尺寸为

    equation?tex=H+%5Ctimes+W+%5Ctimes+c_2 ,标准卷积层的参数量为:

    equation?tex=%5Cbm%7B%28h_1+%5Ctimes+w_1+%5Ctimes++c_1%29+%5Ctimes+c_2%7D 。(一个滤波器在输入特征图

    equation?tex=h_1+%5Ctimes+w_1+%5Ctimes+c_1 大小的区域内操作,输出结果为1个数值,所以需要

    equation?tex=c_2+ 个滤波器。)

    第二张图代表分组卷积操作。将输入特征图按照通道数分成

    equation?tex=g 组,则每组输入特征图的尺寸为

    equation?tex=H+%5Ctimes+W+%5Ctimes%28+%5Cfrac+%7Bc_1%7D%7Bg%7D%29 ,对应的卷积核尺寸为

    equation?tex=h_1+%5Ctimes+w_1+%5Ctimes+%28%5Cfrac%7Bc_1%7D%7Bg%7D%29 ,每组输出特征图尺寸为

    equation?tex=H+%5Ctimes+W+%5Ctimes+%28%5Cfrac+%7Bc_2%7D%7Bg%7D%29 。将

    equation?tex=g 组结果拼接(concat),得到最终尺寸为

    equation?tex=H+%5Ctimes+W+%5Ctimes+c_2 的输出特征图。分组卷积层的参数量为

    equation?tex=h_1+%5Ctimes+w_1+%5Ctimes+%28%5Cfrac%7Bc_1%7D%7Bg%7D%29+%5Ctimes+%28%5Cfrac%7Bc_2%7D%7Bg%7D%29+%5Ctimes+g+%3D+%5Cbm%7Bh_1+%5Ctimes+w_1+%5Ctimes+c_1+%5Ctimes+c_2++%5Ctimes+%5Cfrac%7B1%7D%7Bg%7D%7D

    深入思考一下,常规卷积输出的特征图上,每一个点是由输入特征图

    equation?tex=h_1+%5Ctimes+w_1+%5Ctimes+c_1 个点计算得到的;而分组卷积输出的特征图上,每一个点是由输入特征图

    equation?tex=h_1+%5Ctimes+w_1+%5Ctimes+%28%5Cfrac%7Bc_1%7D%7Bg%7D%29 个点计算得到的。自然,分组卷积的参数量是标准卷积的

    equation?tex=1%2Fg

    深度可分离卷积(Depthwise separable convolution)

    这张图怎么少的了呢:

    图(a)代表标准卷积。假设输入特征图尺寸为

    equation?tex=D_F+%5Ctimes+D_F+%5Ctimes+M ,卷积核尺寸为

    equation?tex=D_K+%5Ctimes+D_K+%5Ctimes+M ,输出特征图尺寸为

    equation?tex=D_F+%5Ctimes+D_F+%5Ctimes+N,标准卷积层的参数量为:

    equation?tex=%5Cbm%7B%28D_K+%5Ctimes+D_K+%5Ctimes++M%29+%5Ctimes+N%7D

    图(b)代表深度卷积,图(c)代表逐点卷积,两者合起来就是深度可分离卷积。深度卷积负责滤波,尺寸为(DK,DK,1),共M个,作用在输入的每个通道上;逐点卷积负责转换通道,尺寸为(1,1,M),共N个,作用在深度卷积的输出特征映射上。

    深度卷积参数量为

    equation?tex=%5Cbm%7B%7B%28D_K+%5Ctimes+D_K+%5Ctimes++1%29+%5Ctimes+M%7D%7D ,逐点卷积参数量为

    equation?tex=%5Cbm%7B%281%C3%971%C3%97M%29%C3%97N%7D ,所以深度可分离卷积参数量是标准卷积的

    equation?tex=%5Cfrac%7BD_K%C3%97D_K%C3%97M%2BM%C3%97N%7D%7BD_K%C3%97D_K%C3%97M%C3%97N%7D+%3D+%5Cfrac%7B1%7D%7BN%7D+%2B+%5Cfrac%7B1%7D%7BD_K%5E2%7D++

    为了便于理解、便于和分组卷积类比,假设

    equation?tex=M%3DN 。深度卷积其实就是

    equation?tex=g%3DM%3DN 的分组卷积,只不过没有直接将

    equation?tex=g 组结果拼接,所以深度卷积参数量是标准卷积的

    equation?tex=1%2FN 。逐点卷积其实就是把

    equation?tex=g 组结果用

    equation?tex=1%5Ctimes1+ conv 拼接起来,所以逐点卷积参数量是标准卷积的

    equation?tex=1+%2F+%7BD_K%7D%5E2 。(只考虑逐点卷积,之前输出的特征图上每一个点是由输入特征图

    equation?tex=D_K+%5Ctimes+D_K+ 区域内的点计算得到的;而逐点卷积输出上每一个点是由

    equation?tex=1%5Ctimes1 区域内的点计算得到的)。自然,深度可分离卷积参数量是标准卷积的

    equation?tex=%7B1%7D%2F%7BN%7D+%2B+%7B1%7D%2F%7BD_K%5E2%7D

    参考

    MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    展开全文
  • 卷积中的分组卷积

    2020-12-07 16:27:10
    左边是正常卷积,右边是分组卷积

     左边是正常卷积,右边是分组卷积。

     

    左边输入为H*W*c1,卷积核h1*w1*c1,输出H*W*c2,参数量为h1*w1*c1*c2

    右边输入按channel分为g组,每组尺寸H*W*c1/g,卷积核h1*w1*c1/g,输出H*W*c2/g,将g组结果concate,得到H*W*c2输出,参数量h1*w1*(c1/g)*(c2/g)*g

    展开全文
  • 分组卷积与DW卷积

    2020-08-01 16:09:41
    分组卷积 不考虑权重项的话,常规卷积的参数量是: 若分组数为G,则分组卷积的参数量是: 即分组卷积可将参数量减小为原来的1/G。 pytorch的nn.Conv2d中的groups参数代表需要分的组数量,默...

    分组卷积

    不考虑权重项的话,常规卷积的参数量是:

                                                                                        C_{_{in}}\times K\times K\times C_{_{out}}

    若分组数为G,则分组卷积的参数量是:

                                                            \frac{C_{_{in}}}{G}\times K\times K\times \frac{C_{_{out}}}{G}\times G=\frac{C_{in}\times K\times K\times C_{out}}{G}

    即分组卷积可将参数量减小为原来的1/G。

    注:分组卷积,输出特征图通道数不需要与输入通道数相同

     

    pytorch的nn.Conv2d中的groups参数代表需要分的组数量,默认值为1(即常规卷积) 

    深度可分离卷积(Depthwise Separable Convolution)

    深度可分离卷积先进行depthwise convolution,然后进行pointwise convolution(其实质就是1*1的标准卷积)

    标准卷积如下图:

     depthwise convolution: 卷积是在二维平面进行的,一个卷积核对应一个通道,输出通道数等于输入通道数

     pointwise convolution:融合特征图各个通道之间的信息,可以改变输出通道数

    DW卷积的计算量和标准卷积计算量之间比例关系为:(注意是运算量,不是参数量)

    式中D_{K}为卷积核长(或宽,如3),M为输入通道数,N数输出通道数,D_{_{F}}为输入特征图分辨率(如256)

    一般N很大,1/N很小,所以3*3卷积的话DW卷积的运算量是标准卷积运算量的1/9

    分组卷积与depthwise 卷积的区别

    • 分组卷积的卷积核仍然是三维的,只不过卷积的输入通道和输出通道都是在分组内进行的。此外,输出通道数可以与输入通道数不相等
    • depthwise卷积的卷积核是二维的,输出通道数等于输入通道数,输出通道与输入通道间是一一对应的。

    参考:

    CNN模型之MobileNet

    Depthwise卷积与Pointwise卷积

    展开全文
  • 编辑 | 言有三1 MixNetMixNet基于Depthwise的分组卷积是一个非常有效的模型设计,不过它们通常是用同样大小的卷积核,MixNet则使用了可学习的多尺度卷积核提升其性能。我们在前面已经给大家讲述过许多的分组卷积模型...
  • 文章目录普通卷积转置卷积深度可分离卷积(1) 普通卷积(2) 深度可分离卷积(3)总结分组卷积(Group convolution)(1) 介绍(2) 分组卷积具体的例子 普通卷积 可以直观的理解为一个带颜色小窗户(卷积核)在原始的输入...
  • 分组卷积 介绍 分组卷积最初是在AlexNet网络中出现的,主要为了解决单个GPU无法处理含有大量计算量和存储需求的卷积层这个问题。目前,分组卷积多被用于构建用于移动设备的小型网络模型。例如深度可分离卷积。 原理 ...
  • 图解分组卷积

    2019-11-11 19:57:40
    图解分组卷积
  • 分组卷积,分离卷积

    千次阅读 2019-04-11 10:13:54
    ...Group convolution 分组卷积,最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处理,最后把多...
  • 编辑 | 言有三 1 MixNet有三AI知识星球-网络结构1000变MixNet基于Depthwise的分组卷积是一个非常有效的模型设计,不过它们通常是用同样大小的卷积核,MixNet则使用了可学习的多尺度卷积核提升其性能。作者/编辑 言有...
  • IGC系列网络的核心在分组卷积的极致运用,将常规卷积分解成多个分组卷积,能够减少大量参数,另外互补性原则和排序操作能够在最少的参数量情况下保证分组间的信息流通。但整体而言,虽然使用IGC模块后参数量和计算量...
  • 分组卷积  之间看分组卷积示意图。  不分组:  分两组:  分四组:  以此类推。当然,以上都是均匀分组的,不均分也是可以的。至于分组卷积有什么好处,很明显,可以节省参数量。假设不使用分组时,卷积核的...
  • IGC系列网络的核心在分组卷积的极致运用,将常规卷积分解成多个分组卷积,能够减少大量参数,另外互补性原则和排序操作能够在最少的参数量情况下保证分组间的信息流通。但整体而言,虽然使用IGC模块后参数量和计算量...
  • 文章目录卷积、转置卷积、可分离卷积、分组卷积、空洞卷积的理解转置卷积深度可分离卷积分组卷积空洞卷积 卷积、转置卷积、可分离卷积、分组卷积、空洞卷积的理解 这里主要是汇总一些本人觉得比较好的文章。 ##卷积 ...
  • 最近在研究卷积网络的改性,有必要对各种卷积层的结构深入熟悉一下。为此写下这篇学习笔记。 文章大部分内容来自于网络的各种博客总结,本博文仅仅作为本人学习笔记,不做商业用途。...分组卷积(Group conv...
  • keras实现分组卷积

    2021-01-15 09:52:44
    分组卷积在pytorch中比较容易实现,只需要在卷积的时候设置group参数即可 比如设置分组数为2 conv_group = nn.Conv2d(C_in,C_out,kernel_size=3,stride=3,padding=1,groups = 2) 但是,tensorflow中目前还没有分组...
  • 分组卷积需要的计算量 :Cin​×K×K×Cout​ / g 深度可分离卷积(Depthwise Separable Convolution): 需要的计算量:Cin​×K×K+Cout​×1×1 实现: import torch from torchsummary import summary ...
  • 这两种卷积分别是在ResNext论文与MobileNet系列中体现的,貌似Xception中也有深度可分离卷积的体现。 作用都很简单,为了降参。 目录 1. 分组卷积 group convolution ...最早出现分组卷积的是AlexNet,说实话网...
  • 分组卷积介绍 分组卷积(Group Convolution)最早出现在AlexNet网络中,分组卷积被用来切分网络,使其能在2个GPU上并行运行。 接下来我们看下面的图来分析分组卷积和普通卷积的区别: 普通卷积进行运算的时候,如果...
  • pytorch之分组卷积

    2020-04-19 16:36:48
    分组卷积 推荐:请先看最底部的参考连接​ ???? 普通卷积 说明:普通卷积为组数为1的特殊分组卷积。 class Conv(nn.Module): def __init__(self, in_ch, out_ch, groups): super(Conv, self).__init__() self...
  • 欢迎大家来到《知识星球》专栏,这里是网络结构1000变小专题,今天介绍最新的分组卷积模型的进展。作者&编辑 | 言有三1 CondenseNetCondenseNet以前我们给大家讲了许多的分组网络,如果分组本身可以学习,而不是...
  • 深度可分离卷积在《Python深度学习》(Keras之父执笔)这本书里看到:注意,大部分(或全部)普通卷积很可能不久后会被深度可分离卷积(depthwise separable convolution)所替代, 后者与前者等效,但速度更快,表示效率更...
  • Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution https://www.cnblogs.com/shine-lee/p/10243114.html 写在前面 Group Convolution分组卷积,最早见于AlexNet——2012年...
  • 卷积核:分组卷积、可分离卷积、空洞卷积、可变形卷积 CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量。我下面会对近几年一些具有变革性的工作进行...
  • 采用同样的数据,用分组卷积和pointwise conv操作结合起来得到的结果与平常的卷积结果一样吗,还是不一样

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 613
精华内容 245
关键字:

分组卷积