Toybrick

Conv1d dilation不等于1的属性,stride!=1 输出数据都不对

xsky

中级会员

积分
388
楼主
发表于 2020-5-26 20:32:22    查看: 8026|回复: 1 | [复制链接]    打印 | 只看该作者
本帖最后由 xsky 于 2020-5-27 18:18 编辑

在产品中应用的,已经做了其它的模型一半工作了,conv1d这里卡了,麻烦帮忙看下,感谢!

pytorch  v1.2.0
rknn      v1.3.0

使用pytorch搭一个简单的Conv1d-Bn-Relu的基本模块测试


测试结果看除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,正常,没有报错,其它不支持的属性转换过程会报错,所以这个属性按理是不是支持的?

麻烦帮忙看看,谢谢!

代码文件:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

xsky

中级会员

积分
388
沙发
 楼主| 发表于 2020-5-27 18:12:52 | 只看该作者
conv1d stride!=1的情况也不支持啊?   但模型转换没有报错啊?


rknn和pytorch输出的值对比
kernel_size=3, stride=1, dilation=1

kernel_size=3, stride=1, dilation=1


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的情况要怎么搞啊?  模型转换不支持的属性按理会报错的啊,这个没有报错,但输出数据不对啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

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

本版积分规则

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


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