提交 716bf6f1 编写于 作者: H Hui Zhang

refactor tiny script, add transformer and stream conf

上级 dd96a658
* s0 is for deepspeech # ASR
* s0 is for deepspeech2
* s1 is for U2
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
[ [
{
"type": "shift",
"params": {
"min_shift_ms": -5,
"max_shift_ms": 5
},
"prob": 1.0
},
{ {
"type": "speed", "type": "speed",
"params": { "params": {
...@@ -8,14 +16,6 @@ ...@@ -8,14 +16,6 @@
}, },
"prob": 0.0 "prob": 0.0
}, },
{
"type": "shift",
"params": {
"min_shift_ms": -5,
"max_shift_ms": 5
},
"prob": 1.0
},
{ {
"type": "specaug", "type": "specaug",
"params": { "params": {
......
# https://yaml.org/type/float.html
data:
train_manifest: data/manifest.tiny
dev_manifest: data/manifest.tiny
test_manifest: data/manifest.tiny
vocab_filepath: data/vocab.txt
unit_type: 'spm'
spm_model_prefix: 'data/bpe_unigram_200'
mean_std_filepath: ""
augmentation_config: conf/augmentation.json
batch_size: 4
min_input_len: 0.5
max_input_len: 20.0
min_output_len: 0.0
max_output_len: 400.0
min_output_input_ratio: 0.05
max_output_input_ratio: 10.0
raw_wav: True # use raw_wav or kaldi feature
specgram_type: fbank #linear, mfcc, fbank
feat_dim: 80
delta_delta: False
dither: 1.0
target_sample_rate: 16000
max_freq: None
n_fft: None
stride_ms: 10.0
window_ms: 25.0
use_dB_normalization: True
target_dB: -20
random_seed: 0
keep_transcription_text: False
sortagrad: True
shuffle_method: batch_shuffle
num_workers: 2
# network architecture # network architecture
# encoder related model:
encoder: conformer cmvn_file: "data/mean_std.json"
encoder_conf: cmvn_file_type: "json"
output_size: 256 # dimension of attention # encoder related
attention_heads: 4 encoder: conformer
linear_units: 2048 # the number of units of position-wise feed forward encoder_conf:
num_blocks: 12 # the number of encoder blocks output_size: 256 # dimension of attention
dropout_rate: 0.1 attention_heads: 4
positional_dropout_rate: 0.1 linear_units: 2048 # the number of units of position-wise feed forward
attention_dropout_rate: 0.0 num_blocks: 12 # the number of encoder blocks
input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8 dropout_rate: 0.1
normalize_before: true positional_dropout_rate: 0.1
cnn_module_kernel: 15 attention_dropout_rate: 0.0
use_cnn_module: True input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8
activation_type: 'swish' normalize_before: True
pos_enc_layer_type: 'rel_pos' use_cnn_module: True
selfattention_layer_type: 'rel_selfattn' cnn_module_kernel: 15
causal: true activation_type: 'swish'
use_dynamic_chunk: true pos_enc_layer_type: 'rel_pos'
cnn_module_norm: 'layer_norm' # using nn.LayerNorm makes model converge faster selfattention_layer_type: 'rel_selfattn'
use_dynamic_left_chunk: false causal: True
use_dynamic_chunk: True
cnn_module_norm: 'layer_norm' # using nn.LayerNorm makes model converge faster
use_dynamic_left_chunk: false
# decoder related # decoder related
decoder: transformer decoder: transformer
decoder_conf: decoder_conf:
attention_heads: 4 attention_heads: 4
linear_units: 2048 linear_units: 2048
num_blocks: 6 num_blocks: 6
dropout_rate: 0.1 dropout_rate: 0.1
positional_dropout_rate: 0.1 positional_dropout_rate: 0.1
self_attention_dropout_rate: 0.0 self_attention_dropout_rate: 0.0
src_attention_dropout_rate: 0.0 src_attention_dropout_rate: 0.0
# hybrid CTC/attention # hybrid CTC/attention
model_conf: model_conf:
ctc_weight: 0.3 ctc_weight: 0.3
lsm_weight: 0.1 # label smoothing option lsm_weight: 0.1 # label smoothing option
length_normalized_loss: false length_normalized_loss: false
# use raw_wav or kaldi feature training:
raw_wav: true n_epoch: 20
accum_grad: 1
global_grad_clip: 5.0
optim: adam
optim_conf:
lr: 0.001
weight_decay: 1e-06
scheduler: warmuplr # pytorch v1.1.0+ required
scheduler_conf:
warmup_steps: 25000
lr_decay: 1.0
log_interval: 1
# feature extraction
collate_conf:
# waveform level config
wav_distortion_conf:
wav_dither: 1.0
wav_distortion_rate: 0.0
distortion_methods: []
speed_perturb: true
feature_extraction_conf:
feature_type: 'fbank'
mel_bins: 80
frame_shift: 10
frame_length: 25
using_pitch: false
# spec level config
# spec_swap: false
feature_dither: 0.0 # add dither [-feature_dither,feature_dither] on fbank feature
spec_aug: true
spec_aug_conf:
warp_for_time: False
num_t_mask: 2
num_f_mask: 2
max_t: 50
max_f: 10
max_w: 80
# dataset related decoding:
dataset_conf: batch_size: 64
max_length: 40960 error_rate_type: wer
min_length: 0 decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring'
batch_type: 'static' # static or dynamic lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm
# the size of batch_size should be set according to your gpu memory size, here we used 2080ti gpu whose memory size is 11GB alpha: 2.5
batch_size: 16 beta: 0.3
sort: true beam_size: 10
cutoff_prob: 1.0
cutoff_top_n: 0
num_proc_bsearch: 8
ctc_weight: 0.0 # ctc weight for attention rescoring decode mode.
decoding_chunk_size: -1 # decoding chunk size. Defaults to -1.
# <0: for decoding, use full chunk.
# >0: for decoding, use fixed chunk size as set.
# 0: used for training, it's prohibited here.
num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1.
simulate_streaming: False # simulate streaming inference. Defaults to False.
grad_clip: 5
accum_grad: 1
max_epoch: 180
log_interval: 100
optim: adam
optim_conf:
lr: 0.001
scheduler: warmuplr # pytorch v1.1.0+ required
scheduler_conf:
warmup_steps: 25000
\ No newline at end of file
# https://yaml.org/type/float.html
data:
train_manifest: data/manifest.tiny
dev_manifest: data/manifest.tiny
test_manifest: data/manifest.tiny
vocab_filepath: data/vocab.txt
unit_type: 'spm'
spm_model_prefix: 'data/bpe_unigram_200'
mean_std_filepath: ""
augmentation_config: conf/augmentation.json
batch_size: 4
min_input_len: 0.5 # second
max_input_len: 20.0 # second
min_output_len: 0.0 # tokens
max_output_len: 400.0 # tokens
min_output_input_ratio: 0.05
max_output_input_ratio: 10.0
raw_wav: True # use raw_wav or kaldi feature
specgram_type: fbank #linear, mfcc, fbank
feat_dim: 80
delta_delta: False
dither: 1.0
target_sample_rate: 16000
max_freq: None
n_fft: None
stride_ms: 10.0
window_ms: 25.0
use_dB_normalization: True
target_dB: -20
random_seed: 0
keep_transcription_text: False
sortagrad: True
shuffle_method: batch_shuffle
num_workers: 2
# network architecture # network architecture
# encoder related model:
encoder: transformer cmvn_file: "data/mean_std.json"
encoder_conf: cmvn_file_type: "json"
output_size: 256 # dimension of attention # encoder related
attention_heads: 4 encoder: transformer
linear_units: 2048 # the number of units of position-wise feed forward encoder_conf:
num_blocks: 12 # the number of encoder blocks output_size: 256 # dimension of attention
dropout_rate: 0.1 attention_heads: 4
positional_dropout_rate: 0.1 linear_units: 2048 # the number of units of position-wise feed forward
attention_dropout_rate: 0.0 num_blocks: 12 # the number of encoder blocks
input_layer: conv2d # encoder architecture type dropout_rate: 0.1
normalize_before: true positional_dropout_rate: 0.1
use_dynamic_chunk: true attention_dropout_rate: 0.0
use_dynamic_left_chunk: false input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8
normalize_before: true
use_dynamic_chunk: true
use_dynamic_left_chunk: false
# decoder related # decoder related
decoder: transformer decoder: transformer
decoder_conf: decoder_conf:
attention_heads: 4 attention_heads: 4
linear_units: 2048 linear_units: 2048
num_blocks: 6 num_blocks: 6
dropout_rate: 0.1 dropout_rate: 0.1
positional_dropout_rate: 0.1 positional_dropout_rate: 0.1
self_attention_dropout_rate: 0.0 self_attention_dropout_rate: 0.0
src_attention_dropout_rate: 0.0 src_attention_dropout_rate: 0.0
# hybrid CTC/attention # hybrid CTC/attention
model_conf: model_conf:
ctc_weight: 0.3 ctc_weight: 0.3
lsm_weight: 0.1 # label smoothing option lsm_weight: 0.1 # label smoothing option
length_normalized_loss: false length_normalized_loss: false
# use raw_wav or kaldi feature
raw_wav: true
# feature extraction training:
collate_conf: n_epoch: 20
# waveform level config accum_grad: 1
wav_distortion_conf: global_grad_clip: 5.0
wav_dither: 0.0 optim: adam
wav_distortion_rate: 0.0 optim_conf:
distortion_methods: [] lr: 0.002
speed_perturb: false weight_decay: 1e-06
feature_extraction_conf: scheduler: warmuplr # pytorch v1.1.0+ required
feature_type: 'fbank' scheduler_conf:
mel_bins: 80 warmup_steps: 25000
frame_shift: 10 lr_decay: 1.0
frame_length: 25 log_interval: 1
using_pitch: false
# spec level config
# spec_swap: false
feature_dither: 0.0 # add dither [-feature_dither,feature_dither] on fbank feature
spec_aug: true
spec_aug_conf:
warp_for_time: False
num_t_mask: 2
num_f_mask: 2
max_t: 50
max_f: 10
max_w: 80
# dataset related decoding:
dataset_conf: batch_size: 64
max_length: 40960 error_rate_type: wer
min_length: 0 decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring'
batch_type: 'static' # static or dynamic lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm
# the size of batch_size should be set according to your gpu memory size, here we used 2080ti gpu whose memory size is 11GB alpha: 2.5
batch_size: 16 beta: 0.3
sort: true beam_size: 10
cutoff_prob: 1.0
cutoff_top_n: 0
num_proc_bsearch: 8
ctc_weight: 0.0 # ctc weight for attention rescoring decode mode.
decoding_chunk_size: -1 # decoding chunk size. Defaults to -1.
# <0: for decoding, use full chunk.
# >0: for decoding, use fixed chunk size as set.
# 0: used for training, it's prohibited here.
num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1.
simulate_streaming: False # simulate streaming inference. Defaults to False.
grad_clip: 5
accum_grad: 1
max_epoch: 180
log_interval: 100
optim: adam
optim_conf:
lr: 0.002
scheduler: warmuplr # pytorch v1.1.0+ required
scheduler_conf:
warmup_steps: 25000
\ No newline at end of file
...@@ -31,46 +31,7 @@ data: ...@@ -31,46 +31,7 @@ data:
keep_transcription_text: False keep_transcription_text: False
sortagrad: True sortagrad: True
shuffle_method: batch_shuffle shuffle_method: batch_shuffle
num_workers: 0 num_workers: 2
# # feature extraction
# collate_conf:
# # waveform level config
# wav_distortion_conf:
# wav_dither: 0.1
# wav_distortion_rate: 0.0
# distortion_methods: []
# speed_perturb: true
# feature_extraction_conf:
# feature_type: 'fbank'
# mel_bins: 80
# frame_shift: 10
# frame_length: 25
# using_pitch: false
# # spec level config
# # spec_swap: false
# feature_dither: 0.0 # add dither [-feature_dither,feature_dither] on fbank feature
# spec_aug: true
# spec_aug_conf:
# warp_for_time: False
# num_t_mask: 2
# num_f_mask: 2
# max_t: 50
# max_f: 10
# max_w: 80
# # dataset related
# dataset_conf:
# max_length: 40960
# min_length: 0
# batch_type: 'static' # static or dynamic
# # the size of batch_size should be set according to your gpu memory size, here we used 2080ti gpu whose memory size is 11GB
# batch_size: 16
# sort: true
# network architecture # network architecture
...@@ -129,7 +90,7 @@ training: ...@@ -129,7 +90,7 @@ training:
decoding: decoding:
batch_size: 16 batch_size: 64
error_rate_type: wer error_rate_type: wer
decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring' decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring'
lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm
......
# https://yaml.org/type/float.html
data:
train_manifest: data/manifest.tiny
dev_manifest: data/manifest.tiny
test_manifest: data/manifest.tiny
vocab_filepath: data/vocab.txt
unit_type: 'spm'
spm_model_prefix: 'data/bpe_unigram_200'
mean_std_filepath: ""
augmentation_config: conf/augmentation.json
batch_size: 4
min_input_len: 0.5 # second
max_input_len: 20.0 # second
min_output_len: 0.0 # tokens
max_output_len: 400.0 # tokens
min_output_input_ratio: 0.05
max_output_input_ratio: 10.0
raw_wav: True # use raw_wav or kaldi feature
specgram_type: fbank #linear, mfcc, fbank
feat_dim: 80
delta_delta: False
dither: 1.0
target_sample_rate: 16000
max_freq: None
n_fft: None
stride_ms: 10.0
window_ms: 25.0
use_dB_normalization: True
target_dB: -20
random_seed: 0
keep_transcription_text: False
sortagrad: True
shuffle_method: batch_shuffle
num_workers: 2
# network architecture # network architecture
# encoder related model:
encoder: transformer cmvn_file: "data/mean_std.json"
encoder_conf: cmvn_file_type: "json"
output_size: 256 # dimension of attention # encoder related
attention_heads: 4 encoder: transformer
linear_units: 2048 # the number of units of position-wise feed forward encoder_conf:
num_blocks: 12 # the number of encoder blocks output_size: 256 # dimension of attention
dropout_rate: 0.1 attention_heads: 4
positional_dropout_rate: 0.1 linear_units: 2048 # the number of units of position-wise feed forward
attention_dropout_rate: 0.0 num_blocks: 12 # the number of encoder blocks
input_layer: conv2d # encoder architecture type dropout_rate: 0.1
normalize_before: true positional_dropout_rate: 0.1
attention_dropout_rate: 0.0
input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8
normalize_before: true
# decoder related # decoder related
decoder: transformer decoder: transformer
decoder_conf: decoder_conf:
attention_heads: 4 attention_heads: 4
linear_units: 2048 linear_units: 2048
num_blocks: 6 num_blocks: 6
dropout_rate: 0.1 dropout_rate: 0.1
positional_dropout_rate: 0.1 positional_dropout_rate: 0.1
self_attention_dropout_rate: 0.0 self_attention_dropout_rate: 0.0
src_attention_dropout_rate: 0.0 src_attention_dropout_rate: 0.0
# hybrid CTC/attention # hybrid CTC/attention
model_conf: model_conf:
ctc_weight: 0.3 ctc_weight: 0.3
lsm_weight: 0.1 # label smoothing option lsm_weight: 0.1 # label smoothing option
length_normalized_loss: false length_normalized_loss: false
# use raw_wav or kaldi feature
raw_wav: true
# feature extraction training:
collate_conf: n_epoch: 20
# waveform level config accum_grad: 1
wav_distortion_conf: global_grad_clip: 5.0
wav_dither: 0.1 optim: adam
wav_distortion_rate: 0.0 optim_conf:
distortion_methods: [] lr: 0.002
speed_perturb: true weight_decay: 1e-06
feature_extraction_conf: scheduler: warmuplr # pytorch v1.1.0+ required
feature_type: 'fbank' scheduler_conf:
mel_bins: 80 warmup_steps: 25000
frame_shift: 10 lr_decay: 1.0
frame_length: 25 log_interval: 1
using_pitch: false
# spec level config
feature_dither: 0.0 # add dither [-feature_dither,feature_dither] on fbank feature
spec_aug: true
spec_aug_conf:
warp_for_time: False
num_t_mask: 2
num_f_mask: 2
max_t: 50
max_f: 10
max_w: 80
# dataset related decoding:
dataset_conf: batch_size: 64
max_length: 40960 error_rate_type: wer
min_length: 0 decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring'
batch_type: 'static' # static or dynamic lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm
# the size of batch_size should be set according to your gpu memory size, here we used 2080ti gpu whose memory size is 11GB alpha: 2.5
batch_size: 26 beta: 0.3
sort: true beam_size: 10
cutoff_prob: 1.0
cutoff_top_n: 0
num_proc_bsearch: 8
ctc_weight: 0.0 # ctc weight for attention rescoring decode mode.
decoding_chunk_size: -1 # decoding chunk size. Defaults to -1.
# <0: for decoding, use full chunk.
# >0: for decoding, use fixed chunk size as set.
# 0: used for training, it's prohibited here.
num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1.
simulate_streaming: False # simulate streaming inference. Defaults to False.
grad_clip: 5
accum_grad: 1
max_epoch: 240
log_interval: 100
optim: adam
optim_conf:
lr: 0.002
scheduler: warmuplr # pytorch v1.1.0+ required
scheduler_conf:
warmup_steps: 25000
\ No newline at end of file
#! /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
\ No newline at end of file
#! /usr/bin/env bash #! /usr/bin/env bash
if [ $# != 2 ];then if [ $# != 3 ];then
echo "usage: export ckpt_path jit_model_path" echo "usage: $0 config_path ckpt_prefix jit_model_path"
exit -1 exit -1
fi fi
config_path=$1
ckpt_path_prefix=$2
jit_model_export_path=$3
python3 -u ${BIN_DIR}/export.py \ python3 -u ${BIN_DIR}/export.py \
--config conf/conformer.yaml \ --config ${config_path} \
--checkpoint_path ${1} \ --checkpoint_path ${ckpt_path_prefix} \
--export_path ${2} --export_path ${jit_model_export_path}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Failed in evaluation!" echo "Failed in export!"
exit 1 exit 1
fi fi
......
#! /usr/bin/env bash #! /usr/bin/env bash
if [ $# != 2 ];then
echo "usage: ${0} config_path ckpt_path_prefix"
exit -1
fi
ngpu=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}')
echo "using $ngpu gpus..."
device=gpu
if [ ngpu != 0 ];then
device=cpu
fi
config_path=$1
ckpt_prefix=$2
# download language model # download language model
#bash local/download_lm_en.sh #bash local/download_lm_en.sh
#if [ $? -ne 0 ]; then #if [ $? -ne 0 ]; then
...@@ -7,11 +22,11 @@ ...@@ -7,11 +22,11 @@
#fi #fi
python3 -u ${BIN_DIR}/test.py \ python3 -u ${BIN_DIR}/test.py \
--device 'gpu' \ --device ${device} \
--nproc 1 \ --nproc 1 \
--config conf/conformer.yaml \ --config ${config_path} \
--result_file data/asr.result \ --result_file ${ckpt_prefix}.rsl \
--output ckpt --checkpoint_path ${ckpt_prefix}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Failed in evaluation!" echo "Failed in evaluation!"
......
#! /usr/bin/env bash #! /usr/bin/env bash
if [ $# != 2 ];then
echo "usage: CUDA_VISIBLE_DEVICES=0 ${0} config_path ckpt_name"
exit -1
fi
ngpu=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}') 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/conformer.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
...@@ -2,15 +2,19 @@ ...@@ -2,15 +2,19 @@
set -e set -e
source path.sh source path.sh
source ${MAIN_ROOT}/utils/parse_options.sh
# prepare data # prepare data
bash ./local/data.sh bash ./local/data.sh
# train model # train model, all `ckpt` under `exp` dir
bash ./local/train.sh CUDA_VISIBLE_DEVICES=0 ./local/train.sh conf/conformer.yaml test
# test model # test ckpt 1
bash ./local/test.sh CUDA_VISIBLE_DEVICES=0 ./local/test.sh conf/conformer.yaml exp/test/checkpoints/1
# infer model # avg 1 best model
bash ./local/infer.sh ./local/avg.sh exp/test/checkpoints 1
# export ckpt 1
./local/export.sh conf/conformer.yaml exp/test/checkpoints/1 exp/test/checkpoints/1.jit.model
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册