Keras 3 API 文档 / KerasCV / 模型 / 任务 / ImageClassifier 模型

ImageClassifier 模型

[源代码]

ImageClassifier

keras_cv.models.ImageClassifier(
    backbone, num_classes, pooling="avg", activation="softmax", **kwargs
)

带有池化层和密集层预测头的图像分类器。

参数

  • backbone: keras.Model 实例,分类器的骨干架构,在输入上调用。池化将在骨干输出的最后一个维度上调用。
  • num_classes: int,要预测的类别数。
  • pooling: str,池化层的类型。必须是 "avg" 或 "max" 之一。
  • activation: 可选的 str 或可调用对象,默认为 "softmax"。在密集层上使用的激活函数。设置 activation=None 以返回输出 logits。

示例

input_data = tf.ones(shape=(8, 224, 224, 3))

# Pretrained classifier (e.g., for imagenet categories)
model = keras_cv.models.ImageClassifier.from_preset(
    "resnet50_v2_imagenet_classifier",
)
output = model(input_data)

# Pretrained backbone
backbone = keras_cv.models.ResNet50V2Backbone.from_preset(
    "resnet50_v2_imagenet",
)
model = keras_cv.models.ImageClassifier(
    backbone=backbone,
    num_classes=4,
)
output = model(input_data)

# Randomly initialized backbone with a custom config
model = keras_cv.models.ImageClassifier(
    backbone=keras_cv.models.ResNet50V2Backbone(),
    num_classes=4,
)
output = model(input_data)

[源代码]

from_preset 方法

ImageClassifier.from_preset()

从预设配置和权重实例化 ImageClassifier 模型。

参数

  • preset: 字符串。必须是以下之一:"resnet18"、"resnet34"、"resnet50"、"resnet101"、"resnet152"、"resnet18_v2"、"resnet34_v2"、"resnet50_v2"、"resnet101_v2"、"resnet152_v2"、"mobilenet_v3_small"、"mobilenet_v3_large"、"csp_darknet_tiny"、"csp_darknet_s"、"csp_darknet_m"、"csp_darknet_l"、"csp_darknet_xl"、"efficientnetv1_b0"、"efficientnetv1_b1"、"efficientnetv1_b2"、"efficientnetv1_b3"、"efficientnetv1_b4"、"efficientnetv1_b5"、"efficientnetv1_b6"、"efficientnetv1_b7"、"efficientnetv2_s"、"efficientnetv2_m"、"efficientnetv2_l"、"efficientnetv2_b0"、"efficientnetv2_b1"、"efficientnetv2_b2"、"efficientnetv2_b3"、"densenet121"、"densenet169"、"densenet201"、"efficientnetlite_b0"、"efficientnetlite_b1"、"efficientnetlite_b2"、"efficientnetlite_b3"、"efficientnetlite_b4"、"yolo_v8_xs_backbone"、"yolo_v8_s_backbone"、"yolo_v8_m_backbone"、"yolo_v8_l_backbone"、"yolo_v8_xl_backbone"、"vitdet_base"、"vitdet_large"、"vitdet_huge"、"videoswin_tiny"、"videoswin_small"、"videoswin_base"、"resnet50_imagenet"、"resnet50_v2_imagenet"、"mobilenet_v3_large_imagenet"、"mobilenet_v3_small_imagenet"、"csp_darknet_tiny_imagenet"、"csp_darknet_l_imagenet"、"efficientnetv2_s_imagenet"、"efficientnetv2_b0_imagenet"、"efficientnetv2_b1_imagenet"、"efficientnetv2_b2_imagenet"、"densenet121_imagenet"、"densenet169_imagenet"、"densenet201_imagenet"、"yolo_v8_xs_backbone_coco"、"yolo_v8_s_backbone_coco"、"yolo_v8_m_backbone_coco"、"yolo_v8_l_backbone_coco"、"yolo_v8_xl_backbone_coco"、"vitdet_base_sa1b"、"vitdet_large_sa1b"、"vitdet_huge_sa1b"、"videoswin_tiny_kinetics400"、"videoswin_small_kinetics400"、"videoswin_base_kinetics400"、"videoswin_base_kinetics400_imagenet22k"、"videoswin_base_kinetics600_imagenet22k"、"videoswin_base_something_something_v2"、"resnet50_v2_imagenet_classifier"、"efficientnetv2_s_imagenet_classifier"、"efficientnetv2_b0_imagenet_classifier"、"efficientnetv2_b1_imagenet_classifier"、"efficientnetv2_b2_imagenet_classifier"、"mobilenet_v3_large_imagenet_classifier"。如果正在寻找具有预训练权重的预设,请选择以下之一:"resnet50_imagenet"、"resnet50_v2_imagenet"、"mobilenet_v3_large_imagenet"、"mobilenet_v3_small_imagenet"、"csp_darknet_tiny_imagenet"、"csp_darknet_l_imagenet"、"efficientnetv2_s_imagenet"、"efficientnetv2_b0_imagenet"、"efficientnetv2_b1_imagenet"、"efficientnetv2_b2_imagenet"、"densenet121_imagenet"、"densenet169_imagenet"、"densenet201_imagenet"、"yolo_v8_xs_backbone_coco"、"yolo_v8_s_backbone_coco"、"yolo_v8_m_backbone_coco"、"yolo_v8_l_backbone_coco"、"yolo_v8_xl_backbone_coco"、"vitdet_base_sa1b"、"vitdet_large_sa1b"、"vitdet_huge_sa1b"、"videoswin_tiny_kinetics400"、"videoswin_small_kinetics400"、"videoswin_base_kinetics400"、"videoswin_base_kinetics400_imagenet22k"、"videoswin_base_kinetics600_imagenet22k"、"videoswin_base_something_something_v2"、"resnet50_v2_imagenet_classifier"、"efficientnetv2_s_imagenet_classifier"、"efficientnetv2_b0_imagenet_classifier"、"efficientnetv2_b1_imagenet_classifier"、"efficientnetv2_b2_imagenet_classifier"、"mobilenet_v3_large_imagenet_classifier"。
  • load_weights: 是否将预训练权重加载到模型中。默认为 None,遵循预设是否有可用的预训练权重。
  • input_shape : 将传递给骨干初始化的输入形状,默认为 None。如果为 None,则使用预设值。

示例

# Load architecture and weights from preset
model = keras_cv.models.ImageClassifier.from_preset(
    "resnet50_imagenet",
)

# Load randomly initialized model from preset architecture with weights
model = keras_cv.models.ImageClassifier.from_preset(
    "resnet50_imagenet",
    load_weights=False,
预设名称 参数 描述
resnet50_v2_imagenet_classifier 25.61M 具有 50 层的 ResNet 分类器,其中批归一化和 ReLU 激活位于卷积层之前(v2 样式)。在 ImageNet 2012 分类任务上训练。
efficientnetv2_s_imagenet_classifier 21.61M 使用 EfficientNet 小型架构的 ImageClassifier。在此 EfficientNet 架构的变体中,有 6 个卷积块。权重初始化为预训练的 ImageNet 分类权重。发布的权重能够在 ImageNet 上获得 83.9% 的 top-1 准确率和 96.7% 的 top-5 准确率。
efficientnetv2_b0_imagenet_classifier 7.20M 使用 EfficientNet B0 架构的 ImageClassifier。在此 EfficientNet 架构的变体中,有 6 个卷积块。与所有 B 样式的 EfficientNet 变体一样,每个卷积块中的过滤器数量按 width_coefficient=1.0depth_coefficient=1.0 缩放。权重初始化为预训练的 ImageNet 分类权重。发布的权重能够在 ImageNet 上获得 77.1% 的 top-1 准确率和 93.3% 的 top-5 准确率。
efficientnetv2_b1_imagenet_classifier 8.21M 使用 EfficientNet B1 架构的 ImageClassifier。在此 EfficientNet 架构的变体中,有 6 个卷积块。与所有 B 样式的 EfficientNet 变体一样,每个卷积块中的过滤器数量按 width_coefficient=1.0depth_coefficient=1.1 缩放。权重初始化为预训练的 ImageNet 分类权重。发布的权重能够在 ImageNet 上获得 79.1% 的 top-1 准确率和 94.4% 的 top-5 准确率。
efficientnetv2_b2_imagenet_classifier 10.18M 使用 EfficientNet B2 架构的 ImageClassifier。在此 EfficientNet 架构的变体中,有 6 个卷积块。与所有 B 样式的 EfficientNet 变体一样,每个卷积块中的过滤器数量按 width_coefficient=1.1depth_coefficient1.2 缩放。权重初始化为预训练的 ImageNet 分类权重。发布的权重能够在 ImageNet 上获得 80.1% 的 top-1 准确率和 94.9% 的 top-5 准确率。
mobilenet_v3_large_imagenet_classifier 3.96M 使用 MobileNetV3Large 架构的 ImageClassifier。此预设使用密集层作为分类头,而不是典型的全卷积 MobileNet 头。因此,它的参数比原始 MobileNetV3Large 模型(具有 540 万个参数)少。发布的权重能够在 ImageNet 上获得 69.4% 的 top-1 准确率和 89.4% 的 top-5 准确率。