YOLO26 Semantic Segmentation Skill
基于 Ultralytics YOLO26 对图片目录做语义分割,提取 EXIF GPS 经纬度,输出完整结果包。
默认行为(自动执行)
当用户说"做语义分割"、"分析图像"、"跑 YOLO26 sem"等类似表述时,直接运行脚本:
python scripts/run_semantic.py --input gsv_out --output gsv_semantic
输入
默认读取 gsv_out/ 下所有 .jpg。可通过 --input 指定其他目录。
输出(带时间戳目录)
gsv_semantic_YYYYMMDD_HHMMSS/
├── results.csv # 每张图一行
├── masks/ # Cityscapes 官方色彩掩膜 PNG
└── overlays/ # 原图 50% + 掩膜 50% 叠加 JPG
CSV 列说明
| 列 | 格式 | 说明 |
|---|---|---|
filename |
str | 原始文件名 |
date |
str | EXIF 拍摄日期(YYYY-MM-DD HH:MM:SS) |
lat |
double (8位) | WGS84 纬度 |
lon |
double (8位) | WGS84 经度 |
mask_file |
str | 掩膜 PNG 相对路径 |
overlay_file |
str | 叠加 JPG 相对路径 |
road..bicycle |
double (6位) | Cityscapes 19 类像素占比(%) |
模型与色彩
默认使用 yolo26n-sem.pt(Cityscapes 预训练,19 类),Cityscapes 官方色彩映射:
| ID | 类别 | 色值 (R,G,B) | 色块 |
|---|---|---|---|
| 0 | road | 128,64,128 | 🟣 |
| 1 | sidewalk | 244,35,232 | 🩷 |
| 2 | building | 70,70,70 | ⬛ |
| 3 | wall | 102,102,156 | 🔵 |
| 4 | fence | 190,153,153 | 🟫 |
| 5 | pole | 153,153,153 | 🩶 |
| 6 | traffic_light | 250,170,30 | 🟠 |
| 7 | traffic_sign | 220,220,0 | 🟡 |
| 8 | vegetation | 107,142,35 | 🟢 |
| 9 | terrain | 152,251,152 | 🟩 |
| 10 | sky | 70,130,180 | 🔷 |
| 11 | person | 220,20,60 | 🔴 |
| 12 | rider | 255,0,0 | 🔴 |
| 13 | car | 0,0,142 | 🔵 |
| 14 | truck | 0,0,70 | 🔵 |
| 15 | bus | 0,60,100 | 🔵 |
| 16 | train | 0,80,100 | 🔵 |
| 17 | motorcycle | 0,0,230 | 🔵 |
| 18 | bicycle | 119,11,32 | 🔴 |
脚本配置(run_semantic.py 顶部)
INPUT_DIR = "gsv_out" # 输入图像目录
MODEL_NAME = "yolo26n-sem.pt" # 模型 (n/s/m/l/x)
IMGSZ = 1024 # 推理分辨率
DEVICE = "cpu" # "0"=GPU, "cpu"=CPU
依赖
pip install ultralytics pillow numpy
触发场景
- "做语义分割"、"跑语义分割"、"分析语义"
- "对图像做 YOLO26 分割"、"semantic segmentation"
- "输出这些图的语义类别占比"
- "跑 run_semantic.py"
训练自定义模型
from ultralytics import YOLO
model = YOLO("yolo26n-sem.pt")
model.train(data="your_dataset.yaml", epochs=100, imgsz=512, batch=16)
单张推理
from ultralytics import YOLO
model = YOLO("yolo26n-sem.pt")
results = model("image.jpg")
mask = results[0].semantic_mask.data # (H,W) 类ID矩阵
导出
yolo semantic export model=yolo26n-sem.pt format=onnx
模型选择
| 模型 | Cityscapes mIoU | ADE20K mIoU | 参数量 |
|---|---|---|---|
yolo26n-sem.pt |
78.3 | 38.8 | 1.6M |
yolo26s-sem.pt |
80.8 | 45.6 | 6.5M |
yolo26m-sem.pt |
82.0 | 47.4 | 14.3M |
yolo26l-sem.pt |
82.9 | 49.7 | 17.9M |
yolo26x-sem.pt |
83.6 | 51.5 | 40.2M |
数据集格式
语义分割使用单通道 PNG 掩码,像素值=类ID,255=忽略。
# dataset.yaml
path: ./dataset
train: images/train
val: images/val
masks_dir: masks
names:
0: background
1: road
# ...
实例分割 vs 语义分割
| 方面 | 实例分割 | 语义分割 |
|---|---|---|
| 输出 | result.masks (N,H,W) |
result.semantic_mask (H,W) |
| 同类对象 | 独立实例 | 合并区域 |
| 边界框/置信度 | ✅ | ❌ |
| 典型用途 | 计数/跟踪 | 场景标记/土地覆盖 |
Scripts
Run a listed script with bash using the exact path shown below; quote the path if it contains spaces.
scripts/run_semantic.py— 批量语义分割主脚本。用法:
bash cd <skill目录> python scripts/run_semantic.py --input ./gsv_out --output gsv_semantic
参数:--input图像目录,--output输出前缀,--model模型名,--imgsz分辨率,--devicecpu/0
许可证说明
本 Skill 基于 Ultralytics YOLO(YOLO26) 二次封装开发。
上游 Ultralytics YOLO 源码遵循 GNU AGPLv3.0 License。
- 本 Skill 完整源码采用 GNU AGPLv3.0 开源分发;
- 若你修改本 Skill,并通过网络对外提供服务,修改后的全部源代码必须公开;
- 预训练模型权重文件不随本项目分发,请前往 Ultralytics 官方渠道自行下载;
- 商业使用须知:AGPLv3 协议不支持闭源商用。如需闭源商业部署,请向 Ultralytics 官方申请商业授权;
- 本 Skill 仅作技术学习研究使用,严禁用于非法监控、侵犯公民隐私、违反法律法规的场景。
原始项目地址:https://github.com/ultralytics/ultralytics