Toybrick

标题: pt转rknn出错 [打印本页]

作者: zhw    时间: 2020-12-29 18:34
标题: pt转rknn出错
plate.pt ********************
E Catch exception when loading pytorch model: plate.pt!
E Traceback (most recent call last):
E   File "rknn\api\rknn_base.py", line 657, in rknn.api.rknn_base.RKNNBase.load_pytorch
E   File "rknn\base\RKNNlib\app\importer\import_pytorch.py", line 97, in rknn.base.RKNNlib.app.importer.import_pytorch.ImportPytorch.run
E   File "rknn\base\RKNNlib\converter\convert_pytorch.py", line 737, in rknn.base.RKNNlib.converter.convert_pytorch.convert_pytorch.__init__
E   File "D:\Software\Python36\lib\site-packages\torch\jit\__init__.py", line 162, in load
E     cpp_module = torch._C.import_ir_module(cu, f, map_location, _extra_files)
E RuntimeError: [enforce fail at ..\caffe2\serialize\inline_container.cc:137] . PytorchStreamReader failed reading zip archive: failed finding central directory
E (no backtrace available)
-1
Load onnx_model failed!
这个问题咋解决?
查的说有这个错误是因为只加载了权重,没有网络结构,但我确实是加载的整个pt模型啊。
torch==1.2.0    onnx==1.4.1


作者: zhw    时间: 2020-12-29 19:07
rknntoolkit是1.4.0的,这个版本支持torch1.2吗?
作者: jefferyzhang    时间: 2020-12-30 08:15
首先你得先用pytorch1.2 加载这个模型,能正确推理了,再转rknn
作者: zhw    时间: 2020-12-30 09:26
rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2', batch_size=1)
ret = rknn.load_pytorch('plate.pt', input_size_list=[[3, 640, 640]])
可以推理成功,这样加载模型对吗?
作者: jefferyzhang    时间: 2020-12-30 09:35
不知道你什么意思,你都说用rknn可以推理成功了,那还有什么问题么?
作者: zhw    时间: 2020-12-30 09:39
torch1.2可以正常推理成功,但是转rknn出错
作者: zhw    时间: 2020-12-30 09:41
jefferyzhang 发表于 2020-12-30 09:35
不知道你什么意思,你都说用rknn可以推理成功了,那还有什么问题么?


torch1.2可以正常推理成功,但是转rknn出错,实在是找不到问题所在了
作者: jefferyzhang    时间: 2020-12-30 09:42
zhw 发表于 2020-12-30 09:41
torch1.2可以正常推理成功,但是转rknn出错,实在是找不到问题所在了

你把你torch1.2 读取这个pt推理正确的代码贴出来看下
作者: zhw    时间: 2020-12-30 09:47
jefferyzhang 发表于 2020-12-30 09:42
你把你torch1.2 读取这个pt推理正确的代码贴出来看下

device = torch.device("cpu")
weights = 'plate.pt'
model = torch.load(weights, map_location=device)['model'].float().eval()
# torch.save(model.state_dict(), 'model.pth')
# model = Model(opt.cfg, nc=80).to(device)

img_size = 640
img = cv2.imread('00085.jpg')
w, h, _ = img.shape
h_ratio = h / img_size
w_ratio = w / img_size
img1 = cv2.resize(img, (640, 640))
img1 = img1[:, :, ::-1].transpose(2, 0, 1)
img1 = np.ascontiguousarray(img1)

img1 = np.asarray(img1, 'f')
img1.flags.writeable = True
img1 /= 255.0
x = np.expand_dims(img1, 0)
x = torch.from_numpy(x).to(device)

start = time.time()
pred = model(x)[0]
print(time.time() - start)
pred = non_max_suppression(pred, conf_thres=0.5, iou_thres=0.5, agnostic=False)[0]
print(pred)
作者: jefferyzhang    时间: 2020-12-30 09:55
zhw 发表于 2020-12-30 09:47
device = torch.device("cpu")
weights = 'plate.pt'
model = torch.load(weights, map_location=device) ...

为何需要['model'].eval()
直接eval的模型无法推理么?
作者: zhw    时间: 2020-12-30 10:02
jefferyzhang 发表于 2020-12-30 09:55
为何需要['model'].eval()
直接eval的模型无法推理么?

eval不是转换成推理模式吗?我去掉.eval()也可以推理成功
作者: jefferyzhang    时间: 2020-12-30 10:06
zhw 发表于 2020-12-30 10:02
eval不是转换成推理模式吗?我去掉.eval()也可以推理成功

我是说['model']
作者: zhw    时间: 2020-12-30 10:10
jefferyzhang 发表于 2020-12-30 10:06
我是说['model']

    model = torch.load(weights, map_location=device).eval()
AttributeError: 'dict' object has no attribute 'eval'
作者: jefferyzhang    时间: 2020-12-30 10:15
zhw 发表于 2020-12-30 10:10
model = torch.load(weights, map_location=device).eval()
AttributeError: 'dict' object has no a ...

说明你的模型并不是通用模型。
rknn也是得先读取torch模型才能转换的,都不能用常规方法读出来,转换肯定会出问题。

pytorch我并不是很熟,还是建议你qq群里问下NPU部门的人,你这个问题解决后如果还不行
可以试着把模型文件@给他们让他们调试下
作者: zhw    时间: 2020-12-30 10:19
jefferyzhang 发表于 2020-12-30 10:15
说明你的模型并不是通用模型。
rknn也是得先读取torch模型才能转换的,都不能用常规方法读出来,转换肯定 ...

好的,万分感谢!!!
作者: zhw    时间: 2020-12-30 10:31
jefferyzhang 发表于 2020-12-30 10:15
说明你的模型并不是通用模型。
rknn也是得先读取torch模型才能转换的,都不能用常规方法读出来,转换肯定 ...

weights = 'plate.pt'
model = torch.load(weights, map_location=device)['model'].float().eval()
torch.save(model, 'plate1.pt')
我尝试着只保存['model'],还是不行
大佬,群里谁是npu部门的人?
作者: jefferyzhang    时间: 2020-12-30 10:54
zhw 发表于 2020-12-30 10:31
weights = 'plate.pt'
model = torch.load(weights, map_location=device)['model'].float().eval()
torc ...

群管理员都是
作者: yuelaiyue    时间: 2021-3-16 11:27
请问这个问题解决了吗?能分享一下吗?




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3