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

使用YOLOv8与DeepSORT做目标追踪,Jupyter内核为何在第二次迭代崩溃?

YOLOv8 + DeepSORT 第二帧内核崩溃的排查与解决

一、代码拼写错误(最直接的触发原因)

你的代码里存在变量名拼写错误:
前面定义的检测结果变量是detections = model(frame)[0],但循环遍历的时候写成了for data in detection.boxes.data.tolist()——这里把复数形式的detections写成了单数detection。
第一帧可能因临时变量侥幸运行,但第二帧执行时这个未定义的变量会直接触发致命错误,导致内核崩溃。
修复:将循环里的detection改为detections。

二、Jupyter 中 OpenCV 显示的线程冲突

Jupyter内核与OpenCV的cv2.imshow窗口存在线程兼容性问题,逐帧循环调用时极易引发内核崩溃。
修复:

  • 替换cv2.imshow为Jupyter兼容的显示方式,比如用Matplotlib:
    import matplotlib.pyplot as plt
    # 替换原cv2.imshow相关代码
    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    plt.imshow(rgb_frame)
    plt.axis('off')
    plt.show(block=False)
    plt.pause(0.01)
    
  • 或者直接注释掉cv2.imshow和cv2.waitKey代码,先验证追踪逻辑是否正常,再处理显示问题。

三、DeepSORT 输入格式/帧格式不兼容

DeepSORT的update_tracks方法对输入有严格要求:

  1. 检测框格式:你当前输出的[xmin, ymin, width, height]是正确的,但要确保所有坐标都是整数,且不会超出帧的尺寸范围。
  2. 帧格式:DeepSORT内部默认处理RGB格式图像,而OpenCV读取的帧是BGR格式,这可能导致特征提取模块出错。
    修复:将BGR帧转为RGB后传入追踪器:
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
tracks = tracker.update_tracks(results, frame=rgb_frame)

四、内存占用过高导致崩溃

如果视频分辨率较高,YOLOv8检测+DeepSORT追踪的计算会快速占用内存,Jupyter环境下容易触发内核崩溃。
优化:

  • 读取帧后先缩放降低分辨率:
    frame = cv2.resize(frame, (640, 480))  # 根据需求调整尺寸
    
  • 循环内手动清理无用变量,释放内存:
    del detections, results
    

内容的提问来源于stack exchange,提问作者Javad.Rad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:31