airockchip / rknn-toolkit2

Other
728 stars 77 forks source link

是否支持vits等语音模型 #84

Open pengpengtao opened 1 month ago

pengpengtao commented 1 month ago

--> Config model done --> Loading model I It is recommended onnx opset 19, but your onnx model opset is 13! I Model converted from pytorch, 'opset_version' should be set 19 in torch.onnx.export for successful convert! I Loading : 100%|███████████████████████████████████████████| 1892/1892 [00:00<00:00, 293803.15it/s] E load_onnx: The input shape ['N', 'T'] of 'tokens' is not support! Please set the 'inputs' / 'input_size_list' parameters of 'rknn.load_onnx', or set the 'dyanmic_input' parameter of 'rknn.config' to fix the input shape! I ===================== WARN(0) ===================== E rknn-toolkit2 version: 2.0.0b0+9bab5682 E load_onnx: Catch exception when loading onnx model: /mnt/f/7_8/vits/python-api-examples/vits-icefall-zh-aishell3/model.onnx! E load_onnx: Traceback (most recent call last): E load_onnx: File "rknn/api/rknn_base.py", line 1546, in rknn.api.rknn_base.RKNNBase.load_onnx E load_onnx: File "rknn/api/rknn_base.py", line 764, in rknn.api.rknn_base.RKNNBase._create_ir_and_inputs_meta E load_onnx: File "rknn/api/rknn_log.py", line 92, in rknn.api.rknn_log.RKNNLog.e E load_onnx: ValueError: The input shape ['N', 'T'] of 'tokens' is not support! E load_onnx: Please set the 'inputs' / 'input_size_list' parameters of 'rknn.load_onnx', or set the 'dyanmic_input' parameter of 'rknn.config' to fix the input shape!

yuyun2000 commented 1 month ago

得设置输入长度呢

pengpengtao commented 1 month ago

得设置输入长度呢

有参考例子吗

yuyun2000 commented 1 month ago

你这个模型是动态的输入,你要么设置几个动态输入,要么把onnx的shape固定一下

pengpengtao commented 1 month ago

我设置动态输入好像不管用,如果固定onnx的shape,那么文字长度也固定,感觉不合适

yuyun2000 commented 1 month ago

是的,所以他是不太合适转rknn的

pengpengtao commented 1 month ago

是的,所以他是不太合适转rknn的

我好像已经解决了,支持任意长度的文字输出音频

yuyun2000 commented 1 month ago

这么强?莫非是用了pad?还是mask?

pengpengtao commented 1 month ago

用了pad,比onnx快了4倍

yuyun2000 commented 1 month ago

最长能推理多长的文本? 文本过短的时候是不是要浪费后面那么多token了

pengpengtao commented 1 month ago

30s是没有问题,具体多长没测试过,只要模型能支持的最大长度应该都能达到。如果文本过短确实会浪费token,但是浪费比较少,我测试了一个字的token和音频长度,然后设置的阈值是74,如果切段z_p的长度小于74才padding,所以并不会浪费很多。阈值也可以设置55,但是我听起来有点不自然。可能需要根据不同的模型,设置不同的阈值,我尝试了0-256的阈值

yuyun2000 commented 1 month ago

太强了

wbjnpu commented 4 weeks ago

最好的解决方案是 后置编码器和声码器按chunk导出,毕竟前端不费资源,后端可以流式生成

yuyun2000 commented 4 weeks ago

最好的解决方案是 后置编码器和声码器按chunk导出,毕竟前端不费资源,后端可以流式生成

你说得对

wbjnpu commented 3 weeks ago

最好的解决方案是 后置编码器和声码器按chunk导出,毕竟前端不费资源,后端可以流式生成

你说得对

我确实是这样做的,这样在npu上可以跑比较大的模型

wbjnpu commented 1 week ago

30s是没有问题,具体多长没测试过,只要模型能支持的最大长度应该都能达到。如果文本过短确实会浪费token,但是浪费比较少,我测试了一个字的token和音频长度,然后设置的阈值是74,如果切段z_p的长度小于74才padding,所以并不会浪费很多。阈值也可以设置55,但是我听起来有点不自然。可能需要根据不同的模型,设置不同的阈值,我尝试了0-256的阈值

请问你导出是int8量化么,int8量化后的模型有很明显的噪声你是怎么解决的

yuyun2000 commented 1 week ago

30s是没有问题,具体多长没测试过,只要模型能支持的最大长度应该都能达到。如果文本过短确实会浪费token,但是浪费比较少,我测试了一个字的token和音频长度,然后设置的阈值是74,如果切段z_p的长度小于74才padding,所以并不会浪费很多。阈值也可以设置55,但是我听起来有点不自然。可能需要根据不同的模型,设置不同的阈值,我尝试了0-256的阈值

请问你导出是int8量化么,int8量化后的模型有很明显的噪声你是怎么解决的

估计是fp16

pengpengtao commented 1 week ago

30s是没有问题,具体多长没测试过,只要模型能支持的最大长度应该都能达到。如果文本过短确实会浪费token,但是浪费比较少,我测试了一个字的token和音频长度,然后设置的阈值是74,如果切段z_p的长度小于74才padding,所以并不会浪费很多。阈值也可以设置55,但是我听起来有点不自然。可能需要根据不同的模型,设置不同的阈值,我尝试了0-256的阈值

请问你导出是int8量化么,int8量化后的模型有很明显的噪声你是怎么解决的

没试过int8,