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 小型架構的影像分類器。在 EfficientNet 架構的這個變體中,有 6 個卷積區塊。權重初始化為預先訓練的 imagenet 分類權重。已發布的權重能夠在 imagenet 上獲得 83.9% 的 top 1 準確率和 96.7% 的 top 5 準確率。
efficientnetv2_b0_imagenet_classifier 7.20M 使用 EfficientNet B0 架構的影像分類器。在 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 架構的影像分類器。在 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。此預設集使用 Dense 層作為分類頭,而不是典型的全卷積 MobileNet 頭。因此,它的參數比原始 MobileNetV3Large 模型少,後者有 540 萬個參數。已發布的權重能夠在 imagenet 上獲得 69.4% 的 top-1 準確率和 89.4% 的 top 5 準確率。