forked from YUCHEN005/DPSL-ASR
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvc_decode.py
174 lines (157 loc) · 5.46 KB
/
vc_decode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/usr/bin/env python3
# Copyright 2020 Nagoya University (Wen-Chin Huang)
# Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
"""VC decoding script."""
import configargparse
import logging
import os
import platform
import subprocess
import sys
from espnet.utils.cli_utils import strtobool
# NOTE: you need this func to generate our sphinx doc
def get_parser():
"""Get parser of decoding arguments."""
parser = configargparse.ArgumentParser(
description="Converting speech using a VC model on one CPU",
config_file_parser_class=configargparse.YAMLConfigFileParser,
formatter_class=configargparse.ArgumentDefaultsHelpFormatter,
)
# general configuration
parser.add("--config", is_config_file=True, help="config file path")
parser.add(
"--config2",
is_config_file=True,
help="second config file path that overwrites the settings in `--config`.",
)
parser.add(
"--config3",
is_config_file=True,
help="third config file path that overwrites the settings "
"in `--config` and `--config2`.",
)
parser.add_argument("--ngpu", default=0, type=int, help="Number of GPUs")
parser.add_argument(
"--backend",
default="pytorch",
type=str,
choices=["chainer", "pytorch"],
help="Backend library",
)
parser.add_argument("--debugmode", default=1, type=int, help="Debugmode")
parser.add_argument("--seed", default=1, type=int, help="Random seed")
parser.add_argument("--out", type=str, required=True, help="Output filename")
parser.add_argument("--verbose", "-V", default=0, type=int, help="Verbose option")
parser.add_argument(
"--preprocess-conf",
type=str,
default=None,
help="The configuration file for the pre-processing",
)
# task related
parser.add_argument(
"--json", type=str, required=True, help="Filename of train label data (json)"
)
parser.add_argument(
"--model", type=str, required=True, help="Model file parameters to read"
)
parser.add_argument(
"--model-conf", type=str, default=None, help="Model config file"
)
# decoding related
parser.add_argument(
"--maxlenratio", type=float, default=5, help="Maximum length ratio in decoding"
)
parser.add_argument(
"--minlenratio", type=float, default=0, help="Minimum length ratio in decoding"
)
parser.add_argument(
"--threshold", type=float, default=0.5, help="Threshold value in decoding"
)
parser.add_argument(
"--use-att-constraint",
type=strtobool,
default=False,
help="Whether to use the attention constraint",
)
parser.add_argument(
"--backward-window",
type=int,
default=1,
help="Backward window size in the attention constraint",
)
parser.add_argument(
"--forward-window",
type=int,
default=3,
help="Forward window size in the attention constraint",
)
# save related
parser.add_argument(
"--save-durations",
default=False,
type=strtobool,
help="Whether to save durations converted from attentions",
)
parser.add_argument(
"--save-focus-rates",
default=False,
type=strtobool,
help="Whether to save focus rates of attentions",
)
return parser
def main(args):
"""Run deocding."""
parser = get_parser()
args = parser.parse_args(args)
# logging info
if args.verbose > 0:
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s",
)
else:
logging.basicConfig(
level=logging.WARN,
format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s",
)
logging.warning("Skip DEBUG/INFO messages")
# check CUDA_VISIBLE_DEVICES
if args.ngpu > 0:
# python 2 case
if platform.python_version_tuple()[0] == "2":
if "clsp.jhu.edu" in subprocess.check_output(["hostname", "-f"]):
cvd = subprocess.check_output(
["/usr/local/bin/free-gpu", "-n", str(args.ngpu)]
).strip()
logging.info("CLSP: use gpu" + cvd)
os.environ["CUDA_VISIBLE_DEVICES"] = cvd
# python 3 case
else:
if "clsp.jhu.edu" in subprocess.check_output(["hostname", "-f"]).decode():
cvd = (
subprocess.check_output(
["/usr/local/bin/free-gpu", "-n", str(args.ngpu)]
)
.decode()
.strip()
)
logging.info("CLSP: use gpu" + cvd)
os.environ["CUDA_VISIBLE_DEVICES"] = cvd
cvd = os.environ.get("CUDA_VISIBLE_DEVICES")
if cvd is None:
logging.warning("CUDA_VISIBLE_DEVICES is not set.")
elif args.ngpu != len(cvd.split(",")):
logging.error("#gpus is not matched with CUDA_VISIBLE_DEVICES.")
sys.exit(1)
# display PYTHONPATH
logging.info("python path = " + os.environ.get("PYTHONPATH", "(None)"))
# extract
logging.info("backend = " + args.backend)
if args.backend == "pytorch":
from espnet.vc.pytorch_backend.vc import decode
decode(args)
else:
raise NotImplementedError("Only pytorch is supported.")
if __name__ == "__main__":
main(sys.argv[1:])