def model_pre(self):
import torch
import torch_npu
from mindx.sdk.base import Tensor, Model
self.model = Model(modelPath=self.yolo_weights, deviceId=self.device)
img_info = np.array([[480, 640, 480, 640]], dtype=np.float32)
while True:
# 接收图片
data = self.ProImgPip.get()
AllIm = data[0]
ImgLenList = data[1]
split_list = [AllIm[i:i + 1] for i in range(0, len(AllIm), 1)]
pred = []
for step_img in split_list:
step_img = Tensor(step_img)
result = self.model.infer([step_img, img_info])
if len(result) == 0:
pred.append(None)
continue
result[0].to_host()
result[1].to_host()
box_out = np.array(result[0])
box_out_num = np.array(result[1])
for idx in range(len(box_out)):
num_det = int(box_out_num[idx][0])
boxout = box_out[idx][:num_det * 6].reshape(6, -1).transpose().astype(np.float16) # 6xN -> Nx6
pred.append(boxout)
self.PredPip.put([pred, ImgLenList])
在执行上述代码时,发现对应进程占用的内存(不是npu内存)一直在缓慢增长,通过排查发现是 step_img = Tensor(step_img)这一行引起的,起初修改代码,不再每一帧都创建tensor,改用以下方式
input_buf = np.empty((1, 480, 640, 3),dtype=np.uint8)
input_tensor = Tensor(input_buf)
while True:
data = self.ProImgPip.get()
AllIm = data[0]
ImgLenList = data[1]
pred = []
for i in range(len(AllIm)):
img = AllIm[i]
np.copyto(input_buf[0], img)
result = self.model.infer([input_tensor,img_info])
def model_pre(self): import torch import torch_npu from mindx.sdk.base import Tensor, Model self.model = Model(modelPath=self.yolo_weights, deviceId=self.device) img_info = np.array([[480, 640, 480, 640]], dtype=np.float32) while True: # 接收图片 data = self.ProImgPip.get() AllIm = data[0] ImgLenList = data[1] split_list = [AllIm[i:i + 1] for i in range(0, len(AllIm), 1)] pred = [] for step_img in split_list: step_img = Tensor(step_img) result = self.model.infer([step_img, img_info]) if len(result) == 0: pred.append(None) continue result[0].to_host() result[1].to_host() box_out = np.array(result[0]) box_out_num = np.array(result[1]) for idx in range(len(box_out)): num_det = int(box_out_num[idx][0]) boxout = box_out[idx][:num_det * 6].reshape(6, -1).transpose().astype(np.float16) # 6xN -> Nx6 pred.append(boxout) self.PredPip.put([pred, ImgLenList]) 在执行上述代码时,发现对应进程占用的内存(不是npu内存)一直在缓慢增长,通过排查发现是 step_img = Tensor(step_img)这一行引起的,起初修改代码,不再每一帧都创建tensor,改用以下方式input_buf = np.empty((1, 480, 640, 3),dtype=np.uint8) input_tensor = Tensor(input_buf) while True: data = self.ProImgPip.get() AllIm = data[0] ImgLenList = data[1] pred = [] for i in range(len(AllIm)): img = AllIm[i] np.copyto(input_buf[0], img) result = self.model.infer([input_tensor,img_info])使用这种昂方法之后,内存是不增长了,但是送入模型推理的图片不再变化,一直是同一张,推理结果也一直不变,这是怎么回事?有什么的解决办法吗,是只有我自己有这个问题吗?转换的YOLOv5模型添加了nms