ncnn icon indicating copy to clipboard operation
ncnn copied to clipboard

onnx2ncnn 转化模型后 shape=0

Open shengdewu opened this issue 3 years ago • 12 comments

  1. 模型通过onnx2ncnn model.onnx model.param model.bin
  2. 通过ncnn::Net::blobs获取对应的ncnn::Blob 再打印出shape 结果全为零,但是input和output的name是正确的

请问下 我的问题出现在哪里 ps:onnx模型通过onnxruntime 验证过没有问题

shengdewu avatar Jul 07 '22 10:07 shengdewu

转到onnx之前是什么格式的?

wzyforgit avatar Jul 08 '22 00:07 wzyforgit

转到onnx之前是什么格式的?

model.pth 通过pytorch自带的onnx.export 转成model.onnx

model.pth to model.onnx : torch.onnx.export(model.pth, torch.zeros(size=(1,3,750,500),device='cpu', detype=torch.float32), model.onnx, export_params=True, verbose=True, input_names=['input_img'], output_names=['r', 'g', 'b'], opset_version=11)

shengdewu avatar Jul 08 '22 01:07 shengdewu

转到onnx之前是什么格式的?

model.pth 通过pytorch自带的onnx.export 转成model.onnx

model.pth to model.onnx : torch.onnx.export(model.pth, torch.zeros(size=(1,3,750,500),device='cpu', detype=torch.float32), model.onnx, export_params=True, verbose=True, input_names=['input_img'], output_names=['r', 'g', 'b'], opset_version=11)

所以说不行啊,pytorch要用PNNX转NCNN,现在pytorch还用ONNX转NCNN已经没有售后了

wzyforgit avatar Jul 08 '22 01:07 wzyforgit

转到onnx之前是什么格式的?

model.pth 通过pytorch自带的onnx.export 转成model.onnx model.pth to model.onnx : torch.onnx.export(model.pth, torch.zeros(size=(1,3,750,500),device='cpu', detype=torch.float32), model.onnx, export_params=True, verbose=True, input_names=['input_img'], output_names=['r', 'g', 'b'], opset_version=11)

所以说不行啊,pytorch要用PNNX转NCNN,现在pytorch还用ONNX转NCNN已经没有售后了

感谢回复,我马上去尝试一下

shengdewu avatar Jul 08 '22 01:07 shengdewu

转到onnx之前是什么格式的?

model.pth 通过pytorch自带的onnx.export 转成model.onnx model.pth to model.onnx : torch.onnx.export(model.pth, torch.zeros(size=(1,3,750,500),device='cpu', detype=torch.float32), model.onnx, export_params=True, verbose=True, input_names=['input_img'], output_names=['r', 'g', 'b'], opset_version=11)

所以说不行啊,pytorch要用PNNX转NCNN,现在pytorch还用ONNX转NCNN已经没有售后了

我更新了ncnn 同时使用pnnx转换model.pt

这是model.ncnn.param 部分内容: Crop slice_27 1 1 50 51 -23310=1,10 -23311=1,0 -23309=1,0 aten::exp pnnx_49 1 1 51 out0 Crop slice_28 1 1 49 53 -23310=1,20 -23311=1,0 -23309=1,10 aten::exp pnnx_60 1 1 53 out1 Crop slice_29 1 1 48 55 -23310=1,30 -23311=1,0 -23309=1,20 aten::exp pnnx_75 1 1 55 out2

提示 aten::exp not exists or registered

shengdewu avatar Jul 08 '22 02:07 shengdewu

转到onnx之前是什么格式的?

model.pth 通过pytorch自带的onnx.export 转成model.onnx model.pth to model.onnx : torch.onnx.export(model.pth, torch.zeros(size=(1,3,750,500),device='cpu', detype=torch.float32), model.onnx, export_params=True, verbose=True, input_names=['input_img'], output_names=['r', 'g', 'b'], opset_version=11)

所以说不行啊,pytorch要用PNNX转NCNN,现在pytorch还用ONNX转NCNN已经没有售后了

我更新了ncnn 同时使用pnnx转换model.pt

这是model.ncnn.param 部分内容: Crop slice_27 1 1 50 51 -23310=1,10 -23311=1,0 -23309=1,0 aten::exp pnnx_49 1 1 51 out0 Crop slice_28 1 1 49 53 -23310=1,20 -23311=1,0 -23309=1,10 aten::exp pnnx_60 1 1 53 out1 Crop slice_29 1 1 48 55 -23310=1,30 -23311=1,0 -23309=1,20 aten::exp pnnx_75 1 1 55 out2

提示 aten::exp not exists or registered

这个你先检查确认一下是不是自定义啥乱七八糟的算子了,建议最好是全用nn里面的算子来构建模型 如果确实全是nn的话,那估计得呼叫up来处理

wzyforgit avatar Jul 08 '22 02:07 wzyforgit

转到onnx之前是什么格式的?

model.pth 通过pytorch自带的onnx.export 转成model.onnx model.pth to model.onnx : torch.onnx.export(model.pth, torch.zeros(size=(1,3,750,500),device='cpu', detype=torch.float32), model.onnx, export_params=True, verbose=True, input_names=['input_img'], output_names=['r', 'g', 'b'], opset_version=11)

所以说不行啊,pytorch要用PNNX转NCNN,现在pytorch还用ONNX转NCNN已经没有售后了

我更新了ncnn 同时使用pnnx转换model.pt 这是model.ncnn.param 部分内容: Crop slice_27 1 1 50 51 -23310=1,10 -23311=1,0 -23309=1,0 aten::exp pnnx_49 1 1 51 out0 Crop slice_28 1 1 49 53 -23310=1,20 -23311=1,0 -23309=1,10 aten::exp pnnx_60 1 1 53 out1 Crop slice_29 1 1 48 55 -23310=1,30 -23311=1,0 -23309=1,20 aten::exp pnnx_75 1 1 55 out2 提示 aten::exp not exists or registered

这个你先检查确认一下是不是自定义啥乱七八糟的算子了,建议最好是全用nn里面的算子来构建模型 如果确实全是nn的话,那估计得呼叫up来处理

我的pytorch源码 采用的是 torch.exp 这个不满足吗

shengdewu avatar Jul 08 '22 03:07 shengdewu

转到onnx之前是什么格式的?

model.pth 通过pytorch自带的onnx.export 转成model.onnx model.pth to model.onnx : torch.onnx.export(model.pth, torch.zeros(size=(1,3,750,500),device='cpu', detype=torch.float32), model.onnx, export_params=True, verbose=True, input_names=['input_img'], output_names=['r', 'g', 'b'], opset_version=11)

所以说不行啊,pytorch要用PNNX转NCNN,现在pytorch还用ONNX转NCNN已经没有售后了

我更新了ncnn 同时使用pnnx转换model.pt 这是model.ncnn.param 部分内容: Crop slice_27 1 1 50 51 -23310=1,10 -23311=1,0 -23309=1,0 aten::exp pnnx_49 1 1 51 out0 Crop slice_28 1 1 49 53 -23310=1,20 -23311=1,0 -23309=1,10 aten::exp pnnx_60 1 1 53 out1 Crop slice_29 1 1 48 55 -23310=1,30 -23311=1,0 -23309=1,20 aten::exp pnnx_75 1 1 55 out2 提示 aten::exp not exists or registered

这个你先检查确认一下是不是自定义啥乱七八糟的算子了,建议最好是全用nn里面的算子来构建模型 如果确实全是nn的话,那估计得呼叫up来处理

我的pytorch源码 采用的是 torch.exp 这个不满足吗

这种就不清楚了,只是建议尽量用nn里面已有的算子,不要自己手搓 之前我们这一个实习生就是自己手搓算子,看着是标准的mobilenetv3,但是最后PNNX当场寄掉。。。被我吼了一顿后只用nn.xxxx就丝滑多了

wzyforgit avatar Jul 08 '22 03:07 wzyforgit

当时也是转出来一堆的aten::xxxxx,看着简直就是地狱绘卷

wzyforgit avatar Jul 08 '22 03:07 wzyforgit

没有把后处理去掉?

nihui avatar Jul 08 '22 03:07 nihui

当时也是转出来一堆的aten::xxxxx,看着简直就是地狱绘卷

感谢,我仔细检查一下

shengdewu avatar Jul 08 '22 05:07 shengdewu

没有把后处理去掉?

torch.exp 就是最后一步了,没有后处理

shengdewu avatar Jul 08 '22 05:07 shengdewu