这篇笔记记录MobileNet的深度可分离卷积操作的特点及实现。
深度可分离卷积是将输入的每个通道展开,在单个通道上做卷积,最后将结果合并。换句话说,通常的卷积层每个核要扫描输入的所有通道,而深度可分离卷积每个核只读输入的一个通道。与Inception 的分组卷积单元相似,不同的是每个卷积核只对输入的一个通道操作。
深度可分离卷积结构
假设深度可分离层的输入有3个通道,如图表示了该模块的过程:
对每个通道进行卷及操作
下面是就上图结构实现的模块:
实现
1 | def separable_conv_block(x, output_channel_number, name): |
将上述模块放入MobileNet的网络结构就可以搭建完整的MobileNet。实例实现看这里