深度学习,尤其是深度卷积网络的迅猛发展,使得其在存储和算力奢侈的GPU(多GPU)上的部属趋于成熟。然而,将基于深度CNN的方法有效移植到存储和算力有限的移动设备端(手机、Pad、嵌入式设备等)面临诸多挑战。
核心挑战就是如何降低CNN对memory(存储)和FLOPS(算力)的要求,但又保持CNN的性能(相比于其在GPU端的原貌)没有显著衰减。为解决这一核心挑战,我们就需要研究网络轻量化,具体说就是通过设计新的网络结构(archeticture)以及网络中不淑的卷积操作(Conv Ops),以实现 1. 减少网络参数量;2. 降低网络运算过程中的FLOPs。
关于轻量化网络的设计,八仙过海。这里希望和大家分享我对Google开发的MobileNet(V1-V3)系列网络的宏观感受。个人水平有限,也没有深入实现过MobileNet的各个版本,因此此处仅站在广义CNN设计的角度汇报一下。
MobileNet的杀手锏,是深度可分离卷积(Depthwise Separable Convolution)
For breviety,此博客把Depthwise Separable Conv简称为DSC。
要理解DSC,我们先回溯普通卷积。
--------