Toybrick

pt转rknn出错

zhw

注册会员

积分
103
发表于 2020-12-29 18:34:03    查看: 533|回复: 16 | [复制链接]    打印 | 显示全部楼层
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

注册会员

积分
103
 楼主| 发表于 2020-12-29 19:07:12 | 显示全部楼层
rknntoolkit是1.4.0的,这个版本支持torch1.2吗?
回复

使用道具 举报

jefferyzhang

超级版主

积分
7316
发表于 2020-12-30 08:15:39 | 显示全部楼层
首先你得先用pytorch1.2 加载这个模型,能正确推理了,再转rknn
回复

使用道具 举报

zhw

注册会员

积分
103
 楼主| 发表于 2020-12-30 09:26:11 | 显示全部楼层
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

超级版主

积分
7316
发表于 2020-12-30 09:35:00 | 显示全部楼层
不知道你什么意思,你都说用rknn可以推理成功了,那还有什么问题么?
回复

使用道具 举报

zhw

注册会员

积分
103
 楼主| 发表于 2020-12-30 09:39:52 | 显示全部楼层
torch1.2可以正常推理成功,但是转rknn出错
回复

使用道具 举报

zhw

注册会员

积分
103
 楼主| 发表于 2020-12-30 09:41:55 | 显示全部楼层
jefferyzhang 发表于 2020-12-30 09:35
不知道你什么意思,你都说用rknn可以推理成功了,那还有什么问题么?


torch1.2可以正常推理成功,但是转rknn出错,实在是找不到问题所在了
回复

使用道具 举报

jefferyzhang

超级版主

积分
7316
发表于 2020-12-30 09:42:57 | 显示全部楼层
zhw 发表于 2020-12-30 09:41
torch1.2可以正常推理成功,但是转rknn出错,实在是找不到问题所在了

你把你torch1.2 读取这个pt推理正确的代码贴出来看下
回复

使用道具 举报

zhw

注册会员

积分
103
 楼主| 发表于 2020-12-30 09:47:28 | 显示全部楼层
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

超级版主

积分
7316
发表于 2020-12-30 09:55:15 | 显示全部楼层
zhw 发表于 2020-12-30 09:47
device = torch.device("cpu")
weights = 'plate.pt'
model = torch.load(weights, map_location=device) ...

为何需要['model'].eval()
直接eval的模型无法推理么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表