深度学习卷积操作总结
1. 1*1卷积
① 特征维度匹配:通常在进行大量卷积操作后,利用1*1卷积块的前后尺度一致性,进行特征通道对齐,保证尺度不变而通道个数符合需求,常见操作:升维、降维。
(便于add、keras.backend.concatenate、tf.concat、torch.cat等操作)
② 全连接层:相当于进行线性变换,将数据映射到需要的特征空间,后面通常接激活函数添加非线性因素。
③ 降低参数量:借鉴ResNet中的操作,利用1* 1 + 3* 3 + 1* 1替代3* 3 + 3* 3卷积,算是以上两种功能的综合应用。
2. 深度可分离卷积
传统卷积操作将通道和区域并行操作,而深度可分离卷积分离了通道和区域,先考虑区域的计算再进行通道计算。
例如:输入特征为64 * 64 * 128,输出通道为256。
使用标准的 3*3 卷积核:
参数量:128 * 3 * 3 * 256
计算量:128 * 3 * 3 * 256 * 64 * 64
使用深度可分离卷积:
参数量:128 * 3 * 3 + 128* 1* 1* 256
计算量:128 * 3 * 3 * 64 * 64 + 128 * 1 * 1 * 256 * 64 * 64
可以看出,深度可分离卷积就是将标准卷积分成两步:
① Depthwise:进行1个3 * 3 * 1的卷积,但是对特征的通道不作处理,因此没有特征融合。
② Pointwise:进行128个1 * 1 * 256的卷积(参考上面1*1卷积的功能),融合特征且减少了计算量,总体上来看,区域和通道一致,故性能得到了保证。
二者计算量比较:
Ps:若是替换1*1标准卷积,参数量会增加哦。
3. 残差网络Residual Net
由于深度学习的网络层数一般很深,在梯度进行传播的途中易发生梯度消失的情况,为了解决这个问题,残差网络应运而生。
残差网络的核心思想:
可以发现通过这种方式,无论信息传播到了哪一层,由于包含了特征分支,其导数始终不为零,进而避免了梯度消失的问题。
简而言之,残差结构就是利用多个深浅不一的网络集成而来,利用跨层的信息通道来使梯度有效传播。
…