From cab0af88d8d671d7a358dbdd1c9645cc4cbafd1d Mon Sep 17 00:00:00 2001
From: 游雁 <zhifu.gzf@alibaba-inc.com>
Date: 星期三, 21 二月 2024 13:47:50 +0800
Subject: [PATCH] bugfix

---
 examples/aishell/conformer/run.sh                        |   12 ++--
 examples/aishell/transformer/infer.sh                    |   12 ++++
 examples/aishell/paraformer/infer.sh                     |   12 ++++
 funasr/train_utils/trainer.py                            |    6 -
 examples/aishell/paraformer/utils/postprocess_text_zh.py |   31 ++++++++++
 examples/aishell/paraformer/run.sh                       |   14 ++--
 examples/aishell/branchformer/infer.sh                   |   12 ++++
 examples/aishell/conformer/infer.sh                      |    4 
 examples/aishell/e_branchformer/infer.sh                 |   12 ++++
 examples/aishell/branchformer/run.sh                     |   17 +++--
 examples/aishell/e_branchformer/run.sh                   |   17 +++--
 examples/aishell/transformer/run.sh                      |   13 ++--
 12 files changed, 120 insertions(+), 42 deletions(-)

diff --git a/examples/aishell/branchformer/infer.sh b/examples/aishell/branchformer/infer.sh
new file mode 100644
index 0000000..bcd4305
--- /dev/null
+++ b/examples/aishell/branchformer/infer.sh
@@ -0,0 +1,12 @@
+
+
+python -m funasr.bin.inference \
+--config-path="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3" \
+--config-name="config.yaml" \
+++init_param="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3/model.pt.ep38" \
+++tokenizer_conf.token_list="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/zh_token_list/char/tokens.txt" \
+++frontend_conf.cmvn_file="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/train/am.mvn" \
+++input="/mnt/nfs/zhifu.gzf/data/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0122.wav" \
+++output_dir="./outputs/debug" \
+++device="cuda:0" \
+
diff --git a/examples/aishell/branchformer/run.sh b/examples/aishell/branchformer/run.sh
index dba8b96..a8c655e 100755
--- a/examples/aishell/branchformer/run.sh
+++ b/examples/aishell/branchformer/run.sh
@@ -43,6 +43,7 @@
 model_dir="baseline_$(basename "${config}" .yaml)_${lang}_${token_type}_${tag}"
 
 
+
 if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then
     echo "stage -1: Data Download"
     mkdir -p ${raw_data}
@@ -85,7 +86,7 @@
 if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
     echo "stage 2: Dictionary Preparation"
     mkdir -p ${feats_dir}/data/${lang}_token_list/$token_type/
-   
+
     echo "make a dictionary"
     echo "<blank>" > ${token_list}
     echo "<s>" >> ${token_list}
@@ -130,7 +131,7 @@
 if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then
   echo "stage 5: Inference"
 
-  if ${inference_device} == "cuda"; then
+  if [ ${inference_device} == "cuda" ]; then
       nj=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}')
   else
       inference_batch_size=1
@@ -142,7 +143,7 @@
 
   for dset in ${test_sets}; do
 
-    inference_dir="${exp_dir}/exp/${model_dir}/${inference_checkpoint}/${dset}"
+    inference_dir="${exp_dir}/exp/${model_dir}/inference-${inference_checkpoint}/${dset}"
     _logdir="${inference_dir}/logdir"
 
     mkdir -p "${_logdir}"
@@ -155,7 +156,7 @@
     done
     utils/split_scp.pl "${key_file}" ${split_scps}
 
-    gpuid_list_array=(${gpuid_list//,/ })
+    gpuid_list_array=(${CUDA_VISIBLE_DEVICES//,/ })
     for JOB in $(seq ${nj}); do
         {
           id=$((JOB-1))
@@ -171,7 +172,7 @@
           ++input="${_logdir}/keys.${JOB}.scp" \
           ++output_dir="${inference_dir}/${JOB}" \
           ++device="${inference_device}" \
-          ++batch_size="${inference_batch_size}"
+          ++batch_size="${inference_batch_size}" &> ${_logdir}/log.${JOB}.txt
         }&
 
     done
@@ -187,10 +188,10 @@
     done
 
     echo "Computing WER ..."
-    cp ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
-    cp ${data_dir}/text ${inference_dir}/1best_recog/text.ref
+    python utils/postprocess_text_zh.py ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
+    python utils/postprocess_text_zh.py  ${data_dir}/text ${inference_dir}/1best_recog/text.ref
     python utils/compute_wer.py ${inference_dir}/1best_recog/text.ref ${inference_dir}/1best_recog/text.proc ${inference_dir}/1best_recog/text.cer
     tail -n 3 ${inference_dir}/1best_recog/text.cer
   done
 
-fi
+fi
\ No newline at end of file
diff --git a/examples/aishell/conformer/infer.sh b/examples/aishell/conformer/infer.sh
index a64df54..bcd4305 100644
--- a/examples/aishell/conformer/infer.sh
+++ b/examples/aishell/conformer/infer.sh
@@ -1,6 +1,6 @@
 
 
-python funasr/bin/inference.py \
+python -m funasr.bin.inference \
 --config-path="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3" \
 --config-name="config.yaml" \
 ++init_param="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3/model.pt.ep38" \
@@ -8,5 +8,5 @@
 ++frontend_conf.cmvn_file="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/train/am.mvn" \
 ++input="/mnt/nfs/zhifu.gzf/data/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0122.wav" \
 ++output_dir="./outputs/debug" \
-++device="cpu" \
+++device="cuda:0" \
 
diff --git a/examples/aishell/conformer/run.sh b/examples/aishell/conformer/run.sh
index 3029cbd..7d6a4f7 100755
--- a/examples/aishell/conformer/run.sh
+++ b/examples/aishell/conformer/run.sh
@@ -14,10 +14,10 @@
 # feature configuration
 nj=32
 
-inference_device="cuda" #"cpu"
+inference_device="cuda" #"cpu", "cuda:0", "cuda:1"
 inference_checkpoint="model.pt"
 inference_scp="wav.scp"
-inference_batch_size=32
+inference_batch_size=1
 
 # data
 raw_data=../raw_data
@@ -142,7 +142,7 @@
 
   for dset in ${test_sets}; do
 
-    inference_dir="${exp_dir}/exp/${model_dir}/${inference_checkpoint}/${dset}"
+    inference_dir="${exp_dir}/exp/${model_dir}/inference-${inference_checkpoint}/${dset}"
     _logdir="${inference_dir}/logdir"
 
     mkdir -p "${_logdir}"
@@ -155,7 +155,7 @@
     done
     utils/split_scp.pl "${key_file}" ${split_scps}
 
-    gpuid_list_array=(${gpuid_list//,/ })
+    gpuid_list_array=(${CUDA_VISIBLE_DEVICES//,/ })
     for JOB in $(seq ${nj}); do
         {
           id=$((JOB-1))
@@ -187,8 +187,8 @@
     done
 
     echo "Computing WER ..."
-    cp ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
-    cp ${data_dir}/text ${inference_dir}/1best_recog/text.ref
+    python utils/postprocess_text_zh.py ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
+    python utils/postprocess_text_zh.py  ${data_dir}/text ${inference_dir}/1best_recog/text.ref
     python utils/compute_wer.py ${inference_dir}/1best_recog/text.ref ${inference_dir}/1best_recog/text.proc ${inference_dir}/1best_recog/text.cer
     tail -n 3 ${inference_dir}/1best_recog/text.cer
   done
diff --git a/examples/aishell/e_branchformer/infer.sh b/examples/aishell/e_branchformer/infer.sh
new file mode 100644
index 0000000..bcd4305
--- /dev/null
+++ b/examples/aishell/e_branchformer/infer.sh
@@ -0,0 +1,12 @@
+
+
+python -m funasr.bin.inference \
+--config-path="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3" \
+--config-name="config.yaml" \
+++init_param="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3/model.pt.ep38" \
+++tokenizer_conf.token_list="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/zh_token_list/char/tokens.txt" \
+++frontend_conf.cmvn_file="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/train/am.mvn" \
+++input="/mnt/nfs/zhifu.gzf/data/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0122.wav" \
+++output_dir="./outputs/debug" \
+++device="cuda:0" \
+
diff --git a/examples/aishell/e_branchformer/run.sh b/examples/aishell/e_branchformer/run.sh
index ed765b8..c7cae87 100755
--- a/examples/aishell/e_branchformer/run.sh
+++ b/examples/aishell/e_branchformer/run.sh
@@ -43,6 +43,7 @@
 model_dir="baseline_$(basename "${config}" .yaml)_${lang}_${token_type}_${tag}"
 
 
+
 if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then
     echo "stage -1: Data Download"
     mkdir -p ${raw_data}
@@ -85,7 +86,7 @@
 if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
     echo "stage 2: Dictionary Preparation"
     mkdir -p ${feats_dir}/data/${lang}_token_list/$token_type/
-   
+
     echo "make a dictionary"
     echo "<blank>" > ${token_list}
     echo "<s>" >> ${token_list}
@@ -130,7 +131,7 @@
 if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then
   echo "stage 5: Inference"
 
-  if ${inference_device} == "cuda"; then
+  if [ ${inference_device} == "cuda" ]; then
       nj=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}')
   else
       inference_batch_size=1
@@ -142,7 +143,7 @@
 
   for dset in ${test_sets}; do
 
-    inference_dir="${exp_dir}/exp/${model_dir}/${inference_checkpoint}/${dset}"
+    inference_dir="${exp_dir}/exp/${model_dir}/inference-${inference_checkpoint}/${dset}"
     _logdir="${inference_dir}/logdir"
 
     mkdir -p "${_logdir}"
@@ -155,7 +156,7 @@
     done
     utils/split_scp.pl "${key_file}" ${split_scps}
 
-    gpuid_list_array=(${gpuid_list//,/ })
+    gpuid_list_array=(${CUDA_VISIBLE_DEVICES//,/ })
     for JOB in $(seq ${nj}); do
         {
           id=$((JOB-1))
@@ -171,7 +172,7 @@
           ++input="${_logdir}/keys.${JOB}.scp" \
           ++output_dir="${inference_dir}/${JOB}" \
           ++device="${inference_device}" \
-          ++batch_size="${inference_batch_size}"
+          ++batch_size="${inference_batch_size}" &> ${_logdir}/log.${JOB}.txt
         }&
 
     done
@@ -187,10 +188,10 @@
     done
 
     echo "Computing WER ..."
-    cp ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
-    cp ${data_dir}/text ${inference_dir}/1best_recog/text.ref
+    python utils/postprocess_text_zh.py ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
+    python utils/postprocess_text_zh.py  ${data_dir}/text ${inference_dir}/1best_recog/text.ref
     python utils/compute_wer.py ${inference_dir}/1best_recog/text.ref ${inference_dir}/1best_recog/text.proc ${inference_dir}/1best_recog/text.cer
     tail -n 3 ${inference_dir}/1best_recog/text.cer
   done
 
-fi
+fi
\ No newline at end of file
diff --git a/examples/aishell/paraformer/infer.sh b/examples/aishell/paraformer/infer.sh
new file mode 100644
index 0000000..bcd4305
--- /dev/null
+++ b/examples/aishell/paraformer/infer.sh
@@ -0,0 +1,12 @@
+
+
+python -m funasr.bin.inference \
+--config-path="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3" \
+--config-name="config.yaml" \
+++init_param="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3/model.pt.ep38" \
+++tokenizer_conf.token_list="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/zh_token_list/char/tokens.txt" \
+++frontend_conf.cmvn_file="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/train/am.mvn" \
+++input="/mnt/nfs/zhifu.gzf/data/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0122.wav" \
+++output_dir="./outputs/debug" \
+++device="cuda:0" \
+
diff --git a/examples/aishell/paraformer/run.sh b/examples/aishell/paraformer/run.sh
index d6f1a2c..0f41efe 100755
--- a/examples/aishell/paraformer/run.sh
+++ b/examples/aishell/paraformer/run.sh
@@ -130,7 +130,7 @@
 if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then
   echo "stage 5: Inference"
 
-  if ${inference_device} == "cuda"; then
+  if [ ${inference_device} == "cuda" ]; then
       nj=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}')
   else
       inference_batch_size=1
@@ -142,7 +142,7 @@
 
   for dset in ${test_sets}; do
 
-    inference_dir="${exp_dir}/exp/${model_dir}/${inference_checkpoint}/${dset}"
+    inference_dir="${exp_dir}/exp/${model_dir}/inference-${inference_checkpoint}/${dset}"
     _logdir="${inference_dir}/logdir"
 
     mkdir -p "${_logdir}"
@@ -155,7 +155,7 @@
     done
     utils/split_scp.pl "${key_file}" ${split_scps}
 
-    gpuid_list_array=(${gpuid_list//,/ })
+    gpuid_list_array=(${CUDA_VISIBLE_DEVICES//,/ })
     for JOB in $(seq ${nj}); do
         {
           id=$((JOB-1))
@@ -171,7 +171,7 @@
           ++input="${_logdir}/keys.${JOB}.scp" \
           ++output_dir="${inference_dir}/${JOB}" \
           ++device="${inference_device}" \
-          ++batch_size="${inference_batch_size}"
+          ++batch_size="${inference_batch_size}" &> ${_logdir}/log.${JOB}.txt
         }&
 
     done
@@ -187,10 +187,10 @@
     done
 
     echo "Computing WER ..."
-    cp ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
-    cp ${data_dir}/text ${inference_dir}/1best_recog/text.ref
+    python utils/postprocess_text_zh.py ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
+    python utils/postprocess_text_zh.py  ${data_dir}/text ${inference_dir}/1best_recog/text.ref
     python utils/compute_wer.py ${inference_dir}/1best_recog/text.ref ${inference_dir}/1best_recog/text.proc ${inference_dir}/1best_recog/text.cer
     tail -n 3 ${inference_dir}/1best_recog/text.cer
   done
 
-fi
+fi
\ No newline at end of file
diff --git a/examples/aishell/paraformer/utils/postprocess_text_zh.py b/examples/aishell/paraformer/utils/postprocess_text_zh.py
new file mode 100755
index 0000000..9e517a4
--- /dev/null
+++ b/examples/aishell/paraformer/utils/postprocess_text_zh.py
@@ -0,0 +1,31 @@
+
+import sys
+import re
+
+in_f = sys.argv[1]
+out_f = sys.argv[2]
+
+
+with open(in_f, "r", encoding="utf-8") as f:
+  lines = f.readlines()
+
+with open(out_f, "w", encoding="utf-8") as f:
+  for line in lines:
+    outs = line.strip().split(" ", 1)
+    if len(outs) == 2:
+      idx, text = outs
+      text = re.sub("</s>", "", text)
+      text = re.sub("<s>", "", text)
+      text = re.sub("@@", "", text)
+      text = re.sub("@", "", text)
+      text = re.sub("<unk>", "", text)
+      text = re.sub(" ", "", text)
+      text = text.lower()
+    else:
+      idx = outs[0]
+      text = " "
+
+    text = [x for x in text]
+    text = " ".join(text)
+    out = "{} {}\n".format(idx, text)
+    f.write(out)
diff --git a/examples/aishell/transformer/infer.sh b/examples/aishell/transformer/infer.sh
new file mode 100644
index 0000000..bcd4305
--- /dev/null
+++ b/examples/aishell/transformer/infer.sh
@@ -0,0 +1,12 @@
+
+
+python -m funasr.bin.inference \
+--config-path="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3" \
+--config-name="config.yaml" \
+++init_param="/mnt/workspace/FunASR/examples/aishell/paraformer/exp/baseline_paraformer_conformer_12e_6d_2048_256_zh_char_exp3/model.pt.ep38" \
+++tokenizer_conf.token_list="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/zh_token_list/char/tokens.txt" \
+++frontend_conf.cmvn_file="/mnt/nfs/zhifu.gzf/data/AISHELL-1-feats/DATA/data/train/am.mvn" \
+++input="/mnt/nfs/zhifu.gzf/data/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0122.wav" \
+++output_dir="./outputs/debug" \
+++device="cuda:0" \
+
diff --git a/examples/aishell/transformer/run.sh b/examples/aishell/transformer/run.sh
index 3a02161..c0ff433 100755
--- a/examples/aishell/transformer/run.sh
+++ b/examples/aishell/transformer/run.sh
@@ -43,6 +43,7 @@
 model_dir="baseline_$(basename "${config}" .yaml)_${lang}_${token_type}_${tag}"
 
 
+
 if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then
     echo "stage -1: Data Download"
     mkdir -p ${raw_data}
@@ -85,7 +86,7 @@
 if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
     echo "stage 2: Dictionary Preparation"
     mkdir -p ${feats_dir}/data/${lang}_token_list/$token_type/
-   
+
     echo "make a dictionary"
     echo "<blank>" > ${token_list}
     echo "<s>" >> ${token_list}
@@ -142,7 +143,7 @@
 
   for dset in ${test_sets}; do
 
-    inference_dir="${exp_dir}/exp/${model_dir}/infer-${inference_checkpoint}/${dset}"
+    inference_dir="${exp_dir}/exp/${model_dir}/inference-${inference_checkpoint}/${dset}"
     _logdir="${inference_dir}/logdir"
 
     mkdir -p "${_logdir}"
@@ -171,7 +172,7 @@
           ++input="${_logdir}/keys.${JOB}.scp" \
           ++output_dir="${inference_dir}/${JOB}" \
           ++device="${inference_device}" \
-          ++batch_size="${inference_batch_size}"
+          ++batch_size="${inference_batch_size}" &> ${_logdir}/log.${JOB}.txt
         }&
 
     done
@@ -187,10 +188,10 @@
     done
 
     echo "Computing WER ..."
-    cp ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
-    cp ${data_dir}/text ${inference_dir}/1best_recog/text.ref
+    python utils/postprocess_text_zh.py ${inference_dir}/1best_recog/text ${inference_dir}/1best_recog/text.proc
+    python utils/postprocess_text_zh.py  ${data_dir}/text ${inference_dir}/1best_recog/text.ref
     python utils/compute_wer.py ${inference_dir}/1best_recog/text.ref ${inference_dir}/1best_recog/text.proc ${inference_dir}/1best_recog/text.cer
     tail -n 3 ${inference_dir}/1best_recog/text.cer
   done
 
-fi
+fi
\ No newline at end of file
diff --git a/funasr/train_utils/trainer.py b/funasr/train_utils/trainer.py
index 4b85a66..61b9004 100644
--- a/funasr/train_utils/trainer.py
+++ b/funasr/train_utils/trainer.py
@@ -109,12 +109,8 @@
         
         print(f'Checkpoint saved to {filename}')
         latest = Path(os.path.join(self.output_dir, f'model.pt'))
-        try:
-            latest.unlink()
-        except:
-            pass
+        torch.save(state, latest)
 
-        latest.symlink_to(filename)
     
     def _resume_checkpoint(self, resume_path):
         """

--
Gitblit v1.9.1