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.0 和 depth_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.0 和 depth_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.1 和 depth_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 准确率。 |