应用

Keras 的应用模块(keras.applications)提供了带有预训练权值的深度学习模型,这些模型可以用来进行预测、特征提取和微调(fine-tuning)。

当你初始化一个预训练模型时,会自动下载权重到 ~/.keras/models/ 目录下。

可用的模型

在 ImageNet 上预训练过的用于图像分类的模型:

所有的这些架构都兼容所有的后端 (TensorFlow, Theano 和 CNTK),并且会在实例化时,根据 Keras 配置文件〜/.keras/keras.json 中设置的图像数据格式构建模型。举个例子,如果你设置 image_data_format=channels_last,则加载的模型将按照 TensorFlow 的维度顺序来构造,即「高度-宽度-深度」(Height-Width-Depth) 的顺序。

注意:

  • 对于 Keras < 2.2.0,Xception 模型仅适用于 TensorFlow,因为它依赖于 SeparableConvolution 层。
  • 对于 Keras < 2.1.5,MobileNet 模型仅适用于 TensorFlow,因为它依赖于 DepthwiseConvolution 层。

图像分类模型的使用示例

使用 ResNet50 进行 ImageNet 分类

使用 VGG16 提取特征

从VGG19 的任意中间层中抽取特征

在新类上微调 InceptionV3

通过自定义输入张量构建 InceptionV3

模型概览

模型大小Top-1 准确率Top-5 准确率参数数量深度
Xception88 MB0.7900.94522,910,480126
VGG16528 MB0.7130.901138,357,54423
VGG19549 MB0.7130.900143,667,24026
ResNet5098 MB0.7490.92125,636,712
ResNet101171 MB0.7640.92844,707,176
ResNet152232 MB0.7660.93160,419,944
ResNet50V298 MB0.7600.93025,613,800
ResNet101V2171 MB0.7720.93844,675,560
ResNet152V2232 MB0.7800.94260,380,648
InceptionV392 MB0.7790.93723,851,784159
InceptionResNetV2215 MB0.8030.95355,873,736572
MobileNet16 MB0.7040.8954,253,86488
MobileNetV214 MB0.7130.9013,538,98488
DenseNet12133 MB0.7500.9238,062,504121
DenseNet16957 MB0.7620.93214,307,880169
DenseNet20180 MB0.7730.93620,242,984201
NASNetMobile23 MB0.7440.9195,326,716
NASNetLarge343 MB0.8250.96088,949,818

Top-1 准确率和 Top-5 准确率都是在 ImageNet 验证集上的结果。

Depth 表示网络的拓扑深度。这包括激活层,批标准化层等。

Xception

在 ImageNet 上预训练的 Xception V1 模型。

在 ImageNet 上,该模型取得了验证集 top1 0.790 和 top5 0.945 的准确率。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 299×299。

参数

  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效(否则输入形状必须是 (299, 299, 3),因为预训练模型是以这个大小训练的)。它必须拥有 3 个输入通道,且宽高必须不小于 71。例如 (150, 150, 3) 是一个合法的输入尺寸。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积块的输出,该输出是一个 4D 张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积块后面再加一层全局平均池化层,输出是一个 2D 张量。
    • 'max' 代表全局最大池化。
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

License

预训练权值由我们自己训练而来,基于 MIT license 发布。

VGG16

VGG16 模型,权值由 ImageNet 训练而来。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last (高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 224×224。

参数

  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (224, 224, 3)(对于 channels_last 数据格式),或者 (3, 224, 224)(对于 channels_first 数据格式)。它必须拥有 3 个输入通道,且宽高必须不小于 32。例如 (200, 200, 3) 是一个合法的输入尺寸。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积块的输出,该输出是一个 4D 张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积块后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化。
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

License

预训练权值由 VGG at Oxford 发布的预训练权值移植而来,基于 Creative Commons Attribution License

VGG19

VGG19 模型,权值由 ImageNet 训练而来。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 224×224。

参数

  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (224, 224, 3)(对于 channels_last 数据格式),或者 (3, 224, 224)(对于 channels_first 数据格式)。它必须拥有 3 个输入通道,且宽高必须不小于 32。例如 (200, 200, 3) 是一个合法的输入尺寸。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积层的输出,该输出是一个四维张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积层后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

License

预训练权值由 VGG at Oxford 发布的预训练权值移植而来,基于 Creative Commons Attribution License

ResNet

ResNet, ResNetV2 模型,权值由 ImageNet 训练而来。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 224×224。

参数

  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (224, 224, 3)(对于 channels_last 数据格式),或者 (3, 224, 224)(对于 channels_first 数据格式)。它必须拥有 3 个输入通道,且宽高必须不小于 32。例如 (200, 200, 3) 是一个合法的输入尺寸。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积块的输出,该输出是一个 4D 张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积块后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

License

预训练权值由以下提供:

InceptionV3

Inception V3 模型,权值由 ImageNet 训练而来。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 299×299。

参数

  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (299, 299, 3)(对于 channels_last 数据格式),或者 (3, 299, 299)(对于 channels_first 数据格式)。它必须拥有 3 个输入通道,且宽高必须不小于 139。例如 (150, 150, 3) 是一个合法的输入尺寸。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积块的输出,该输出是一个 4D 张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积块后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化。
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

License

预训练权值基于 Apache License

InceptionResNetV2

Inception-ResNet V2 模型,权值由 ImageNet 训练而来。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 299×299。

参数

  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (299, 299, 3)(对于 channels_last 数据格式),或者 (3, 299, 299)(对于 channels_first 数据格式)。它必须拥有 3 个输入通道,且宽高必须不小于 139。例如 (150, 150, 3) 是一个合法的输入尺寸。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积块的输出,该输出是一个 4D 张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积块后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

License

预训练权值基于 Apache License

MobileNet

在 ImageNet 上预训练的 MobileNet 模型。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 224×224。

参数

  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (224, 224, 3)channels_last 格式)或 (3, 224, 224)channels_first 格式)。它必须为 3 个输入通道,且宽高必须不小于 32,比如 (200, 200, 3) 是一个合法的输入尺寸。
  • alpha: 控制网络的宽度:
    • 如果 alpha < 1.0,则同比例减少每层的滤波器个数。
    • 如果 alpha > 1.0,则同比例增加每层的滤波器个数。
    • 如果 alpha = 1,使用论文默认的滤波器个数
  • depth_multiplier: depthwise卷积的深度乘子,也称为(分辨率乘子)
  • dropout: dropout 概率
  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(比如 layers.Input() 输出的 tensor)。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积块的输出,该输出是一个 4D 张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积块后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

License

预训练权值基于 Apache License

DenseNet

在 ImageNet 上预训练的 DenseNet 模型。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 224×224。

参数

  • blocks: 四个 Dense Layers 的 block 数量。
  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(比如 layers.Input() 输出的 tensor)。
  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效(不然输入形状必须是 (224, 224, 3) (channels_last 格式)或 (3, 224, 224) (channels_first 格式),因为预训练模型是以这个大小训练的)。它必须为 3 个输入通道,且宽高必须不小于 32,比如 (200, 200, 3) 是一个合法的输入尺寸。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积层的输出,该输出是一个四维张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积层后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化.
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 对象。

参考文献

Licence

预训练权值基于 BSD 3-clause License

NASNet

在 ImageNet 上预训练的神经结构搜索网络模型(NASNet)。

NASNetLarge 模型默认的输入尺寸是 331×331,NASNetMobile 模型默认的输入尺寸是 224×224。

参数

  • input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则对于 NASNetMobile 模型来说,输入形状必须是 (224, 224, 3)channels_last 格式)或 (3, 224, 224)channels_first 格式),对于 NASNetLarge 来说,输入形状必须是 (331, 331, 3) (channels_last 格式)或 (3, 331, 331)channels_first 格式)。它必须为 3 个输入通道,且宽高必须不小于 32,比如 (200, 200, 3) 是一个合法的输入尺寸。
  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化, 'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(比如 layers.Input() 输出的 tensor)。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积层的输出,该输出是一个四维张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积层后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras Model 实例。

参考文献

License

预训练权值基于 Apache License

MobileNetV2

在 ImageNet 上预训练的 MobileNetV2 模型。

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last(高度,宽度,通道)两种输入维度顺序。

模型默认输出尺寸为 224×224。

参数

  • input_shape: 可选尺寸元组,以确认你是否想使用一个输入图像像素不为 (224, 224, 3) 的模型。输入形状必须是 (224, 224, 3)。你也可以忽略这个选项,如果你像从 input_tensor来推断 input_shape。如果你选择同时包含 input_tensor 和 input_shape,那么如果匹配的话会使用 input_shape,如果不匹配会抛出错误。例如,(160, 160, 3) 是一个有效的值。
  • alpha: 控制网络的宽度。这在 MobileNetV2 论文中被称作宽度乘子。
    • 如果 alpha < 1.0,则同比例减少每层的滤波器个数。
    • 如果 alpha > 1.0,则同比例增加每层的滤波器个数。
    • 如果 alpha = 1,使用论文默认的滤波器个数。
  • depth_multiplier: depthwise 卷积的深度乘子,也称为(分辨率乘子)
  • include_top: 是否包括顶层的全连接层。
  • weightsNone 代表随机初始化,'imagenet' 代表加载在 ImageNet 上预训练的权值。
  • input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
  • pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
    • None 代表不池化,直接输出最后一层卷积块的输出,该输出是一个 4D 张量。
    • 'avg' 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积块后面再加一层全局平均池化层,输出是一个二维张量。
    • 'max' 代表全局最大池化。
  • classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回

一个 Keras model 实例。

异常

ValueError: 如果 weights 参数非法,或非法的输入尺寸,或者当 weights=’imagenet’ 时,非法的 alpha, rows。

参考文献

License

预训练权值基于 Apache License.