Keras 2 API 文档 / Keras Applications / MobileNet、MobileNetV2 和 MobileNetV3

MobileNet、MobileNetV2 和 MobileNetV3

[来源]

MobileNet 函数

tf_keras.applications.MobileNet(
    input_shape=None,
    alpha=1.0,
    depth_multiplier=1,
    dropout=0.001,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    pooling=None,
    classes=1000,
    classifier_activation="softmax",
    **kwargs
)

实例化 MobileNet 架构。

参考

此函数返回一个 TF-Keras 图像分类模型,可以选择加载在 ImageNet 上预训练的权重。

对于图像分类用例,请参阅此页面获取详细示例

对于迁移学习用例,请务必阅读迁移学习与微调指南

注意:每个 TF-Keras Application 都需要特定的输入预处理。对于 MobileNet,在将输入传递给模型之前,请对输入调用 tf.keras.applications.mobilenet.preprocess_inputmobilenet.preprocess_input 会将输入像素缩放到 -1 到 1 之间。

参数

  • input_shape: 可选的形状元组,仅在 include_top 为 False 时指定(否则输入形状必须为 (224, 224, 3)(使用 channels_last 数据格式)或 (3, 224, 224)(使用 channels_first 数据格式))。它应恰好有 3 个输入通道,且宽度和高度应不小于 32。例如,(200, 200, 3) 将是一个有效值。默认为 None。如果提供了 input_tensor,则 input_shape 将被忽略。
  • alpha: 控制网络的宽度。这在 MobileNet 论文中被称为宽度乘数(width multiplier)。- 如果 alpha < 1.0,则按比例减少每一层的滤波器数量。- 如果 alpha > 1.0,则按比例增加每一层的滤波器数量。- 如果 alpha = 1,则使用论文中默认的每一层滤波器数量。默认为 1.0
  • depth_multiplier: 深度可分离卷积的深度乘数。这在 MobileNet 论文中被称为分辨率乘数(resolution multiplier)。默认为 1.0
  • dropout: Dropout 比率。默认为 0.001
  • include_top: 布尔值,是否在网络顶部包含全连接层。默认为 True
  • weights: 以下之一:None(随机初始化),'imagenet'(在 ImageNet 上预训练),或要加载的权重文件路径。默认为 imagenet
  • input_tensor: 可选的 TF-Keras 张量(即 layers.Input() 的输出),用作模型的图像输入。input_tensor 对于在多个不同网络之间共享输入非常有用。默认为 None
  • pooling: 可选的池化模式,用于当 include_topFalse 时的特征提取。
    • None(默认)表示模型的输出将是最后一个卷积块的 4D 张量输出。
    • avg 表示将全局平均池化应用于最后一个卷积块的输出,因此模型的输出将是一个 2D 张量。
    • max 表示将应用全局最大池化。
  • classes: 可选的图像分类类别数量,仅在 include_top 为 True 且未指定 weights 参数时指定。默认为 1000
  • classifier_activation: 字符串或可调用对象。用于“顶部”层的激活函数。除非 include_top=True,否则将被忽略。设置为 classifier_activation=None 可返回“顶部”层的 logits。加载预训练权重时,classifier_activation 只能为 None"softmax"
  • **kwargs: 仅用于向后兼容。

返回值

一个 keras.Model 实例。


[来源]

MobileNetV2 函数

tf_keras.applications.MobileNetV2(
    input_shape=None,
    alpha=1.0,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    pooling=None,
    classes=1000,
    classifier_activation="softmax",
    **kwargs
)

实例化 MobileNetV2 架构。

MobileNetV2 与原始 MobileNet 非常相似,不同之处在于它使用了带有瓶颈特征的倒残差块。它的参数数量比原始 MobileNet 少得多。MobileNets 支持任何大于 32 x 32 的输入尺寸,更大的图像尺寸能提供更好的性能。

参考

此函数返回一个 TF-Keras 图像分类模型,可以选择加载在 ImageNet 上预训练的权重。

对于图像分类用例,请参阅此页面获取详细示例

对于迁移学习用例,请务必阅读迁移学习与微调指南

注意:每个 TF-Keras Application 都需要特定的输入预处理。对于 MobileNetV2,在将输入传递给模型之前,请对输入调用 tf.keras.applications.mobilenet_v2.preprocess_inputmobilenet_v2.preprocess_input 会将输入像素缩放到 -1 到 1 之间。

参数

  • input_shape: 可选的形状元组,如果您想使用输入图像分辨率不是 (224, 224, 3) 的模型时指定。它应恰好有 3 个输入通道 (224, 224, 3)。如果您想从 input_tensor 推断 input_shape,也可以省略此选项。如果您同时提供 input_tensor 和 input_shape,如果它们匹配则使用 input_shape,如果形状不匹配则会抛出错误。例如,(160, 160, 3) 将是一个有效值。
  • alpha: 浮点数,大于零,控制网络的宽度。这在 MobileNetV2 论文中被称为宽度乘数,但为了与 TF-Keras 中的 applications.MobileNetV1 模型保持一致,保留了这个名称。
    • 如果 alpha < 1.0,则按比例减少每一层的滤波器数量。
    • 如果 alpha > 1.0,则按比例增加每一层的滤波器数量。
    • 如果 alpha = 1.0,则使用论文中默认的每一层滤波器数量。
  • include_top: 布尔值,是否在网络顶部包含全连接层。默认为 True
  • weights: 字符串,以下之一:None(随机初始化),'imagenet'(在 ImageNet 上预训练),或要加载的权重文件路径。
  • input_tensor: 可选的 TF-Keras 张量(即 layers.Input() 的输出),用作模型的图像输入。
  • pooling: 字符串,可选的池化模式,用于当 include_topFalse 时的特征提取。
    • None 表示模型的输出将是最后一个卷积块的 4D 张量输出。
    • avg 表示将全局平均池化应用于最后一个卷积块的输出,因此模型的输出将是一个 2D 张量。
    • max 表示将应用全局最大池化。
  • classes: 可选的图像分类类别整数数量,仅在 include_top 为 True 且未指定 weights 参数时指定。
  • classifier_activation: 字符串或可调用对象。用于“顶部”层的激活函数。除非 include_top=True,否则将被忽略。设置为 classifier_activation=None 可返回“顶部”层的 logits。加载预训练权重时,classifier_activation 只能为 None"softmax"
  • **kwargs: 仅用于向后兼容。

返回值

一个 keras.Model 实例。


[来源]

MobileNetV3Small 函数

tf_keras.applications.MobileNetV3Small(
    input_shape=None,
    alpha=1.0,
    minimalistic=False,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    classes=1000,
    pooling=None,
    dropout_rate=0.2,
    classifier_activation="softmax",
    include_preprocessing=True,
)

实例化 MobileNetV3Small 架构。

参考

下表描述了 MobileNets v3 的性能

MACs 代表乘加操作 (Multiply Adds)

分类检查点 MACs(百万) 参数(百万) Top1 准确率 Pixel1 CPU(毫秒)
mobilenet_v3_large_1.0_224 217 5.4 75.6 51.2
mobilenet_v3_large_0.75_224 155 4.0 73.3 39.8
mobilenet_v3_large_minimalistic_1.0_224 209 3.9 72.3 44.1
mobilenet_v3_small_1.0_224 66 2.9 68.1 15.8
mobilenet_v3_small_0.75_224 44 2.4 65.4 12.8
mobilenet_v3_small_minimalistic_1.0_224 65 2.0 61.9 12.2

对于图像分类用例,请参阅此页面获取详细示例

对于迁移学习用例,请务必阅读迁移学习与微调指南

注意:每个 TF-Keras Application 都需要特定的输入预处理。对于 MobileNetV3,默认情况下输入预处理作为模型的一部分包含在内(作为 Rescaling 层),因此 tf.keras.applications.mobilenet_v3.preprocess_input 实际上是一个直通函数(pass-through function)。在这种情况下,MobileNetV3 模型期望其输入是像素值为 [0-255] 范围的浮点张量。同时,作为模型一部分的预处理(即 Rescaling 层)可以通过将 include_preprocessing 参数设置为 False 来禁用。禁用预处理后,MobileNetV3 模型期望其输入是像素值为 [-1, 1] 范围的浮点张量。

参数

  • input_shape: 可选的形状元组,如果您想使用输入图像分辨率不是 (224, 224, 3) 的模型时指定。它应恰好有 3 个输入通道 (224, 224, 3)。如果您想从 input_tensor 推断 input_shape,也可以省略此选项。如果您同时提供 input_tensor 和 input_shape,如果它们匹配则使用 input_shape,如果形状不匹配则会抛出错误。例如,(160, 160, 3) 将是一个有效值。
  • alpha: 控制网络的宽度。这在 MobileNetV3 论文中被称为深度乘数,但为了与 TF-Keras 中的 MobileNetV1 保持一致,保留了这个名称。
    • 如果 alpha < 1.0,则按比例减少每一层的滤波器数量。
    • 如果 alpha > 1.0,则按比例增加每一层的滤波器数量。
    • 如果 alpha = 1,则使用论文中默认的每一层滤波器数量。
  • minimalistic: 除了大型和小型模型外,此模块还包含所谓的简约模型(minimalistic models)。这些模型具有与 MobilenetV3 相同的每层维度特性,但不使用任何高级块(例如 Squeeze-and-Excite 单元、Hard-Swish 激活和 5x5 卷积)。虽然这些模型在 CPU 上的效率较低,但在 GPU/DSP 上的性能要高得多。
  • include_top: 布尔值,是否在网络顶部包含全连接层。默认为 True
  • weights: 字符串,以下之一:None(随机初始化),'imagenet'(在 ImageNet 上预训练),或要加载的权重文件路径。
  • input_tensor: 可选的 TF-Keras 张量(即 layers.Input() 的输出),用作模型的图像输入。
  • pooling: 字符串,可选的池化模式,用于当 include_topFalse 时的特征提取。
    • None 表示模型的输出将是最后一个卷积块的 4D 张量输出。
    • avg 表示将全局平均池化应用于最后一个卷积块的输出,因此模型的输出将是一个 2D 张量。
    • max 表示将应用全局最大池化。
  • classes: 整数,可选的图像分类类别数量,仅在 include_top 为 True 且未指定 weights 参数时指定。
  • dropout_rate: 最后一层输入单元的丢弃比例。
  • classifier_activation: 字符串或可调用对象。用于“顶部”层的激活函数。除非 include_top=True,否则将被忽略。设置为 classifier_activation=None 可返回“顶部”层的 logits。加载预训练权重时,classifier_activation 只能为 None"softmax"
  • include_preprocessing: 布尔值,是否在网络底部包含预处理层(Rescaling)。默认为 True

调用参数

  • inputs: 一个浮点型的 numpy.arraytf.Tensor,具有 3 个颜色通道的 4D 张量,如果 include_preprocessing 为 True,则取值范围为 [0, 255],否则取值范围为 [-1, 1]。

返回值

一个 keras.Model 实例。


[来源]

MobileNetV3Large 函数

tf_keras.applications.MobileNetV3Large(
    input_shape=None,
    alpha=1.0,
    minimalistic=False,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    classes=1000,
    pooling=None,
    dropout_rate=0.2,
    classifier_activation="softmax",
    include_preprocessing=True,
)

实例化 MobileNetV3Large 架构。

参考

下表描述了 MobileNets v3 的性能

MACs 代表乘加操作 (Multiply Adds)

分类检查点 MACs(百万) 参数(百万) Top1 准确率 Pixel1 CPU(毫秒)
mobilenet_v3_large_1.0_224 217 5.4 75.6 51.2
mobilenet_v3_large_0.75_224 155 4.0 73.3 39.8
mobilenet_v3_large_minimalistic_1.0_224 209 3.9 72.3 44.1
mobilenet_v3_small_1.0_224 66 2.9 68.1 15.8
mobilenet_v3_small_0.75_224 44 2.4 65.4 12.8
mobilenet_v3_small_minimalistic_1.0_224 65 2.0 61.9 12.2

对于图像分类用例,请参阅此页面获取详细示例

对于迁移学习用例,请务必阅读迁移学习与微调指南

注意:每个 TF-Keras Application 都需要特定的输入预处理。对于 MobileNetV3,默认情况下输入预处理作为模型的一部分包含在内(作为 Rescaling 层),因此 tf.keras.applications.mobilenet_v3.preprocess_input 实际上是一个直通函数(pass-through function)。在这种情况下,MobileNetV3 模型期望其输入是像素值为 [0-255] 范围的浮点张量。同时,作为模型一部分的预处理(即 Rescaling 层)可以通过将 include_preprocessing 参数设置为 False 来禁用。禁用预处理后,MobileNetV3 模型期望其输入是像素值为 [-1, 1] 范围的浮点张量。

参数

  • input_shape: 可选的形状元组,如果您想使用输入图像分辨率不是 (224, 224, 3) 的模型时指定。它应恰好有 3 个输入通道 (224, 224, 3)。如果您想从 input_tensor 推断 input_shape,也可以省略此选项。如果您同时提供 input_tensor 和 input_shape,如果它们匹配则使用 input_shape,如果形状不匹配则会抛出错误。例如,(160, 160, 3) 将是一个有效值。
  • alpha: 控制网络的宽度。这在 MobileNetV3 论文中被称为深度乘数,但为了与 TF-Keras 中的 MobileNetV1 保持一致,保留了这个名称。
    • 如果 alpha < 1.0,则按比例减少每一层的滤波器数量。
    • 如果 alpha > 1.0,则按比例增加每一层的滤波器数量。
    • 如果 alpha = 1,则使用论文中默认的每一层滤波器数量。
  • minimalistic: 除了大型和小型模型外,此模块还包含所谓的简约模型(minimalistic models)。这些模型具有与 MobilenetV3 相同的每层维度特性,但不使用任何高级块(例如 Squeeze-and-Excite 单元、Hard-Swish 激活和 5x5 卷积)。虽然这些模型在 CPU 上的效率较低,但在 GPU/DSP 上的性能要高得多。
  • include_top: 布尔值,是否在网络顶部包含全连接层。默认为 True
  • weights: 字符串,以下之一:None(随机初始化),'imagenet'(在 ImageNet 上预训练),或要加载的权重文件路径。
  • input_tensor: 可选的 TF-Keras 张量(即 layers.Input() 的输出),用作模型的图像输入。
  • pooling: 字符串,可选的池化模式,用于当 include_topFalse 时的特征提取。
    • None 表示模型的输出将是最后一个卷积块的 4D 张量输出。
    • avg 表示将全局平均池化应用于最后一个卷积块的输出,因此模型的输出将是一个 2D 张量。
    • max 表示将应用全局最大池化。
  • classes: 整数,可选的图像分类类别数量,仅在 include_top 为 True 且未指定 weights 参数时指定。
  • dropout_rate: 最后一层输入单元的丢弃比例。
  • classifier_activation: 字符串或可调用对象。用于“顶部”层的激活函数。除非 include_top=True,否则将被忽略。设置为 classifier_activation=None 可返回“顶部”层的 logits。加载预训练权重时,classifier_activation 只能为 None"softmax"
  • include_preprocessing: 布尔值,是否在网络底部包含预处理层(Rescaling)。默认为 True

调用参数

  • inputs: 一个浮点型的 numpy.arraytf.Tensor,具有 3 个颜色通道的 4D 张量,如果 include_preprocessing 为 True,则取值范围为 [0, 255],否则取值范围为 [-1, 1]。

返回值

一个 keras.Model 实例。