Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
DeepSpeech
提交
e48e1d5e
D
DeepSpeech
项目概览
PaddlePaddle
/
DeepSpeech
大约 1 年 前同步成功
通知
207
Star
8425
Fork
1598
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
245
列表
看板
标记
里程碑
合并请求
3
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DeepSpeech
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
245
Issue
245
列表
看板
标记
里程碑
合并请求
3
合并请求
3
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e48e1d5e
编写于
5月 31, 2022
作者:
H
huangyuxin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix tiny and local script, test=asr
上级
47dd61e5
变更
19
显示空白变更内容
内联
并排
Showing
19 changed file
with
105 addition
and
171 deletion
+105
-171
examples/aishell/asr0/local/export.sh
examples/aishell/asr0/local/export.sh
+3
-5
examples/aishell/asr0/local/test.sh
examples/aishell/asr0/local/test.sh
+13
-15
examples/aishell/asr0/local/test_export.sh
examples/aishell/asr0/local/test_export.sh
+3
-5
examples/aishell/asr0/local/test_wav.sh
examples/aishell/asr0/local/test_wav.sh
+3
-5
examples/aishell/asr0/local/train.sh
examples/aishell/asr0/local/train.sh
+2
-5
examples/aishell/asr0/run.sh
examples/aishell/asr0/run.sh
+5
-5
examples/librispeech/asr0/local/export.sh
examples/librispeech/asr0/local/export.sh
+3
-5
examples/librispeech/asr0/local/test.sh
examples/librispeech/asr0/local/test.sh
+12
-14
examples/librispeech/asr0/local/test_wav.sh
examples/librispeech/asr0/local/test_wav.sh
+3
-5
examples/librispeech/asr0/local/train.sh
examples/librispeech/asr0/local/train.sh
+2
-5
examples/librispeech/asr0/run.sh
examples/librispeech/asr0/run.sh
+5
-5
examples/tiny/asr0/conf/augmentation.json
examples/tiny/asr0/conf/augmentation.json
+0
-36
examples/tiny/asr0/conf/deepspeech2.yaml
examples/tiny/asr0/conf/deepspeech2.yaml
+21
-20
examples/tiny/asr0/conf/deepspeech2_online.yaml
examples/tiny/asr0/conf/deepspeech2_online.yaml
+19
-20
examples/tiny/asr0/local/export.sh
examples/tiny/asr0/local/export.sh
+3
-5
examples/tiny/asr0/local/test.sh
examples/tiny/asr0/local/test.sh
+3
-5
examples/tiny/asr0/local/train.sh
examples/tiny/asr0/local/train.sh
+2
-5
examples/tiny/asr0/run.sh
examples/tiny/asr0/run.sh
+3
-5
paddlespeech/s2t/exps/deepspeech2/model.py
paddlespeech/s2t/exps/deepspeech2/model.py
+0
-1
未找到文件。
examples/aishell/asr0/local/export.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
4
]
;
then
if
[
$#
!=
3
]
;
then
echo
"usage:
$0
config_path ckpt_prefix jit_model_path
model_type
"
echo
"usage:
$0
config_path ckpt_prefix jit_model_path"
exit
-1
exit
-1
fi
fi
...
@@ -11,14 +11,12 @@ echo "using $ngpu gpus..."
...
@@ -11,14 +11,12 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
ckpt_path_prefix
=
$2
ckpt_path_prefix
=
$2
jit_model_export_path
=
$3
jit_model_export_path
=
$3
model_type
=
$4
python3
-u
${
BIN_DIR
}
/export.py
\
python3
-u
${
BIN_DIR
}
/export.py
\
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--checkpoint_path
${
ckpt_path_prefix
}
\
--checkpoint_path
${
ckpt_path_prefix
}
\
--export_path
${
jit_model_export_path
}
\
--export_path
${
jit_model_export_path
}
--model_type
${
model_type
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
echo
"Failed in export!"
echo
"Failed in export!"
...
...
examples/aishell/asr0/local/test.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
4
]
;
then
if
[
$#
!=
3
]
;
then
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix
model_type
"
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix"
exit
-1
exit
-1
fi
fi
...
@@ -13,7 +13,6 @@ echo "using $ngpu gpus..."
...
@@ -13,7 +13,6 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
decode_config_path
=
$2
decode_config_path
=
$2
ckpt_prefix
=
$3
ckpt_prefix
=
$3
model_type
=
$4
# download language model
# download language model
bash
local
/download_lm_ch.sh
bash
local
/download_lm_ch.sh
...
@@ -23,7 +22,7 @@ fi
...
@@ -23,7 +22,7 @@ fi
if
[
${
stage
}
-le
0
]
&&
[
${
stop_stage
}
-ge
0
]
;
then
if
[
${
stage
}
-le
0
]
&&
[
${
stop_stage
}
-ge
0
]
;
then
# format the reference test file
# format the reference test file
python utils/format_rsl.py
\
python
3
utils/format_rsl.py
\
--origin_ref
data/manifest.test.raw
\
--origin_ref
data/manifest.test.raw
\
--trans_ref
data/manifest.test.text
--trans_ref
data/manifest.test.text
...
@@ -32,8 +31,7 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
...
@@ -32,8 +31,7 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
--config
${
config_path
}
\
--config
${
config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--result_file
${
ckpt_prefix
}
.rsl
\
--result_file
${
ckpt_prefix
}
.rsl
\
--checkpoint_path
${
ckpt_prefix
}
\
--checkpoint_path
${
ckpt_prefix
}
--model_type
${
model_type
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
echo
"Failed in evaluation!"
echo
"Failed in evaluation!"
...
@@ -41,20 +39,20 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
...
@@ -41,20 +39,20 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
fi
fi
# format the hyp file
# format the hyp file
python utils/format_rsl.py
\
python
3
utils/format_rsl.py
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--trans_hyp
${
ckpt_prefix
}
.rsl.text
--trans_hyp
${
ckpt_prefix
}
.rsl.text
python utils/compute-wer.py
--char
=
1
--v
=
1
\
python
3
utils/compute-wer.py
--char
=
1
--v
=
1
\
data/manifest.test.text
${
ckpt_prefix
}
.rsl.text
>
${
ckpt_prefix
}
.error
data/manifest.test.text
${
ckpt_prefix
}
.rsl.text
>
${
ckpt_prefix
}
.error
fi
fi
if
[
${
stage
}
-le
101
]
&&
[
${
stop_stage
}
-ge
101
]
;
then
if
[
${
stage
}
-le
101
]
&&
[
${
stop_stage
}
-ge
101
]
;
then
python utils/format_rsl.py
\
python
3
utils/format_rsl.py
\
--origin_ref
data/manifest.test.raw
\
--origin_ref
data/manifest.test.raw
\
--trans_ref_sclite
data/manifest.test.text.sclite
--trans_ref_sclite
data/manifest.test.text.sclite
python
utils/format_rsl.py
\
python3
utils/format_rsl.py
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--trans_hyp_sclite
${
ckpt_prefix
}
.rsl.text.sclite
--trans_hyp_sclite
${
ckpt_prefix
}
.rsl.text.sclite
...
...
examples/aishell/asr0/local/test_export.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
4
]
;
then
if
[
$#
!=
3
]
;
then
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix
model_type
"
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix"
exit
-1
exit
-1
fi
fi
...
@@ -11,7 +11,6 @@ echo "using $ngpu gpus..."
...
@@ -11,7 +11,6 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
decode_config_path
=
$2
decode_config_path
=
$2
jit_model_export_path
=
$3
jit_model_export_path
=
$3
model_type
=
$4
# download language model
# download language model
bash
local
/download_lm_ch.sh
>
/dev/null 2>&1
bash
local
/download_lm_ch.sh
>
/dev/null 2>&1
...
@@ -24,8 +23,7 @@ python3 -u ${BIN_DIR}/test_export.py \
...
@@ -24,8 +23,7 @@ python3 -u ${BIN_DIR}/test_export.py \
--config
${
config_path
}
\
--config
${
config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--result_file
${
jit_model_export_path
}
.rsl
\
--result_file
${
jit_model_export_path
}
.rsl
\
--export_path
${
jit_model_export_path
}
\
--export_path
${
jit_model_export_path
}
--model_type
${
model_type
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
echo
"Failed in evaluation!"
echo
"Failed in evaluation!"
...
...
examples/aishell/asr0/local/test_wav.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
5
]
;
then
if
[
$#
!=
4
]
;
then
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix
model_type
audio_file"
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix audio_file"
exit
-1
exit
-1
fi
fi
...
@@ -11,8 +11,7 @@ echo "using $ngpu gpus..."
...
@@ -11,8 +11,7 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
decode_config_path
=
$2
decode_config_path
=
$2
ckpt_prefix
=
$3
ckpt_prefix
=
$3
model_type
=
$4
audio_file
=
$4
audio_file
=
$5
mkdir
-p
data
mkdir
-p
data
wget
-nc
https://paddlespeech.bj.bcebos.com/datasets/single_wav/zh/demo_01_03.wav
-P
data/
wget
-nc
https://paddlespeech.bj.bcebos.com/datasets/single_wav/zh/demo_01_03.wav
-P
data/
...
@@ -37,7 +36,6 @@ python3 -u ${BIN_DIR}/test_wav.py \
...
@@ -37,7 +36,6 @@ python3 -u ${BIN_DIR}/test_wav.py \
--decode_cfg
${
decode_config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--result_file
${
ckpt_prefix
}
.rsl
\
--result_file
${
ckpt_prefix
}
.rsl
\
--checkpoint_path
${
ckpt_prefix
}
\
--checkpoint_path
${
ckpt_prefix
}
\
--model_type
${
model_type
}
\
--audio_file
${
audio_file
}
--audio_file
${
audio_file
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
...
...
examples/aishell/asr0/local/train.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
3
]
;
then
if
[
$#
!=
2
]
;
then
echo
"usage: CUDA_VISIBLE_DEVICES=0
${
0
}
config_path ckpt_name
model_type
"
echo
"usage: CUDA_VISIBLE_DEVICES=0
${
0
}
config_path ckpt_name"
exit
-1
exit
-1
fi
fi
...
@@ -10,7 +10,6 @@ echo "using $ngpu gpus..."
...
@@ -10,7 +10,6 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
ckpt_name
=
$2
ckpt_name
=
$2
model_type
=
$3
mkdir
-p
exp
mkdir
-p
exp
...
@@ -25,14 +24,12 @@ python3 -u ${BIN_DIR}/train.py \
...
@@ -25,14 +24,12 @@ python3 -u ${BIN_DIR}/train.py \
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--output
exp/
${
ckpt_name
}
\
--output
exp/
${
ckpt_name
}
\
--model_type
${
model_type
}
\
--seed
${
seed
}
--seed
${
seed
}
else
else
python3
-m
paddle.distributed.launch
--gpus
=
${
CUDA_VISIBLE_DEVICES
}
${
BIN_DIR
}
/train.py
\
python3
-m
paddle.distributed.launch
--gpus
=
${
CUDA_VISIBLE_DEVICES
}
${
BIN_DIR
}
/train.py
\
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--output
exp/
${
ckpt_name
}
\
--output
exp/
${
ckpt_name
}
\
--model_type
${
model_type
}
\
--seed
${
seed
}
--seed
${
seed
}
fi
fi
...
...
examples/aishell/asr0/run.sh
浏览文件 @
e48e1d5e
...
@@ -24,7 +24,7 @@ fi
...
@@ -24,7 +24,7 @@ fi
if
[
${
stage
}
-le
1
]
&&
[
${
stop_stage
}
-ge
1
]
;
then
if
[
${
stage
}
-le
1
]
&&
[
${
stop_stage
}
-ge
1
]
;
then
# train model, all `ckpt` under `exp` dir
# train model, all `ckpt` under `exp` dir
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/train.sh
${
conf_path
}
${
ckpt
}
${
model_type
}
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/train.sh
${
conf_path
}
${
ckpt
}
fi
fi
if
[
${
stage
}
-le
2
]
&&
[
${
stop_stage
}
-ge
2
]
;
then
if
[
${
stage
}
-le
2
]
&&
[
${
stop_stage
}
-ge
2
]
;
then
...
@@ -34,21 +34,21 @@ fi
...
@@ -34,21 +34,21 @@ fi
if
[
${
stage
}
-le
3
]
&&
[
${
stop_stage
}
-ge
3
]
;
then
if
[
${
stage
}
-le
3
]
&&
[
${
stop_stage
}
-ge
3
]
;
then
# test ckpt avg_n
# test ckpt avg_n
CUDA_VISIBLE_DEVICES
=
0 ./local/test.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
${
model_type
}
||
exit
-1
CUDA_VISIBLE_DEVICES
=
0 ./local/test.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
||
exit
-1
fi
fi
if
[
${
stage
}
-le
4
]
&&
[
${
stop_stage
}
-ge
4
]
;
then
if
[
${
stage
}
-le
4
]
&&
[
${
stop_stage
}
-ge
4
]
;
then
# export ckpt avg_n
# export ckpt avg_n
CUDA_VISIBLE_DEVICES
=
0 ./local/export.sh
${
conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
${
model_type
}
CUDA_VISIBLE_DEVICES
=
0 ./local/export.sh
${
conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
fi
fi
if
[
${
stage
}
-le
5
]
&&
[
${
stop_stage
}
-ge
5
]
;
then
if
[
${
stage
}
-le
5
]
&&
[
${
stop_stage
}
-ge
5
]
;
then
# test export ckpt avg_n
# test export ckpt avg_n
CUDA_VISIBLE_DEVICES
=
0 ./local/test_export.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
${
model_type
}
||
exit
-1
CUDA_VISIBLE_DEVICES
=
0 ./local/test_export.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit||
exit
-1
fi
fi
# Optionally, you can add LM and test it with runtime.
# Optionally, you can add LM and test it with runtime.
if
[
${
stage
}
-le
6
]
&&
[
${
stop_stage
}
-ge
6
]
;
then
if
[
${
stage
}
-le
6
]
&&
[
${
stop_stage
}
-ge
6
]
;
then
# test a single .wav file
# test a single .wav file
CUDA_VISIBLE_DEVICES
=
0 ./local/test_wav.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
${
model_type
}
${
audio_file
}
||
exit
-1
CUDA_VISIBLE_DEVICES
=
0 ./local/test_wav.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
${
audio_file
}
||
exit
-1
fi
fi
examples/librispeech/asr0/local/export.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
4
]
;
then
if
[
$#
!=
3
]
;
then
echo
"usage:
$0
config_path ckpt_prefix jit_model_path
model_type
"
echo
"usage:
$0
config_path ckpt_prefix jit_model_path"
exit
-1
exit
-1
fi
fi
...
@@ -11,14 +11,12 @@ echo "using $ngpu gpus..."
...
@@ -11,14 +11,12 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
ckpt_path_prefix
=
$2
ckpt_path_prefix
=
$2
jit_model_export_path
=
$3
jit_model_export_path
=
$3
model_type
=
$4
python3
-u
${
BIN_DIR
}
/export.py
\
python3
-u
${
BIN_DIR
}
/export.py
\
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--checkpoint_path
${
ckpt_path_prefix
}
\
--checkpoint_path
${
ckpt_path_prefix
}
\
--export_path
${
jit_model_export_path
}
\
--export_path
${
jit_model_export_path
}
--model_type
${
model_type
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
echo
"Failed in export!"
echo
"Failed in export!"
...
...
examples/librispeech/asr0/local/test.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
4
]
;
then
if
[
$#
!=
3
]
;
then
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix
model_type
"
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix"
exit
-1
exit
-1
fi
fi
stage
=
0
stage
=
0
...
@@ -13,7 +13,6 @@ echo "using $ngpu gpus..."
...
@@ -13,7 +13,6 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
decode_config_path
=
$2
decode_config_path
=
$2
ckpt_prefix
=
$3
ckpt_prefix
=
$3
model_type
=
$4
# download language model
# download language model
bash
local
/download_lm_en.sh
bash
local
/download_lm_en.sh
...
@@ -23,7 +22,7 @@ fi
...
@@ -23,7 +22,7 @@ fi
if
[
${
stage
}
-le
0
]
&&
[
${
stop_stage
}
-ge
0
]
;
then
if
[
${
stage
}
-le
0
]
&&
[
${
stop_stage
}
-ge
0
]
;
then
# format the reference test file
# format the reference test file
python utils/format_rsl.py
\
python
3
utils/format_rsl.py
\
--origin_ref
data/manifest.test-clean.raw
\
--origin_ref
data/manifest.test-clean.raw
\
--trans_ref
data/manifest.test-clean.text
--trans_ref
data/manifest.test-clean.text
...
@@ -32,28 +31,27 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
...
@@ -32,28 +31,27 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
--config
${
config_path
}
\
--config
${
config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--result_file
${
ckpt_prefix
}
.rsl
\
--result_file
${
ckpt_prefix
}
.rsl
\
--checkpoint_path
${
ckpt_prefix
}
\
--checkpoint_path
${
ckpt_prefix
}
--model_type
${
model_type
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
echo
"Failed in evaluation!"
echo
"Failed in evaluation!"
exit
1
exit
1
fi
fi
python utils/format_rsl.py
\
python
3
utils/format_rsl.py
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--trans_hyp
${
ckpt_prefix
}
.rsl.text
--trans_hyp
${
ckpt_prefix
}
.rsl.text
python utils/compute-wer.py
--char
=
1
--v
=
1
\
python
3
utils/compute-wer.py
--char
=
1
--v
=
1
\
data/manifest.test-clean.text
${
ckpt_prefix
}
.rsl.text
>
${
ckpt_prefix
}
.error
data/manifest.test-clean.text
${
ckpt_prefix
}
.rsl.text
>
${
ckpt_prefix
}
.error
fi
fi
if
[
${
stage
}
-le
101
]
&&
[
${
stop_stage
}
-ge
101
]
;
then
if
[
${
stage
}
-le
101
]
&&
[
${
stop_stage
}
-ge
101
]
;
then
python utils/format_rsl.py
\
python
3
utils/format_rsl.py
\
--origin_ref
data/manifest.test-clean.raw
\
--origin_ref
data/manifest.test-clean.raw
\
--trans_ref_sclite
data/manifest.test.text-clean.sclite
--trans_ref_sclite
data/manifest.test.text-clean.sclite
python
utils/format_rsl.py
\
python3
utils/format_rsl.py
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--origin_hyp
${
ckpt_prefix
}
.rsl
\
--trans_hyp_sclite
${
ckpt_prefix
}
.rsl.text.sclite
--trans_hyp_sclite
${
ckpt_prefix
}
.rsl.text.sclite
...
...
examples/librispeech/asr0/local/test_wav.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
5
]
;
then
if
[
$#
!=
4
]
;
then
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix
model_type
audio_file"
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix audio_file"
exit
-1
exit
-1
fi
fi
...
@@ -11,8 +11,7 @@ echo "using $ngpu gpus..."
...
@@ -11,8 +11,7 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
decode_config_path
=
$2
decode_config_path
=
$2
ckpt_prefix
=
$3
ckpt_prefix
=
$3
model_type
=
$4
audio_file
=
$4
audio_file
=
$5
mkdir
-p
data
mkdir
-p
data
wget
-nc
https://paddlespeech.bj.bcebos.com/datasets/single_wav/en/demo_002_en.wav
-P
data/
wget
-nc
https://paddlespeech.bj.bcebos.com/datasets/single_wav/en/demo_002_en.wav
-P
data/
...
@@ -37,7 +36,6 @@ python3 -u ${BIN_DIR}/test_wav.py \
...
@@ -37,7 +36,6 @@ python3 -u ${BIN_DIR}/test_wav.py \
--decode_cfg
${
decode_config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--result_file
${
ckpt_prefix
}
.rsl
\
--result_file
${
ckpt_prefix
}
.rsl
\
--checkpoint_path
${
ckpt_prefix
}
\
--checkpoint_path
${
ckpt_prefix
}
\
--model_type
${
model_type
}
\
--audio_file
${
audio_file
}
--audio_file
${
audio_file
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
...
...
examples/librispeech/asr0/local/train.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
3
]
;
then
if
[
$#
!=
2
]
;
then
echo
"usage: CUDA_VISIBLE_DEVICES=0
${
0
}
config_path ckpt_name
model_type
"
echo
"usage: CUDA_VISIBLE_DEVICES=0
${
0
}
config_path ckpt_name"
exit
-1
exit
-1
fi
fi
...
@@ -10,7 +10,6 @@ echo "using $ngpu gpus..."
...
@@ -10,7 +10,6 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
ckpt_name
=
$2
ckpt_name
=
$2
model_type
=
$3
mkdir
-p
exp
mkdir
-p
exp
...
@@ -25,14 +24,12 @@ python3 -u ${BIN_DIR}/train.py \
...
@@ -25,14 +24,12 @@ python3 -u ${BIN_DIR}/train.py \
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--output
exp/
${
ckpt_name
}
\
--output
exp/
${
ckpt_name
}
\
--model_type
${
model_type
}
\
--seed
${
seed
}
--seed
${
seed
}
else
else
python3
-m
paddle.distributed.launch
--gpus
=
${
CUDA_VISIBLE_DEVICES
}
${
BIN_DIR
}
/train.py
\
python3
-m
paddle.distributed.launch
--gpus
=
${
CUDA_VISIBLE_DEVICES
}
${
BIN_DIR
}
/train.py
\
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--output
exp/
${
ckpt_name
}
\
--output
exp/
${
ckpt_name
}
\
--model_type
${
model_type
}
\
--seed
${
seed
}
--seed
${
seed
}
fi
fi
...
...
examples/librispeech/asr0/run.sh
浏览文件 @
e48e1d5e
...
@@ -23,7 +23,7 @@ fi
...
@@ -23,7 +23,7 @@ fi
if
[
${
stage
}
-le
1
]
&&
[
${
stop_stage
}
-ge
1
]
;
then
if
[
${
stage
}
-le
1
]
&&
[
${
stop_stage
}
-ge
1
]
;
then
# train model, all `ckpt` under `exp` dir
# train model, all `ckpt` under `exp` dir
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/train.sh
${
conf_path
}
${
ckpt
}
${
model_type
}
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/train.sh
${
conf_path
}
${
ckpt
}
fi
fi
if
[
${
stage
}
-le
2
]
&&
[
${
stop_stage
}
-ge
2
]
;
then
if
[
${
stage
}
-le
2
]
&&
[
${
stop_stage
}
-ge
2
]
;
then
...
@@ -33,20 +33,20 @@ fi
...
@@ -33,20 +33,20 @@ fi
if
[
${
stage
}
-le
3
]
&&
[
${
stop_stage
}
-ge
3
]
;
then
if
[
${
stage
}
-le
3
]
&&
[
${
stop_stage
}
-ge
3
]
;
then
# test ckpt avg_n
# test ckpt avg_n
CUDA_VISIBLE_DEVICES
=
0 ./local/test.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
${
model_type
}
||
exit
-1
CUDA_VISIBLE_DEVICES
=
0 ./local/test.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
||
exit
-1
fi
fi
if
[
${
stage
}
-le
4
]
&&
[
${
stop_stage
}
-ge
4
]
;
then
if
[
${
stage
}
-le
4
]
&&
[
${
stop_stage
}
-ge
4
]
;
then
# export ckpt avg_n
# export ckpt avg_n
CUDA_VISIBLE_DEVICES
=
./local/export.sh
${
conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
${
model_type
}
CUDA_VISIBLE_DEVICES
=
./local/export.sh
${
conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
fi
fi
if
[
${
stage
}
-le
5
]
&&
[
${
stop_stage
}
-ge
5
]
;
then
if
[
${
stage
}
-le
5
]
&&
[
${
stop_stage
}
-ge
5
]
;
then
# test export ckpt avg_n
# test export ckpt avg_n
CUDA_VISIBLE_DEVICES
=
0 ./local/test_export.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
${
model_type
}
||
exit
-1
CUDA_VISIBLE_DEVICES
=
0 ./local/test_export.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit||
exit
-1
fi
fi
if
[
${
stage
}
-le
6
]
&&
[
${
stop_stage
}
-ge
6
]
;
then
if
[
${
stage
}
-le
6
]
&&
[
${
stop_stage
}
-ge
6
]
;
then
# test a single .wav file
# test a single .wav file
CUDA_VISIBLE_DEVICES
=
0 ./local/test_wav.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
${
model_type
}
${
audio_file
}
||
exit
-1
CUDA_VISIBLE_DEVICES
=
0 ./local/test_wav.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
${
audio_file
}
||
exit
-1
fi
fi
examples/tiny/asr0/conf/augmentation.json
已删除
100644 → 0
浏览文件 @
47dd61e5
[
{
"type"
:
"speed"
,
"params"
:
{
"min_speed_rate"
:
0.9
,
"max_speed_rate"
:
1.1
,
"num_rates"
:
3
},
"prob"
:
0.0
},
{
"type"
:
"shift"
,
"params"
:
{
"min_shift_ms"
:
-5
,
"max_shift_ms"
:
5
},
"prob"
:
1.0
},
{
"type"
:
"specaug"
,
"params"
:
{
"W"
:
5
,
"warp_mode"
:
"PIL"
,
"F"
:
30
,
"n_freq_masks"
:
2
,
"T"
:
40
,
"n_time_masks"
:
2
,
"p"
:
1.0
,
"adaptive_number_ratio"
:
0
,
"adaptive_size_ratio"
:
0
,
"max_n_time_masks"
:
20
,
"replace_with_zero"
:
true
},
"prob"
:
1.0
}
]
examples/tiny/asr0/conf/deepspeech2.yaml
浏览文件 @
e48e1d5e
...
@@ -16,28 +16,26 @@ max_output_input_ratio: 10.0
...
@@ -16,28 +16,26 @@ max_output_input_ratio: 10.0
###########################################
###########################################
# Dataloader #
# Dataloader #
###########################################
###########################################
mean_std_filepath
:
data/mean_std.json
unit_type
:
char
vocab_filepath
:
data/lang_char/vocab.txt
vocab_filepath
:
data/lang_char/vocab.txt
augmentation_config
:
conf/augmentation.json
spm_model_prefix
:
'
'
random_seed
:
0
unit_type
:
'
char'
spm_model_prefix
:
preprocess_config
:
conf/preprocess.yaml
spectrum_type
:
linear
feat_dim
:
161
feat_dim
:
161
delta_delta
:
False
stride_ms
:
10.0
stride_ms
:
10.0
window_ms
:
20.0
window_ms
:
25.0
n_fft
:
None
sortagrad
:
0
# Feed samples from shortest to longest ; -1: enabled for all epochs, 0: disabled, other: enabled for 'other' epochs
max_freq
:
None
target_sample_rate
:
16000
use_dB_normalization
:
True
target_dB
:
-20
dither
:
1.0
keep_transcription_text
:
False
sortagrad
:
True
shuffle_method
:
batch_shuffle
num_workers
:
2
batch_size
:
4
batch_size
:
4
maxlen_in
:
512
# if input length > maxlen-in, batchsize is automatically reduced
maxlen_out
:
150
# if output length > maxlen-out, batchsize is automatically reduced
minibatches
:
0
# for debug
batch_count
:
auto
batch_bins
:
0
batch_frames_in
:
0
batch_frames_out
:
0
batch_frames_inout
:
0
num_workers
:
8
subsampling_factor
:
1
num_encs
:
1
############################################
############################################
# Network Architecture #
# Network Architecture #
...
@@ -45,8 +43,10 @@ batch_size: 4
...
@@ -45,8 +43,10 @@ batch_size: 4
num_conv_layers
:
2
num_conv_layers
:
2
num_rnn_layers
:
3
num_rnn_layers
:
3
rnn_layer_size
:
2048
rnn_layer_size
:
2048
rnn_direction
:
bidirect
# [forward, bidirect]
num_fc_layers
:
0
fc_layers_size_list
:
-1,
use_gru
:
False
use_gru
:
False
share_rnn_weights
:
True
blank_id
:
0
blank_id
:
0
...
@@ -59,6 +59,7 @@ lr: 1.0e-5
...
@@ -59,6 +59,7 @@ lr: 1.0e-5
lr_decay
:
0.8
lr_decay
:
0.8
weight_decay
:
1.0e-6
weight_decay
:
1.0e-6
global_grad_clip
:
5.0
global_grad_clip
:
5.0
dist_sampler
:
False
log_interval
:
1
log_interval
:
1
checkpoint
:
checkpoint
:
kbest_n
:
3
kbest_n
:
3
...
...
examples/tiny/asr0/conf/deepspeech2_online.yaml
浏览文件 @
e48e1d5e
...
@@ -16,28 +16,26 @@ max_output_input_ratio: 10.0
...
@@ -16,28 +16,26 @@ max_output_input_ratio: 10.0
###########################################
###########################################
# Dataloader #
# Dataloader #
###########################################
###########################################
mean_std_filepath
:
data/mean_std.json
unit_type
:
char
vocab_filepath
:
data/lang_char/vocab.txt
vocab_filepath
:
data/lang_char/vocab.txt
augmentation_config
:
conf/augmentation.json
spm_model_prefix
:
'
'
random_seed
:
0
unit_type
:
'
char'
spm_model_prefix
:
preprocess_config
:
conf/preprocess.yaml
spectrum_type
:
linear
feat_dim
:
161
feat_dim
:
161
delta_delta
:
False
stride_ms
:
10.0
stride_ms
:
10.0
window_ms
:
20.0
window_ms
:
25.0
n_fft
:
None
sortagrad
:
0
# Feed samples from shortest to longest ; -1: enabled for all epochs, 0: disabled, other: enabled for 'other' epochs
max_freq
:
None
target_sample_rate
:
16000
use_dB_normalization
:
True
target_dB
:
-20
dither
:
1.0
keep_transcription_text
:
False
sortagrad
:
True
shuffle_method
:
batch_shuffle
num_workers
:
0
batch_size
:
4
batch_size
:
4
maxlen_in
:
512
# if input length > maxlen-in, batchsize is automatically reduced
maxlen_out
:
150
# if output length > maxlen-out, batchsize is automatically reduced
minibatches
:
0
# for debug
batch_count
:
auto
batch_bins
:
0
batch_frames_in
:
0
batch_frames_out
:
0
batch_frames_inout
:
0
num_workers
:
8
subsampling_factor
:
1
num_encs
:
1
############################################
############################################
# Network Architecture #
# Network Architecture #
...
@@ -61,6 +59,7 @@ lr: 1.0e-5
...
@@ -61,6 +59,7 @@ lr: 1.0e-5
lr_decay
:
1.0
lr_decay
:
1.0
weight_decay
:
1.0e-6
weight_decay
:
1.0e-6
global_grad_clip
:
5.0
global_grad_clip
:
5.0
dist_sampler
:
False
log_interval
:
1
log_interval
:
1
checkpoint
:
checkpoint
:
kbest_n
:
3
kbest_n
:
3
...
...
examples/tiny/asr0/local/export.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
4
]
;
then
if
[
$#
!=
3
]
;
then
echo
"usage:
$0
config_path ckpt_prefix jit_model_path
model_type
"
echo
"usage:
$0
config_path ckpt_prefix jit_model_path"
exit
-1
exit
-1
fi
fi
...
@@ -11,14 +11,12 @@ echo "using $ngpu gpus..."
...
@@ -11,14 +11,12 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
ckpt_path_prefix
=
$2
ckpt_path_prefix
=
$2
jit_model_export_path
=
$3
jit_model_export_path
=
$3
model_type
=
$4
python3
-u
${
BIN_DIR
}
/export.py
\
python3
-u
${
BIN_DIR
}
/export.py
\
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--checkpoint_path
${
ckpt_path_prefix
}
\
--checkpoint_path
${
ckpt_path_prefix
}
\
--export_path
${
jit_model_export_path
}
\
--export_path
${
jit_model_export_path
}
--model_type
${
model_type
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
echo
"Failed in export!"
echo
"Failed in export!"
...
...
examples/tiny/asr0/local/test.sh
浏览文件 @
e48e1d5e
#!/bin/bash
#!/bin/bash
if
[
$#
!=
4
]
;
then
if
[
$#
!=
3
]
;
then
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix
model_type
"
echo
"usage:
${
0
}
config_path decode_config_path ckpt_path_prefix"
exit
-1
exit
-1
fi
fi
...
@@ -11,7 +11,6 @@ echo "using $ngpu gpus..."
...
@@ -11,7 +11,6 @@ echo "using $ngpu gpus..."
config_path
=
$1
config_path
=
$1
decode_config_path
=
$2
decode_config_path
=
$2
ckpt_prefix
=
$3
ckpt_prefix
=
$3
model_type
=
$4
# download language model
# download language model
bash
local
/download_lm_en.sh
bash
local
/download_lm_en.sh
...
@@ -24,8 +23,7 @@ python3 -u ${BIN_DIR}/test.py \
...
@@ -24,8 +23,7 @@ python3 -u ${BIN_DIR}/test.py \
--config
${
config_path
}
\
--config
${
config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--decode_cfg
${
decode_config_path
}
\
--result_file
${
ckpt_prefix
}
.rsl
\
--result_file
${
ckpt_prefix
}
.rsl
\
--checkpoint_path
${
ckpt_prefix
}
\
--checkpoint_path
${
ckpt_prefix
}
--model_type
${
model_type
}
if
[
$?
-ne
0
]
;
then
if
[
$?
-ne
0
]
;
then
echo
"Failed in evaluation!"
echo
"Failed in evaluation!"
...
...
examples/tiny/asr0/local/train.sh
浏览文件 @
e48e1d5e
...
@@ -15,14 +15,13 @@ if [ ${seed} != 0 ]; then
...
@@ -15,14 +15,13 @@ if [ ${seed} != 0 ]; then
echo
"using seed
$seed
& FLAGS_cudnn_deterministic=True ..."
echo
"using seed
$seed
& FLAGS_cudnn_deterministic=True ..."
fi
fi
if
[
$#
!=
3
]
;
then
if
[
$#
!=
2
]
;
then
echo
"usage: CUDA_VISIBLE_DEVICES=0
${
0
}
config_path ckpt_name
model_type
"
echo
"usage: CUDA_VISIBLE_DEVICES=0
${
0
}
config_path ckpt_name"
exit
-1
exit
-1
fi
fi
config_path
=
$1
config_path
=
$1
ckpt_name
=
$2
ckpt_name
=
$2
model_type
=
$3
mkdir
-p
exp
mkdir
-p
exp
...
@@ -31,7 +30,6 @@ python3 -u ${BIN_DIR}/train.py \
...
@@ -31,7 +30,6 @@ python3 -u ${BIN_DIR}/train.py \
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--output
exp/
${
ckpt_name
}
\
--output
exp/
${
ckpt_name
}
\
--model_type
${
model_type
}
\
--profiler-options
"
${
profiler_options
}
"
\
--profiler-options
"
${
profiler_options
}
"
\
--seed
${
seed
}
--seed
${
seed
}
else
else
...
@@ -39,7 +37,6 @@ python3 -m paddle.distributed.launch --gpus=${CUDA_VISIBLE_DEVICES} ${BIN_DIR}/t
...
@@ -39,7 +37,6 @@ python3 -m paddle.distributed.launch --gpus=${CUDA_VISIBLE_DEVICES} ${BIN_DIR}/t
--ngpu
${
ngpu
}
\
--ngpu
${
ngpu
}
\
--config
${
config_path
}
\
--config
${
config_path
}
\
--output
exp/
${
ckpt_name
}
\
--output
exp/
${
ckpt_name
}
\
--model_type
${
model_type
}
\
--profiler-options
"
${
profiler_options
}
"
\
--profiler-options
"
${
profiler_options
}
"
\
--seed
${
seed
}
--seed
${
seed
}
fi
fi
...
...
examples/tiny/asr0/run.sh
浏览文件 @
e48e1d5e
...
@@ -8,8 +8,6 @@ stop_stage=100
...
@@ -8,8 +8,6 @@ stop_stage=100
conf_path
=
conf/deepspeech2.yaml
conf_path
=
conf/deepspeech2.yaml
decode_conf_path
=
conf/tuning/decode.yaml
decode_conf_path
=
conf/tuning/decode.yaml
avg_num
=
1
avg_num
=
1
model_type
=
offline
source
${
MAIN_ROOT
}
/utils/parse_options.sh
||
exit
1
;
source
${
MAIN_ROOT
}
/utils/parse_options.sh
||
exit
1
;
avg_ckpt
=
avg_
${
avg_num
}
avg_ckpt
=
avg_
${
avg_num
}
...
@@ -23,7 +21,7 @@ fi
...
@@ -23,7 +21,7 @@ fi
if
[
${
stage
}
-le
1
]
&&
[
${
stop_stage
}
-ge
1
]
;
then
if
[
${
stage
}
-le
1
]
&&
[
${
stop_stage
}
-ge
1
]
;
then
# train model, all `ckpt` under `exp` dir
# train model, all `ckpt` under `exp` dir
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/train.sh
${
conf_path
}
${
ckpt
}
${
model_type
}
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/train.sh
${
conf_path
}
${
ckpt
}
fi
fi
if
[
${
stage
}
-le
2
]
&&
[
${
stop_stage
}
-ge
2
]
;
then
if
[
${
stage
}
-le
2
]
&&
[
${
stop_stage
}
-ge
2
]
;
then
...
@@ -33,10 +31,10 @@ fi
...
@@ -33,10 +31,10 @@ fi
if
[
${
stage
}
-le
3
]
&&
[
${
stop_stage
}
-ge
3
]
;
then
if
[
${
stage
}
-le
3
]
&&
[
${
stop_stage
}
-ge
3
]
;
then
# test ckpt avg_n
# test ckpt avg_n
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/test.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
${
model_type
}
||
exit
-1
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/test.sh
${
conf_path
}
${
decode_conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
||
exit
-1
fi
fi
if
[
${
stage
}
-le
4
]
&&
[
${
stop_stage
}
-ge
4
]
;
then
if
[
${
stage
}
-le
4
]
&&
[
${
stop_stage
}
-ge
4
]
;
then
# export ckpt avg_n
# export ckpt avg_n
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/export.sh
${
conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
${
model_type
}
CUDA_VISIBLE_DEVICES
=
${
gpus
}
./local/export.sh
${
conf_path
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
exp/
${
ckpt
}
/checkpoints/
${
avg_ckpt
}
.jit
fi
fi
paddlespeech/s2t/exps/deepspeech2/model.py
浏览文件 @
e48e1d5e
...
@@ -248,7 +248,6 @@ class DeepSpeech2Tester(DeepSpeech2Trainer):
...
@@ -248,7 +248,6 @@ class DeepSpeech2Tester(DeepSpeech2Trainer):
for
text
,
n
in
zip
(
texts
,
texts_len
):
for
text
,
n
in
zip
(
texts
,
texts_len
):
n
=
n
.
numpy
().
item
()
n
=
n
.
numpy
().
item
()
ids
=
text
[:
n
]
ids
=
text
[:
n
]
#trans.append(''.join([chr(i) for i in ids]))
trans
.
append
(
self
.
_text_featurizer
.
defeaturize
(
ids
.
numpy
().
tolist
()))
trans
.
append
(
self
.
_text_featurizer
.
defeaturize
(
ids
.
numpy
().
tolist
()))
return
trans
return
trans
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录