文章 · 2025-04-03

使用 PaddlePaddle 2.x 复现 DeepLabV3+(1):从构建到训练

模型构建:面向对象实现

我们按照 paddle.nn.Layer 接口规范,将 DeepLabV3+ 构建为模块化类:

最终模型采用编码器-解码器结构,输出与输入分辨率相同的分割图。

模型结构:

class DeepLabV3Plus(nn.Layer):
    def __init__(self, num_classes):
        super().__init__()
        self.entry = ...
        self.block1 = XceptionBlock(...)
        ...
        self.aspp = ASPP(...)
        self.decoder = ...
        self.final = ...

    def forward(self, x):
        ... # 完整结构见文末源码

训练流程

训练循环使用 paddle.io.DataLoader 和标准 nn.Layer 接口:

训练实现:

model = DeepLabV3Plus(num_classes=21)
optimizer = paddle.optimizer.Adam(...)
criterion = CrossEntropyLossWithMask(ignore_index=255)

for epoch in range(num_epochs):
    for imgs, labels in dataloader:
        preds = model(imgs)
        loss = criterion(preds, labels)
        loss.backward()
        optimizer.step()
        optimizer.clear_grad()

当前在 DummySegDataset 上进行开发训练。可根据需要替换为 PASCAL VOC、ADE20K 等真实数据集。


验证、评估指标和部署流程见后续文章。

© 2026 Yuxu Ge ·