| | #!/usr/bin/env bash |
| |
|
| | set -ex |
| |
|
| | log() { |
| | |
| | local fname=${BASH_SOURCE[1]##*/} |
| | echo -e "$(date '+%Y-%m-%d %H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*" |
| | } |
| |
|
| | cd egs/aishell/ASR |
| |
|
| | function download_test_dev_manifests() { |
| | git lfs install |
| |
|
| | fbank_url=https://huggingface.co/csukuangfj/aishell-test-dev-manifests |
| | log "Downloading pre-commputed fbank from $fbank_url" |
| |
|
| | git clone https://huggingface.co/csukuangfj/aishell-test-dev-manifests |
| | ln -s $PWD/aishell-test-dev-manifests/data . |
| | } |
| |
|
| | function test_transducer_stateless3_2022_06_20() { |
| | repo_url=https://huggingface.co/csukuangfj/icefall-aishell-pruned-transducer-stateless3-2022-06-20 |
| | log "Downloading pre-trained model from $repo_url" |
| | git clone $repo_url |
| | repo=$(basename $repo_url) |
| |
|
| | log "Display test files" |
| | tree $repo/ |
| | ls -lh $repo/test_wavs/*.wav |
| |
|
| | pushd $repo/exp |
| | ln -s pretrained-epoch-29-avg-5-torch-1.10.0.pt pretrained.pt |
| | popd |
| |
|
| | log "test greedy_search with pretrained.py" |
| |
|
| | for sym in 1 2 3; do |
| | log "Greedy search with --max-sym-per-frame $sym" |
| |
|
| | ./pruned_transducer_stateless3/pretrained.py \ |
| | --method greedy_search \ |
| | --max-sym-per-frame $sym \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --lang-dir $repo/data/lang_char \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| |
|
| | log "test beam search with pretrained.py" |
| |
|
| | for method in modified_beam_search beam_search fast_beam_search; do |
| | log "$method" |
| |
|
| | ./pruned_transducer_stateless3/pretrained.py \ |
| | --method $method \ |
| | --beam-size 4 \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --lang-dir $repo/data/lang_char \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| |
|
| | echo "GITHUB_EVENT_NAME: ${GITHUB_EVENT_NAME}" |
| | echo "GITHUB_EVENT_LABEL_NAME: ${GITHUB_EVENT_LABEL_NAME}" |
| | if [[ x"${GITHUB_EVENT_NAME}" == x"schedule" || x"${GITHUB_EVENT_LABEL_NAME}" == x"run-decode" ]]; then |
| | mkdir -p pruned_transducer_stateless3/exp |
| | ln -s $PWD/$repo/exp/pretrained.pt pruned_transducer_stateless3/exp/epoch-999.pt |
| | ln -s $PWD/$repo/data/lang_char data/ |
| |
|
| | ls -lh data |
| | ls -lh pruned_transducer_stateless3/exp |
| |
|
| | log "Decoding test and dev" |
| |
|
| | |
| | max_duration=100 |
| |
|
| | for method in greedy_search fast_beam_search modified_beam_search; do |
| | log "Decoding with $method" |
| |
|
| | ./pruned_transducer_stateless3/decode.py \ |
| | --decoding-method $method \ |
| | --epoch 999 \ |
| | --avg 1 \ |
| | --max-duration $max_duration \ |
| | --exp-dir pruned_transducer_stateless3/exp |
| | done |
| |
|
| | rm pruned_transducer_stateless3/exp/*.pt |
| | fi |
| |
|
| | rm -rf $repo |
| | } |
| |
|
| | function test_zipformer_large_2023_10_24() { |
| | log "CI testing large model" |
| | repo_url=https://huggingface.co/zrjin/icefall-asr-aishell-zipformer-large-2023-10-24/ |
| | log "Downloading pre-trained model from $repo_url" |
| | git clone $repo_url |
| | repo=$(basename $repo_url) |
| |
|
| | log "Display test files" |
| | tree $repo/ |
| | ls -lh $repo/test_wavs/*.wav |
| |
|
| | for method in modified_beam_search greedy_search fast_beam_search; do |
| | log "$method" |
| |
|
| | ./zipformer/pretrained.py \ |
| | --method $method \ |
| | --context-size 1 \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --tokens $repo/data/lang_char/tokens.txt \ |
| | --num-encoder-layers 2,2,4,5,4,2 \ |
| | --feedforward-dim 512,768,1536,2048,1536,768 \ |
| | --encoder-dim 192,256,512,768,512,256 \ |
| | --encoder-unmasked-dim 192,192,256,320,256,192 \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| | rm -rf $repo |
| | } |
| |
|
| | function test_zipformer_2023_10_24() { |
| | repo_url=https://huggingface.co/zrjin/icefall-asr-aishell-zipformer-2023-10-24/ |
| | log "Downloading pre-trained model from $repo_url" |
| | git clone $repo_url |
| | repo=$(basename $repo_url) |
| |
|
| | log "Display test files" |
| | tree $repo/ |
| | ls -lh $repo/test_wavs/*.wav |
| |
|
| |
|
| | for method in modified_beam_search greedy_search fast_beam_search; do |
| | log "$method" |
| |
|
| | ./zipformer/pretrained.py \ |
| | --method $method \ |
| | --context-size 1 \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --tokens $repo/data/lang_char/tokens.txt \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| | rm -rf $repo |
| | } |
| |
|
| | function test_zipformer_small_2023_10_24() { |
| | log "CI testing small model" |
| | repo_url=https://huggingface.co/zrjin/icefall-asr-aishell-zipformer-small-2023-10-24/ |
| | log "Downloading pre-trained model from $repo_url" |
| | git clone $repo_url |
| | repo=$(basename $repo_url) |
| |
|
| | log "Display test files" |
| | tree $repo/ |
| | ls -lh $repo/test_wavs/*.wav |
| |
|
| |
|
| | for method in modified_beam_search greedy_search fast_beam_search; do |
| | log "$method" |
| |
|
| | ./zipformer/pretrained.py \ |
| | --method $method \ |
| | --context-size 1 \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --tokens $repo/data/lang_char/tokens.txt \ |
| | --num-encoder-layers 2,2,2,2,2,2 \ |
| | --feedforward-dim 512,768,768,768,768,768 \ |
| | --encoder-dim 192,256,256,256,256,256 \ |
| | --encoder-unmasked-dim 192,192,192,192,192,192 \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| | rm -rf $repo |
| | } |
| |
|
| | function test_transducer_stateless_modified_2022_03_01() { |
| | repo_url=https://huggingface.co/csukuangfj/icefall-aishell-transducer-stateless-modified-2022-03-01 |
| |
|
| | log "Downloading pre-trained model from $repo_url" |
| | git lfs install |
| | git clone $repo_url |
| | repo=$(basename $repo_url) |
| |
|
| | log "Display test files" |
| | tree $repo/ |
| | ls -lh $repo/test_wavs/*.wav |
| |
|
| | for sym in 1 2 3; do |
| | log "Greedy search with --max-sym-per-frame $sym" |
| |
|
| | ./transducer_stateless_modified/pretrained.py \ |
| | --method greedy_search \ |
| | --max-sym-per-frame $sym \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --lang-dir $repo/data/lang_char \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| |
|
| | for method in modified_beam_search beam_search; do |
| | log "$method" |
| |
|
| | ./transducer_stateless_modified/pretrained.py \ |
| | --method $method \ |
| | --beam-size 4 \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --lang-dir $repo/data/lang_char \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| | rm -rf $repo |
| | } |
| |
|
| | function test_transducer_stateless_modified_2_2022_03_01() { |
| | repo_url=https://huggingface.co/csukuangfj/icefall-aishell-transducer-stateless-modified-2-2022-03-01 |
| |
|
| | log "Downloading pre-trained model from $repo_url" |
| | git lfs install |
| | git clone $repo_url |
| | repo=$(basename $repo_url) |
| |
|
| | log "Display test files" |
| | tree $repo/ |
| | ls -lh $repo/test_wavs/*.wav |
| |
|
| | for sym in 1 2 3; do |
| | log "Greedy search with --max-sym-per-frame $sym" |
| |
|
| | ./transducer_stateless_modified-2/pretrained.py \ |
| | --method greedy_search \ |
| | --max-sym-per-frame $sym \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --lang-dir $repo/data/lang_char \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| |
|
| | for method in modified_beam_search beam_search; do |
| | log "$method" |
| |
|
| | ./transducer_stateless_modified-2/pretrained.py \ |
| | --method $method \ |
| | --beam-size 4 \ |
| | --checkpoint $repo/exp/pretrained.pt \ |
| | --lang-dir $repo/data/lang_char \ |
| | $repo/test_wavs/BAC009S0764W0121.wav \ |
| | $repo/test_wavs/BAC009S0764W0122.wav \ |
| | $repo/test_wavs/BAC009S0764W0123.wav |
| | done |
| | rm -rf $repo |
| | } |
| |
|
| | function test_conformer_ctc() { |
| | repo_url=https://huggingface.co/csukuangfj/icefall_asr_aishell_conformer_ctc |
| | log "Downloading pre-trained model from $repo_url" |
| | GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url |
| | repo=$(basename $repo_url) |
| | pushd $repo |
| |
|
| | git lfs pull --include "exp/pretrained.pt" |
| | git lfs pull --include "data/lang_char/H.fst" |
| | git lfs pull --include "data/lang_char/HL.fst" |
| | git lfs pull --include "data/lang_char/HLG.fst" |
| |
|
| | popd |
| |
|
| | log "Display test files" |
| | tree $repo/ |
| | ls -lh $repo/test_wavs/*.wav |
| |
|
| | log "CTC decoding" |
| |
|
| | log "Exporting model with torchscript" |
| |
|
| | pushd $repo/exp |
| | ln -s pretrained.pt epoch-99.pt |
| | popd |
| |
|
| | ./conformer_ctc/export.py \ |
| | --epoch 99 \ |
| | --avg 1 \ |
| | --exp-dir $repo/exp \ |
| | --tokens $repo/data/lang_char/tokens.txt \ |
| | --jit 1 |
| |
|
| | ls -lh $repo/exp |
| |
|
| | ls -lh $repo/data/lang_char |
| |
|
| | log "Decoding with H on CPU with OpenFst" |
| |
|
| | ./conformer_ctc/jit_pretrained_decode_with_H.py \ |
| | --nn-model $repo/exp/cpu_jit.pt \ |
| | --H $repo/data/lang_char/H.fst \ |
| | --tokens $repo/data/lang_char/tokens.txt \ |
| | $repo/test_wavs/0.wav \ |
| | $repo/test_wavs/1.wav \ |
| | $repo/test_wavs/2.wav |
| |
|
| | log "Decoding with HL on CPU with OpenFst" |
| |
|
| | ./conformer_ctc/jit_pretrained_decode_with_HL.py \ |
| | --nn-model $repo/exp/cpu_jit.pt \ |
| | --HL $repo/data/lang_char/HL.fst \ |
| | --words $repo/data/lang_char/words.txt \ |
| | $repo/test_wavs/0.wav \ |
| | $repo/test_wavs/1.wav \ |
| | $repo/test_wavs/2.wav |
| |
|
| | log "Decoding with HLG on CPU with OpenFst" |
| |
|
| | ./conformer_ctc/jit_pretrained_decode_with_HLG.py \ |
| | --nn-model $repo/exp/cpu_jit.pt \ |
| | --HLG $repo/data/lang_char/HLG.fst \ |
| | --words $repo/data/lang_char/words.txt \ |
| | $repo/test_wavs/0.wav \ |
| | $repo/test_wavs/1.wav \ |
| | $repo/test_wavs/2.wav |
| |
|
| | rm -rf $repo |
| | } |
| |
|
| | download_test_dev_manifests |
| | test_transducer_stateless3_2022_06_20 |
| | test_zipformer_large_2023_10_24 |
| | test_zipformer_2023_10_24 |
| | test_zipformer_small_2023_10_24 |
| | test_transducer_stateless_modified_2022_03_01 |
| | test_transducer_stateless_modified_2_2022_03_01 |
| | |
| |
|