论文:
https://arxiv.org/pdf/1801.04381.pdf
可以参考一篇文章:
https://blog.csdn.net/u011995719/article/details/79135818
再换个文章推荐一下:
https://blog.csdn.net/Julialove102123/article/details/80042929
关注一下
宽度因子(width multiplier)和分辨率因子(resolutionmultiplier)
代码:
tensorflow.models.research.slim.nets.mobilenet.mobilenet_v2.py
spec=[
op(slim.conv2d, stride=2, num_outputs=32, kernel_size=[3, 3]),
op(ops.expanded_conv,
expansion_size=expand_input(1, divisible_by=1),
num_outputs=16),
op(ops.expanded_conv, stride=2, num_outputs=24),
op(ops.expanded_conv, stride=1, num_outputs=24),
op(ops.expanded_conv, stride=2, num_outputs=32),
op(ops.expanded_conv, stride=1, num_outputs=32),
op(ops.expanded_conv, stride=1, num_outputs=32),
op(ops.expanded_conv, stride=2, num_outputs=64),
op(ops.expanded_conv, stride=1, num_outputs=64),
op(ops.expanded_conv, stride=1, num_outputs=64),
op(ops.expanded_conv, stride=1, num_outputs=64),
op(ops.expanded_conv, stride=1, num_outputs=96),
op(ops.expanded_conv, stride=1, num_outputs=96),
op(ops.expanded_conv, stride=1, num_outputs=96),
op(ops.expanded_conv, stride=2, num_outputs=160),
op(ops.expanded_conv, stride=1, num_outputs=160),
op(ops.expanded_conv, stride=1, num_outputs=160),
op(ops.expanded_conv, stride=1, num_outputs=320),
op(slim.conv2d, stride=1, kernel_size=[1, 1], num_outputs=1280)
],
卷积层实现:
在:tensorflow.models.research.slim.nets.mobilenet.conv_block.py
@slim.add_arg_scope
def expanded_conv(input_tensor,
num_outputs,
expansion_size=expand_input_by_factor(6),
stride=1,
rate=1,
kernel_size=(3, 3),
residual=True,
normalizer_fn=None,
project_activation_fn=tf.identity,
split_projection=1,
split_expansion=1,
expansion_transform=None,
depthwise_location=’expansion’,
depthwise_channel_multiplier=1,
endpoints=None,
use_explicit_padding=False,
padding=’SAME’,
scope=None):
中实现。
MOBILENET V2可以在SSD、DEEPLABV3+中作为基础网络被使用。
我个人理解除了激活层使用RELU6、最后一层不使用激活层外,没有其他特别需要关注的地方。
主要还是针对特征偏少的网络做的优化。
DEEPLAB V3+使用MOBILENET的时候是没有ASPP和DECODER的,可以看一下DEEPLAB V3+的代码。