Toybrick
标题:
Conv1d dilation不等于1的属性,stride!=1 输出数据都不对
[打印本页]
作者:
xsky
时间:
2020-5-26 20:32
标题:
Conv1d dilation不等于1的属性,stride!=1 输出数据都不对
本帖最后由 xsky 于 2020-5-27 18:18 编辑
在产品中应用的,已经做了其它的模型一半工作了,conv1d这里卡了,麻烦帮忙看下,感谢!
pytorch v1.2.0
rknn v1.3.0
使用pytorch搭一个简单的Conv1d-Bn-Relu的基本模块测试
[attach]1121[/attach]
测试结果看除dilation=1,其它值结果都不对,但也没报错
1、是哪里不对么?
2、其它tf或tf-lite模型支持么?
3、dilation按1, 2, 3, 5, 9, 11, 15, 27, 81循环测试,跑到dilation=11时,如果需要预编译模型会卡住,可能是什么问题?
4、conv1d + bn + relu的输出shape为什么和onnx不一致? onnx模型输出shape是(2, 1024, 243),但rknn输出是(2, 243, 1024)?
5、直接load_pytorch也报错。
6、模型转->onnx->rknn,正常,没有报错,其它不支持的属性转换过程会报错,所以这个属性按理是不是支持的?
麻烦帮忙看看,谢谢!
代码文件:[attach]1133[/attach]
作者:
xsky
时间:
2020-5-27 18:12
conv1d stride!=1的情况也不支持啊? 但模型转换没有报错啊?
[attach]1128[/attach]
rknn和pytorch输出的值对比
kernel_size=3, stride=1, dilation=1
[attach]1130[/attach]
kernel_size=3, stride=1, dilation=1
[attach]1131[/attach]
stride改为3之后,数据差异明显。
def
get_avg_abs_diff_rate
(ref_x
,
x1):
diff = np.abs(x1 - ref_x)
abs_x = np.abs(ref_x)
avg_abs_x = np.average(abs_x)
avg_diff = np.average(diff)
avg_rate = avg_diff / avg_abs_x
return
avg_diff
,
avg_abs_x
,
avg_rate
./data/conv1d_ksize=3,stride=1,d=1.onnx_fp16.rknn, run:1.734034 ms; avg abs of : diff:0.000058, x:0.078678, rate:0.000732
./data/conv1d_ksize=3,stride=3,d=1.onnx_fp16.rknn, run:9.382890 ms; avg abs of : diff:0.051092, x:0.073605, rate:0.694133
./data/conv1d_ksize=3,stride=5,d=1.onnx_fp16.rknn, run:14.348952 ms; avg abs of : diff:0.054150, x:0.077323, rate:0.700310
./data/conv1d_ksize=3,stride=7,d=1.onnx_fp16.rknn, run:18.568700 ms; avg abs of : diff:0.052889, x:0.073763, rate:0.717014
./data/conv1d_ksize=3,stride=9,d=1.onnx_fp16.rknn, run:22.689263 ms; avg abs of : diff:0.052633, x:0.074430, rate:0.707146
Conv1d stride != 1 或者 dilation != 1的情况要怎么搞啊? 模型转换不支持的属性按理会报错的啊,这个没有报错,但输出数据不对啊
欢迎光临 Toybrick (https://t.rock-chips.com/)
Powered by Discuz! X3.3