【YOLO 入门到精通 11】进阶任务实战:分割、姿态、OBB 与深度估计

【YOLO 入门到精通 11】进阶任务实战:分割、姿态、OBB 与深度估计

标签 :实例分割 姿态估计 OBB 深度估计 YOLO多任务

难度 :⭐⭐⭐⭐ | 阅读时长 :约 75 分钟 | 系列 :第 11/12 集

前置 :10 导出部署 | 下一集 :12 生产实践


写在前面

检测只是起点。医学影像要分割 ,健身房要姿态 ,卫星图要旋转框 ,AR 要深度------YOLO26 用统一框架覆盖 7 大任务。

本集带你逐个击破,每个任务都有「是什么 → 怎么训 → 怎么用」的完整路径。


本集学习目标

  • 完成实例分割训练与推理
  • 实现姿态估计与角度计算
  • 处理旋转目标检测 (OBB)
  • 了解分类、语义分割、深度估计

文章目录

  • [【YOLO 入门到精通 11】进阶任务实战:分割、姿态、OBB 与深度估计](#【YOLO 入门到精通 11】进阶任务实战:分割、姿态、OBB 与深度估计)
    • 写在前面
    • 本集学习目标
    • [11.1 进阶任务概览](#11.1 进阶任务概览)
    • [11.2 实例分割 (Segmentation)](#11.2 实例分割 (Segmentation))
    • [11.3 姿态估计 (Pose)](#11.3 姿态估计 (Pose))
    • [11.4 旋转目标检测 (OBB)](#11.4 旋转目标检测 (OBB))
    • [11.5 图像分类 (Classification)](#11.5 图像分类 (Classification))
    • [11.6 语义分割 (Semantic)](#11.6 语义分割 (Semantic))
    • [11.7 深度估计 (Depth)](#11.7 深度估计 (Depth))
    • [11.8 任务选择决策](#11.8 任务选择决策)
    • [11.9 踩坑指南](#11.9 踩坑指南)
    • [11.10 本集小结](#11.10 本集小结)

11.1 进阶任务概览

任务 后缀 输出 场景
检测 无 框+类 通用
实例分割 -seg 掩码 抠图/医学
姿态 -pose 17关键点 健身/安防
OBB -obb 旋转框 航拍
分类 -cls 类别概率 质检
语义分割 -sem 像素类别图 场景理解
深度 -depth 深度图(米) AR/机器人

11.2 实例分割 (Segmentation)

检测 vs 分割

检测 分割
输出 矩形框 像素掩码
精度 粗略 像素级
模型 yolo26n.pt yolo26n-seg.pt

训练

python 复制代码
from ultralytics import YOLO

model = YOLO("yolo26n-seg.pt")
model.train(data="seg_dataset.yaml", epochs=100, imgsz=640, batch=8)

标签格式(多边形):class x1 y1 x2 y2 x3 y3 ...

推理

python 复制代码
model = YOLO("yolo26n-seg.pt")
results = model("image.jpg")

for r in results:
    if r.masks:
        masks = r.masks.data  # (N, H, W)
        print(f"{len(masks)} 个实例")
        r.save("segmented.jpg")
场景 推荐模型
医学影像 yolo26m-seg
电商抠图 yolo26s-seg
工业缺陷 yolo26m-seg

11.3 姿态估计 (Pose)

17 个 COCO 关键点

复制代码
       0鼻
      / \
   1左眼 2右眼
   3左耳 4右耳
    5左肩-6右肩
   /  \  /  \
  7左肘 8右肘
  9左腕 10右腕
  11左髋-12右髋
   /  \  /  \
 13左膝 14右膝
 15左踝 16右踝

训练与推理

python 复制代码
model = YOLO("yolo26n-pose.pt")
model.train(data="coco-pose.yaml", epochs=100)
results = model("person.jpg")

角度计算(健身场景)

python 复制代码
import numpy as np

def angle(p1, p2, p3):
    v1, v2 = np.array(p1)-np.array(p2), np.array(p3)-np.array(p2)
    cos = np.dot(v1,v2) / (np.linalg.norm(v1)*np.linalg.norm(v2)+1e-6)
    return np.degrees(np.arccos(np.clip(cos, -1, 1)))

r = model("squat.jpg")[0]
if r.keypoints is not None:
    kps = r.keypoints.xy[0].cpu().numpy()
    knee_angle = angle(kps[11], kps[13], kps[15])  # 左膝
    print(f"左膝角度: {knee_angle:.1f}°")
    if knee_angle < 90:
        print("深蹲到位!")

11.4 旋转目标检测 (OBB)

适用于目标有任意角度的情况(航拍、文档)。

python 复制代码
model = YOLO("yolo26n-obb.pt")
model.train(data="dota.yaml", epochs=100, imgsz=1024)
results = model("aerial.jpg")

for r in results:
    if r.obb:
        for i in range(len(r.obb)):
            xywhr = r.obb.xywhr[i].cpu().numpy()
            x, y, w, h, angle = xywhr
            cls_name = model.names[int(r.obb.cls[i])]
            print(f"{cls_name}: 中心({x:.1f},{y:.1f}), 角度{np.degrees(angle):.1f}°")

标签:class x_center y_center width height angle(弧度)


11.5 图像分类 (Classification)

python 复制代码
model = YOLO("yolo26n-cls.pt")

# 数据结构: dataset/train/cat/, dataset/train/dog/
model.train(data="classification_dataset", epochs=100, imgsz=224)

results = model("animal.jpg")
probs = results[0].probs
for i, (cid, conf) in enumerate(zip(probs.top5, probs.top5conf)):
    print(f"{i+1}. {model.names[cid]}: {conf:.2%}")

11.6 语义分割 (Semantic)

与实例分割区别:不区分同类个体。

python 复制代码
model = YOLO("yolo26n-sem.pt")
model.train(data="cityscapes.yaml", epochs=100)
results = model("street.jpg")
# 输出每像素类别图,适合场景理解

11.7 深度估计 (Depth)

从单张 RGB 图预测每像素距离(米)。

python 复制代码
import cv2
import numpy as np

model = YOLO("yolo26n-depth.pt")
results = model("room.jpg")

for r in results:
    if r.depth is not None:
        depth = r.depth.data[0].cpu().numpy()
        vis = cv2.applyColorMap(
            ((depth - depth.min()) / (depth.max() - depth.min() + 1e-6) * 255).astype(np.uint8),
            cv2.COLORMAP_INFERNO
        )
        cv2.imwrite("depth.jpg", vis)
        print(f"中心深度: {depth[depth.shape[0]//2, depth.shape[1]//2]:.2f}m")
应用 用途
AR/VR 虚拟物体放置
机器人 障碍物距离
3D重建 单目深度图

11.8 任务选择决策

#mermaid-svg-4Okq47ZFep2H1YXa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4Okq47ZFep2H1YXa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4Okq47ZFep2H1YXa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4Okq47ZFep2H1YXa .error-icon{fill:#552222;}#mermaid-svg-4Okq47ZFep2H1YXa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4Okq47ZFep2H1YXa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4Okq47ZFep2H1YXa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4Okq47ZFep2H1YXa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4Okq47ZFep2H1YXa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4Okq47ZFep2H1YXa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4Okq47ZFep2H1YXa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4Okq47ZFep2H1YXa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4Okq47ZFep2H1YXa .marker.cross{stroke:#333333;}#mermaid-svg-4Okq47ZFep2H1YXa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4Okq47ZFep2H1YXa p{margin:0;}#mermaid-svg-4Okq47ZFep2H1YXa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4Okq47ZFep2H1YXa .cluster-label text{fill:#333;}#mermaid-svg-4Okq47ZFep2H1YXa .cluster-label span{color:#333;}#mermaid-svg-4Okq47ZFep2H1YXa .cluster-label span p{background-color:transparent;}#mermaid-svg-4Okq47ZFep2H1YXa .label text,#mermaid-svg-4Okq47ZFep2H1YXa span{fill:#333;color:#333;}#mermaid-svg-4Okq47ZFep2H1YXa .node rect,#mermaid-svg-4Okq47ZFep2H1YXa .node circle,#mermaid-svg-4Okq47ZFep2H1YXa .node ellipse,#mermaid-svg-4Okq47ZFep2H1YXa .node polygon,#mermaid-svg-4Okq47ZFep2H1YXa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4Okq47ZFep2H1YXa .rough-node .label text,#mermaid-svg-4Okq47ZFep2H1YXa .node .label text,#mermaid-svg-4Okq47ZFep2H1YXa .image-shape .label,#mermaid-svg-4Okq47ZFep2H1YXa .icon-shape .label{text-anchor:middle;}#mermaid-svg-4Okq47ZFep2H1YXa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4Okq47ZFep2H1YXa .rough-node .label,#mermaid-svg-4Okq47ZFep2H1YXa .node .label,#mermaid-svg-4Okq47ZFep2H1YXa .image-shape .label,#mermaid-svg-4Okq47ZFep2H1YXa .icon-shape .label{text-align:center;}#mermaid-svg-4Okq47ZFep2H1YXa .node.clickable{cursor:pointer;}#mermaid-svg-4Okq47ZFep2H1YXa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4Okq47ZFep2H1YXa .arrowheadPath{fill:#333333;}#mermaid-svg-4Okq47ZFep2H1YXa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4Okq47ZFep2H1YXa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4Okq47ZFep2H1YXa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4Okq47ZFep2H1YXa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4Okq47ZFep2H1YXa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4Okq47ZFep2H1YXa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4Okq47ZFep2H1YXa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4Okq47ZFep2H1YXa .cluster text{fill:#333;}#mermaid-svg-4Okq47ZFep2H1YXa .cluster span{color:#333;}#mermaid-svg-4Okq47ZFep2H1YXa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4Okq47ZFep2H1YXa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4Okq47ZFep2H1YXa rect.text{fill:none;stroke-width:0;}#mermaid-svg-4Okq47ZFep2H1YXa .icon-shape,#mermaid-svg-4Okq47ZFep2H1YXa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4Okq47ZFep2H1YXa .icon-shape p,#mermaid-svg-4Okq47ZFep2H1YXa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4Okq47ZFep2H1YXa .icon-shape .label rect,#mermaid-svg-4Okq47ZFep2H1YXa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4Okq47ZFep2H1YXa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4Okq47ZFep2H1YXa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4Okq47ZFep2H1YXa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
是
否
是
否
需求
要位置?
Classification
要精确轮廓?
Segmentation
目标旋转?
OBB
Detection
人体动作?
Pose
距离信息?
Depth

多任务体验

python 复制代码
image = "scene.jpg"
for task, name in [("yolo26n.pt","检测"), ("yolo26n-seg.pt","分割"), ("yolo26n-pose.pt","姿态")]:
    r = YOLO(task)(image)[0]
    r.save(f"result_{name}.jpg")

11.9 踩坑指南

坑 解决
分割显存不够 减 batch,用 n/s 模型
姿态只能检人 -pose 模型针对人体
OBB 需大 imgsz 建议 1024+
分类数据目录错 必须 train/class_name/ 结构
深度值不准 单目深度为相对值,需场景校准

11.10 本集小结

需求 选
有什么在哪 Detection
精确轮廓 -seg
人体动作 -pose
航拍倾斜 -obb
整图分类 -cls
场景理解 -sem
3D/距离 -depth

← 第10集 第12集:生产实践 →

相关推荐
Capricorn19881 小时前
知芽 Notebook Skill:用单元记忆校验 AI 摘要引用的真实性
人工智能·深度学习·架构·知识图谱
晨间晓1 小时前
两个目标会不会发生冲突?我用 YOLO + ByteTrack 做了 TTC 碰撞风险分析
yolo
anyup_前端梦工厂1 小时前
将uni-app工程迁移uni-app x,AI 能帮我们做什么?
前端·人工智能·uni-app
larance1 小时前
LDA(线性判别分析)
人工智能·机器学习·分类
昨夜见军贴06161 小时前
纸质报告OCR审核的智能化跃升:IACheck AI报告文档审核Agent的技术路径
人工智能·ocr
七十二时9561 小时前
2026科普:Work Agent品类解析,重新理解AI办公助手
人工智能
虎鲸不是鱼1 小时前
AI 自动化逆向(三)我把一个逆向项目交给了 AI:它做到了什么程度
人工智能·自动化·大模型·逆向·ai逆向
Yyyyyy~2 小时前
【深度学习】Day1
人工智能·深度学习
2601_965742222 小时前
AI是怎么判断一家本地商家值得推荐的?云南老板看完这篇就懂了
大数据·人工智能·算法·ai·新媒体运营