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_classes
、bounding_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)
参数
keras.Model
。如果使用默认 feature_pyramid
,则必须实现具有键“P3”、“P4”和“P5”以及层名称作为值的 pyramid_level_inputs
属性。在许多情况下,一个比较合理的骨干是:keras_cv.models.ResNetBackbone.from_preset("resnet50_imagenet")
keras_cv.layers.AnchorGenerator
。如果提供,则锚点生成器将传递给 label_encoder
和 prediction_decoder
。仅当 label_encoder
和 prediction_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]
。call()
方法的输入,并返回 RetinaNet 训练目标。默认情况下,将创建并使用 KerasCV 标准 RetinaNetLabelEncoder
。此对象的 call()
方法的结果将传递给 loss
对象,以作为 y_true
参数的 box_loss
和 classification_loss
。keras.layers.Layer
,负责将 RetinaNet 预测转换为可用的边界框张量。如果未提供,将提供一个默认值。默认的 prediction_decoder
层是一个 keras_cv.layers.MultiClassNonMaxSuppression
层,它使用非最大抑制进行框修剪。keras.layers.Layer
,在对 backbone
的金字塔级输出进行调用时,生成一个包含 4D 特征图列表(包含批次维度)。如果未提供,将使用论文中的参考实现。keras.Layer
,用于对边界框进行分类。如果未提供,将使用一个包含 3 个层的简单卷积网络。keras.Layer
,用于对边界框进行回归。如果未提供,将使用一个包含 3 个层的简单卷积网络。from_preset
方法RetinaNet.from_preset()
从预设配置和权重实例化 RetinaNet 模型。
参数
None
,这取决于预设是否有可用的预训练权重。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
。