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