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

YOLOv11 CPU无异常退出求助:实时目标检测进程莫名终止

YOLOv11循环预测时CPU占用过高导致进程意外终止问题排查与解决

问题场景

使用YOLOv11做目标检测测试,写了一段循环预测本地图片的代码,运行几轮后进程毫无提示就突然终止。观察到CPU使用率一路涨到85%,内存稳定在300MB左右,推测是CPU持续高负载触发了系统的进程保护机制,导致进程被强制终止。

测试代码如下:

from ultralytics import YOLO
import time
import gc
import threading
import psutil
import os
process = psutil.Process(os.getpid())
model=YOLO("yolo11n.pt")
while True:
    model.predict("11.jpg")
    print(psutil.cpu_percent())
    num_threads = threading.active_count()
    print(f"{num_threads}")
    print(f"{psutil.virtual_memory().percent}%")
    gc.collect()

问题原因分析

  • 无限循环无休眠,CPU持续满负载:while True没有任何停顿,让CPU核心一直被预测任务占用,长时间高负载会触发系统的资源限制(比如CPU过载保护、OOM Killer),直接终止进程。
  • 推理线程未及时回收:虽然手动调用了gc.collect(),但YOLO的predict内部可能创建了临时线程或资源,快速循环下无法及时释放,线程数累积后会进一步加重CPU负担。
  • 未做推理参数优化:默认CPU推理时没有限制线程数,会占用所有CPU核心,持续高负载容易引发系统层面的进程终止。

解决方案

1. 给循环添加休眠机制

每次循环后加短暂休眠,降低CPU持续负载,给资源回收留时间:

from ultralytics import YOLO
import time
import gc
import threading
import psutil
import os
process = psutil.Process(os.getpid())
model=YOLO("yolo11n.pt")
while True:
    model.predict("11.jpg")
    print(psutil.cpu_percent())
    num_threads = threading.active_count()
    print(f"{num_threads}")
    print(f"{psutil.virtual_memory().percent}%")
    gc.collect()
    time.sleep(0.1)  # 加100ms休眠,可根据实际需求调整时长

2. 限制推理线程数量

在predict里指定threads参数,避免CPU资源被耗尽:

model.predict("11.jpg", threads=2)  # 建议设为CPU核心数的一半,比如4核CPU设为2

3. 优先使用GPU推理(如果有可用GPU)

如果系统有NVIDIA GPU,切换到GPU推理能大幅降低CPU负载:

model=YOLO("yolo11n.pt").to("cuda")  # 切换为GPU推理

4. 显式释放预测结果资源

手动删除predict的返回对象,加速资源回收:

results = model.predict("11.jpg", threads=2)
del results  # 显式删除结果对象,避免资源残留

5. 替换无限循环为可控循环

如果只是测试需求,设置固定循环次数,避免无限运行导致资源耗尽:

for _ in range(100):  # 运行100轮测试后自动停止
    model.predict("11.jpg", threads=2)
    # 监控代码...
    gc.collect()
    time.sleep(0.1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:04:54