1、 深度学习的移动端应用成为研究热点
2017年开始,移动端网络开始引起关注,一直到现在,如何在手机端高效应用CNN,仍然是业内研究热点。
2、MobileNet中的深度可分离卷积
MobileNet网络是由google团队在2017年提出的,专注于移动端或者嵌入 式设备中的轻量级CNN网络。相比传统卷积神经网络,在准确率小幅降 低的前提下大大减少模型参数与运算量。(相比VGG16准确率减少了0.9%, 但模型参数只有VGG的1/32)
Depth-wise 卷积影响力特别大,因为计算快速、效果发了,在最近的各类论文里会经常看到它。大家务必熟练掌握。
MobileNetV2 和 V3 影响力相对较小,尤其是 ReLU6 ,后续的工作基本上没有见过了。V3的亮点其实是使用了 SE 模块。
3、Squeeze-and-Excitation Networks
SENet 影响力非常大,在最近的各类论文里都能看到它的影子,核心思想就是 self-attention,来自于自然语言处理,这个我们以后再介绍。这种模块叫做 plug-and-play(即插即用),想想为什么?
SE模块的结构如下图所示,核心是一个通道上的 reweight,给各个通道分配权重,实现特征的强化。首先使用 global average pooling 进行全局池化成一维向量(这里选择 max pooling 可不可以?),然后是两个全连接层,先做 1/16 的压缩(为什么是1/16?),然后再恢复成原来维度。最后使用 sigmoid 获得权重(gating),对原来特征进行加权。这个模块的代码实现也非常简单,不再多说。
4、HybridSN 每次分类的结果都不一样,为什么?
正常来看,只要网络训练完成,模型就固定了,测试时的结果每次应该是完全一样的。但是这个代码每次测试时分类的结果都不一样。
因为网络中使用了 Dropout,训练时要随机丢弃一些节点,但是测试时仍然在丢弃,导致准确率不稳定。因此,要使结果稳定,需要在训练前添加代码:net.train(),测试前添加代码:net.eval()。详细可参考陈半仙的博客:http://t.zoukankan.com/cch-EX-p-13495002.html
5、其它 plug-and-play 模块
可以参考FightingCV 维护的 github 代码仓库:https://github.com/xmu-xiaoma666/External-Attention-pytorch
里面有非常多的即插即用模块,需要重点掌握的是:non-local,SKNet,CBAM,ECA-Net,DANet 等等。
这里我开个头,大家思考两个问题:
1、SENet里面的全局池化,使用的 average pooling,是不是可以使用 max pooling?
2、对于CHW的矩阵,原来是将 HW 维度池化,对C进行 reweight。是不是可以对其它的维度进行 reweight ?
|