parent
09ab9f717e
commit
b69021f9e6
@ -1,50 +0,0 @@
|
|||||||
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
"""Inferer for DeepSpeech2 model."""
|
|
||||||
from deepspeech.exps.deepspeech2.config import get_cfg_defaults
|
|
||||||
from deepspeech.exps.deepspeech2.model import DeepSpeech2Tester as Tester
|
|
||||||
from deepspeech.training.cli import default_argument_parser
|
|
||||||
from deepspeech.utils.utility import print_arguments
|
|
||||||
|
|
||||||
# TODO(hui zhang): dynamic load
|
|
||||||
|
|
||||||
|
|
||||||
def main_sp(config, args):
|
|
||||||
exp = Tester(config, args)
|
|
||||||
exp.setup()
|
|
||||||
exp.run_test()
|
|
||||||
|
|
||||||
|
|
||||||
def main(config, args):
|
|
||||||
main_sp(config, args)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = default_argument_parser()
|
|
||||||
args = parser.parse_args()
|
|
||||||
print_arguments(args, globals())
|
|
||||||
|
|
||||||
# https://yaml.org/type/float.html
|
|
||||||
config = get_cfg_defaults()
|
|
||||||
if args.config:
|
|
||||||
config.merge_from_file(args.config)
|
|
||||||
if args.opts:
|
|
||||||
config.merge_from_list(args.opts)
|
|
||||||
config.freeze()
|
|
||||||
print(config)
|
|
||||||
if args.dump_config:
|
|
||||||
with open(args.dump_config, 'w') as f:
|
|
||||||
print(config, file=f)
|
|
||||||
|
|
||||||
main(config, args)
|
|
@ -0,0 +1,23 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
if [ $# != 2 ];then
|
||||||
|
echo "usage: ${0} ckpt_dir avg_num"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ckpt_dir=${1}
|
||||||
|
average_num=${2}
|
||||||
|
decode_checkpoint=${ckpt_dir}/avg_${average_num}.pdparams
|
||||||
|
|
||||||
|
python3 -u ${MAIN_ROOT}/utils/avg_model.py \
|
||||||
|
--dst_model ${decode_checkpoint} \
|
||||||
|
--ckpt_dir ${ckpt_dir} \
|
||||||
|
--num ${average_num} \
|
||||||
|
--val_best
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Failed in avg ckpt!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
@ -1,23 +1,32 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
# train model
|
if [ $# != 2 ];then
|
||||||
# if you wish to resume from an exists model, uncomment --init_from_pretrained_model
|
echo "usage: CUDA_VISIBLE_DEVICES=0 ${0} config_path ckpt_name"
|
||||||
#export FLAGS_sync_nccl_allreduce=0
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
ngpu=$(echo ${CUDA_VISIBLE_DEVICES} | python -c 'import sys; a = sys.stdin.read(); print(len(a.split(",")));')
|
ngpu=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}')
|
||||||
echo "using $ngpu gpus..."
|
echo "using $ngpu gpus..."
|
||||||
|
|
||||||
|
config_path=$1
|
||||||
|
ckpt_name=$2
|
||||||
|
|
||||||
|
device=gpu
|
||||||
|
if [ ngpu == 0 ];then
|
||||||
|
device=cpu
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p exp
|
||||||
|
|
||||||
python3 -u ${BIN_DIR}/train.py \
|
python3 -u ${BIN_DIR}/train.py \
|
||||||
--device 'gpu' \
|
--device ${device} \
|
||||||
--nproc ${ngpu} \
|
--nproc ${ngpu} \
|
||||||
--config conf/deepspeech2.yaml \
|
--config ${config_path} \
|
||||||
--output ckpt-${1}
|
--output exp/${ckpt_name}
|
||||||
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Failed in training!"
|
echo "Failed in training!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -1,19 +1,38 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
source path.sh
|
source path.sh
|
||||||
# only demos
|
|
||||||
|
|
||||||
# prepare data
|
gpus=0
|
||||||
bash ./local/data.sh
|
stage=0
|
||||||
|
stop_stage=100
|
||||||
|
conf_path=conf/deepspeech2.yaml
|
||||||
|
ckpt=$(basename ${conf_path} | awk -F'.' '{print $1}')
|
||||||
|
avg_num=1
|
||||||
|
avg_ckpt=avg_${avg_num}
|
||||||
|
|
||||||
|
source ${MAIN_ROOT}/utils/parse_options.sh || exit 1;
|
||||||
|
|
||||||
|
if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
|
||||||
|
# prepare data
|
||||||
|
bash ./local/data.sh || exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
# train model
|
if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
|
||||||
CUDA_VISIBLE_DEVICES=0,1,2,3 bash ./local/train.sh baseline
|
# train model, all `ckpt` under `exp` dir
|
||||||
|
CUDA_VISIBLE_DEVICES=${gpus} ./local/train.sh ${conf_path} ${ckpt}
|
||||||
|
fi
|
||||||
|
|
||||||
# test model
|
if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
|
||||||
CUDA_VISIBLE_DEVICES=0 bash ./local/test.sh
|
# avg n best model
|
||||||
|
./local/avg.sh exp/${ckpt}/checkpoints ${avg_num}
|
||||||
|
fi
|
||||||
|
|
||||||
# infer model
|
if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then
|
||||||
CUDA_VISIBLE_DEVICES=0 bash ./local/infer.sh ckpt/checkpoints/step-3284
|
# test ckpt avg_n
|
||||||
|
CUDA_VISIBLE_DEVICES=${gpus} ./local/test.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} || exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
# export model
|
if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ]; then
|
||||||
bash ./local/export.sh ckpt/checkpoints/step-3284 jit.model
|
# export ckpt avg_n
|
||||||
|
CUDA_VISIBLE_DEVICES=${gpus} ./local/export.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} exp/${ckpt}/checkpoints/${avg_ckpt}.jit
|
||||||
|
fi
|
||||||
|
@ -1 +0,0 @@
|
|||||||
../../s0/local/data.sh
|
|
@ -0,0 +1,86 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
stage=-1
|
||||||
|
stop_stage=100
|
||||||
|
|
||||||
|
source ${MAIN_ROOT}/utils/parse_options.sh
|
||||||
|
|
||||||
|
mkdir -p data
|
||||||
|
TARGET_DIR=${MAIN_ROOT}/examples/dataset
|
||||||
|
mkdir -p ${TARGET_DIR}
|
||||||
|
|
||||||
|
if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then
|
||||||
|
# download data, generate manifests
|
||||||
|
python3 ${TARGET_DIR}/aishell/aishell.py \
|
||||||
|
--manifest_prefix="data/manifest" \
|
||||||
|
--target_dir="${TARGET_DIR}/aishell"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Prepare Aishell failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for dataset in train dev test; do
|
||||||
|
mv data/manifest.${dataset} data/manifest.${dataset}.raw
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
|
||||||
|
# download data, generate manifests
|
||||||
|
# build vocabulary
|
||||||
|
python3 ${MAIN_ROOT}/utils/build_vocab.py \
|
||||||
|
--unit_type="char" \
|
||||||
|
--count_threshold=0 \
|
||||||
|
--vocab_path="data/vocab.txt" \
|
||||||
|
--manifest_paths "data/manifest.train.raw"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Build vocabulary failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
|
||||||
|
# compute mean and stddev for normalizer
|
||||||
|
num_workers=$(nproc)
|
||||||
|
python3 ${MAIN_ROOT}/utils/compute_mean_std.py \
|
||||||
|
--manifest_path="data/manifest.train.raw" \
|
||||||
|
--specgram_type="fbank" \
|
||||||
|
--feat_dim=80 \
|
||||||
|
--delta_delta=false \
|
||||||
|
--stride_ms=10.0 \
|
||||||
|
--window_ms=25.0 \
|
||||||
|
--sample_rate=16000 \
|
||||||
|
--use_dB_normalization=False \
|
||||||
|
--num_samples=-1 \
|
||||||
|
--num_workers=${num_workers} \
|
||||||
|
--output_path="data/mean_std.json"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Compute mean and stddev failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
|
||||||
|
# format manifest with tokenids, vocab size
|
||||||
|
for dataset in train dev test; do
|
||||||
|
python3 ${MAIN_ROOT}/utils/format_data.py \
|
||||||
|
--feat_type "raw" \
|
||||||
|
--cmvn_path "data/mean_std.json" \
|
||||||
|
--unit_type "char" \
|
||||||
|
--vocab_path="data/vocab.txt" \
|
||||||
|
--manifest_path="data/manifest.${dataset}.raw" \
|
||||||
|
--output_path="data/manifest.${dataset}"
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Formt mnaifest failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Aishell data preparation done."
|
||||||
|
exit 0
|
@ -0,0 +1,23 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
if [ $# != 2 ];then
|
||||||
|
echo "usage: ${0} ckpt_dir avg_num"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ckpt_dir=${1}
|
||||||
|
average_num=${2}
|
||||||
|
decode_checkpoint=${ckpt_dir}/avg_${average_num}.pdparams
|
||||||
|
|
||||||
|
python3 -u ${MAIN_ROOT}/utils/avg_model.py \
|
||||||
|
--dst_model ${decode_checkpoint} \
|
||||||
|
--ckpt_dir ${ckpt_dir} \
|
||||||
|
--num ${average_num} \
|
||||||
|
--val_best
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Failed in avg ckpt!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
@ -0,0 +1,3 @@
|
|||||||
|
data
|
||||||
|
exp
|
||||||
|
*log
|
@ -0,0 +1,23 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
if [ $# != 2 ];then
|
||||||
|
echo "usage: ${0} ckpt_dir avg_num"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ckpt_dir=${1}
|
||||||
|
average_num=${2}
|
||||||
|
decode_checkpoint=${ckpt_dir}/avg_${average_num}.pdparams
|
||||||
|
|
||||||
|
python3 -u ${MAIN_ROOT}/utils/avg_model.py \
|
||||||
|
--dst_model ${decode_checkpoint} \
|
||||||
|
--ckpt_dir ${ckpt_dir} \
|
||||||
|
--num ${average_num} \
|
||||||
|
--val_best
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Failed in avg ckpt!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
@ -1 +0,0 @@
|
|||||||
../../s0/local/data.sh
|
|
@ -0,0 +1,90 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
stage=-1
|
||||||
|
stop_stage=100
|
||||||
|
|
||||||
|
# bpemode (unigram or bpe)
|
||||||
|
nbpe=200
|
||||||
|
bpemode=unigram
|
||||||
|
bpeprefix="data/bpe_${bpemode}_${nbpe}"
|
||||||
|
|
||||||
|
source ${MAIN_ROOT}/utils/parse_options.sh
|
||||||
|
|
||||||
|
mkdir -p data
|
||||||
|
TARGET_DIR=${MAIN_ROOT}/examples/dataset
|
||||||
|
mkdir -p ${TARGET_DIR}
|
||||||
|
|
||||||
|
if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then
|
||||||
|
# download data, generate manifests
|
||||||
|
python3 ${TARGET_DIR}/librispeech/librispeech.py \
|
||||||
|
--manifest_prefix="data/manifest" \
|
||||||
|
--target_dir="${TARGET_DIR}/librispeech" \
|
||||||
|
--full_download="False"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Prepare LibriSpeech failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
head -n 64 data/manifest.dev-clean > data/manifest.tiny.raw
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
|
||||||
|
# build vocabulary
|
||||||
|
python3 ${MAIN_ROOT}/utils/build_vocab.py \
|
||||||
|
--unit_type "spm" \
|
||||||
|
--spm_vocab_size=${nbpe} \
|
||||||
|
--spm_mode ${bpemode} \
|
||||||
|
--spm_model_prefix ${bpeprefix} \
|
||||||
|
--vocab_path="data/vocab.txt" \
|
||||||
|
--manifest_paths="data/manifest.tiny.raw"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Build vocabulary failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
|
||||||
|
# compute mean and stddev for normalizer
|
||||||
|
python3 ${MAIN_ROOT}/utils/compute_mean_std.py \
|
||||||
|
--manifest_path="data/manifest.tiny.raw" \
|
||||||
|
--num_samples=64 \
|
||||||
|
--specgram_type="fbank" \
|
||||||
|
--feat_dim=80 \
|
||||||
|
--delta_delta=false \
|
||||||
|
--sample_rate=16000 \
|
||||||
|
--stride_ms=10.0 \
|
||||||
|
--window_ms=25.0 \
|
||||||
|
--use_dB_normalization=False \
|
||||||
|
--num_workers=2 \
|
||||||
|
--output_path="data/mean_std.json"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Compute mean and stddev failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
|
||||||
|
# format manifest with tokenids, vocab size
|
||||||
|
python3 ${MAIN_ROOT}/utils/format_data.py \
|
||||||
|
--feat_type "raw" \
|
||||||
|
--cmvn_path "data/mean_std.json" \
|
||||||
|
--unit_type "spm" \
|
||||||
|
--spm_model_prefix ${bpeprefix} \
|
||||||
|
--vocab_path="data/vocab.txt" \
|
||||||
|
--manifest_path="data/manifest.tiny.raw" \
|
||||||
|
--output_path="data/manifest.tiny"
|
||||||
|
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Formt mnaifest failed. Terminated."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "LibriSpeech Data preparation done."
|
||||||
|
exit 0
|
Loading…
Reference in new issue