|
NPU部门回复:
1.支持多输入多输出,多个输入时shape可以不一样,但是输入要按照nchw的格式,具体可以参考my_multiple_input_test.py;
2.目前pytorch和onnx暂不支持lstm,tensorflow有些可以支持;
my_multiple_input_test.py:
- import torch
- from rknn.api import RKNN
- import numpy as np
- class Net(torch.nn.Module):
- def __init__(self):
- super(Net, self).__init__()
- self.conv1 = torch.nn.Conv2d(1,6,3)
- self.conv2 = torch.nn.Conv2d(2,12,3)
- self.conv3 = torch.nn.Conv2d(3,24,3)
- def forward(self, x, y, z):
- x = self.conv1(x)
- y = self.conv2(y)
- z = self.conv3(z)
- return x,y,z
- def E_D(vector1, vector2):
- print(np.linalg.norm(vector1 - vector2))
- def cos_d(vector1, vector2):
- d = np.dot(vector1, vector2) / (np.linalg.norm(vector1) * (np.linalg.norm(vector2)))
- print(d)
- if __name__ == '__main__':
- net = Net()
- i1 = torch.rand(1,1,5,5)
- i2 = torch.rand(1,2,7,7)
- i3 = torch.rand(1,3,9,9)
- trace_model = torch.jit.trace(net, (i1,i2,i3))
- trace_model.save('test.pt')
- rknn = RKNN(verbose=True)
- rknn.config(batch_size=1,
- channel_mean_value='0 1#0 0 1#0 0 0 1',
- reorder_channel='0 1 2#0 1 2#0 1 2',
- epochs=1)
- ret = rknn.load_pytorch(model='test.pt', input_size_list=[[1,5,5],[2,7,7],[3,9,9]])
- # ret = rknn.load_onnx(model='lstm{128x64}.pt.onnx')
- if ret != 0:
- print('Load pytorch model failed!')
- exit(ret)
- ret = rknn.build(do_quantization=False, dataset='./dataset.txt')
- if ret != 0:
- print('Build pytorch failed!')
- exit(ret)
- ret = rknn.init_runtime(target='rk1808',device_id='7e9f3eb02ede60e8')
- if ret != 0:
- print('Init runtime environment failed')
- exit(ret)
- rknn_r = rknn.inference(inputs=[i1.numpy(), i2.numpy(), i3.numpy()],
- data_type='float32',
- data_format='nchw')
- pytorch_r = net(i1,i2,i3)
- for d1, d2 in zip(rknn_r, pytorch_r):
- d1 = d1.ravel()
- d2 = d2.detach().numpy().ravel()
- E_D(d1, d2)
- cos_d(d1, d2)
- print()
|
|