深度可分离卷积(Depthwise separable convolution)
深度可分离卷积由逐通道卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两个过程组成
对于多通道输入得到多通道输出的过程,深度可分离卷积相比于常规卷积,具有更少的参数数量和更低的运算成本;不仅如此,深度可分离卷积将以往普通卷积操作同时考虑通道和区域改变,卷积先只考虑区域,然后再考虑通道。实现了通道和区域间的分离
逐通道卷积(Depthwise Convolution)
第一个过程为逐通道卷积,即在进行卷积时,一个卷积核负责一个通道,一个通道只被一个卷积核卷积,最终得到的输出,其通道数与输入的通道数相同
具体情况如下图为例,输入为三通道的5*5图像,用3个3*3的卷积核进行卷积,得到通道数同样为3的输出
逐点卷积(Pointwise Convolution)
其运算方法与常规卷积类似,使用1*1*M的卷积核对逐通道卷积的结果进行卷积(其中M为逐通道卷积输入输出的通道数),这里卷积核的个数对应了最终输出的通道数
如下图所示:用四个1*1*3的卷积核进行卷积,最终得到通道数为4的输出
与常规卷积的对比
以下图为例,输入为5*5*3的图像,要得到3*3*4的输出,则常规卷积:
参数量=3*3*3*4=108;
计算量=3*3*3*3*12=972
而深度可分离卷积:
参数量=3*3*3+3*4=39
计算量=3*3*3*3*3+3*3*3*4=351
可以看出,无论是参数量还是计算量,深度可分离卷积都远远优于常规卷积
分组卷积
分组卷积的出现,是为了解决硬件资源有限,训练时卷积操作不能全部放在同一个GPU中运算的问题。其方法是将多通道的输入分为几个组,分别进行卷积,最后再对这几个组的输出进行concatenate操作,完成分组后的合并,使通道数与常规卷积得到的相同
假设输入为m,要求输出为n,分为x个组,则x需满足能同时被m、n整除
分组卷积能用更少的参数量完成多通道的卷积,具体例子如下:
concatenate函数
numpy中的concatenate函数
concatenate函数可一次将多个数组合成,还可设定从第几个维度进行拼接
对于一维,concatenate将其直接拼接;对于多维,可通过对axis参数的设置控制拼接的维度,axis表示从第几个维度开始拼接
import numpy as np
a=[[[1,2],[2,3]],[[3,4],[4,5]]]
b=[[[7,8],[9,10]],[[5,6],[7,8]]]
print(np.concatenate((a,b),axis=0))
输出:
[[[ 1 2]
[ 2 3]]
[[ 3 4]
[ 4 5]]
[[ 7 8]
[ 9 10]]
[[ 5 6]
[ 7 8]]]
如上所示,axis为0时,相当于将几个二维数组直接拼接在一起(个人感觉是相当于二维图片在三维直接堆叠),而实际上,三维数组使用concatenate时axis可取值为0、1、2,为1时是在列上拼接,为2时是在行上拼接
深度学习中concatenate的使用
在分组卷积中,最后各group的拼接就是利用了concatenate,在对应维度进行了拼接,使得通道数与常规卷积一致
空洞(扩张)卷积(Dilated/Atrous Convolution)
顾名思义,即在卷积核中增加空洞,具体方法为在不改变原卷积核中参数的情况下,在其周边及中间增置空洞,并在空洞中置0,凭借此达到增大感受野的目的
具体情况如下:
其好处是在不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。在图像需要全局信息或者自然语言处理中需要较长的sequence信息依赖的问题中,都能很好的应用
空洞卷积相关量的计算:
FLOPs的计算
FLOPs 是floating point of operations的缩写,是浮点运算次数,可以用来衡量算法/模型复杂度
计算方法如下:
实例如下:
参考资料:https://www.bilibili.com/video/BV1wA411Y7eB?from=search&seid=11672644947581275044
https://blog.csdn.net/a906958671/article/details/104193882?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161657851116780266250883%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161657851116780266250883&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-3-104193882.first_rank_v2_pc_rank_v29&utm_term=%E5%88%86%E7%BB%84%E5%8D%B7%E7%A7%AF
https://blog.csdn.net/leviopku/article/details/82380710?ops_request_misc=&request_id=&biz_id=102&utm_term=concatenate&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-7-82380710.first_rank_v2_pc_rank_v29
https://blog.csdn.net/alxe_made/article/details/80506051?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161665581816780269875041%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161665581816780269875041&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-6-80506051.first_rank_v2_pc_rank_v29&utm_term=concatenate
https://www.jianshu.com/p/f743bd9041b3
https://blog.csdn.net/weixin_30386713/article/details/98715081?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161665881216780271516983%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161665881216780271516983&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-98715081.first_rank_v2_pc_rank_v29&utm_term=%E7%A9%BA%E6%B4%9E%E5%8D%B7%E7%A7%AF
https://blog.csdn.net/weixin_29331689/article/details/114169974?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161668097416780274192625%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161668097416780274192625&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-114169974.first_rank_v2_pc_rank_v29&utm_term=flops%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D
https://blog.csdn.net/u011808673/article/details/88838717?ops_request_misc=&request_id=&biz_id=102&utm_term=FLOPs&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-9-88838717.first_rank_v2_pc_rank_v29