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

YOLOV8Detector 模型

[来源]

YOLOV8Detector

keras_cv.models.YOLOV8Detector(
    backbone,
    num_classes,
    bounding_box_format,
    fpn_depth=2,
    label_encoder=None,
    prediction_decoder=None,
    **kwargs
)

实现用于目标检测的 YOLOV8 架构。

参数

  • backbone: keras.Model,必须实现 pyramid_level_inputs 属性,该属性具有键“P3”、“P4”和“P5”以及层名称作为值。建议使用 keras_cv.models.YOLOV8Backbone 作为主干。
  • num_classes: 整数,数据集中的类别数,不包括背景类别。类别应使用 [0, num_classes) 范围内的整数表示。
  • bounding_box_format: 字符串,输入数据集边界框的格式。有关支持的边界框格式的更多详细信息,请参阅 keras.io 文档
  • fpn_depth: 整数,指定特征金字塔网络中 CSP 块的深度。这通常为 1、2 或 3,具体取决于 YOLOV8Detector 模型的大小。我们建议对于“yolo_v8_l_backbone”和“yolo_v8_xl_backbone”使用 3。默认值为 2。
  • label_encoder: (可选)一个 YOLOV8LabelEncoder,负责将输入框转换为 YOLOV8Detector 的可训练标签。如果未提供,将提供默认值。
  • prediction_decoder: (可选)一个 keras.layers.Layer,负责将 YOLOV8 预测转换为可用的边界框。如果未提供,将提供默认值。默认的 prediction_decoder 层是一个 keras_cv.layers.MultiClassNonMaxSuppression 层,该层使用非最大抑制来进行框修剪。

示例

images = tf.ones(shape=(1, 512, 512, 3))
labels = {
    "boxes": tf.constant([
        [
            [0, 0, 100, 100],
            [100, 100, 200, 200],
            [300, 300, 100, 100],
        ]
    ], dtype=tf.float32),
    "classes": tf.constant([[1, 1, 1]], dtype=tf.int64),
}

model = keras_cv.models.YOLOV8Detector(
    num_classes=20,
    bounding_box_format="xywh",
    backbone=keras_cv.models.YOLOV8Backbone.from_preset(
        "yolo_v8_m_backbone_coco"
    ),
    fpn_depth=2
)

# Evaluate model without box decoding and NMS
model(images)

# Prediction with box decoding and NMS
model.predict(images)

# Train model
model.compile(
    classification_loss='binary_crossentropy',
    box_loss='ciou',
    optimizer=tf.optimizers.SGD(global_clipnorm=10.0),
    jit_compile=False,
)
model.fit(images, labels)

[来源]

from_preset 方法

YOLOV8Detector.from_preset()

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

参数

  • 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”、“yolo_v8_m_pascalvoc”。如果您要寻找具有预训练权重的预设,请从以下选项中选择一个:“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”、“yolo_v8_m_pascalvoc”。
  • load_weights: 是否将预训练权重加载到模型中。默认值为 None,它将遵循预设是否具有可用的预训练权重。
  • input_shape : 将传递给主干初始化的输入形状。默认值为 None。如果为 None,将使用预设值。

示例

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

# Load randomly initialized model from preset architecture with weights
model = keras_cv.models.YOLOV8Detector.from_preset(
    "resnet50_imagenet",
    load_weights=False,
预设名称 参数 描述
yolo_v8_m_pascalvoc 25.90M 在 PascalVOC 2012 目标检测任务上预训练的 YOLOV8-M,包含 20 个类别。该模型在评估集上的最终 MaP 为 0.45。