人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载导读本文聚焦 PaddleSeg 仓库中contrib/PanopticDeepLab子项目系统讲解基于 PaddlePaddle 实现的 Panoptic-DeepLab 为主线先厘清「语义分割 中心点预测 中心点回归 → 实例分组 → majority-vote 融合」的底层原理再结合仓库源码与真实配置文件手把手完成 Cityscapes 数据准备、分布式训练、评估与预测推理。读完后你将掌握如何复现该项目提供的 Cityscapes 基线模型并理解 Panoptic-DeepLab 各模块在 PaddlePaddle 中的具体实现方式。一、算法核心原理Bottom-Up 全景分割1.1 背景全景分割要解决什么问题全景分割Panoptic Segmentation是语义分割与实例分割的统一既要为每个像素赋予语义类别如道路、建筑、行人、汽车又要把属于同一类别的不同个体如两辆不同的汽车、两个不同的行人区分开。传统做法多为 Top-Down先检测后分割而 Panoptic-DeepLab 首次证明Bottom-Up自底向上方法也能达到 state-of-the-art 的效果。1.2 三个预测输出根据 README_CN.md 的说明Panoptic-DeepLab 同时预测三个输出Semantic Segmentation语义分割为每个像素预测其所属的语义类别Center Prediction中心点预测预测每个实例的中心点热力图center heatmap在实例中心位置响应最强Center Regression中心点回归预测每个像素到其所属实例中心的偏移量offset。1.3 从像素到实例再到全景的完整流程整个推理链条可以概括为三步实例分组实例类别的像素根据「最近距离原则」聚集到各自的实例中心点得到类无关class-agnostic的实例分割结果类别归属每个实例分组再通过语义分割结果确定其语义类别全景融合最后按照majority-vote多数投票规则将语义分割结果与实例分割结果融合为每一个像素赋值一个「类别 实例」的联合标签得到最终的全景分割结果。这一步一步的流程在仓库源码 core/infer.py 中有着一一对应的实现详见本文第五章。二、模型基线Cityscapes 上的官方结果README 提供了基于 Cityscapes 数据集的官方基线两张配置分别在两种输入分辨率下训练 90000 轮评估指标涵盖全景分割PQ/SQ/RQ、实例分割AP与语义分割mIoU| Backbone | Batch Size | Resolution | Training Iters | PQ | SQ | RQ | AP | mIoU | 说明 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-| | ResNet50_OS32 | 8 | 2049x1025 | 90000 | 58.35% | 80.03% | 71.52% | 25.80% | 79.18% | 单卡 bs1 训练的完整分辨率模型 | | ResNet50_OS32 | 64 | 1025x513 | 90000 | 60.32% | 80.56% | 73.56% | 26.77% | 79.67% | 8 卡 bs8 训练的降采样模型 |其中 PQPanoptic Quality是全景分割的核心指标可分解为 SQSegmentation Quality与 RQRecognition Quality的乘积。从结果可以看出在 8 卡大 batch64配合 1025x513 分辨率下PQ 反而更高60.32%说明该配置更适合作为默认训练方案这也是 README 训练命令默认使用1025x513_bs8配置文件的原因。以上指标均为 README 与仓库配置文件中公开记录的实验数据复现时受硬件、随机种子与数据版本影响可能存在轻微浮动。三、环境安装与工程结构3.1 环境要求PaddlePaddle 2.0.0推荐使用 GPU 版本训练效果与速度更佳Python 3.63.2 安装步骤# 1. 克隆 PaddleSeg 仓库 git clone https://github.com/PaddlePaddle/PaddleSeg # 2. 安装 paddleseg以可编辑模式安装便于开发调试 cd PaddleSeg pip install -e . # 3. 进入 PanopticDeepLab 子项目目录 cd contrib/PanopticDeepLab后续的所有命令训练、评估、预测都应在contrib/PanopticDeepLab目录下执行。3.3 子项目源码结构从仓库目录结构可以看到该子项目是一个完整独立的全景分割工程contrib/PanopticDeepLab/ ├── configs/ # 配置文件含 _base_ 基础配置与两种 Cityscapes 配置 ├── core/ # 核心逻辑train / val / predict / infer推理后处理 ├── datasets/ # CityscapesPanoptic 数据集类 ├── models/ # PanopticDeepLab 网络定义主干 ASPP 双解码器 双头 ├── transforms/ # target_transforms.py标签目标生成器 ├── utils/ # 可视化与评估工具semantic / instance / panoptic ├── train.py / val.py / predict.py # 命令行入口 └── README_CN.md其中core/infer.py实现了从网络输出到全景分割结果的完整后处理中心点检测、像素分组、语义与实例融合transforms/target_transforms.py则负责把 Cityscapes 的 panoptic 标注转换为网络训练所需的语义图、中心热力图、偏移图及对应的损失权重图。四、数据集准备Cityscapes4.1 目录结构要求将数据集放置于contrib/PanopticDeepLab目录下的data目录中并整理成如下结构Cityscapes 官方gtFine与leftImg8bit目录保持一致额外需要生成 panoptic 标注cityscapes/ |--gtFine/ | |--train/ | | |--aachen/ | | | |--*_color.png, *_instanceIds.png, *_labelIds.png, *_polygons.json, | | | |--*_labelTrainIds.png | | | |--... | |--val/ | |--test/ | |--cityscapes_panoptic_train_trainId.json | |--cityscapes_panoptic_train_trainId/ | | |-- *_panoptic.png | |--cityscapes_panoptic_val_trainId.json | |--cityscapes_panoptic_val_trainId/ | | |-- *_panoptic.png |--leftImg8bit/ | |--train/ | |--val/ | |--test/4.2 安装 CityscapesScripts 并生成 panoptic 标注Cityscapes 原始标注中并不直接包含*_panoptic.png全景标注图需要通过官方脚本生成# 安装 Cityscapes 官方脚本工具 pip install githttps://github.com/mcordts/cityscapesScripts.git # 生成 *_panoptic.png需先找到 createPanopticImgs.py 文件路径 python /path/to/cityscapesscripts/preparation/createPanopticImgs.py \ --dataset-folder data/cityscapes/gtFine/ \ --output-folder data/cityscapes/gtFine/ \ --use-train-id--use-train-id参数确保生成的 panoptic 标注使用 Cityscapes 的 trainId训练类别 id范围 0~18与模型的 19 类语义类别设置保持一致。4.3 数据集类如何读取标注CityscapesPanoptic仓库中的 datasets/cityscapes_panoptic.py 实现了CityscapesPanoptic数据集类关键设计如下通过读取cityscapes_panoptic_{mode}_trainId.json中的images与annotations字段构建图像路径与全景标注路径的对应列表并保存每个标注的segments_info包含每个 segment 的 id、category_id、area、bbox、iscrowd 等元信息训练模式下通过PanopticTargetGenerator将彩色 panoptic 标注转换为网络训练所需的语义标签、前景掩码、中心热力图、偏移图以及各自的损失权重图详见 transforms/target_transforms.py验证模式下额外生成原始语义标签、原始实例标签、原始全景标签raw_semantic_label、raw_instance_label、raw_panoptic_label供评估环节计算 mIoU / mAP / PQ 时与预测结果直接比对。4.4 标签目标生成器的关键细节transforms/target_transforms.py 中的PanopticTargetGenerator是训练标签的核心中心热力图对每个实例thing 类取像素坐标均值得到实例中心(center_y, center_x)并以其为中心按高斯核默认sigma8核尺寸6*sigma3生成热力图响应同一点多实例重叠时取最大值偏移图为每个像素记录其指向实例中心的向量(offset_y, offset_x)权重掩码center_weights与offset_weights用于屏蔽 ignore 区域与 crowdiscrowd1区域若开启ignore_stuff_in_offset则 offset 分支还会忽略 stuff非实例区域只对 thing 类像素计算回归损失小实例加权当实例面积小于small_instance_area默认 4096时其语义损失的权重提升为small_instance_weight默认 3以缓解小目标如远处行人、车辆在语义分支中容易被忽略的问题。五、模型结构与配置解析5.1 PanopticDeepLab 网络整体结构核心网络定义位于 models/panoptic_deeplab.py。PanopticDeepLab继承paddle.nn.Layer通过PanopticDeepLabHead组织两个并行分支语义分支semantic branchSinglePanopticDeepLabDecoderSinglePanopticDeepLabHead输出类别数为num_classesCityscapes 为 19的语义分割 logits实例分支instance branch另一套SinglePanopticDeepLabDecoderSinglePanopticDeepLabHead同时输出center中心热力图1 通道与offset中心回归偏移2 通道分别对应 y/x 方向。两个分支共享主干backbone特征但各自拥有独立的 ASPP、Decoder 与 Head 参数。网络的forward返回[semantic, center, offset]三个 logitsmodels/panoptic_deeplab.py 中forward方法。5.2 关键模块ASPP 与 DecoderASPPModule空洞空间金字塔池化按aspp_ratios并行执行不同膨胀率的空洞卷积并可选image_pooling全局平均池化引入图像级特征最后 concat 后经1x1卷积融合并做 DropoutSinglePanopticDeepLabDecoder先取主干最深特征过 ASPP再按low_level_channels_projects逐级融合低层特征top-down 逐级上采样并 concat用 5x5 可分离卷积SeparableConvBNReLU融合最终恢复高分辨率特征SinglePanopticDeepLabHead对解码特征依次做 5x5 可分离卷积 1x1 卷积分类依据class_key生成对应输出语义分支为[semantic]实例分支为[center, offset]。5.3 默认训练配置逐项解读训练默认使用 configs/panoptic_deeplab/panoptic_deeplab_resnet50_os32_cityscapes_1025x513_bs8_90k_lr00005.yml它继承自完整分辨率配置 panoptic_deeplab_resnet50_os32_cityscapes_2049x1025_bs1_90k_lr00005.yml后者又继承自基础配置 configs/base/cityscapes_panoptic.yml。三层配置合并后的关键字段如下模型model配置项值含义typePanopticDeepLab网络类型backbone.typeResNet50_vd主干网络vd 变体backbone.output_stride32主干输出步长OS32backbone_indices[2, 1, 0, 3]取主干第 0/1/2/3 阶段特征第 3 阶段进 ASPP前 3 个作为低层特征逐级融合aspp_ratios[1, 3, 6, 9]ASPP 空洞率与 OS32 配套aspp_out_channels/decoder_channels256ASPP 与解码器通道数low_level_channels_projects[128, 64, 32]语义分支低层特征投影通道instance_aspp_out_channels/instance_decoder_channels256/128实例分支 ASPP 与解码器通道数instance_low_level_channels_projects[64, 32, 16]实例分支低层特征投影通道instance_num_classes[1, 2]实例分支输出1 通道中心热力图 2 通道偏移instance_head_channels32实例分支 head 通道数instance_class_key[center, offset]实例分支两个输出头的键名align_cornersTrue上采样对齐方式数据增强train_dataset.transforms配置项值含义ResizeStepScalingmin_scale_factor: 0.5, max_scale_factor: 2.0, scale_step_size: 0.25按 0.25 步长在 0.5~2.0 倍间随机缩放RandomPaddingCropcrop_size: [1025, 513], label_padding_value: [0, 0, 0]随机裁剪到目标尺寸bs8 配置为 1025x513RandomHorizontalFlip—随机水平翻转RandomDistortbrightness/contrast/saturation_range: 0.4随机色彩扰动Normalize—标准化数据集参数ignore_stuff_in_offset: Trueoffset 分支忽略 stuff 区域small_instance_area: 4096、small_instance_weight: 3小实例语义损失加权。优化器与学习率optimizer.type: adamAdam 优化器初始学习率0.00005采用poly多项式衰减power: 0.9最终衰减至end_lr: 0.0。损失函数loss分支损失类型系数coef语义CrossEntropyLosstop_k_percent_pixels: 0.2仅取前 20% 高损失像素1中心MSELossreduction: none乘center_weights后取均值200偏移L1Lossreduction: none乘offset_weights后取均值0.001三个损失的具体计算方式与加权逻辑在 core/train.py 的loss_computation中实现中心损失与偏移损失都会先乘以对应的权重掩码再除以权重和做归一化最后乘上各自系数。六、训练实战6.1 启动训练export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 # 根据实际情况进行显卡数量的设置 python -m paddle.distributed.launch train.py \ --config configs/panoptic_deeplab/panoptic_deeplab_resnet50_os32_cityscapes_1025x513_bs8_90k_lr00005.yml \ --do_eval \ --use_vdl \ --save_interval 5000 \ --save_dir output参数说明--config训练配置文件路径--do_eval训练过程中定期在验证集上评估默认每save_interval轮评估一次--use_vdl开启 VisualDL 可视化日志记录训练/验证曲线写入save_dir--save_interval每多少轮保存一次模型快照示例为 5000 轮--save_dir模型与日志保存目录默认output。note使用--do_eval会影响训练速度并增加显存消耗请根据实际需要决定开闭。6.2 训练过程与日志解读根据 core/train.py训练过程中每个log_iters默认 10轮会打印一次日志包含loss / semantic_loss / center_loss / offset_loss、学习率、batch 耗时与吞吐samples/sec同时会分别打印[TRAIN]与[LOSS]两类日志便于单独观察三个分支的收敛情况。模型保存逻辑每save_interval轮保存iter_{n}/model.pdparams模型权重与model.pdopt优化器状态便于断点续训默认最多保留keep_checkpoint_max5个快照超出后自动删除最早的训练后半程iter iters // 2会依据验证 PQ 保存best_model训练结束后打印最优 PQ 及其所在迭代。6.3 查看全部训练参数python train.py --help可查看训练入口支持的全部参数如--resume_model断点续训、--num_workers数据加载线程数、--log_iters日志频率等。七、模型评估7.1 评估命令python val.py \ --config configs/panoptic_deeplab/panoptic_deeplab_resnet50_os32_cityscapes_1025x513_bs8_90k_lr00005.yml \ --model_path output/iter_90000/model.pdparams你也可以直接下载 README 表格中提供的官方预训练模型进行评估。--model_path指向训练产出的权重文件如output/iter_90000/model.pdparams或官方模型。7.2 评估指标三类指标一次评估根据 core/val.py评估会同时产出三大类指标全景分割PQ / SQ / RQ按 All、Things、Stuff 及每个类别分别统计语义分割mIoU / fwIoU / mACC / pACC实例分割mAP / mAP50mAP使用 IoU 阈值 0.5~0.95 步长 0.05mAP50使用 0.5。评估完成后控制台会打印PQ: xx, mIoU: xx, mAP: xx, mAP50: xx汇总行。训练日志中的[EVAL]行输出的正是这套指标方便训练过程中跟踪 PQ 与 mIoU 的变化。八、预测推理与可视化8.1 预测命令export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 # 根据实际情况进行显卡数量的设置 python -m paddle.distributed.launch predict.py \ --config configs/panoptic_deeplab/panoptic_deeplab_resnet50_os32_cityscapes_1025x513_bs8_90k_lr00005.yml \ --model_path output/iter_90000/model.pdparams \ --image_path data/cityscapes/leftImg8bit/val/ \ --save_dir ./output/result--image_path既可以是单张图片路径也可以是目录目录下所有图片都会参与预测--save_dir指定可视化结果输出目录。你也可以直接使用官方预训练模型进行预测。8.2 预测输出内容根据 core/predict.py预测会在save_dir下生成三个子目录每个子目录同时保存「纯分割图」与「叠加在原图上的可视化图」文件名带_added后缀panoptic/全景分割可视化同时区分类别与个体semantic/语义分割可视化仅区分类别额外包含_panoptic_to_semantic系列由全景结果反推的语义图instance/实例分割可视化仅保留实例区域类别无关。8.3 推理后处理全流程源码级core/infer.py 实现了从网络 logits 到最终结果的全套后处理与 README 中的算法描述一一对应语义结果对语义 logits 取argmax得到语义标签同时用softmax得到逐类概率供实例评估使用中心点检测find_instance_center对中心热力图先做阈值过滤默认threshold0.1再做最大池化 NMS默认nms_kernel7训练时为 3并保留 Top-K 个中心默认top_k200得到候选实例中心集合像素分组group_pixels依据「最近距离原则」——每个像素用预测偏移量指向的位置与各候选中心计算距离取距离最近的中心作为归属得到类无关的实例 id 图id 从 1 开始0 保留给 stuff实例分割get_instance_segmentation仅保留语义预测中属于 thing 类区域的实例 id全景融合merge_semantic_and_instance对每个实例分组内的像素执行majority-vote统计该实例区域内语义预测的众数类别作为该实例的类别将全景标签编码为class_id * label_divisor ins_idlabel_divisor1000stuff 类区域则按语义预测直接填充且面积小于stuff_area默认 2048的碎片 stuff 区域会被丢弃尺寸还原reverse_transform根据预处理时的 resize/padding 记录将语义、实例、全景结果恢复至原始图像尺寸。8.4 可视化结果对比以下三张图来自仓库 docs 目录分别展示 Cityscapes 验证集上同一街景的三类分割结果与 README 展示效果一致可以看到语义分割图只按类别着色无法区分「同一条路上的两辆车」实例分割图将不同个体用不同颜色区分但不关心类别全景分割图则两者兼得——每辆车、每个行人既拥有自己的语义类别又拥有独立实例 id。九、常见问题与调优建议显存不足--do_eval会显著增加显存与耗时训练中期可关闭或改用1025x513分辨率配置、减小 batch size训练不收敛确认数据增强中的RandomPaddingCrop的crop_size与配置文件一致确认cityscapes_panoptic_*_trainId.json与*_panoptic.png已正确生成--use-train-id必须开启评估指标异常验证集评估依赖raw_panoptic_label若使用官方预训练模型请确保--model_path指向的权重与配置文件分辨率、OS32匹配多卡训练训练与预测均通过paddle.distributed.launch启动CUDA_VISIBLE_DEVICES设置的卡数应与配置文件batch_size对应bs8 配置面向 8 卡、单卡 batch 8 的语义对应 README 中 Batch Size64 的设定超参数速查threshold / nms_kernel / top_k三个推理超参数可通过val.py、predict.py的--help查看并调整如提高threshold可过滤低置信度中心点减少误检实例。结语Panoptic-DeepLab 以「语义分割 中心预测 中心回归」三个分支并联输出的简洁设计完成了对全景分割 Bottom-Up 路线的有力验证。通过本仓库你可以基于 PaddlePaddle 完整复现其在 Cityscapes 上的训练、评估与预测闭环从CityscapesPanoptic数据集的标注转换到PanopticDeepLab双分支网络的搭建再到core/infer.py中最近邻分组与 majority-vote 融合的后处理每一环都有清晰的源码与配置可查。后续可在此基础上尝试调整aspp_ratios、instance_head_channels等结构参数或替换 ResNet101_vd 等更强主干进一步探索全景分割的性能上限。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐基于 PaddleSeg 的全景分割工具箱实战Mask2Former 与 Panoptic-DeepLab 的训练、评估与部署基于 PaddleSeg 的全景分割工具箱实战Mask2Former 与 Panoptic DeepLab 的训练、评估与部署 全景分割Panoptic S人工智能计算机视觉预训练TensorFlow models 仓库全景分割实战COCO 上 Panoptic FPN 与 Panoptic-DeepLab 的训练、评测与预训练模型TensorFlow models 仓库全景分割实战COCO 上 Panoptic FPN 与 Panoptic DeepLab 的训练、评测与预训练模型 本人工智能深度学习计算机视觉NLP语音PaddleSeg PanopticDeepLab 全景分割实战指南基于 PaddlePaddle 的 Bottom-Up 全景分割实现与 Cityscapes 训练部署PaddleSeg PanopticDeepLab 全景分割实战指南基于 PaddlePaddle 的 Bottom Up 全景分割实现与 Cityscape人工智能计算机视觉预训练上一篇InstaGAN自定义数据集打造专属的图像翻译应用下一篇Process Governor内存管理进阶工作集大小与作业内存限制实用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
