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
,則必須實現 pyramid_level_inputs
屬性,其中鍵為 "P3"、"P4" 和 "P5",值為層名稱。在許多情況下,一個明智的骨幹網路選擇是: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()
方法的結果將作為 y_true
參數傳遞給 loss
物件,用於 box_loss
和 classification_loss
。keras.layers.Layer
,負責將 RetinaNet 預測轉換為可用的邊界框張量。如果未提供,則會提供一個預設值。預設的 prediction_decoder
層是一個 keras_cv.layers.MultiClassNonMaxSuppression
層,它使用非極大值抑制進行邊界框修剪。keras.layers.Layer
,當在 backbone
的金字塔級輸出上被呼叫時,會產生一個 4D 特徵圖列表(包含批次維度)。如果未提供,則會使用論文中的參考實現。keras.Layer
。如果未提供,則會使用具有 3 個層的簡單 ConvNet。keras.Layer
。如果未提供,則會使用具有 3 個層的簡單 ConvNet。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
表示分類或框回歸頭的函數。