---
name: yangge521/yolo-video-inference
source: https://app.decimal.ai/s/yangge521-yolo-video-inference@1/SKILL.md
source_sha256: 37f9f869f68a
---

# YOLO 视频流实时推理

## 概述

基于 Ultralytics YOLOv8/YOLO11 实现视频流实时目标检测，支持 RTSP/RTMP 视频源输入，多路并发推理，RTMP 推流输出。已在 MTT S4000 (48GB) 和 NVIDIA T4 (16GB) 上完成压测验证。

## 使用场景

- 安防监控：多路摄像头实时目标检测与告警
- 交通分析：车流量统计、违章检测、车牌识别
- 工业质检：流水线产品缺陷检测
- 智慧工地：安全帽检测、危险区域入侵告警
- 零售分析：顾客行为分析、客流统计
- 无人值守：机房监控、设备状态检测

## 真实压测数据

### 单卡并发性能（MTT S4000, YOLO11n, 1080p@60fps）

| 并发路数 | 单路 FPS | 总 FPS | 稳定性 |
|---------|---------|--------|--------|
| 1 路 | 54.80 | 54.80 | 稳定 |
| 2 路 | 36.63 | 73.26 | 稳定 |
| 3 路 | 27.83 | 83.49 | 稳定 |
| 4 路 | 22.74 | 90.96 | 稳定 |

单卡最大支持 2 路 1080p@60fps 实时推理（满足 30fps 实时性要求）

### 多卡并发性能（8 x MTT S4000）

| 模式 | 总 FPS | 达标路数 | 说明 |
|------|--------|---------|------|
| 8卡 x 1路 | 374.84 | 16/16 | 全部达标 |
| 8卡 x 2路 | 493.15 | 12/16 | 4路未达标 |

GPU 0 和 GPU 4 在 2 路并发时出现异常，建议排查散热和驱动

## 操作指南

### 1. 环境准备

```bash
pip install ultralytics
# NVIDIA GPU
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
# 摩尔线程 GPU: 使用 MUSA SDK
```

### 2. 单路视频推理

```python
from ultralytics import YOLO

model = YOLO("yolo11n.pt")
results = model.predict(
    source="rtsp://192.168.1.100/stream",
    stream=True, device=0, conf=0.5, imgsz=640,
)
for result in results:
    for box in result.boxes:
        cls = int(box.cls[0])
        conf = float(box.conf[0])
        x1, y1, x2, y2 = box.xyxy[0].tolist()
        print(f"class={cls} conf={conf:.2f}")
```

### 3. 多路并发推理

使用 threading.Thread 为每路视频启动推理线程，按 GPU 数量分配 device。建议每卡不超过 2 路并发。

### 4. 带推流的推理

使用 cv2.VideoCapture 读取视频帧，YOLO 推理后用 results[0].plot() 标注，通过 subprocess.Popen 启动 FFmpeg 推流进程，proc.stdin.write 写入标注帧。

## 性能优化要点

| 优化项 | 效果 | 说明 |
|-------|------|------|
| YOLO11n 轻量模型 | 基础 FPS 最高 | 精度略低，可换 s/m |
| imgsz=640 | 速度精度平衡 | 降到 480 提升 20% |
| FP16 半精度 | 提升 30-50% | 精度损失小于 0.5% |
| 模型预加载 | 避免重复加载 | 全局只加载一次 |
| 批处理推理 | 提升吞吐 | 适合非实时场景 |

## 常见问题与排查

| 问题 | 原因 | 解决方案 |
|------|------|---------|
| FPS 逐渐下降 | 显存泄漏 | 定期 torch.cuda.empty_cache() |
| 推理结果不一致 | FP16 数值误差 | 关闭 half=True |
| OOM 错误 | 显存不足 | 降低 batch 或 imgsz |
| GPU 利用率低 | CPU 瓶颈 | 多进程代替多线程 |
| RTSP 断流 | 网络波动 | 实现自动重连 |
| S4000 后处理慢 | NMS 算子 | CPU NMS 或 TensorRT |

## 扩展方向

- **模型升级**: YOLO11n 到 s/m/l/x，精度提升但速度下降
- **多模型融合**: YOLO 检测 + DeepSORT 跟踪 + 行为识别
- **边缘部署**: 导出 ONNX/TensorRT，部署到 Jetson
- **自动标注**: 利用推理结果辅助标注，加速数据集构建
- **在线学习**: 增量训练新类别，不重新训练整个模型
- **分布式推理**: 跨多台服务器分担推理负载

## 技能链路

- **rtmp-streaming**: 推理结果实时推流分发
- **gpu-concurrent**: 多 GPU 并发管理，提升吞吐
- **gpu-benchmark**: 对比不同 GPU 的推理性能
- **model-quantization**: 量化模型加速推理
- **perf-monitor**: 监控推理 FPS 和延迟

## 检查清单

- [ ] 模型权重加载正确（验证 mAP）
- [ ] GPU 设备号配置正确
- [ ] 多路并发线程数不超过 GPU 数 x 2
- [ ] FPS 监控已部署
- [ ] RTSP 断流自动重连已实现
- [ ] 异常 GPU 已标记并跳过