使用YOLO网络对图像进行目标检测时,CUDA Error: out of memory

环境:Ubuntu14,CUDA8.0、Cudnn5.1、opencv3.1.0、

显卡:GTX1050 运行内存:2G

在darknet编译好后(GPU=1,CUDNN=1,OPENCV=1),下载好weights文件,试运行

./darknet detect cfg/yolov3.cfg models/yolov3.weights data/dog.jpg

报错:

CUDA Error: out of memory
darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.

原因:1050运行内存太小,YOLOv3模型加载到GPU中导致内存溢出。

解决方法

gedit path_to/darknet/cfg/yolov3.cfg    #也可以先备份一下

修改配置文件

batch=1
subdivisions=1
width=416   
height=416     #参数可以根据自己的显卡性能修改,目的是减小占用内存

如果仍然不够,长短再各减32,以此类推

参考:https://github.com/pjreddie/darknet/issues/791

### 解决 PyTorch 中 `OutOfMemoryError` 属性错误 当遇到 `AttributeError: module 'torch' has no attribute 'OutOfMemoryError'` 错误,通常意味着所使用的 PyTorch 版本并不支持该异常类。在较新的 PyTorch 版本中,内存不足的情况会抛出不同的异常类型。 为了处理这种情况,建议采用以下方法: #### 方法一:捕获 CUDA Out of Memory 异常 对于 GPU 上发生的内存不足情况,可以通过捕捉特定字符串的方式来识别并处理这种异常。由于 PyTorch 的实现细节可能会随版本变化而有所不同,直接依赖于具体的异常名称并不是最佳实践[^1]。 ```python try: # Your code that might cause an out-of-memory error on the GPU except RuntimeError as e: if "CUDA out of memory" in str(e): print("Caught a CUDA out of memory exception.") # Handle or log this specific case here. else: raise # Re-raise other runtime errors not related to OOM ``` #### 方法二:更新至最新版 PyTorch 如果当前环境中使用的是旧版本的 PyTorch,则考虑将其升级到最新的稳定版本。新版 PyTorch 可能已经改进了对资源管理的支持以及提供了更友好的 API 来报告此类问题[^4]。 ```bash pip install --upgrade torch torchvision torchaudio ``` #### 方法三:优化模型或数据集大小 有,调整批处理尺寸(batch size),减少网络层数或者降低图像分辨率等措施也可以有效缓解显存压力,从而避免触发内存溢出错误[^3]。 #### 自定义异常处理逻辑 考虑到未来可能出现的变化,编写自定义函数来统一管理响应各种形式的记忆体超载状况可能是更为稳健的做法。这样可以在不影响核心业务流程的前提下灵活应对不同版本间的差异[^2]。 ```python def handle_cuda_oom(func): """Decorator function for handling CUDA out of memory exceptions.""" def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except RuntimeError as e: oom_message = "CUDA out of memory" if oom_message in str(e): print(f"CUDA ran out of memory while executing {func.__name__}. " f"Consider reducing batch size or simplifying model architecture.") # Optionally implement fallback behavior like retrying with smaller batches else: raise return wrapper ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值