Closed Ryuk17 closed 2 years ago
因为最新转onnx模型和recognize_onnx.py不一致,我使用的是这个版本
@Ryuk17 你可以用这个脚本转onnx
map_batch的参数定义
std::vector<std::string> map_batch(
const std::vector<std::vector<int>> &batch_sents,
const std::vector<std::string> &vocabulary, size_t num_processes,
bool greedy, int blank_id)
# python
# batch_sents: a list of list of int elements [[1,2,3,4,5,....], [2,3,4,5,6, .....], [1,3,5,7,9], ......]
# vocabulary: a list of string ["<blankid>", "你", "我", "它", .......]
# num_processes: int
# greedy: True -> use greedy search False: just map id to character
# blank_id: int
你可以打印一下看看能不能对的上
另外191行不是这个吗? https://github.com/wenet-e2e/wenet/blob/main/wenet/bin/recognize_onnx.py#L191
可以看一下你的命令行吗?是不是beam=1 ?
感谢回复,我研究了下wenet那个recognize_onnx.py,我在这里加了一行代码,这样使用ctc_greedy_search就可以顺利运行了
还有另外一个问题想请教一些,wenet更新了转onnx模型的方式,ctc作为一个单独的模块,这意味着只有ctc_log_probs这个tensor,没有encoder_out_lens数据长度信息了,如何喂给map_batch这个函数呢?
还有另外一个问题想请教一些,wenet更新了转onnx模型的方式,ctc作为一个单独的模块,这意味着只有ctc_log_probs这个tensor,没有encoder_out_lens数据长度信息了,如何喂给map_batch这个函数呢?
recognize_batch.py
只支持 export_onnx_gpu.py
的offline模型导出的识别, encoder_out_lens在这里 所以一直都在,只是文件名改啦
这个脚本只是我当时看直接用Pytorch对单条音频做推理速度太慢了,所以临时写了一个方便大家更快得到实验推理结果。实际部署要参考server
目录。
它现在不支持 export_onnx_cpu.py
export_onnx_cpu.py
针对的是server/x86
下的 onnxruntime 部署
export_onnx_gpu.py
针对的是server/x86_gpu
下的triton inference server部署
所以看你的场景啦
不对诶,我得到了ctc_log_probs这个矩阵,它的大小是[T,C](T是时间长度,C是字典大小),那就应该可以进行greedy_search和prefix_beam_search。如果map_batch支持这两种解码方式,那就应该可以调用吧?
不对诶,我得到了ctc_log_probs这个矩阵,它的大小是[T,C](T是时间长度,C是字典大小),那就应该可以进行greedy_search和prefix_beam_search。如果map_batch支持这两种解码方式,那就应该可以调用吧?
ctc_log_probs 指的是每个C上的概率, 它在 export_onnx_gpu.py 中的 shape是 [B, T, C] 而不是 [T, C]
我猜你用了 export_onnx_cpu.py
但是又想用 recognize_onnx.py
吧
recognize_onnx.py 中的每个tensor第一维都是 B - batch_size 这个跟 export_onnx_cpu.py
是不一样的,它假设的维度是bz=1的。
map_batch 接收的是 list of int list 所以我并不觉得 ctc_log_probs[:, :, 0] 是对的 详见前面的comment
# assume ctc_log_probs shape is [B, T, C]
log_probs_idx = torch.argmax(ctc_log_probs, axis=-1)
map_batch
不支持 ctc_prefix_beam_search
只支持 greedy_search
懂了,问题已经解掉了,十分感谢您的回复!
报错定位到Wenet recognize_onnx.py的191行
错误如下
请问这个问题要怎么修改呢?