ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ultralytics YOLO26 语义分割实战指南:原理、数据格式、训练、验证、推理与导出

Ultralytics YOLO26 语义分割实战指南:原理、数据格式、训练、验证、推理与导出 Ultralytics YOLO26 语义分割实战指南原理、数据格式、训练、验证、推理与导出【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics本文围绕 Ultralytics当前仓库GitHub_Trending/ul/ultralytics中基于 YOLO26 构建的**语义分割Semantic Segmentation**能力展开系统讲解tasksemantic与yolo26*-sem模型族的完整工作流从像素级分类原理与模型结构到 PNG mask 数据集规范与 YAML 配置再到训练、验证、推理、导出四大 mode 的 Python/CLI 用法并结合仓库源码yolo26-sem.yaml、train.py、val.py、predict.py给出源码级佐证。读完本文你将掌握用 YOLO26 在 Cityscapes、ADE20K 或自建数据集上完成场景解析任务如可行驶区域、地物覆盖、医学区域标注的完整能力。语义分割是什么与实例分割有何区别语义分割为图像中的每一个像素分配一个类别标签输出一张覆盖整个场景的稠密类别图dense class map。与 实例分割 逐个区分目标个体不同语义分割会把同一类别的所有像素归为一组无论画面里存在多少个不同个体。例如一辆车不管出现多少辆它们的像素都共享同一个车的类别 ID。模型输出是一个宽高为H × W的类别图每个像素值对应一个预测类别 ID。这一特性使语义分割非常适合**场景解析scene parsing**类任务例如自动驾驶中的可行驶区域、医学影像区域划分、土地覆盖land-cover制图等。在代码中使用tasksemantic任务参数或yolo semantic这一 CLI 任务命令YOLO26 语义分割模型的权重文件统一使用-sem后缀例如yolo26n-sem.pt。从仓库中 yolo26-sem.yaml 可以看到模型的头部分支与实例分割的显著差异语义头只取 P3/8 与 P4/16 两级特征输入不再输出 P5 层的多尺度预测经过两轮nn.Upsample Concat C3k2上采样融合后由末尾的SemanticSegment模块一次性输出全分辨率类别概率图nc: 19对应 Cityscapes 的默认 19 类scales中的[depth, width, max_channels]三元组则控制了 n/s/m/l/x 五种规格的复合缩放比例。下表可直接用于理解任务差异依据 官方任务说明维度实例分割tasksegment语义分割tasksemantic预测目标分别分割每个检测到的对象为每个像素分配一个类别 ID输出字段result.masksresult.semantic_mask主要数据result.masks.dataresult.semantic_mask.data形状(N,H,W)(H,W)像素取值二值掩膜0或1类别 ID0、1、2…数据类型torch.uint8torch.uint8/torch.int16/torch.int32同类对象保持为独立实例合并为同一类区域多边形输出有经result.masks.xy/result.masks.xyn默认无多边形输出框与置信度有经result.boxes无逐实例框或置信度分数典型用途计数、跟踪、裁剪、目标级测量稠密场景标注、可行驶区域、土地覆盖、医学区域预训练模型Cityscapes 与 ADE20K 双基准YOLO26 语义分割模型在 Cityscapes 与 ADE20K 两个公开数据集上提供了官方预训练权重首次使用时自动下载完整表格见 docs/macros/yolo-semantic-perf.md 与 docs/macros/yolo-semantic-ade20k-perf.md。Cityscapes 预训练模型官方权重下载入口ultralytics/cfg/models/26下对应-sem配置模型输入尺寸 (px)mIoUval速度 RTX3090 PyTorch (ms)参数量 (M)FLOPs (B)YOLO26n-sem1024 × 204878.34.4 ± 0.01.622.7YOLO26s-sem1024 × 204880.88.4 ± 0.06.588.8YOLO26m-sem1024 × 204882.019.9 ± 0.114.3304.5YOLO26l-sem1024 × 204882.926.5 ± 0.117.9384.7YOLO26x-sem1024 × 204883.648.9 ± 0.240.2861.7ADE20K 预训练模型文件名形如yolo26n-sem-ade20k.pt模型输入尺寸 (px)mIoUval速度 RTX3090 PyTorch (ms)参数量 (M)FLOPs (B)YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.4YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.4YOLO26m-sem-ade20k64047.44.7 ± 0.314.359.5YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.0YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.1理解表格时需注意mIoUvalCityscapes 一行为单模型、单尺度在 Cityscapes 验证集上的结果可用yolo semantic val datacityscapes.yaml device0 imgsz2048复现ADE20K 一行在 ADE20K 验证集上评估用yolo semantic val modelyolo26n-sem-ade20k.pt dataade20k.yaml device0 imgsz640复现将yolo26n-sem-ade20k.pt换成期望的yolo26*-sem-ade20k.pt即可。速度Cityscapes 表格对 Cityscapes 验证图求平均可用yolo semantic val datacityscapes.yaml batch1 device0|cpu imgsz2048复现ADE20K 表格同理改用 ADE20K 验证图与imgsz640。Params 与 FLOPs均针对model.fuse()融合 Conv 与 BatchNorm后的模型预训练 checkpoint 保留了完整训练结构直接统计会偏高。从源码结构可以印证轻量到重量的规格差异来自 yolo26-sem.yaml 中scales对网络深度与宽度的复合缩放例如n为[0.50, 0.25, 1024]、x为[1.00, 1.50, 512]这也解释了同一架构下参数量从 1.6 M 到 40.2 M 的跨度。数据集格式PNG mask 与 YOLO 多边形标签语义分割的训练目标是稠密类别图标签不再是boxes或实例多边形而是单通道掩膜图。完整格式说明见 Semantic Segmentation Dataset Guide仓库内置配置可直接参考 cityscapes.yaml 与 ade20k.yaml。PNG mask 格式每个样本由一张原图与一张掩膜图组成掩膜通常为PNG 单通道图每个像素值即该类别的 ID。像素值0, 1, 2, ...对应数据集names映射中的类别。像素值255视为忽略ignore标签在损失计算与指标统计中都被排除见 index.md 中关于 ignore label 的说明。掩膜文件须与原图同名同路径结构例如images/train/aachen_000000_000019.png对masks/train/aachen_000000_000019.png加载器默认按.png解析缺失时才回退其他图片扩展名。请务必使用.png/.tiff等无损格式有损压缩如.jpg会破坏类别 ID 像素值。典型目录布局images与masks平行存放dataset/ ├── images/ │ ├── train/ │ └── val/ └── masks/ ├── train/ └── val/数据集 YAML 字段键说明path数据集根目录train/val相对path或绝对路径的训练/验证图目录test可选的测试图目录masks_dir语义掩膜目录名省略此键且数据集根目录旁不存在masks/目录即切换为 YOLO 多边形标签格式names类别 ID 到类别名的映射label_mapping可选把源数据集的标签 ID 映射为连续训练 ID 或ignore_labellabel_mapping在源掩膜 ID 与连续训练 ID 不一致时使用。以 cityscapes.yaml 为例它将官方 34 类粗标签映射为 19 个训练类并把 ignore 区域统一转为 255例如0: ignore_label、7: 0表示源标签 7 对应训练类 0 即 road29: ignore_label表示 void 区。一个自建 PNG mask 数据集的 YAML 最小示例path: path/to/my-semantic-dataset train: images/train val: images/val masks_dir: masks names: 0: background 1: road 2: buildingYOLO 多边形标签免转换直接训练如果你的数据已具备实例分割风格的多边形标注每张图一个.txt每行class-index x1 y1 x2 y2 ...可以不用准备 PNG mask只要数据集 YAML省略masks_dir且数据集根目录图像旁不存在masks/目录即使未设置masks_dir该目录的存在也会把加载器切回 PNG mask 模式加载器就会在读取时把多边形实时栅格化为逐图像语义掩膜。行为细节多边形按面积排序转换重叠区域由小目标覆盖大目标。多类N 1自动在names末尾追加background类模型以N 1个输出通道构建最后一个通道为背景。单类N 1仍按 1 类训练掩膜为二值图——声明的类取1未覆盖像素取0不会额外追加 background。增广填充产生的像素如随机裁剪依然以255作为忽略标签。对应源码可查看 train.py 与 val.py 中共同的get_dataset()实现——它们都调用add_polygon_background()来为多边形标签补充背景类元数据。训练Train以 Cityscapes8 子集为例训练 YOLO26n-sem 模型 100 个 epoch、输入尺寸 1024。Cityscapes8 是用于快速验证与 CI 的 8 图精简子集全量配置见 Cityscapes8 数据说明。完整参数清单见 Configuration 页面。Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolo26n-sem.yaml) # 从 YAML 构建新模型 model YOLO(yolo26n-sem.pt) # 加载预训练模型推荐用于训练 model YOLO(yolo26n-sem.yaml).load(yolo26n-sem.pt) # 由 YAML 构建并迁移权重 # 训练模型 results model.train(datacityscapes8.yaml, epochs100, imgsz1024)CLI# 从 YAML 构建新模型并从头开始训练 yolo semantic train datacityscapes8.yaml modelyolo26n-sem.yaml epochs100 imgsz1024 # 从预训练 *.pt 模型开始训练 yolo semantic train datacityscapes8.yaml modelyolo26n-sem.pt epochs100 imgsz1024 # 由 YAML 构建新模型、迁移预训练权重后开始训练 yolo semantic train datacityscapes8.yaml modelyolo26n-sem.yaml pretrainedyolo26n-sem.pt epochs100 imgsz1024训练底层由SemanticSegmentationTrainer驱动源码见 train.py该类继承自DetectionTrainer但在__init__中强制写入tasksemantic并通过get_model()构建SemanticSegmentationModel类数取自数据 YAML 的nc。几个值得注意的实现细节类别不平衡处理set_class_weights()对多类数据按像素频率计算类别权重当nc 1二值分割时跳过权重并改用不加权的 BCE 损失。权重公式compute_class_weights()采用 ENet 的逆对数形式(1 / ln(1.02 p)) ** cls_pw源码注释引用 Paszke et al., 2016其中p为像素频率cls_pw为可调权重指数——低频稀有类别会获得更高的损失权重。标签分布可视化训练时会从训练掩膜中抽样统计各类像素占比默认最多 1000 张绘制为labels.jpg便于诊断类别不平衡。trainmode 的完整说明见 Train也支持通过 Ultralytics Platform 云端训练 进行。语义数据的标注与托管可参考 Platform 数据标注。验证Val验证使用 SemanticSegmentationValidatormIoU与像素精度pixel_accuracy两个核心指标其get_desc()输出列为Class / Images / Pixels / mIoU / PixAcc。验证时请显式传入data确保使用预期的数据集 YAML 进行评测。Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolo26n-sem.pt) # 加载官方模型 model YOLO(path/to/best.pt) # 加载自定义模型 # 验证模型 metrics model.val(datacityscapes.yaml) metrics.miou # 平均交并比 mIoU metrics.pixel_accuracy # 整体像素精度CLIyolo semantic val modelyolo26n-sem.pt datacityscapes.yaml # 验证官方模型 yolo semantic val modelpath/to/best.pt datapath/to/data.yaml # 验证自定义模型源码实现印证了指标口径val.py 的postprocess()会对 logits[B, nc, H, W]先双线性上采样到目标尺寸再做argmax多类或0阈值单类若导出模型已将argmax烘焙进计算图输出[B, H, W]类别图则只做最近邻重采样。save_jsonTrue时还会把预测掩膜以单通道 PNG 保存到results/目录并支持 DDP 下混淆矩阵的跨进程归约。推理Predict使用训练好的 YOLO26n-sem 模型对图片进行预测。语义分割预测器由 SemanticSegmentationPredictor 实现。Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolo26n-sem.pt) # 加载官方模型 model YOLO(path/to/best.pt) # 加载自定义模型 # 预测 results model(https://ultralytics.com/images/bus.jpg) # 对图片进行预测 # 访问结果 for result in results: semantic_mask result.semantic_mask.data # 类别图形状 (H,W)dtype 由类别数决定CLIyolo semantic predict modelyolo26n-sem.pt sourcehttps://ultralytics.com/images/bus.jpg # 官方模型预测 yolo semantic predict modelpath/to/best.pt sourcehttps://ultralytics.com/images/bus.jpg # 自定义模型预测predictmode 完整说明见 Predict。结果输出一张稠密类别图语义分割对每张图返回一个Results对象内部保存整张图的稠密类别图而非对象掩膜列表。同一预测类的像素共享同一类别 ID即使它们分属不同对象。字段如下属性类型形状描述result.semantic_maskSemanticMask(H,W)稠密类别图result.semantic_mask.datatorch.uint8/torch.int16/torch.int32(H,W)类别 IDdtype 由类别数自动选择result.masks--无实例掩膜result.boxes--无实例框/置信度result.masks.xy--无默认多边形关于dtype的自动选择predict.py 中_class_map_dtype()的规则是类别数 256用uint8 32768用int16否则用int32——在保证数值范围的前提下尽量节省显存与带宽。各任务Results字段总览见 Predict Results by Task。掩膜边界质量提示语义分割先预测稠密类别图再将其重采样回原图尺寸用于可视化与下游使用。当推理imgsz远低于原图分辨率时很细的结构车道线、球场边线、电线杆、线缆等可能出现阶梯状边缘。若边界呈锯齿状先用原生 PyTorch.pt模型以更大imgsz如1024、1280或最接近原图的尺寸重测确认.pt输出可接受后再使用导出模型——低分辨率输入无法恢复类别图中本就不存在的细节。导出Export将 YOLO26n-sem 模型导出为 ONNX、CoreML 等格式。Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolo26n-sem.pt) # 加载官方模型 model YOLO(path/to/best.pt) # 加载自定义模型 # 导出模型 model.export(formatonnx)CLIyolo export modelyolo26n-sem.pt formatonnx # 导出官方模型 yolo export modelpath/to/best.pt formatonnx # 导出自定义模型可用的导出格式随format参数指定如formatonnx、formatengine等完整格式表见 export-table.md。导出的模型可以直接预测或验证例如yolo predict modelyolo26n-sem.onnx。完整export说明见 Export。值得留意的是导出后输出的差异从 val.py 与 predict.py 的注释与分支逻辑可见部分后端导出时会把ArgMax烘焙进计算图此时网络输出不再是[B, nc, H, W]的概率 logits而是[B, H, W]的离散类别图——解码阶段只需最近邻重采样不再需要argmax这也与预测一张稠密类别图的语义分割语义完全一致。FAQ如何在自定义数据集上训练 YOLO26 语义分割模型准备好像素值为类别 ID0, 1, 2, ...的 PNG 掩膜图像素 255 训练时忽略创建指向images与masks目录的数据集 YAML然后训练from ultralytics import YOLO # 加载预训练 YOLO26 语义分割模型 model YOLO(yolo26n-sem.pt) # 训练 results model.train(datapath/to/your_dataset.yaml, epochs100, imgsz512)yolo semantic train datapath/to/your_dataset.yaml modelyolo26n-sem.pt epochs100 imgsz512更多可用参数见 Configuration。实例分割与语义分割的区别是什么两者都是像素级任务关键区别在于语义分割为每个像素分配类别标签但不区分同类个体画面中所有车共享同一标签实例分割则把每个个体单独区分同类也各自独立成掩膜。语义分割适合场景理解类任务自动驾驶、土地覆盖制图实例分割更适合需要计数或跟踪个体的场景。能用实例分割数据训练语义分割吗可以。若数据是 YOLO 多边形标签每图一个.txt省略数据集 YAML 中的masks_dir并确保数据集根目录图像旁不存在masks/文件夹其存在本身即触发 PNG-mask 模式加载器即实时将多边形栅格化为语义掩膜。多类N 1时自动向names追加background单类N 1时仍按 1 类训练。详见 Polygon 格式说明。支持哪些语义分割数据集Ultralytics YOLO26 提供若干内置数据集配置Cityscapes城市街道场景19 类自动驾驶研究常用配置见 cityscapes.yaml含label_mapping。ADE20K大规模场景解析数据集150 类。Cityscapes88 张图的快速测试子集见 cityscapes8.md。此外任何提供像素值为类别 ID 的 PNG 掩膜的自定义数据集均可用。如何验证预训练的 YOLO26 语义分割模型from ultralytics import YOLO # 加载预训练模型 model YOLO(yolo26n-sem.pt) # 验证模型 metrics model.val(datacityscapes.yaml) print(Mean IoU:, metrics.miou) print(Pixel Accuracy:, metrics.pixel_accuracy)yolo semantic val modelyolo26n-sem.pt datacityscapes.yaml上述步骤将输出平均交并比mIoU与像素精度pixel accuracy等语义分割标准评估指标。如何把 YOLO26 语义分割模型导出为 ONNXfrom ultralytics import YOLO # 加载预训练模型 model YOLO(yolo26n-sem.pt) # 导出为 ONNX model.export(formatonnx)yolo export modelyolo26n-sem.pt formatonnx更多导出格式与细节见 Export。【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表