| Export to ONNX |
| ============== |
|
|
| In this section, we describe how to export models to `ONNX`_. |
|
|
| .. hint:: |
|
|
| Before you continue, please run: |
|
|
| .. code-block:: bash |
|
|
| pip install onnx |
|
|
|
|
| In each recipe, there is a file called ``export-onnx.py``, which is used |
| to export trained models to `ONNX`_. |
|
|
| There is also a file named ``onnx_pretrained.py``, which you can use |
| the exported `ONNX`_ model in Python with `onnxruntime`_ to decode sound files. |
|
|
| sherpa-onnx |
| ----------- |
|
|
| We have a separate repository `sherpa-onnx`_ for deploying your exported models |
| on various platforms such as: |
|
|
| - iOS |
| - Android |
| - Raspberry Pi |
| - Linux/macOS/Windows |
|
|
|
|
| Please see the documentation of `sherpa-onnx`_ for details: |
|
|
| `<https://k2-fsa.github.io/sherpa/onnx/index.html>`_ |
|
|
| Example |
| ------- |
|
|
| In the following, we demonstrate how to export a streaming Zipformer pre-trained |
| model from |
| `<https://huggingface.co/csukuangfj/icefall-asr-librispeech-pruned-transducer-stateless7-2022-11-11>`_ |
| to `ONNX`_. |
|
|
| Download the pre-trained model |
| ------------------------------ |
|
|
| .. hint:: |
|
|
| We assume you have installed `git-lfs`_. |
|
|
| .. code-block:: bash |
|
|
|
|
| cd egs/librispeech/ASR |
|
|
| repo_url=https://huggingface.co/Zengwei/icefall-asr-librispeech-pruned-transducer-stateless7-streaming-2022-12-29 |
| GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url |
| repo=$(basename $repo_url) |
|
|
| pushd $repo |
| git lfs pull --include "data/lang_bpe_500/bpe.model" |
| git lfs pull --include "exp/pretrained.pt" |
| cd exp |
| ln -s pretrained.pt epoch-99.pt |
| popd |
|
|
| Export the model to ONNX |
| ------------------------ |
|
|
| .. code-block:: bash |
|
|
| ./pruned_transducer_stateless7_streaming/export-onnx.py \ |
| --tokens $repo/data/lang_bpe_500/tokens.txt \ |
| --use-averaged-model 0 \ |
| --epoch 99 \ |
| --avg 1 \ |
| --decode-chunk-len 32 \ |
| --exp-dir $repo/exp/ |
|
|
| .. warning:: |
|
|
| ``export-onnx.py`` from different recipes has different options. |
|
|
| In the above example, ``--decode-chunk-len`` is specific for the |
| streaming Zipformer. Other models won't have such an option. |
|
|
| It will generate the following 3 files in ``$repo/exp`` |
|
|
| - ``encoder-epoch-99-avg-1.onnx`` |
| - ``decoder-epoch-99-avg-1.onnx`` |
| - ``joiner-epoch-99-avg-1.onnx`` |
|
|
| Decode sound files with exported ONNX models |
| -------------------------------------------- |
|
|
| .. code-block:: bash |
|
|
| ./pruned_transducer_stateless7_streaming/onnx_pretrained.py \ |
| --encoder-model-filename $repo/exp/encoder-epoch-99-avg-1.onnx \ |
| --decoder-model-filename $repo/exp/decoder-epoch-99-avg-1.onnx \ |
| --joiner-model-filename $repo/exp/joiner-epoch-99-avg-1.onnx \ |
| --tokens $repo/data/lang_bpe_500/tokens.txt \ |
| $repo/test_wavs/1089-134686-0001.wav |
|
|