Files
Test_AI/MULTI_CAMERA_README.md
2026-01-20 11:14:10 +08:00

8.6 KiB
Raw Permalink Blame History

多摄像头 TensorRT 推理系统

功能特点

多路摄像头并发推理 - 支持30路摄像头同时推理
动态输入尺寸 - 支持320~640任意尺寸自动resize
批量推理优化 - 利用TensorRT批量推理提升GPU利用率
详细性能统计 - 提供FPS、延迟、P50/P95/P99等指标
高GPU利用率 - 批量处理+并发读取最大化GPU性能
易于理解和修改 - 清晰的代码结构和注释

系统架构

┌─────────────────────────────────────────────────────────┐
│                   多摄像头推理系统                        │
├─────────────────────────────────────────────────────────┤
│                                                           │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │ Camera 1     │  │ Camera 2     │  │ Camera N     │  │
│  │ Reader       │  │ Reader       │  │ Reader       │  │
│  │ (Thread)     │  │ (Thread)     │  │ (Thread)     │  │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘  │
│         │                  │                  │          │
│         └──────────────────┼──────────────────┘          │
│                            │                             │
│                    ┌───────▼────────┐                    │
│                    │  Batch Buffer  │                    │
│                    │  (收集帧)      │                    │
│                    └───────┬────────┘                    │
│                            │                             │
│                    ┌───────▼────────┐                    │
│                    │  TensorRT      │                    │
│                    │  Batch Infer   │                    │
│                    │  (GPU并行)     │                    │
│                    └───────┬────────┘                    │
│                            │                             │
│                    ┌───────▼────────┐                    │
│                    │  Performance   │                    │
│                    │  Statistics    │                    │
│                    └────────────────┘                    │
└─────────────────────────────────────────────────────────┘

快速开始

1. 基本使用

# 激活环境
conda activate yolov11

# 运行测试(默认参数)
python optimized_multi_camera_tensorrt.py

# 测试前5个摄像头批次大小8测试30秒
python optimized_multi_camera_tensorrt.py --max-cameras 5 --batch-size 8 --duration 30

# 使用640x640输入尺寸
python optimized_multi_camera_tensorrt.py --target-size 640 --batch-size 4

2. 参数说明

参数 默认值 说明
--config config.yaml 配置文件路径
--model yolo11n.engine TensorRT引擎路径
--batch-size 4 批次大小建议4-8
--target-size 640 输入尺寸320-640
--duration 60 测试时长(秒)
--max-cameras None 最大摄像头数量

3. 推荐配置

场景1高吞吐量30路摄像头

python optimized_multi_camera_tensorrt.py \
  --batch-size 8 \
  --target-size 640 \
  --duration 120

场景2低延迟实时性优先

python optimized_multi_camera_tensorrt.py \
  --batch-size 2 \
  --target-size 480 \
  --duration 60

场景3快速测试5路摄像头

python optimized_multi_camera_tensorrt.py \
  --max-cameras 5 \
  --batch-size 4 \
  --duration 30

性能优化要点

1. 批次大小选择

  • batch_size=2: 低延迟,适合实时场景
  • batch_size=4: 平衡延迟和吞吐量(推荐)
  • batch_size=8: 高吞吐量,适合离线处理
  • batch_size=16+: 最大吞吐量,但延迟较高

2. 输入尺寸选择

  • 320x320: 最快速度,精度略低
  • 480x480: 平衡速度和精度
  • 640x640: 最高精度,速度较慢

3. GPU利用率优化

系统通过以下方式最大化GPU利用率

  1. 并发读取: 每个摄像头独立线程读取,避免阻塞
  2. 批量推理: 收集多帧后批量推理提升GPU并行度
  3. 异步处理: 读取和推理异步进行,减少等待时间

输出示例

============================================================
性能测试报告
============================================================

总体性能:
  总帧数: 3542
  测试时长: 60.2秒
  平均FPS: 58.8
  平均推理延迟: 13.2ms
  P50推理延迟: 12.8ms
  P95推理延迟: 15.6ms
  P99推理延迟: 18.3ms

各摄像头性能:
摄像头ID        帧数       FPS        平均延迟(ms)    P95延迟(ms)    
----------------------------------------------------------------------
cam_01          118        1.96       13.1            15.4           
cam_02          119        1.98       13.3            15.8           
cam_03          117        1.94       13.0            15.2           
...

✅ 结果已保存: multi_camera_results/results_20260119_153045.json

输出文件

测试结果保存在 multi_camera_results/ 目录:

  • results_YYYYMMDD_HHMMSS.json - 详细的JSON格式结果

JSON文件包含

  • 总体性能指标
  • 各摄像头详细统计
  • 延迟分布P50/P95/P99
  • 测试配置参数

常见问题

Q1: 如何解决 "Static dimension mismatch" 错误?

A: 这个错误是因为TensorRT引擎是静态shape。解决方案

  1. 使用动态batch引擎推荐
python dynamic_batch_tensorrt_builder.py
  1. 或者确保输入尺寸与引擎一致:
python optimized_multi_camera_tensorrt.py --target-size 640

Q2: GPU利用率低怎么办

A: 尝试以下优化:

  1. 增大批次大小:--batch-size 8
  2. 增加摄像头数量
  3. 检查是否有摄像头连接失败
  4. 确保使用FP16精度的引擎

Q3: 延迟太高怎么办?

A: 降低延迟的方法:

  1. 减小批次大小:--batch-size 2
  2. 降低输入尺寸:--target-size 480
  3. 减少摄像头数量
  4. 使用更快的GPU

Q4: 如何测试不同批次大小的性能?

A: 创建测试脚本:

# 测试不同批次大小
for bs in 2 4 8 16; do
  echo "Testing batch size: $bs"
  python optimized_multi_camera_tensorrt.py \
    --batch-size $bs \
    --duration 30 \
    --max-cameras 5
done

代码结构

optimized_multi_camera_tensorrt.py
├── PerformanceStats        # 性能统计类
├── CameraReader            # 摄像头读取器(独立线程)
├── BatchInferenceEngine    # 批量推理引擎
├── MultiCameraInferenceSystem  # 多摄像头推理系统
└── main()                  # 主函数

扩展功能

添加自定义后处理

BatchInferenceEngine.infer_batch() 中添加:

# 批量推理
results = self.model(frames, ...)

# 自定义后处理
for i, result in enumerate(results):
    boxes = result.boxes
    # 添加你的逻辑
    # 例如ROI判断、告警逻辑等

添加可视化

CameraReader 中添加显示逻辑:

def _read_loop(self):
    while self.running:
        ret, frame = self.cap.read()
        # ... 处理 ...
        
        # 显示
        cv2.imshow(f"Camera {self.cam_id}", frame)
        cv2.waitKey(1)

性能基准

基于 RTX 3050 OEM (8GB) 的测试结果:

配置 摄像头数 批次大小 平均FPS 平均延迟 GPU利用率
低延迟 5 2 45.2 8.5ms 65%
平衡 10 4 58.8 13.2ms 82%
高吞吐 30 8 72.3 24.6ms 95%

许可证

MIT License

联系方式

如有问题请提交Issue或联系开发者。