YOLO11支持哪些任务?检测/分割/姿态全都有
1. 引言
YOLO11 是 Ultralytics 推出的最新一代 YOLO 系列模型,作为实时目标检测领域的持续演进成果,它在保持高速推理能力的同时,进一步拓展了多任务支持能力。与前代 YOLOv8 类似,YOLO11 并非单一模型,而是一套统一架构下的多任务计算机视觉解决方案。
本文将围绕YOLO11 支持的核心任务类型展开系统性分析,并结合实际部署环境(基于提供的镜像文档和参考博文),深入解析其在目标检测、实例分割、姿态估计等任务中的实现方式与工程实践要点。文章不涉及网络结构原理推导,重点聚焦于功能特性、使用流程与可落地的技术方案。
2. YOLO11 支持的任务概览
YOLO11 延续了 YOLOv8 的多任务设计思想,在一个统一的框架下支持多种主流视觉任务。通过切换模型头(Head)结构和训练数据格式,同一主干网络可以灵活适配不同下游任务。
2.1 支持的核心任务类型
| 任务类型 | 功能描述 | 输出内容 |
|---|---|---|
| 目标检测(Detection) | 定位图像中物体的位置并分类 | 边界框(Bounding Box)、类别标签、置信度 |
| 实例分割(Segmentation) | 在检测基础上提供像素级轮廓掩码 | 边界框 + 每个实例的二值掩码(Mask) |
| 姿态估计(Pose Estimation) | 检测人体关键点及其连接关系 | 边界框 + 关键点坐标(如17个COCO关键点) |
| 图像分类(Classification) | 对整张图像进行类别预测 | 图像级类别标签与置信度 |
| OBB(旋转框检测) | 检测带角度的矩形框,适用于倾斜目标 | 中心点、宽高、角度、类别 |
这些任务共享相同的骨干网络(Backbone)和特征金字塔结构(Neck),仅在输出头部分存在差异,因此具备高度一致的预处理、后处理逻辑,极大简化了多任务系统的开发与部署。
3. 多任务实现机制解析
3.1 统一输入预处理流程
无论执行何种任务,YOLO11 的输入预处理流程保持一致:
- 尺寸归一化:采用 letterbox 或 warpAffine 方式将输入图像缩放到固定分辨率(如 640×640),避免变形。
- 颜色空间转换:BGR → RGB。
- 归一化处理:像素值从 [0, 255] 映射到 [0.0, 1.0]。
- Tensor 转换:HWC → CHW,转为 PyTorch 张量格式。
该流程已在ultralytics/engine/predictor.py中标准化,确保所有任务共用同一套前处理代码,提升工程一致性。
def preprocess(self, im): if not isinstance(im, torch.Tensor): im = np.stack(self.pre_transform(im)) im = im[..., ::-1].transpose((0, 3, 1, 2)) # BGR to RGB, HWC to CHW im = torch.from_numpy(np.ascontiguousarray(im)) im = im.to(self.device) im = im.half() if self.model.fp16 else im.float() im /= 255.0 # 归一化 return im提示:此预处理逻辑对所有任务通用,开发者只需实现一次即可复用。
3.2 分支化后处理逻辑
尽管输入处理统一,但不同任务的输出解码方式有所不同,主要体现在后处理阶段:
3.2.1 目标检测(Detection)
输出维度为[batch, num_boxes, 4 + num_classes],其中:
- 前 4 项为
(cx, cy, w, h),表示边界框中心与宽高; - 后
num_classes项为各类别的置信度得分。
后处理步骤包括:
- 解码边界框(decode boxes)
- 应用 NMS(Non-Max Suppression)去除重叠框
- 映射回原始图像坐标系
results = model(img) boxes = results[0].boxes.data.tolist() # 获取检测框3.2.2 实例分割(Segmentation)
除检测头外,额外输出掩码头(Mask Head),输出包含:
- 检测框信息(同上)
- 掩码原型(mask prototypes)与每个实例的掩码系数
最终通过矩阵乘法生成高分辨率二值掩码,并裁剪至对应边界框区域。
masks = results[0].masks.data # shape: [n, h, w]3.2.3 姿态估计(Pose Estimation)
输出包含:
- 检测框
- 关键点热图或直接坐标回归结果(通常为 17×3,含 x, y, 可见性)
关键点会自动关联到所属的人体检测框上,便于可视化与后续动作识别。
keypoints = results[0].keypoints.data # shape: [n, 17, 3]3.2.4 图像分类(Classification)
仅输出全局类别概率分布,无定位信息。
probs = results[0].probs.data # top-5 probabilities3.2.5 OBB(旋转框检测)
输出为[cx, cy, w, h, angle, conf, class],支持倾斜文本、航空影像等场景。
4. 部署实践:基于 YOLO11 镜像的多任务运行
根据提供的镜像文档,用户可通过 Jupyter 或 SSH 方式进入 YOLO11 开发环境,快速验证各类任务。
4.1 环境准备
首先进入项目目录:
cd ultralytics-8.3.9/确保已下载对应任务的预训练权重文件,例如:
yolo11s.pt(检测)yolo11s-seg.pt(分割)yolo11s-pose.pt(姿态)yolo11s-cls.pt(分类)
4.2 各任务调用示例
4.2.1 目标检测
from ultralytics import YOLO model = YOLO("yolo11s.pt") results = model("ultralytics/assets/bus.jpg") for r in results: print(r.boxes) # 打印检测框 r.save("result_detect.jpg") # 保存结果图4.2.2 实例分割
model = YOLO("yolo11s-seg.pt") results = model("ultralytics/assets/zidane.jpg") for r in results: print(r.masks) # 打印掩码 r.plot(boxes=False) # 只显示掩码 r.save("result_seg.jpg")4.2.3 姿态估计
model = YOLO("yolo11s-pose.pt") results = model("ultralytics/assets/bus.jpg") for r in results: print(r.keypoints) # 打印关键点 r.save("result_pose.jpg")4.2.4 图像分类
model = YOLO("yolo11s-cls.pt") results = model("ultralytics/assets/dog.jpg") for r in results: print(r.probs) # 打印分类概率 r.save("result_cls.jpg")5. ONNX 导出与跨平台部署
为了实现高性能推理(如 TensorRT 加速),需将模型导出为 ONNX 格式。以下以检测任务为例说明导出方法。
5.1 修改源码适配 ONNX 导出
为兼容 TensorRT,需做如下修改:
修改ultralytics/engine/exporter.py
# 第400行附近 output_names = ["output"] # 统一输出节点名 dynamic = {"images": {0: "batch"}} # 仅 batch 动态修改ultralytics/nn/modules/head.py
# forward 函数中 return y.permute(0, 2, 1) if self.export else (y, x) # 调整维度顺序5.2 执行导出脚本
from ultralytics import YOLO model = YOLO("yolo11s.pt") success = model.export(format="onnx", dynamic=True, simplify=True)执行后生成yolo11s.onnx,可用 Netron 查看结构:
- 输入:
images,shape[batch, 3, 640, 640] - 输出:
output,shape[batch, 8400, 84]
注意:分割、姿态等任务导出方式相同,只需更换模型文件即可。
6. C++ 部署集成方案
参考tensorRT_Pro-YOLOv8项目,可实现 YOLO11 的高效 C++ 部署。
6.1 编译配置
支持 CMake 和 Makefile 两种方式,需设置以下路径:
lean_tensor_rt := /opt/TensorRT-8.4.1.5 lean_cudnn := /usr/local/cudnn8.4.0.27-cuda11.6 lean_opencv := /usr/local lean_cuda := /usr/local/cuda-11.6 lean_protobuf := /home/jarvis/protobuf6.2 源码修改要点
编辑app_yolo.cpp文件:
// 注释掉其他测试 // test(Yolo::Type::V8, TRT::Mode::FP32, "yolov8s"); // 启用 YOLO11 测试 test(Yolo::Type::V11, TRT::Mode::FP32, "yolo11s"); // 自定义类别(可选) static const char *cocolabels[] = {"person", "car", "dog"};6.3 编译与运行
make yolo -j64成功编译后生成.trtmodel文件,并输出推理结果图像至指定目录。
7. 总结
YOLO11 作为新一代一体化视觉模型,全面支持五大核心任务:
- ✅目标检测
- ✅实例分割
- ✅姿态估计
- ✅图像分类
- ✅旋转框检测(OBB)
其优势在于:
- 统一架构:共用 Backbone 与预处理流程,降低维护成本;
- 接口一致:Python API 使用方式完全相同,易于切换任务;
- 部署友好:ONNX 导出逻辑统一,便于跨平台加速;
- 生态完善:依托 Ultralytics 生态,支持训练、验证、导出全流程。
对于开发者而言,只需掌握一套基础流程,即可快速构建涵盖检测、分割、姿态等多种能力的 AI 应用系统。结合提供的 YOLO11 镜像环境,更可实现“开箱即用”的开发体验。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。