You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yolov8结合DeepSort追踪车辆时维度不匹配ValueError求助

解决YOLOv8+DeepSort实时追踪时的维度不匹配错误

问题核心原因

deep_sort_realtime的update_tracks方法对输入图像维度、检测结果格式有严格要求,你遇到的错误是因为传入的图像张量维度不符合预期,或是检测框坐标格式未转换正确。

具体解决步骤

1. 修正图像维度格式

输入图像是(720,1280,3)的HWC格式(高度、宽度、通道),但deep_sort_realtime需要CHW格式(通道、高度、宽度)。调用update_tracks前先转换维度:

# 假设原始图像变量为frame_original
frame_chw = frame_original.transpose(2, 0, 1)  # 从(H,W,C)转为(C,H,W)

转换后需确认维度为(3,720,1280),避免误交换高度和宽度导致出现(3,1280,720)这类错误维度。

2. 转换YOLOv8检测结果格式

YOLOv8输出的边界框是(x1,y1,x2,y2)格式,而deep_sort_realtime要求[x1,y1,width,height]格式,同时需要提取置信度和类别。处理代码示例:

from deep_sort_realtime.deepsort_tracker import DeepSort

# 按你的配置初始化追踪器
object_tracker = DeepSort(max_age=30, n_init=3)

# 处理YOLOv8检测结果
results = model(frame_original)  # frame_original为原始HWC格式图像
detections = []
for box in results[0].boxes:
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    conf = box.conf[0].item()
    cls = box.cls[0].item()
    # 仅保留车辆类(YOLOv8中car=2、bus=5、truck=7,按需调整)
    if cls in [2,5,7]:
        width = x2 - x1
        height = y2 - y1
        detections.append(([x1, y1, width, height], conf, int(cls)))

# 传入转换后的图像和检测结果
tracks = object_tracker.update_tracks(detections, frame=frame_chw)

3. 排查其他维度错误诱因

  • 检查是否在其他步骤误裁剪/resize图像,导致高度和宽度颠倒(比如得到(1280,720,3)的图像),转换后维度不符合要求。
  • 确认update_tracks的参数顺序:第一个参数是检测结果列表,第二个是图像,不要传反。

调试技巧

  • 调用update_tracks前打印图像维度:print(frame_chw.shape),确保是(3,720,1280)。
  • 打印检测结果的第一个元素,确认格式为([x1,y1,w,h], 置信度, 类别ID)。

内容的提问来源于stack exchange,提问作者vishnu_vardhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:46:08