CNN卷积参数量计算

参考:轻量级网络-Mobilenet系列(v1,v2,v3) - 知乎

盘点下每种类型的层计算可学习参数的数量

Input layer:输入层所做的只是读取输入图像,因此这里没有可以学习的参数。

Convolutional layers:一个卷积层,其输入为l个特征图,输出为k个特征图,过滤器尺寸为n*m。如下举例:

输入有l=32个特征图作为输入,k=64个特征图作为输出,滤波器大小为n=3,m=3,它是一个3*3*32的过滤器,因为我们的输入有32个维度。我们学习64个不同的3*3*32过滤器。因此权重的总数是n*m*l*k。然后,每个特征图也有一个偏置项,所以我们的参数总数为(n*m*l+1)*k。

Pooling layers:池化层,例如执行以下操作:用最大值替换2*2邻域。因此,无须在池化层中学习任何参数。

Fully-connected layers:在全连接层中,所有输入单元对每个输出单元都有一个单独的权重。对于n个输入和m个输出,权重数为n*m。此外,对每个输出节点都有一个偏差,因此有(n+1)*m个参数。

Output layer:输出层是一个普通的全连接层,所以有(n+1)*m个参数,其中n是输入的数量,m是输出的数量。

使用LeNet举例计算:

输入

Filter

Stride

Padding

输出

参数量计算公式

参数量

Input

32*32*1

32*32*1

0

Conv1

32*32*1

5*5*6

1

0

28*28*6

(5*5*1+1)*6

156

Maxpool1

28*28*6

2*2

2

0

14*14*6

0

Conv2

14*14*6

5*5*16

1

0

10*10*16

(5*5*6+1)*16

2416

Maxpool2

10*10*16

2*2

2

0

5*5*16

0

FC1

5*5*16

120

(5*5*16+1)*120

48120

FC2

120

84

(120+1)*84

10164

FC3

84

10

(84+1)*10

850

所以总的参数量为:156+2416+48120+10164+850=61706个

深度可分离卷积:

普通卷积层的特征提取与特征组合一次完成并输出,而深度可分离卷积先用厚度为1的3*3的卷积核(depthwise分层卷积),再用1*1的卷积核(pointwise卷积)调整通道数,将特征提取与特征组合分开进行。深度可分离卷积可大大减少模型的参数,其具体结构如下:

对比举例:

假设某一网络卷积层,其卷积核大小为3*3,输入通道为16,输出通道为32。

常规CNN的参数量为:(3*3*16+1)*32=4640个。

深度可分离卷积参数量计算:

先用16个大小为3*3的卷积核(3*3*1)作用于16个通道的输入图像,得到了16个特征图。在做融合操作之前,接着用16个大小为1*1的卷积核(1*1*16)遍历上述得到32个特征图。则参数量为:(3*3*1+1)*16+(1*1*16+1)*32=706个。

在进行depthwise卷积时只使用了一种维度为in_channels的卷积核进行特征提取(没有进行特征组合);在进行pointwise卷积时只使用了output_channels种维度为in_channles*1*1的卷积核进行特征组合。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值