Keras 3 API 文档 / KerasCV / 模型 / 任务 / DeepLabV3Plus 语义分割

DeepLabV3Plus 语义分割

[源代码]

DeepLabV3Plus

keras_cv.models.DeepLabV3Plus(
    backbone,
    num_classes,
    projection_filters=48,
    spatial_pyramid_pooling=None,
    segmentation_head=None,
    **kwargs
)

一个使用 Keras 实现 DeepLabV3+ 架构进行语义分割的模型。

参考文献

参数

  • backbone: keras.Model。模型的骨干网络,用作 DeepLabV3+ 编码器的特征提取器。应为 keras_cv.models.backbones.backbone.Backbonekeras.Model,并实现具有键“P2”和“P5”以及层名称作为值的 pyramid_level_inputs 属性。在许多情况下,一个比较合理的骨干网络是 keras_cv.models.ResNet50V2Backbone.from_preset("resnet50_v2_imagenet")
  • num_classes: int,检测模型的类别数。请注意,num_classes 包含背景类,并且数据中的类应由范围为 [0, num_classes) 的整数表示。
  • projection_filters: int,来自 backbone 的低级特征投影卷积层的滤波器数量。默认值为 48,与 DeepLab 的 TensorFlow 实现 相同。 # noqa: E501
  • spatial_pyramid_pooling: (可选) keras.layers.Layer。也称为空洞空间金字塔池化 (ASPP)。在金字塔的不同空间级别上执行空间池化,并进行空洞操作。如果提供,则来自骨干网络的特征图将传递到其中,否则将使用 keras_cv.layers.spatial_pyramid.SpatialPyramidPooling
  • segmentation_head: (可选) keras.layers.Layer。如果提供,则 DeepLabV3 编码器的输出将传递到此层,并且它应该根据来自骨干网络的特征和来自解码器的特征预测分割掩码,否则将使用默认的 DeepLabV3 卷积头。

示例

import keras_cv

images = np.ones(shape=(1, 96, 96, 3))
labels = np.zeros(shape=(1, 96, 96, 1))
backbone = keras_cv.models.ResNet50V2Backbone(input_shape=[96, 96, 3])
model = keras_cv.models.segmentation.DeepLabV3Plus(
    num_classes=1, backbone=backbone,
)

# Evaluate model
model(images)

# Train model
model.compile(
    optimizer="adam",
    loss=keras.losses.BinaryCrossentropy(from_logits=False),
    metrics=["accuracy"],
)
model.fit(images, labels, epochs=3)

[源代码]

from_preset 方法

DeepLabV3Plus.from_preset()

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

参数

  • 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”、“deeplab_v3_plus_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”、“deeplab_v3_plus_resnet50_pascalvoc”。
  • load_weights: 是否将预训练权重加载到模型中。默认为 None,遵循预设是否提供预训练权重。
  • input_shape : 将传递给骨干网络初始化的输入形状,默认为 None。如果为 None,则使用预设值。

示例

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

# Load randomly initialized model from preset architecture with weights
model = keras_cv.models.DeepLabV3Plus.from_preset(
    "resnet50_imagenet",
    load_weights=False,
预设名称 参数 描述
deeplab_v3_plus_resnet50_pascalvoc 39.19M 具有 ResNet50 v2 骨干网络的 DeeplabV3Plus。在 PascalVOC 2012 语义分割任务上训练,该任务包含 20 个类和一个背景类。该模型在评估数据集上实现了 89.34% 的最终分类准确率和 0.6391 的 mIoU。此预设仅与 Keras 3 兼容。