如题,我的项目实现是参照yolo_acl_sample这个例子实现的,里面关于图片处理的一些功能函数放在了det_utils.py文件里面(板卡自带的notebooks/01-yolov5 里面也有同样的文件和代码逻辑)。
最近通过注释逐步删减运行代码,初步定位到det_utils.py 里面的yolo_acl_sample函数长时间运行会存在内存溢出的问题,会造成程序被系统killed掉。
最后的对比情况如下:脱离了我自己的代码,直接在yolo_acl_sample的代码上进行了循环执行代码的调整(0.1秒执行一次),main.py修改如下:
在infer函数中通过屏蔽后处理部分的代码,来对比运行情况,如下:
对比现象:
1.当没有注释掉 nms() 函数执行时,程序运行后,一开始内存会稳定在1.8G左右,但再持续运行一段时间,半个小时或几个小时都有可能,内存会增长到6个G左右,如果在运行更长的时间,程序会系统Killed掉。

2.当注释掉nms()函数执行时(如前面发的后处理部分代码),程序长时间运行能稳定在1.8G的情况。最后一次是昨天睡觉前运行了一个晚上(大概9个小时),到发帖时,内存没有再增长,也没有被系统killed。
上面的测试验证情况大概就这样,一开始是在自己项目里面排查,后面怀疑是nms函数后,就在给的例子(yolo_acl_sample)中对比,大概80%的可能吧,是否是box.mask,x,v这些张量对象没来得及释放?
如题,我的项目实现是参照yolo_acl_sample这个例子实现的,里面关于图片处理的一些功能函数放在了det_utils.py文件里面(板卡自带的notebooks/01-yolov5 里面也有同样的文件和代码逻辑)。
最近通过注释逐步删减运行代码,初步定位到det_utils.py 里面的yolo_acl_sample函数长时间运行会存在内存溢出的问题,会造成程序被系统killed掉。
最后的对比情况如下:脱离了我自己的代码,直接在yolo_acl_sample的代码上进行了循环执行代码的调整(0.1秒执行一次),main.py修改如下:
if __name__ == '__main__': context = init_acl(DEVICE_ID) # 初始化acl相关资源 det_model = YoloV5(model_path=trained_model_path) # 初始化模型 while True: # 读入文件并推理 img = cv2.imread(image_path, cv2.IMREAD_COLOR) # 读入图片 img_res = det_model.infer(img) # 前处理、推理、后处理, 得到最终推理图片 if img_res is not None: cv2.imwrite('img_res.png', img_res) time.sleep(0.1) # 释放相关资源 det_model.release() # 释放 acl 模型相关资源, 包括输入数据、输出数据、模型等 deinit_acl(context, 0) # acl 去初始化在infer函数中通过屏蔽后处理部分的代码,来对比运行情况,如下:
# 后处理 # boxout = nms(torch.tensor(output), conf_thres=0.4, iou_thres=0.5) # 利用非极大值抑制处理模型输出,conf_thres 为置信度阈值,iou_thres 为iou阈值 # pred_all = boxout[0].numpy() # 转换为numpy数组 # scale_coords([640, 640], pred_all[:, :4], img_bgr.shape, ratio_pad=(scale_ratio, pad_size)) # 将推理结果缩放到原始图片大小 # height, width = img_bgr.shape[:2] # #print(f"scale_coords后:pad_size-{pad_size},cale_ratio--{scale_ratio}。height-{height},width-{width}") # img_dw = draw_bbox(pred_all, img_bgr, (0, 255, 0), 2, labels_dict) # 画出检测框、类别、概率 # return img_dw return None对比现象:
1.当没有注释掉 nms() 函数执行时,程序运行后,一开始内存会稳定在1.8G左右,但再持续运行一段时间,半个小时或几个小时都有可能,内存会增长到6个G左右,如果在运行更长的时间,程序会系统Killed掉。
2.当注释掉nms()函数执行时(如前面发的后处理部分代码),程序长时间运行能稳定在1.8G的情况。最后一次是昨天睡觉前运行了一个晚上(大概9个小时),到发帖时,内存没有再增长,也没有被系统killed。
上面的测试验证情况大概就这样,一开始是在自己项目里面排查,后面怀疑是nms函数后,就在给的例子(yolo_acl_sample)中对比,大概80%的可能吧,是否是box.mask,x,v这些张量对象没来得及释放?