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。 |