Closed ghost closed 2 years ago
你好, 我最近没有时间去做转换的事情。但是之前转换过一个类似的模型,我不太清楚你需要转换的模型是否是流式的(我的stateful实现)。如果是流式的,需要注意assign算子是不支持tflite转换的。因此要实现流式模型,你可能得把encoder decoder中卷积的padding的特征都输出来再输进去(我不太清楚tflite如何实现流式cnn或者队列的操作,只能用这种有点麻烦的方法,会提高很多数据吞吐)。 我之前转换的模型rnn模块类似dprnn只不过更简单一点,可以转换。转换分离模型或是整个模型应该都能做到,只不过你需要注意算子支持,比如某些参数选择下的LSTM可能无法转换,还有STFT无法转换,一些操作比如transpose必须包装成Lambda层才可以转换。我当时只试过tf-1的convert from file,是可以的。 tf-2直接转换model对象或许也可以。只不过tf-2里面很多层的默认参数都变了。。。所以无法转换的原因可能多种多样。 当然如果你成功完成了模型转换,也希望你可以提交一下转换的代码:)。
---原始邮件--- 发件人: @.> 发送时间: 2021年9月27日(周一) 下午5:00 收件人: @.>; 抄送: @.***>; 主题: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2)
您好,请问你这边试过把预训练模型转为tflite嘛?模型分encoder和decoder,是不是在转tflite的时候要把encoder和decoder分开,转成两个tflite; 现在试了转成一个tflite没有成功...
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
您好, :):)感谢您的建议!当前确实要实现流式处理。我也正在努力解决遇到转换问题,因为想在移动端实时地用起来!如果转换成功了,我会分享哒!
你好, 请问你想要部署的移动端是安卓手机还是其他的?如果是安卓的话我不太了解是如何开发的,但这也是我一直想去做demo的一个东西。只不过模型可能需要压缩一下。
---原始邮件--- 发件人: @.> 发送时间: 2021年9月27日(周一) 晚上7:12 收件人: @.>; 抄送: @.**@.>; 主题: Re: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2)
您好, :):)感谢您的建议!当前确实要实现流式处理。我也正在努力解决遇到转换问题,因为想在移动端实时地用起来!如果转换成功了,我会分享哒!
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
您好, 是的!把模型运行在安卓手机上,把降噪嵌套在语音通话软件里,需要把h5转成tflite,然后C++/C写成加载tflite字节流式处理接口,外层封装:):)
那这个模型可能得压缩压缩,一些超参数得重新设计一下。
---原始邮件--- 发件人: @.> 发送时间: 2021年9月28日(周二) 下午2:14 收件人: @.>; 抄送: @.**@.>; 主题: Re: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2)
您好, 是的!把模型运行在安卓手机上,把降噪嵌套在语音通话软件里,需要把h5转成tflite,然后C++/C写成加载tflite字节流式处理接口,外层封装:):)
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
您好, 有问题请教你下!在模型压缩的时候
tf2.3 如果设置了converter.allow_custom_ops = True,模型转换会出现I tensorflow/lite/tools/optimize/quantize_weights.cc:211] Skipping quantization of tensor Conv2D;functional_3/encoder_conv_1/StatefulPartitionedCall/Conv2D because it has fewer than 1024 elements (640). 这时候得到的tflite 2.3M,压缩后的大小明显不对;如果不加converter.allow_custom_ops = True,在tf.lite.TFLiteConverter.from_keras_model(model)会出现 之后发现是这个原因 可能是BN层,后来换了BN层之后还是这个原因,您有什么解决方案供参考嘛?
tf1.15 在单向LSTM设置unroll=True 会出现上述错误...
试一下用最新的TF转试试。
tflite转换的话,我已经有一个更小的模型转换了,在卷积层上抛弃掉时间维度上的kernel size(设置为1)就可以整体转换了,性能没太大改变。
------------------ 原始邮件 ------------------ 发件人: "Le-Xiaohuai-speech/DPCRN_DNS3" @.>; 发送时间: 2021年11月19日(星期五) 晚上8:36 @.>; @.**@.>; 主题: Re: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2)
试一下用最新的TF转试试。
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
一直没转成功...
@Le-Xiaohuai-speech 能具体说说嘛,还是用的tf1.X训练然后转tflite的嘛
tf1.x训练,rnn换成gru了,卷积时间维度kernel size为1了。然后kera.save,直接保存整个模型到h5,再用tf1的lite读取h5转换。
---原始邮件--- 发件人: @.> 发送时间: 2021年11月22日(周一) 下午2:51 收件人: @.>; 抄送: @.**@.>; 主题: Re: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2)
@Le-Xiaohuai-speech 能具体说说嘛,还是用的tf1.X训练然后转tflite的嘛
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
@Le-Xiaohuai-speech Total params: 577,894 Trainable params: 576,998 Non-trainable params: 896 您好,大佬!这样的参数量对的上嘛?
差不多
@Le-Xiaohuai-speech 大佬,量化后的模型是分成两个tflite文件了嘛,文件都多大吖
因为我把卷积的时间kernelsize改成1了,就不用考虑时域的流式卷积了,所以一个文件就可以了(不包括FFT),文件2.5M左右吧,32位浮点。
----------------- 原始邮件 ------------------ 发件人: "Le-Xiaohuai-speech/DPCRN_DNS3" @.>; 发送时间: 2021年11月22日(星期一) 下午5:05 @.>; @.**@.>; 主题: Re: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2)
@Le-Xiaohuai-speech 大佬,量化后的模型是分成两个tflite文件了嘛,文件都多大吖
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
@Le-Xiaohuai-speech 大佬,按照上面您说的,转tflite时DprnnBlock里面的GRU的状态还考虑嘛
不要用我那个stateful的写法,里面用了assign不能转换。你就把一个正常的DprnnBlock里面的inter-rnn加一个输入上一帧的隐状态h,然后加个输出把这一帧的h输出就好,intra-rnn不用管,你先试试这样单独模块能否做到转换就好,差不多就这样: model.model_stateful.save('./dpcrn_stateful.h5') converter = tf.lite.TFLiteConverter.from_keras_model_file('./dpcrn_stateful.h5',custom_objects={'DprnnBlock_stateful':DprnnBlock_stateful})
------------------ 原始邮件 ------------------ 发件人: "Le-Xiaohuai-speech/DPCRN_DNS3" @.>; 发送时间: 2021年11月23日(星期二) 上午10:39 @.>; @.**@.>; 主题: Re: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2)
@Le-Xiaohuai-speech 大佬,按照上面您说的,转tflite时DprnnBlock里面的GRU的状态还考虑嘛
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
好的,我试下!谢谢
@Le-Xiaohuai-speech 大佬,我理解您的意思是训练的时候卷积和反卷积的kernel size 的第一维设置为1,五层encoder的pad的H填充为0,DprnnBlock里面双向LSTM和单向LSTM都替换为GRU,其它部分不动;转换为tflite的时候双向GRU的状态不管,传入的状态initial_state是两个shape=(50,128)矩阵,这样理解对嘛
tf1.x训练,rnn换成gru了,卷积时间维度kernel size为1了。然后kera.save,直接保存整个模型到h5,再用tf1的lite读取h5转换。 … ---原始邮件--- 发件人: @.> 发送时间: 2021年11月22日(周一) 下午2:51 收件人: @.>; 抄送: @.**@.>; 主题: Re: [Le-Xiaohuai-speech/DPCRN_DNS3] Hi, 您好,还有一些问题,是关于模型转tflite的? (#2) @Le-Xiaohuai-speech 能具体说说嘛,还是用的tf1.X训练然后转tflite的嘛 — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
这个代码在那儿呢?好像示例的代码还是lstm的。。。
您好,请问你这边试过把预训练模型转为tflite嘛?模型分encoder和decoder,是不是在转tflite的时候要把encoder和decoder分开,转成两个tflite; 现在试了转成一个tflite没有成功...