各种卷积的说明

一、普通卷积

1、多通道输入,单通道输出

输入为三通道的6*6*3,过滤器也是三通道的分别对应RGB三个通道。其中:

  • 过滤器的通道数需要和被卷积目标的通道数保持一致。
  • 输出通道数=卷积核个数

计算过程包含了先卷积再融合的过程。3个通道各种卷积得到一个值,然后3个通道的值相加得到最终的值。具体来说:首先会拿这个3*3*3的卷积核放到最左上角的位置,这个3*3*3的卷积核有27个数字,分别与原始图像对应的27个数字做内积,这样就得到了第一个数字,然后再根据相应的步长向右、向下移动。

2、多通道输入,多通道输出

随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,我们可以将每个通道看作是对不同特征的反应

6*6*3的图像和两个3*3*3的过滤器卷积,得到4*4*2的输出。

所以,假设c0表示输入通道数,c1表示输出通道数,则有n*n*c0和一个c1*f*f*c0的卷积核进行处理,得到m*m*c1的输出。

以上参考:https://www.cnblogs.com/ml-JoJo/p/16630037.html

3、总结

单通道输出是多通道输出的一种特殊情况。

CNN中完整的卷积是对于两个4维张量进行操作。其中输入X大小为N*C*H*W,分别代表了batch_size, input_channel, input_height, input_width。而卷积核大小为D*C*K*K,分别代表输出通道数,输入通道数,卷积核尺寸。在每个输出通道上如第(1)中所示,由C*K*K的单个卷积核与C*H*W输入通道分别进行卷积,再累加在一起形成该输出通道上的二维的输出。

使用代码可以表示为:out = torch.einsum( 'nchwkj,dckj->ndhw', x, weight)

上文参考:https://zhuanlan.zhihu.com/p/349683405

二、深度卷积(Depthwise Convolution)

所谓深度卷积,在进行卷积的时候,只是各个输入通道对应相乘,而不在输入通道上进行累加求和。它满足:

  • 卷积核channel=1
  • 输入特征矩阵channel=卷积核个数=输出特征矩阵channel
  • 卷积核权重shape为C*1*K*K

使用代码可以表示为:out = torch.einsum('nchwkj,ckj->nchw', x, weight)

三、分组卷积(Group Convolution)

分组卷积就是在进行卷积运算时,输入通道不是全部参与计算,而是分割开来成为几组,每组内部进行正常卷积。

四、参数量计算

(1)普通卷积

输入L,输出K,滤波器大小N*M,则权重总数为:(N*M*L+1)*K

解释:输入有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

(2)全连接

输入N,输出M,权重总数为:(N+1)*M

解释:对于N个输入和M个输出,权重数为N*M。此外,对每个输出节点都有一个偏差,因此有(N+1)*M个参数。

(3)深度可分离卷积

输入L,输出K,滤波器大小为N*M,则权重总数为:(N*M*1+1)*L+(1*1*L+1)*K

假设卷积核大小为3*3,输入通道为16,输出通道为32。

普通卷积:(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个。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值