在此之前,我已经讨论了MobileNet的体系结构:https://towardsdatascience.com/understanding-depthwise-separable-convolutions-and-the-efficiency-of-mobilenets-6de3d6b62503
接下来,我们将看到如何使用TensorFlow从头开始实现这个架构。
实现:
MobileNet架构:

图显示了我们将在代码中实现的MobileNet体系结构。网络从Conv、BatchNorm、ReLU块开始,并从其上跟随多个MobileNet块。它最终以一个平均池和一个完全连接的层结束,并激活Softmax。
我们看到该体系结构有一个模式——Conv-dw/s1,后跟Conv/s1,依此类推。这里dw是深度层和步幅数,然后是Conv层和步幅数。这两条线是MobileNet区块。
“Filter Shape”列给出了核大小和要使用的滤波器数量的详细信息。列的最后一个数字表示滤波器的数量。我们看到滤波器数量从32逐渐增加到64,从64逐渐增加到128,从128逐渐增加到256,以此类推。
最后一列显示了随着我们深入网络,图像的大小是如何变化的。输入大小选择为224*224像素,有3个通道,输出层分类为1000类。
正常CNN架构块之间的差异(左),与MobileNet架构(右):

构建网络时需要记住的几件事:
所有层之后都是批量标准化和ReLU非线性。
与具有Conv2D层的普通CNN模型不同,MobileNet具有Depthwise Conv层,如图所示。为了更好地理解这一层,请参考:https://towardsdatascience.com/understanding-depthwise-separable-convolutions-and-the-efficiency-of-mobilenet