mirror of
https://github.com/k2-fsa/icefall.git
synced 2025-08-10 18:42:19 +00:00
deploy: 2b995639b7120fcda061978008ed3bc0855fef3a
This commit is contained in:
parent
c65d4eb376
commit
9f96cbe02f
@ -1,69 +1,78 @@
|
|||||||
Export to ONNX
|
Export to ONNX
|
||||||
==============
|
==============
|
||||||
|
|
||||||
In this section, we describe how to export models to ONNX.
|
In this section, we describe how to export the following models to 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 to decode sound files.
|
||||||
|
|
||||||
|
Example
|
||||||
|
=======
|
||||||
|
|
||||||
|
In the following, we demonstrate how to export a streaming Zipformer pre-trained
|
||||||
|
model from `<python3 ./python-api-examples/speech-recognition-from-microphone.py>`_
|
||||||
|
to ONNX.
|
||||||
|
|
||||||
|
Download the pre-trained model
|
||||||
|
------------------------------
|
||||||
|
|
||||||
.. hint::
|
.. hint::
|
||||||
|
|
||||||
Only non-streaming conformer transducer models are tested.
|
We assume you have installed `git-lfs`_.
|
||||||
|
|
||||||
|
|
||||||
When to use it
|
|
||||||
--------------
|
|
||||||
|
|
||||||
It you want to use an inference framework that supports ONNX
|
|
||||||
to run the pretrained model.
|
|
||||||
|
|
||||||
|
|
||||||
How to export
|
|
||||||
-------------
|
|
||||||
|
|
||||||
We use
|
|
||||||
`<https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless3>`_
|
|
||||||
as an example in the following.
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
cd egs/librispeech/ASR
|
|
||||||
epoch=14
|
|
||||||
avg=2
|
|
||||||
|
|
||||||
./pruned_transducer_stateless3/export.py \
|
cd egs/librispeech/ASR
|
||||||
--exp-dir ./pruned_transducer_stateless3/exp \
|
|
||||||
--bpe-model data/lang_bpe_500/bpe.model \
|
|
||||||
--epoch $epoch \
|
|
||||||
--avg $avg \
|
|
||||||
--onnx 1
|
|
||||||
|
|
||||||
It will generate the following files inside ``pruned_transducer_stateless3/exp``:
|
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)
|
||||||
|
|
||||||
- ``encoder.onnx``
|
pushd $repo
|
||||||
- ``decoder.onnx``
|
git lfs pull --include "data/lang_bpe_500/bpe.model"
|
||||||
- ``joiner.onnx``
|
git lfs pull --include "exp/pretrained.pt"
|
||||||
- ``joiner_encoder_proj.onnx``
|
cd exp
|
||||||
- ``joiner_decoder_proj.onnx``
|
ln -s pretrained.pt epoch-99.pt
|
||||||
|
popd
|
||||||
|
|
||||||
You can use ``./pruned_transducer_stateless3/exp/onnx_pretrained.py`` to decode
|
Export the model to ONNX
|
||||||
waves with the generated files:
|
------------------------
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
./pruned_transducer_stateless3/onnx_pretrained.py \
|
./pruned_transducer_stateless7_streaming/export-onnx.py \
|
||||||
--bpe-model ./data/lang_bpe_500/bpe.model \
|
--bpe-model $repo/data/lang_bpe_500/bpe.model \
|
||||||
--encoder-model-filename ./pruned_transducer_stateless3/exp/encoder.onnx \
|
--use-averaged-model 0 \
|
||||||
--decoder-model-filename ./pruned_transducer_stateless3/exp/decoder.onnx \
|
--epoch 99 \
|
||||||
--joiner-model-filename ./pruned_transducer_stateless3/exp/joiner.onnx \
|
--avg 1 \
|
||||||
--joiner-encoder-proj-model-filename ./pruned_transducer_stateless3/exp/joiner_encoder_proj.onnx \
|
--decode-chunk-len 32 \
|
||||||
--joiner-decoder-proj-model-filename ./pruned_transducer_stateless3/exp/joiner_decoder_proj.onnx \
|
--exp-dir $repo/exp/
|
||||||
/path/to/foo.wav \
|
|
||||||
/path/to/bar.wav \
|
|
||||||
/path/to/baz.wav
|
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
How to use the exported model
|
``export-onnx.py`` from different recipes has different options.
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
We also provide `<https://github.com/k2-fsa/sherpa-onnx>`_
|
In the above example, ``--decode-chunk-len`` is specific for the
|
||||||
performing speech recognition using `onnxruntime <https://github.com/microsoft/onnxruntime>`_
|
streaming Zipformer. Other models won't have such an option.
|
||||||
with exported models.
|
|
||||||
It has been tested on Linux, macOS, and Windows.
|
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
|
||||||
|
@ -580,12 +580,11 @@ for ``pnnx``:
|
|||||||
iter=468000
|
iter=468000
|
||||||
avg=16
|
avg=16
|
||||||
|
|
||||||
./lstm_transducer_stateless2/export.py \
|
./lstm_transducer_stateless2/export-for-ncnn.py \
|
||||||
--exp-dir ./lstm_transducer_stateless2/exp \
|
--exp-dir ./lstm_transducer_stateless2/exp \
|
||||||
--bpe-model data/lang_bpe_500/bpe.model \
|
--bpe-model data/lang_bpe_500/bpe.model \
|
||||||
--iter $iter \
|
--iter $iter \
|
||||||
--avg $avg \
|
--avg $avg
|
||||||
--pnnx 1
|
|
||||||
|
|
||||||
It will generate 3 files:
|
It will generate 3 files:
|
||||||
|
|
||||||
@ -615,7 +614,7 @@ To use the above generated files, run:
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
./lstm_transducer_stateless2/ncnn-decode.py \
|
./lstm_transducer_stateless2/ncnn-decode.py \
|
||||||
--bpe-model-filename ./data/lang_bpe_500/bpe.model \
|
--tokens ./data/lang_bpe_500/tokens.txt \
|
||||||
--encoder-param-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param \
|
--encoder-param-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param \
|
||||||
--encoder-bin-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin \
|
--encoder-bin-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin \
|
||||||
--decoder-param-filename ./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param \
|
--decoder-param-filename ./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param \
|
||||||
@ -627,7 +626,7 @@ To use the above generated files, run:
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
./lstm_transducer_stateless2/streaming-ncnn-decode.py \
|
./lstm_transducer_stateless2/streaming-ncnn-decode.py \
|
||||||
--bpe-model-filename ./data/lang_bpe_500/bpe.model \
|
--tokens ./data/lang_bpe_500/tokens.txt \
|
||||||
--encoder-param-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param \
|
--encoder-param-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param \
|
||||||
--encoder-bin-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin \
|
--encoder-bin-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin \
|
||||||
--decoder-param-filename ./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param \
|
--decoder-param-filename ./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param \
|
||||||
@ -657,6 +656,3 @@ by visiting the following links:
|
|||||||
|
|
||||||
You can find more usages of the pretrained models in
|
You can find more usages of the pretrained models in
|
||||||
`<https://k2-fsa.github.io/sherpa/python/streaming_asr/lstm/index.html>`_
|
`<https://k2-fsa.github.io/sherpa/python/streaming_asr/lstm/index.html>`_
|
||||||
|
|
||||||
Export ConvEmformer transducer models for ncnn
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
@ -107,6 +107,7 @@ speech recognition recipes using <a class="reference external" href="https://git
|
|||||||
<li class="toctree-l2"><a class="reference internal" href="model-export/export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="model-export/export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="model-export/export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="model-export/export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="model-export/export-onnx.html">Export to ONNX</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="model-export/export-onnx.html">Export to ONNX</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="model-export/export-onnx.html#example">Example</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="model-export/export-ncnn.html">Export to ncnn</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="model-export/export-ncnn.html">Export to ncnn</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#example">Example</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#example">Example</a></li>
|
||||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">Export to ncnn</a><ul>
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">Export to ncnn</a><ul>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#export-lstm-transducer-models">Export LSTM transducer models</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="#export-lstm-transducer-models">Export LSTM transducer models</a></li>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#export-convemformer-transducer-models">Export ConvEmformer transducer models</a><ul>
|
<li class="toctree-l3"><a class="reference internal" href="#export-convemformer-transducer-models">Export ConvEmformer transducer models</a><ul>
|
||||||
|
@ -49,10 +49,11 @@
|
|||||||
<li class="toctree-l2"><a class="reference internal" href="export-model-state-dict.html">Export model.state_dict()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-model-state-dict.html">Export model.state_dict()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
||||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">Export to ONNX</a><ul>
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">Export to ONNX</a></li>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#when-to-use-it">When to use it</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="#example">Example</a><ul>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#how-to-export">How to export</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="#download-the-pre-trained-model">Download the pre-trained model</a></li>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#how-to-use-the-exported-model">How to use the exported model</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="#export-the-model-to-onnx">Export the model to ONNX</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="#decode-sound-files-with-exported-onnx-models">Decode sound files with exported ONNX models</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
||||||
@ -94,65 +95,75 @@
|
|||||||
|
|
||||||
<section id="export-to-onnx">
|
<section id="export-to-onnx">
|
||||||
<h1>Export to ONNX<a class="headerlink" href="#export-to-onnx" title="Permalink to this heading"></a></h1>
|
<h1>Export to ONNX<a class="headerlink" href="#export-to-onnx" title="Permalink to this heading"></a></h1>
|
||||||
<p>In this section, we describe how to export models to ONNX.</p>
|
<p>In this section, we describe how to export the following models to ONNX.</p>
|
||||||
|
<p>In each recipe, there is a file called <code class="docutils literal notranslate"><span class="pre">export-onnx.py</span></code>, which is used
|
||||||
|
to export trained models to ONNX.</p>
|
||||||
|
<p>There is also a file named <code class="docutils literal notranslate"><span class="pre">onnx_pretrained.py</span></code>, which you can use
|
||||||
|
the exported ONNX model in Python to decode sound files.</p>
|
||||||
|
</section>
|
||||||
|
<section id="example">
|
||||||
|
<h1>Example<a class="headerlink" href="#example" title="Permalink to this heading"></a></h1>
|
||||||
|
<p>In the following, we demonstrate how to export a streaming Zipformer pre-trained
|
||||||
|
model from <a class="reference external" href="python3./python-api-examples/speech-recognition-from-microphone.py">python3./python-api-examples/speech-recognition-from-microphone.py</a>
|
||||||
|
to ONNX.</p>
|
||||||
|
<section id="download-the-pre-trained-model">
|
||||||
|
<h2>Download the pre-trained model<a class="headerlink" href="#download-the-pre-trained-model" title="Permalink to this heading"></a></h2>
|
||||||
<div class="admonition hint">
|
<div class="admonition hint">
|
||||||
<p class="admonition-title">Hint</p>
|
<p class="admonition-title">Hint</p>
|
||||||
<p>Only non-streaming conformer transducer models are tested.</p>
|
<p>We assume you have installed <a class="reference external" href="https://git-lfs.com/">git-lfs</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<section id="when-to-use-it">
|
|
||||||
<h2>When to use it<a class="headerlink" href="#when-to-use-it" title="Permalink to this heading"></a></h2>
|
|
||||||
<p>It you want to use an inference framework that supports ONNX
|
|
||||||
to run the pretrained model.</p>
|
|
||||||
</section>
|
|
||||||
<section id="how-to-export">
|
|
||||||
<h2>How to export<a class="headerlink" href="#how-to-export" title="Permalink to this heading"></a></h2>
|
|
||||||
<p>We use
|
|
||||||
<a class="reference external" href="https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless3">https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless3</a>
|
|
||||||
as an example in the following.</p>
|
|
||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>egs/librispeech/ASR
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>egs/librispeech/ASR
|
||||||
<span class="nv">epoch</span><span class="o">=</span><span class="m">14</span>
|
|
||||||
<span class="nv">avg</span><span class="o">=</span><span class="m">2</span>
|
|
||||||
|
|
||||||
./pruned_transducer_stateless3/export.py<span class="w"> </span><span class="se">\</span>
|
<span class="nv">repo_url</span><span class="o">=</span>https://huggingface.co/Zengwei/icefall-asr-librispeech-pruned-transducer-stateless7-streaming-2022-12-29
|
||||||
<span class="w"> </span>--exp-dir<span class="w"> </span>./pruned_transducer_stateless3/exp<span class="w"> </span><span class="se">\</span>
|
<span class="nv">GIT_LFS_SKIP_SMUDGE</span><span class="o">=</span><span class="m">1</span><span class="w"> </span>git<span class="w"> </span>clone<span class="w"> </span><span class="nv">$repo_url</span>
|
||||||
<span class="w"> </span>--bpe-model<span class="w"> </span>data/lang_bpe_500/bpe.model<span class="w"> </span><span class="se">\</span>
|
<span class="nv">repo</span><span class="o">=</span><span class="k">$(</span>basename<span class="w"> </span><span class="nv">$repo_url</span><span class="k">)</span>
|
||||||
<span class="w"> </span>--epoch<span class="w"> </span><span class="nv">$epoch</span><span class="w"> </span><span class="se">\</span>
|
|
||||||
<span class="w"> </span>--avg<span class="w"> </span><span class="nv">$avg</span><span class="w"> </span><span class="se">\</span>
|
<span class="nb">pushd</span><span class="w"> </span><span class="nv">$repo</span>
|
||||||
<span class="w"> </span>--onnx<span class="w"> </span><span class="m">1</span>
|
git<span class="w"> </span>lfs<span class="w"> </span>pull<span class="w"> </span>--include<span class="w"> </span><span class="s2">"data/lang_bpe_500/bpe.model"</span>
|
||||||
|
git<span class="w"> </span>lfs<span class="w"> </span>pull<span class="w"> </span>--include<span class="w"> </span><span class="s2">"exp/pretrained.pt"</span>
|
||||||
|
<span class="nb">cd</span><span class="w"> </span>exp
|
||||||
|
ln<span class="w"> </span>-s<span class="w"> </span>pretrained.pt<span class="w"> </span>epoch-99.pt
|
||||||
|
<span class="nb">popd</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>It will generate the following files inside <code class="docutils literal notranslate"><span class="pre">pruned_transducer_stateless3/exp</span></code>:</p>
|
</section>
|
||||||
|
<section id="export-the-model-to-onnx">
|
||||||
|
<h2>Export the model to ONNX<a class="headerlink" href="#export-the-model-to-onnx" title="Permalink to this heading"></a></h2>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./pruned_transducer_stateless7_streaming/export-onnx.py<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--bpe-model<span class="w"> </span><span class="nv">$repo</span>/data/lang_bpe_500/bpe.model<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--use-averaged-model<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--epoch<span class="w"> </span><span class="m">99</span><span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--avg<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--decode-chunk-len<span class="w"> </span><span class="m">32</span><span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--exp-dir<span class="w"> </span><span class="nv">$repo</span>/exp/
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">export-onnx.py</span></code> from different recipes has different options.</p>
|
||||||
|
<p>In the above example, <code class="docutils literal notranslate"><span class="pre">--decode-chunk-len</span></code> is specific for the
|
||||||
|
streaming Zipformer. Other models won’t have such an option.</p>
|
||||||
|
</div>
|
||||||
|
<p>It will generate the following 3 files in <code class="docutils literal notranslate"><span class="pre">$repo/exp</span></code></p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<div><ul class="simple">
|
<div><ul class="simple">
|
||||||
<li><p><code class="docutils literal notranslate"><span class="pre">encoder.onnx</span></code></p></li>
|
<li><p><code class="docutils literal notranslate"><span class="pre">encoder-epoch-99-avg-1.onnx</span></code></p></li>
|
||||||
<li><p><code class="docutils literal notranslate"><span class="pre">decoder.onnx</span></code></p></li>
|
<li><p><code class="docutils literal notranslate"><span class="pre">decoder-epoch-99-avg-1.onnx</span></code></p></li>
|
||||||
<li><p><code class="docutils literal notranslate"><span class="pre">joiner.onnx</span></code></p></li>
|
<li><p><code class="docutils literal notranslate"><span class="pre">joiner-epoch-99-avg-1.onnx</span></code></p></li>
|
||||||
<li><p><code class="docutils literal notranslate"><span class="pre">joiner_encoder_proj.onnx</span></code></p></li>
|
|
||||||
<li><p><code class="docutils literal notranslate"><span class="pre">joiner_decoder_proj.onnx</span></code></p></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div></blockquote>
|
</div></blockquote>
|
||||||
<p>You can use <code class="docutils literal notranslate"><span class="pre">./pruned_transducer_stateless3/exp/onnx_pretrained.py</span></code> to decode
|
</section>
|
||||||
waves with the generated files:</p>
|
<section id="decode-sound-files-with-exported-onnx-models">
|
||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./pruned_transducer_stateless3/onnx_pretrained.py<span class="w"> </span><span class="se">\</span>
|
<h2>Decode sound files with exported ONNX models<a class="headerlink" href="#decode-sound-files-with-exported-onnx-models" title="Permalink to this heading"></a></h2>
|
||||||
<span class="w"> </span>--bpe-model<span class="w"> </span>./data/lang_bpe_500/bpe.model<span class="w"> </span><span class="se">\</span>
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./pruned_transducer_stateless7_streaming/onnx_pretrained.py<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--encoder-model-filename<span class="w"> </span>./pruned_transducer_stateless3/exp/encoder.onnx<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--encoder-model-filename<span class="w"> </span><span class="nv">$repo</span>/exp/encoder-epoch-99-avg-1.onnx<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--decoder-model-filename<span class="w"> </span>./pruned_transducer_stateless3/exp/decoder.onnx<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--decoder-model-filename<span class="w"> </span><span class="nv">$repo</span>/exp/decoder-epoch-99-avg-1.onnx<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--joiner-model-filename<span class="w"> </span>./pruned_transducer_stateless3/exp/joiner.onnx<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--joiner-model-filename<span class="w"> </span><span class="nv">$repo</span>/exp/joiner-epoch-99-avg-1.onnx<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--joiner-encoder-proj-model-filename<span class="w"> </span>./pruned_transducer_stateless3/exp/joiner_encoder_proj.onnx<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--tokens<span class="w"> </span><span class="nv">$repo</span>/data/lang_bpe_500/tokens.txt<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--joiner-decoder-proj-model-filename<span class="w"> </span>./pruned_transducer_stateless3/exp/joiner_decoder_proj.onnx<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span><span class="nv">$repo</span>/test_wavs/1089-134686-0001.wav
|
||||||
<span class="w"> </span>/path/to/foo.wav<span class="w"> </span><span class="se">\</span>
|
|
||||||
<span class="w"> </span>/path/to/bar.wav<span class="w"> </span><span class="se">\</span>
|
|
||||||
<span class="w"> </span>/path/to/baz.wav
|
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section id="how-to-use-the-exported-model">
|
|
||||||
<h2>How to use the exported model<a class="headerlink" href="#how-to-use-the-exported-model" title="Permalink to this heading"></a></h2>
|
|
||||||
<p>We also provide <a class="reference external" href="https://github.com/k2-fsa/sherpa-onnx">https://github.com/k2-fsa/sherpa-onnx</a>
|
|
||||||
performing speech recognition using <a class="reference external" href="https://github.com/microsoft/onnxruntime">onnxruntime</a>
|
|
||||||
with exported models.
|
|
||||||
It has been tested on Linux, macOS, and Windows.</p>
|
|
||||||
</section>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#example">Example</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#example">Example</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-trace.html">Export model with torch.jit.trace()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html">Export model with torch.jit.script()</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#example">Example</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@ -110,10 +111,11 @@
|
|||||||
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html#how-to-use-the-exported-model">How to use the exported model</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-with-torch-jit-script.html#how-to-use-the-exported-model">How to use the exported model</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="export-onnx.html">Export to ONNX</a><ul>
|
<li class="toctree-l1"><a class="reference internal" href="export-onnx.html">Export to ONNX</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#when-to-use-it">When to use it</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="export-onnx.html#example">Example</a><ul>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#how-to-export">How to export</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#download-the-pre-trained-model">Download the pre-trained model</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#how-to-use-the-exported-model">How to use the exported model</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#export-the-model-to-onnx">Export the model to ONNX</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="export-onnx.html#decode-sound-files-with-exported-onnx-models">Decode sound files with exported ONNX models</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a><ul>
|
<li class="toctree-l1"><a class="reference internal" href="export-ncnn.html">Export to ncnn</a><ul>
|
||||||
|
@ -641,12 +641,11 @@ for <code class="docutils literal notranslate"><span class="pre">pnnx</span></co
|
|||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nv">iter</span><span class="o">=</span><span class="m">468000</span>
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nv">iter</span><span class="o">=</span><span class="m">468000</span>
|
||||||
<span class="nv">avg</span><span class="o">=</span><span class="m">16</span>
|
<span class="nv">avg</span><span class="o">=</span><span class="m">16</span>
|
||||||
|
|
||||||
./lstm_transducer_stateless2/export.py<span class="w"> </span><span class="se">\</span>
|
./lstm_transducer_stateless2/export-for-ncnn.py<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--exp-dir<span class="w"> </span>./lstm_transducer_stateless2/exp<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--exp-dir<span class="w"> </span>./lstm_transducer_stateless2/exp<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--bpe-model<span class="w"> </span>data/lang_bpe_500/bpe.model<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--bpe-model<span class="w"> </span>data/lang_bpe_500/bpe.model<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--iter<span class="w"> </span><span class="nv">$iter</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--iter<span class="w"> </span><span class="nv">$iter</span><span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--avg<span class="w"> </span><span class="nv">$avg</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--avg<span class="w"> </span><span class="nv">$avg</span>
|
||||||
<span class="w"> </span>--pnnx<span class="w"> </span><span class="m">1</span>
|
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>It will generate 3 files:</p>
|
<p>It will generate 3 files:</p>
|
||||||
@ -676,7 +675,7 @@ for <code class="docutils literal notranslate"><span class="pre">pnnx</span></co
|
|||||||
</div></blockquote>
|
</div></blockquote>
|
||||||
<p>To use the above generated files, run:</p>
|
<p>To use the above generated files, run:</p>
|
||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./lstm_transducer_stateless2/ncnn-decode.py<span class="w"> </span><span class="se">\</span>
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./lstm_transducer_stateless2/ncnn-decode.py<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--bpe-model-filename<span class="w"> </span>./data/lang_bpe_500/bpe.model<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--tokens<span class="w"> </span>./data/lang_bpe_500/tokens.txt<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--encoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--encoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--encoder-bin-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--encoder-bin-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--decoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--decoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
||||||
@ -687,7 +686,7 @@ for <code class="docutils literal notranslate"><span class="pre">pnnx</span></co
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./lstm_transducer_stateless2/streaming-ncnn-decode.py<span class="w"> </span><span class="se">\</span>
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./lstm_transducer_stateless2/streaming-ncnn-decode.py<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--bpe-model-filename<span class="w"> </span>./data/lang_bpe_500/bpe.model<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--tokens<span class="w"> </span>./data/lang_bpe_500/tokens.txt<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--encoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--encoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--encoder-bin-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--encoder-bin-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/encoder_jit_trace-pnnx.ncnn.bin<span class="w"> </span><span class="se">\</span>
|
||||||
<span class="w"> </span>--decoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>--decoder-param-filename<span class="w"> </span>./lstm_transducer_stateless2/exp/decoder_jit_trace-pnnx.ncnn.param<span class="w"> </span><span class="se">\</span>
|
||||||
@ -717,9 +716,6 @@ for the details of the above pretrained models</p>
|
|||||||
</div></blockquote>
|
</div></blockquote>
|
||||||
<p>You can find more usages of the pretrained models in
|
<p>You can find more usages of the pretrained models in
|
||||||
<a class="reference external" href="https://k2-fsa.github.io/sherpa/python/streaming_asr/lstm/index.html">https://k2-fsa.github.io/sherpa/python/streaming_asr/lstm/index.html</a></p>
|
<a class="reference external" href="https://k2-fsa.github.io/sherpa/python/streaming_asr/lstm/index.html">https://k2-fsa.github.io/sherpa/python/streaming_asr/lstm/index.html</a></p>
|
||||||
<section id="export-convemformer-transducer-models-for-ncnn">
|
|
||||||
<h3>Export ConvEmformer transducer models for ncnn<a class="headerlink" href="#export-convemformer-transducer-models-for-ncnn" title="Permalink to this heading"></a></h3>
|
|
||||||
</section>
|
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user