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

RetinaNet 模型

[来源]

RetinaNet

keras_cv.models.RetinaNet(
    backbone,
    num_classes,
    bounding_box_format,
    anchor_generator=None,
    label_encoder=None,
    prediction_decoder=None,
    feature_pyramid=None,
    classification_head=None,
    box_head=None,
    **kwargs
)

实现 RetinaNet 元架构的 Keras 模型。

实现用于目标检测的 RetinaNet 架构。构造函数需要 num_classesbounding_box_format 和一个主干。可以选择提供自定义标签编码器和预测解码器。

示例

images = np.ones((1, 512, 512, 3))
labels = {
    "boxes": tf.cast([
        [
            [0, 0, 100, 100],
            [100, 100, 200, 200],
            [300, 300, 100, 100],
        ]
    ], dtype=tf.float32),
    "classes": tf.cast([[1, 1, 1]], dtype=tf.float32),
}
model = keras_cv.models.RetinaNet(
    num_classes=20,
    bounding_box_format="xywh",
    backbone=keras_cv.models.ResNet50Backbone.from_preset(
        "resnet50_imagenet"
    )
)

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

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

# Train model
model.compile(
    classification_loss='focal',
    box_loss='smoothl1',
    optimizer=keras.optimizers.SGD(global_clipnorm=10.0),
    jit_compile=False,
)
model.fit(images, labels)

参数

  • num_classes: 数据集中除了背景类之外的类别数量。类别应以 [0, num_classes) 范围内的整数表示。
  • bounding_box_format: 输入数据集的边界框格式。有关支持的边界框格式的更多详细信息,请参阅 keras.io 文档
  • backbone: keras.Model。如果使用默认 feature_pyramid,则必须实现具有键“P3”、“P4”和“P5”以及层名称作为值的 pyramid_level_inputs 属性。在许多情况下,一个比较合理的骨干是:keras_cv.models.ResNetBackbone.from_preset("resnet50_imagenet")
  • anchor_generator: (可选) 一个 keras_cv.layers.AnchorGenerator。如果提供,则锚点生成器将传递给 label_encoderprediction_decoder。仅当 label_encoderprediction_decoder 均为 None 时使用。默认情况下,锚点生成器具有以下参数化:strides=[2**i for i in range(3, 8)]scales=[2**x for x in [0, 1 / 3, 2 / 3]]sizes=[32.0, 64.0, 128.0, 256.0, 512.0]aspect_ratios=[0.5, 1.0, 2.0]
  • label_encoder: (可选) 一个 keras.Layer,接受一个图像张量、一个边界框张量和一个边界框类别张量作为其 call() 方法的输入,并返回 RetinaNet 训练目标。默认情况下,将创建并使用 KerasCV 标准 RetinaNetLabelEncoder。此对象的 call() 方法的结果将传递给 loss 对象,以作为 y_true 参数的 box_lossclassification_loss
  • prediction_decoder: (可选) 一个 keras.layers.Layer,负责将 RetinaNet 预测转换为可用的边界框张量。如果未提供,将提供一个默认值。默认的 prediction_decoder 层是一个 keras_cv.layers.MultiClassNonMaxSuppression 层,它使用非最大抑制进行框修剪。
  • feature_pyramid: (可选) 一个 keras.layers.Layer,在对 backbone 的金字塔级输出进行调用时,生成一个包含 4D 特征图列表(包含批次维度)。如果未提供,将使用论文中的参考实现。
  • classification_head: (可选) 一个 keras.Layer,用于对边界框进行分类。如果未提供,将使用一个包含 3 个层的简单卷积网络。
  • box_head: (可选) 一个 keras.Layer,用于对边界框进行回归。如果未提供,将使用一个包含 3 个层的简单卷积网络。

[来源]

from_preset 方法

RetinaNet.from_preset()

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

参数

  • 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”、“retinanet_resnet50_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”、“retinanet_resnet50_pascalvoc”。
  • load_weights: 是否将预训练权重加载到模型中。默认为 None,这取决于预设是否有可用的预训练权重。
  • input_shape : 将传递给主干初始化的输入形状,默认为 None。如果为 None,将使用预设值。

示例

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

# Load randomly initialized model from preset architecture with weights
model = keras_cv.models.RetinaNet.from_preset(
    "resnet50_imagenet",
    load_weights=False,
预设名称 参数 描述
retinanet_resnet50_pascalvoc 35.60M 具有 ResNet50 v1 主干的 RetinaNet。在 PascalVOC 2012 目标检测任务上训练,该任务包含 20 个类别。该模型在评估集上获得了 0.33 的最终 MaP。

[来源]

PredictionHead

keras_cv.models.retinanet.PredictionHead(
    output_filters, bias_initializer, num_conv_layers=3, **kwargs
)

类别/框预测头。

参数

  • output_filters: 最终层中的卷积滤波器数量。
  • bias_initializer: 最终卷积层的偏差初始化器。

返回

表示分类头或框回归头的函数,具体取决于 output_filters