From 8f5e61090b569f9bf77f53a16668a533ae925f99 Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Wed, 22 Jun 2022 05:12:31 +0000 Subject: [PATCH 01/27] new feature: Add webdataset in audio --- paddlespeech/audio/stream_data/__init__.py | 68 ++ paddlespeech/audio/stream_data/cache.py | 190 ++++ paddlespeech/audio/stream_data/compat.py | 170 ++++ paddlespeech/audio/stream_data/filters.py | 912 ++++++++++++++++++ .../audio/stream_data/paddle_utils.py | 33 + paddlespeech/audio/stream_data/pipeline.py | 127 +++ paddlespeech/audio/stream_data/shardlists.py | 257 +++++ .../audio/stream_data/tariterators.py | 283 ++++++ paddlespeech/audio/stream_data/utils.py | 128 +++ paddlespeech/audio/transform/__init__.py | 13 + paddlespeech/audio/transform/add_deltas.py | 54 ++ .../audio/transform/channel_selector.py | 57 ++ paddlespeech/audio/transform/cmvn.py | 201 ++++ paddlespeech/audio/transform/functional.py | 86 ++ paddlespeech/audio/transform/perturb.py | 561 +++++++++++ paddlespeech/audio/transform/spec_augment.py | 214 ++++ paddlespeech/audio/transform/spectrogram.py | 475 +++++++++ .../audio/transform/transform_interface.py | 35 + .../audio/transform/transformation.py | 158 +++ paddlespeech/audio/transform/wpe.py | 58 ++ paddlespeech/audio/utils/check_kwargs.py | 35 + paddlespeech/audio/utils/dynamic_import.py | 38 + paddlespeech/audio/utils/tensor_utils.py | 195 ++++ setup.py | 2 +- 24 files changed, 4349 insertions(+), 1 deletion(-) create mode 100644 paddlespeech/audio/stream_data/__init__.py create mode 100644 paddlespeech/audio/stream_data/cache.py create mode 100644 paddlespeech/audio/stream_data/compat.py create mode 100644 paddlespeech/audio/stream_data/filters.py create mode 100644 paddlespeech/audio/stream_data/paddle_utils.py create mode 100644 paddlespeech/audio/stream_data/pipeline.py create mode 100644 paddlespeech/audio/stream_data/shardlists.py create mode 100644 paddlespeech/audio/stream_data/tariterators.py create mode 100644 paddlespeech/audio/stream_data/utils.py create mode 100644 paddlespeech/audio/transform/__init__.py create mode 100644 paddlespeech/audio/transform/add_deltas.py create mode 100644 paddlespeech/audio/transform/channel_selector.py create mode 100644 paddlespeech/audio/transform/cmvn.py create mode 100644 paddlespeech/audio/transform/functional.py create mode 100644 paddlespeech/audio/transform/perturb.py create mode 100644 paddlespeech/audio/transform/spec_augment.py create mode 100644 paddlespeech/audio/transform/spectrogram.py create mode 100644 paddlespeech/audio/transform/transform_interface.py create mode 100644 paddlespeech/audio/transform/transformation.py create mode 100644 paddlespeech/audio/transform/wpe.py create mode 100644 paddlespeech/audio/utils/check_kwargs.py create mode 100644 paddlespeech/audio/utils/dynamic_import.py create mode 100644 paddlespeech/audio/utils/tensor_utils.py diff --git a/paddlespeech/audio/stream_data/__init__.py b/paddlespeech/audio/stream_data/__init__.py new file mode 100644 index 00000000..fdb3458c --- /dev/null +++ b/paddlespeech/audio/stream_data/__init__.py @@ -0,0 +1,68 @@ +# Copyright (c) 2017-2019 NVIDIA CORPORATION. All rights reserved. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +# +# flake8: noqa + +from .cache import ( + cached_tarfile_samples, + cached_tarfile_to_samples, + lru_cleanup, + pipe_cleaner, +) +from .compat import WebDataset, WebLoader, FluidWrapper +from webdataset.extradatasets import MockDataset, with_epoch, with_length +from .filters import ( + associate, + batched, + decode, + detshuffle, + extract_keys, + getfirst, + info, + map, + map_dict, + map_tuple, + pipelinefilter, + rename, + rename_keys, + rsample, + select, + shuffle, + slice, + to_tuple, + transform_with, + unbatched, + xdecode, + data_filter, + tokenize, + resample, + compute_fbank, + spec_aug, + sort, + padding, + cmvn +) +from webdataset.handlers import ( + ignore_and_continue, + ignore_and_stop, + reraise_exception, + warn_and_continue, + warn_and_stop, +) +from .pipeline import DataPipeline +from .shardlists import ( + MultiShardSample, + ResampledShards, + SimpleShardList, + non_empty, + resampled, + shardspec, + single_node_only, + split_by_node, + split_by_worker, +) +from .tariterators import tarfile_samples, tarfile_to_samples +from .utils import PipelineStage, repeatedly +from webdataset.writer import ShardWriter, TarWriter, numpy_dumps +from webdataset.mix import RandomMix, RoundRobin diff --git a/paddlespeech/audio/stream_data/cache.py b/paddlespeech/audio/stream_data/cache.py new file mode 100644 index 00000000..724f6911 --- /dev/null +++ b/paddlespeech/audio/stream_data/cache.py @@ -0,0 +1,190 @@ +# Copyright (c) 2017-2019 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +import itertools, os, random, re, sys +from urllib.parse import urlparse + +from . import filters +from webdataset import gopen +from webdataset.handlers import reraise_exception +from .tariterators import tar_file_and_group_expander + +default_cache_dir = os.environ.get("WDS_CACHE", "./_cache") +default_cache_size = float(os.environ.get("WDS_CACHE_SIZE", "1e18")) + + +def lru_cleanup(cache_dir, cache_size, keyfn=os.path.getctime, verbose=False): + """Performs cleanup of the file cache in cache_dir using an LRU strategy, + keeping the total size of all remaining files below cache_size.""" + if not os.path.exists(cache_dir): + return + total_size = 0 + for dirpath, dirnames, filenames in os.walk(cache_dir): + for filename in filenames: + total_size += os.path.getsize(os.path.join(dirpath, filename)) + if total_size <= cache_size: + return + # sort files by last access time + files = [] + for dirpath, dirnames, filenames in os.walk(cache_dir): + for filename in filenames: + files.append(os.path.join(dirpath, filename)) + files.sort(key=keyfn, reverse=True) + # delete files until we're under the cache size + while len(files) > 0 and total_size > cache_size: + fname = files.pop() + total_size -= os.path.getsize(fname) + if verbose: + print("# deleting %s" % fname, file=sys.stderr) + os.remove(fname) + + +def download(url, dest, chunk_size=1024 ** 2, verbose=False): + """Download a file from `url` to `dest`.""" + temp = dest + f".temp{os.getpid()}" + with gopen.gopen(url) as stream: + with open(temp, "wb") as f: + while True: + data = stream.read(chunk_size) + if not data: + break + f.write(data) + os.rename(temp, dest) + + +def pipe_cleaner(spec): + """Guess the actual URL from a "pipe:" specification.""" + if spec.startswith("pipe:"): + spec = spec[5:] + words = spec.split(" ") + for word in words: + if re.match(r"^(https?|gs|ais|s3)", word): + return word + return spec + + +def get_file_cached( + spec, + cache_size=-1, + cache_dir=None, + url_to_name=pipe_cleaner, + verbose=False, +): + if cache_size == -1: + cache_size = default_cache_size + if cache_dir is None: + cache_dir = default_cache_dir + url = url_to_name(spec) + parsed = urlparse(url) + dirname, filename = os.path.split(parsed.path) + dirname = dirname.lstrip("/") + dirname = re.sub(r"[:/|;]", "_", dirname) + destdir = os.path.join(cache_dir, dirname) + os.makedirs(destdir, exist_ok=True) + dest = os.path.join(cache_dir, dirname, filename) + if not os.path.exists(dest): + if verbose: + print("# downloading %s to %s" % (url, dest), file=sys.stderr) + lru_cleanup(cache_dir, cache_size, verbose=verbose) + download(spec, dest, verbose=verbose) + return dest + + +def get_filetype(fname): + with os.popen("file '%s'" % fname) as f: + ftype = f.read() + return ftype + + +def check_tar_format(fname): + """Check whether a file is a tar archive.""" + ftype = get_filetype(fname) + return "tar archive" in ftype or "gzip compressed" in ftype + + +verbose_cache = int(os.environ.get("WDS_VERBOSE_CACHE", "0")) + + +def cached_url_opener( + data, + handler=reraise_exception, + cache_size=-1, + cache_dir=None, + url_to_name=pipe_cleaner, + validator=check_tar_format, + verbose=False, + always=False, +): + """Given a stream of url names (packaged in `dict(url=url)`), yield opened streams.""" + verbose = verbose or verbose_cache + for sample in data: + assert isinstance(sample, dict), sample + assert "url" in sample + url = sample["url"] + attempts = 5 + try: + if not always and os.path.exists(url): + dest = url + else: + dest = get_file_cached( + url, + cache_size=cache_size, + cache_dir=cache_dir, + url_to_name=url_to_name, + verbose=verbose, + ) + if verbose: + print("# opening %s" % dest, file=sys.stderr) + assert os.path.exists(dest) + if not validator(dest): + ftype = get_filetype(dest) + with open(dest, "rb") as f: + data = f.read(200) + os.remove(dest) + raise ValueError( + "%s (%s) is not a tar archive, but a %s, contains %s" + % (dest, url, ftype, repr(data)) + ) + try: + stream = open(dest, "rb") + sample.update(stream=stream) + yield sample + except FileNotFoundError as exn: + # dealing with race conditions in lru_cleanup + attempts -= 1 + if attempts > 0: + time.sleep(random.random() * 10) + continue + raise exn + except Exception as exn: + exn.args = exn.args + (url,) + if handler(exn): + continue + else: + break + + +def cached_tarfile_samples( + src, + handler=reraise_exception, + cache_size=-1, + cache_dir=None, + verbose=False, + url_to_name=pipe_cleaner, + always=False, +): + streams = cached_url_opener( + src, + handler=handler, + cache_size=cache_size, + cache_dir=cache_dir, + verbose=verbose, + url_to_name=url_to_name, + always=always, + ) + samples = tar_file_and_group_expander(streams, handler=handler) + return samples + + +cached_tarfile_to_samples = filters.pipelinefilter(cached_tarfile_samples) diff --git a/paddlespeech/audio/stream_data/compat.py b/paddlespeech/audio/stream_data/compat.py new file mode 100644 index 00000000..ee564431 --- /dev/null +++ b/paddlespeech/audio/stream_data/compat.py @@ -0,0 +1,170 @@ +# Copyright (c) 2017-2019 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +from dataclasses import dataclass +from itertools import islice +from typing import List + +import braceexpand, yaml + +from webdataset import autodecode +from . import cache, filters, shardlists, tariterators +from .filters import reraise_exception +from .pipeline import DataPipeline +from .paddle_utils import DataLoader, IterableDataset + + +class FluidInterface: + def batched(self, batchsize): + return self.compose(filters.batched(batchsize)) + + def dynamic_batched(self, max_frames_in_batch): + return self.compose(filter.dynamic_batched(max_frames_in_batch)) + + def unbatched(self): + return self.compose(filters.unbatched()) + + def listed(self, batchsize, partial=True): + return self.compose(filters.batched(), batchsize=batchsize, collation_fn=None) + + def unlisted(self): + return self.compose(filters.unlisted()) + + def log_keys(self, logfile=None): + return self.compose(filters.log_keys(logfile)) + + def shuffle(self, size, **kw): + if size < 1: + return self + else: + return self.compose(filters.shuffle(size, **kw)) + + def map(self, f, handler=reraise_exception): + return self.compose(filters.map(f, handler=handler)) + + def decode(self, *args, pre=None, post=None, only=None, partial=False, handler=reraise_exception): + handlers = [autodecode.ImageHandler(x) if isinstance(x, str) else x for x in args] + decoder = autodecode.Decoder(handlers, pre=pre, post=post, only=only, partial=partial) + return self.map(decoder, handler=handler) + + def map_dict(self, handler=reraise_exception, **kw): + return self.compose(filters.map_dict(handler=handler, **kw)) + + def select(self, predicate, **kw): + return self.compose(filters.select(predicate, **kw)) + + def to_tuple(self, *args, handler=reraise_exception): + return self.compose(filters.to_tuple(*args, handler=handler)) + + def map_tuple(self, *args, handler=reraise_exception): + return self.compose(filters.map_tuple(*args, handler=handler)) + + def slice(self, *args): + return self.compose(filters.slice(*args)) + + def rename(self, **kw): + return self.compose(filters.rename(**kw)) + + def rsample(self, p=0.5): + return self.compose(filters.rsample(p)) + + def rename_keys(self, *args, **kw): + return self.compose(filters.rename_keys(*args, **kw)) + + def extract_keys(self, *args, **kw): + return self.compose(filters.extract_keys(*args, **kw)) + + def xdecode(self, *args, **kw): + return self.compose(filters.xdecode(*args, **kw)) + + def data_filter(self, *args, **kw): + return self.compose(filters.data_filter(*args, **kw)) + + def tokenize(self, *args, **kw): + return self.compose(filters.tokenize(*args, **kw)) + + def resample(self, *args, **kw): + return self.compose(filters.resample(*args, **kw)) + + def compute_fbank(self, *args, **kw): + return self.compose(filters.compute_fbank(*args, **kw)) + + def spec_aug(self, *args, **kw): + return self.compose(filters.spec_aug(*args, **kw)) + + def sort(self, size=500): + return self.compose(filters.sort(size)) + + def padding(self): + return self.compose(filters.padding()) + + def cmvn(self, cmvn_file): + return self.compose(filters.cmvn(cmvn_file)) + +class WebDataset(DataPipeline, FluidInterface): + """Small fluid-interface wrapper for DataPipeline.""" + + def __init__( + self, + urls, + handler=reraise_exception, + resampled=False, + repeat=False, + shardshuffle=None, + cache_size=0, + cache_dir=None, + detshuffle=False, + nodesplitter=shardlists.single_node_only, + verbose=False, + ): + super().__init__() + if isinstance(urls, IterableDataset): + assert not resampled + self.append(urls) + elif isinstance(urls, str) and (urls.endswith(".yaml") or urls.endswith(".yml")): + with (open(urls)) as stream: + spec = yaml.safe_load(stream) + assert "datasets" in spec + self.append(shardlists.MultiShardSample(spec)) + elif isinstance(urls, dict): + assert "datasets" in urls + self.append(shardlists.MultiShardSample(urls)) + elif resampled: + self.append(shardlists.ResampledShards(urls)) + else: + self.append(shardlists.SimpleShardList(urls)) + self.append(nodesplitter) + self.append(shardlists.split_by_worker) + if shardshuffle is True: + shardshuffle = 100 + if shardshuffle is not None: + if detshuffle: + self.append(filters.detshuffle(shardshuffle)) + else: + self.append(filters.shuffle(shardshuffle)) + if cache_size == 0: + self.append(tariterators.tarfile_to_samples(handler=handler)) + else: + assert cache_size == -1 or cache_size > 0 + self.append( + cache.cached_tarfile_to_samples( + handler=handler, + verbose=verbose, + cache_size=cache_size, + cache_dir=cache_dir, + ) + ) + + +class FluidWrapper(DataPipeline, FluidInterface): + """Small fluid-interface wrapper for DataPipeline.""" + + def __init__(self, initial): + super().__init__() + self.append(initial) + + +class WebLoader(DataPipeline, FluidInterface): + def __init__(self, *args, **kw): + super().__init__(DataLoader(*args, **kw)) diff --git a/paddlespeech/audio/stream_data/filters.py b/paddlespeech/audio/stream_data/filters.py new file mode 100644 index 00000000..3112c954 --- /dev/null +++ b/paddlespeech/audio/stream_data/filters.py @@ -0,0 +1,912 @@ +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# + +# Modified from https://github.com/webdataset/webdataset +# Modified from wenet(https://github.com/wenet-e2e/wenet) +"""A collection of iterators for data transformations. + +These functions are plain iterator functions. You can find curried versions +in webdataset.filters, and you can find IterableDataset wrappers in +webdataset.processing. +""" + +import io +from fnmatch import fnmatch +import re +import itertools, os, random, sys, time +from functools import reduce, wraps + +import numpy as np + +from webdataset import autodecode +from . import utils +from .paddle_utils import PaddleTensor +from .utils import PipelineStage + +from .. import backends +from ..compliance import kaldi +import paddle +from ..transform.cmvn import GlobalCMVN +from ..utils.tensor_utils import pad_sequence +from ..transform.spec_augment import time_warp +from ..transform.spec_augment import time_mask +from ..transform.spec_augment import freq_mask + +class FilterFunction(object): + """Helper class for currying pipeline stages. + + We use this roundabout construct becauce it can be pickled. + """ + + def __init__(self, f, *args, **kw): + """Create a curried function.""" + self.f = f + self.args = args + self.kw = kw + + def __call__(self, data): + """Call the curried function with the given argument.""" + return self.f(data, *self.args, **self.kw) + + def __str__(self): + """Compute a string representation.""" + return f"<{self.f.__name__} {self.args} {self.kw}>" + + def __repr__(self): + """Compute a string representation.""" + return f"<{self.f.__name__} {self.args} {self.kw}>" + + +class RestCurried(object): + """Helper class for currying pipeline stages. + + We use this roundabout construct because it can be pickled. + """ + + def __init__(self, f): + """Store the function for future currying.""" + self.f = f + + def __call__(self, *args, **kw): + """Curry with the given arguments.""" + return FilterFunction(self.f, *args, **kw) + + +def pipelinefilter(f): + """Turn the decorated function into one that is partially applied for + all arguments other than the first.""" + result = RestCurried(f) + return result + + +def reraise_exception(exn): + """Reraises the given exception; used as a handler. + + :param exn: exception + """ + raise exn + + +def identity(x): + """Return the argument.""" + return x + + +def compose2(f, g): + """Compose two functions, g(f(x)).""" + return lambda x: g(f(x)) + + +def compose(*args): + """Compose a sequence of functions (left-to-right).""" + return reduce(compose2, args) + + +def pipeline(source, *args): + """Write an input pipeline; first argument is source, rest are filters.""" + if len(args) == 0: + return source + return compose(*args)(source) + + +def getfirst(a, keys, default=None, missing_is_error=True): + """Get the first matching key from a dictionary. + + Keys can be specified as a list, or as a string of keys separated by ';'. + """ + if isinstance(keys, str): + assert " " not in keys + keys = keys.split(";") + for k in keys: + if k in a: + return a[k] + if missing_is_error: + raise ValueError(f"didn't find {keys} in {list(a.keys())}") + return default + + +def parse_field_spec(fields): + """Parse a specification for a list of fields to be extracted. + + Keys are separated by spaces in the spec. Each key can itself + be composed of key alternatives separated by ';'. + """ + if isinstance(fields, str): + fields = fields.split() + return [field.split(";") for field in fields] + + +def transform_with(sample, transformers): + """Transform a list of values using a list of functions. + + sample: list of values + transformers: list of functions + + If there are fewer transformers than inputs, or if a transformer + function is None, then the identity function is used for the + corresponding sample fields. + """ + if transformers is None or len(transformers) == 0: + return sample + result = list(sample) + assert len(transformers) <= len(sample) + for i in range(len(transformers)): # skipcq: PYL-C0200 + f = transformers[i] + if f is not None: + result[i] = f(sample[i]) + return result + +### +# Iterators +### + +def _info(data, fmt=None, n=3, every=-1, width=50, stream=sys.stderr, name=""): + """Print information about the samples that are passing through. + + :param data: source iterator + :param fmt: format statement (using sample dict as keyword) + :param n: when to stop + :param every: how often to print + :param width: maximum width + :param stream: output stream + :param name: identifier printed before any output + """ + for i, sample in enumerate(data): + if i < n or (every > 0 and (i + 1) % every == 0): + if fmt is None: + print("---", name, file=stream) + for k, v in sample.items(): + print(k, repr(v)[:width], file=stream) + else: + print(fmt.format(**sample), file=stream) + yield sample + + +info = pipelinefilter(_info) + + +def pick(buf, rng): + k = rng.randint(0, len(buf) - 1) + sample = buf[k] + buf[k] = buf[-1] + buf.pop() + return sample + + +def _shuffle(data, bufsize=1000, initial=100, rng=None, handler=None): + """Shuffle the data in the stream. + + This uses a buffer of size `bufsize`. Shuffling at + startup is less random; this is traded off against + yielding samples quickly. + + data: iterator + bufsize: buffer size for shuffling + returns: iterator + rng: either random module or random.Random instance + + """ + if rng is None: + rng = random.Random(int((os.getpid() + time.time()) * 1e9)) + initial = min(initial, bufsize) + buf = [] + for sample in data: + buf.append(sample) + if len(buf) < bufsize: + try: + buf.append(next(data)) # skipcq: PYL-R1708 + except StopIteration: + pass + if len(buf) >= initial: + yield pick(buf, rng) + while len(buf) > 0: + yield pick(buf, rng) + + +shuffle = pipelinefilter(_shuffle) + + +class detshuffle(PipelineStage): + def __init__(self, bufsize=1000, initial=100, seed=0, epoch=-1): + self.bufsize = bufsize + self.initial = initial + self.seed = seed + self.epoch = epoch + + def run(self, src): + self.epoch += 1 + rng = random.Random() + rng.seed((self.seed, self.epoch)) + return _shuffle(src, self.bufsize, self.initial, rng) + + +def _select(data, predicate): + """Select samples based on a predicate. + + :param data: source iterator + :param predicate: predicate (function) + """ + for sample in data: + if predicate(sample): + yield sample + + +select = pipelinefilter(_select) + + +def _log_keys(data, logfile=None): + import fcntl + + if logfile is None or logfile == "": + for sample in data: + yield sample + else: + with open(logfile, "a") as stream: + for i, sample in enumerate(data): + buf = f"{i}\t{sample.get('__worker__')}\t{sample.get('__rank__')}\t{sample.get('__key__')}\n" + try: + fcntl.flock(stream.fileno(), fcntl.LOCK_EX) + stream.write(buf) + finally: + fcntl.flock(stream.fileno(), fcntl.LOCK_UN) + yield sample + + +log_keys = pipelinefilter(_log_keys) + + +def _decode(data, *args, handler=reraise_exception, **kw): + """Decode data based on the decoding functions given as arguments.""" + + decoder = lambda x: autodecode.imagehandler(x) if isinstance(x, str) else x + handlers = [decoder(x) for x in args] + f = autodecode.Decoder(handlers, **kw) + + for sample in data: + assert isinstance(sample, dict), sample + try: + decoded = f(sample) + except Exception as exn: # skipcq: PYL-W0703 + if handler(exn): + continue + else: + break + yield decoded + + +decode = pipelinefilter(_decode) + + +def _map(data, f, handler=reraise_exception): + """Map samples.""" + for sample in data: + try: + result = f(sample) + except Exception as exn: + if handler(exn): + continue + else: + break + if result is None: + continue + if isinstance(sample, dict) and isinstance(result, dict): + result["__key__"] = sample.get("__key__") + yield result + + +map = pipelinefilter(_map) + + +def _rename(data, handler=reraise_exception, keep=True, **kw): + """Rename samples based on keyword arguments.""" + for sample in data: + try: + if not keep: + yield {k: getfirst(sample, v, missing_is_error=True) for k, v in kw.items()} + else: + + def listify(v): + return v.split(";") if isinstance(v, str) else v + + to_be_replaced = {x for v in kw.values() for x in listify(v)} + result = {k: v for k, v in sample.items() if k not in to_be_replaced} + result.update({k: getfirst(sample, v, missing_is_error=True) for k, v in kw.items()}) + yield result + except Exception as exn: + if handler(exn): + continue + else: + break + + +rename = pipelinefilter(_rename) + + +def _associate(data, associator, **kw): + """Associate additional data with samples.""" + for sample in data: + if callable(associator): + extra = associator(sample["__key__"]) + else: + extra = associator.get(sample["__key__"], {}) + sample.update(extra) # destructive + yield sample + + +associate = pipelinefilter(_associate) + + +def _map_dict(data, handler=reraise_exception, **kw): + """Map the entries in a dict sample with individual functions.""" + assert len(list(kw.keys())) > 0 + for key, f in kw.items(): + assert callable(f), (key, f) + + for sample in data: + assert isinstance(sample, dict) + try: + for k, f in kw.items(): + sample[k] = f(sample[k]) + except Exception as exn: + if handler(exn): + continue + else: + break + yield sample + + +map_dict = pipelinefilter(_map_dict) + + +def _to_tuple(data, *args, handler=reraise_exception, missing_is_error=True, none_is_error=None): + """Convert dict samples to tuples.""" + if none_is_error is None: + none_is_error = missing_is_error + if len(args) == 1 and isinstance(args[0], str) and " " in args[0]: + args = args[0].split() + + for sample in data: + try: + result = tuple([getfirst(sample, f, missing_is_error=missing_is_error) for f in args]) + if none_is_error and any(x is None for x in result): + raise ValueError(f"to_tuple {args} got {sample.keys()}") + yield result + except Exception as exn: + if handler(exn): + continue + else: + break + + +to_tuple = pipelinefilter(_to_tuple) + + +def _map_tuple(data, *args, handler=reraise_exception): + """Map the entries of a tuple with individual functions.""" + args = [f if f is not None else utils.identity for f in args] + for f in args: + assert callable(f), f + for sample in data: + assert isinstance(sample, (list, tuple)) + sample = list(sample) + n = min(len(args), len(sample)) + try: + for i in range(n): + sample[i] = args[i](sample[i]) + except Exception as exn: + if handler(exn): + continue + else: + break + yield tuple(sample) + + +map_tuple = pipelinefilter(_map_tuple) + + +def _unlisted(data): + """Turn batched data back into unbatched data.""" + for batch in data: + assert isinstance(batch, list), sample + for sample in batch: + yield sample + + +unlisted = pipelinefilter(_unlisted) + + +def _unbatched(data): + """Turn batched data back into unbatched data.""" + for sample in data: + assert isinstance(sample, (tuple, list)), sample + assert len(sample) > 0 + for i in range(len(sample[0])): + yield tuple(x[i] for x in sample) + + +unbatched = pipelinefilter(_unbatched) + + +def _rsample(data, p=0.5): + """Randomly subsample a stream of data.""" + assert p >= 0.0 and p <= 1.0 + for sample in data: + if random.uniform(0.0, 1.0) < p: + yield sample + + +rsample = pipelinefilter(_rsample) + +slice = pipelinefilter(itertools.islice) + + +def _extract_keys(source, *patterns, duplicate_is_error=True, ignore_missing=False): + for sample in source: + result = [] + for pattern in patterns: + pattern = pattern.split(";") if isinstance(pattern, str) else pattern + matches = [x for x in sample.keys() if any(fnmatch("." + x, p) for p in pattern)] + if len(matches) == 0: + if ignore_missing: + continue + else: + raise ValueError(f"Cannot find {pattern} in sample keys {sample.keys()}.") + if len(matches) > 1 and duplicate_is_error: + raise ValueError(f"Multiple sample keys {sample.keys()} match {pattern}.") + value = sample[matches[0]] + result.append(value) + yield tuple(result) + + +extract_keys = pipelinefilter(_extract_keys) + + +def _rename_keys(source, *args, keep_unselected=False, must_match=True, duplicate_is_error=True, **kw): + renamings = [(pattern, output) for output, pattern in args] + renamings += [(pattern, output) for output, pattern in kw.items()] + for sample in source: + new_sample = {} + matched = {k: False for k, _ in renamings} + for path, value in sample.items(): + fname = re.sub(r".*/", "", path) + new_name = None + for pattern, name in renamings[::-1]: + if fnmatch(fname.lower(), pattern): + matched[pattern] = True + new_name = name + break + if new_name is None: + if keep_unselected: + new_sample[path] = value + continue + if new_name in new_sample: + if duplicate_is_error: + raise ValueError(f"Duplicate value in sample {sample.keys()} after rename.") + continue + new_sample[new_name] = value + if must_match and not all(matched.values()): + raise ValueError(f"Not all patterns ({matched}) matched sample keys ({sample.keys()}).") + + yield new_sample + + +rename_keys = pipelinefilter(_rename_keys) + + +def decode_bin(stream): + return stream.read() + + +def decode_text(stream): + binary = stream.read() + return binary.decode("utf-8") + + +def decode_pickle(stream): + return pickle.load(stream) + + +default_decoders = [ + ("*.bin", decode_bin), + ("*.txt", decode_text), + ("*.pyd", decode_pickle), +] + + +def find_decoder(decoders, path): + fname = re.sub(r".*/", "", path) + if fname.startswith("__"): + return lambda x: x + for pattern, fun in decoders[::-1]: + if fnmatch(fname.lower(), pattern) or fnmatch("." + fname.lower(), pattern): + return fun + return None + + +def _xdecode( + source, + *args, + must_decode=True, + defaults=default_decoders, + **kw, +): + decoders = list(defaults) + list(args) + decoders += [("*." + k, v) for k, v in kw.items()] + for sample in source: + new_sample = {} + for path, data in sample.items(): + if path.startswith("__"): + new_sample[path] = data + continue + decoder = find_decoder(decoders, path) + if decoder is False: + value = data + elif decoder is None: + if must_decode: + raise ValueError(f"No decoder found for {path}.") + value = data + else: + if isinstance(data, bytes): + data = io.BytesIO(data) + value = decoder(data) + new_sample[path] = value + yield new_sample + +xdecode = pipelinefilter(_xdecode) + + + +def _data_filter(source, + frame_shift=10, + max_length=10240, + min_length=10, + token_max_length=200, + token_min_length=1, + min_output_input_ratio=0.0005, + max_output_input_ratio=1): + """ Filter sample according to feature and label length + Inplace operation. + + Args:: + source: Iterable[{fname, wav, label, sample_rate}] + frame_shift: length of frame shift (ms) + max_length: drop utterance which is greater than max_length(10ms) + min_length: drop utterance which is less than min_length(10ms) + token_max_length: drop utterance which is greater than + token_max_length, especially when use char unit for + english modeling + token_min_length: drop utterance which is + less than token_max_length + min_output_input_ratio: minimal ration of + token_length / feats_length(10ms) + max_output_input_ratio: maximum ration of + token_length / feats_length(10ms) + + Returns: + Iterable[{fname, wav, label, sample_rate}] + """ + for sample in source: + assert 'sample_rate' in sample + assert 'wav' in sample + assert 'label' in sample + # sample['wav'] is paddle.Tensor, we have 100 frames every second (default) + num_frames = sample['wav'].shape[1] / sample['sample_rate'] * (1000 / frame_shift) + if num_frames < min_length: + continue + if num_frames > max_length: + continue + if len(sample['label']) < token_min_length: + continue + if len(sample['label']) > token_max_length: + continue + if num_frames != 0: + if len(sample['label']) / num_frames < min_output_input_ratio: + continue + if len(sample['label']) / num_frames > max_output_input_ratio: + continue + yield sample + +data_filter = pipelinefilter(_data_filter) + +def _tokenize(source, + symbol_table, + bpe_model=None, + non_lang_syms=None, + split_with_space=False): + """ Decode text to chars or BPE + Inplace operation + + Args: + source: Iterable[{fname, wav, txt, sample_rate}] + + Returns: + Iterable[{fname, wav, txt, tokens, label, sample_rate}] + """ + if non_lang_syms is not None: + non_lang_syms_pattern = re.compile(r"(\[[^\[\]]+\]|<[^<>]+>|{[^{}]+})") + else: + non_lang_syms = {} + non_lang_syms_pattern = None + + if bpe_model is not None: + import sentencepiece as spm + sp = spm.SentencePieceProcessor() + sp.load(bpe_model) + else: + sp = None + + for sample in source: + assert 'txt' in sample + txt = sample['txt'].strip() + if non_lang_syms_pattern is not None: + parts = non_lang_syms_pattern.split(txt.upper()) + parts = [w for w in parts if len(w.strip()) > 0] + else: + parts = [txt] + + label = [] + tokens = [] + for part in parts: + if part in non_lang_syms: + tokens.append(part) + else: + if bpe_model is not None: + tokens.extend(__tokenize_by_bpe_model(sp, part)) + else: + if split_with_space: + part = part.split(" ") + for ch in part: + if ch == ' ': + ch = "" + tokens.append(ch) + + for ch in tokens: + if ch in symbol_table: + label.append(symbol_table[ch]) + elif '' in symbol_table: + label.append(symbol_table['']) + + sample['tokens'] = tokens + sample['label'] = label + yield sample + +tokenize = pipelinefilter(_tokenize) + +def _resample(source, resample_rate=16000): + """ Resample data. + Inplace operation. + + Args: + data: Iterable[{fname, wav, label, sample_rate}] + resample_rate: target resample rate + + Returns: + Iterable[{fname, wav, label, sample_rate}] + """ + for sample in source: + assert 'sample_rate' in sample + assert 'wav' in sample + sample_rate = sample['sample_rate'] + waveform = sample['wav'] + if sample_rate != resample_rate: + sample['sample_rate'] = resample_rate + sample['wav'] = paddle.to_tensor(backends.soundfile_backend.resample( + waveform.numpy(), src_sr = sample_rate, target_sr = resample_rate + )) + yield sample + +resample = pipelinefilter(_resample) + +def _compute_fbank(source, + num_mel_bins=80, + frame_length=25, + frame_shift=10, + dither=0.0): + """ Extract fbank + + Args: + source: Iterable[{fname, wav, label, sample_rate}] + num_mel_bins: number of mel filter bank + frame_length: length of one frame (ms) + frame_shift: length of frame shift (ms) + dither: value of dither + + Returns: + Iterable[{fname, feat, label}] + """ + for sample in source: + assert 'sample_rate' in sample + assert 'wav' in sample + assert 'fname' in sample + assert 'label' in sample + sample_rate = sample['sample_rate'] + waveform = sample['wav'] + waveform = waveform * (1 << 15) + # Only keep fname, feat, label + mat = kaldi.fbank(waveform, + n_mels=num_mel_bins, + frame_length=frame_length, + frame_shift=frame_shift, + dither=dither, + energy_floor=0.0, + sr=sample_rate) + yield dict(fname=sample['fname'], label=sample['label'], feat=mat) + + +compute_fbank = pipelinefilter(_compute_fbank) + +def _spec_aug(source, num_t_mask=2, num_f_mask=2, max_t=40, max_f=30, max_w=80): + """ Do spec augmentation + Inplace operation + + Args: + source: Iterable[{fname, feat, label}] + num_t_mask: number of time mask to apply + num_f_mask: number of freq mask to apply + max_t: max width of time mask + max_f: max width of freq mask + max_w: max width of time warp + + Returns + Iterable[{fname, feat, label}] + """ + for sample in source: + x = sample['feat'] + x = x.numpy() + x = time_warp(x, max_time_warp=max_w, inplace = True, mode= "PIL") + x = freq_mask(x, F = max_f, n_mask = num_f_mask, inplace = True, replace_with_zero = False) + x = time_mask(x, T = max_t, n_mask = num_t_mask, inplace = True, replace_with_zero = False) + sample['feat'] = paddle.to_tensor(x, dtype=paddle.float32) + yield sample + +spec_aug = pipelinefilter(_spec_aug) + + +def _sort(source, sort_size=500): + """ Sort the data by feature length. + Sort is used after shuffle and before batch, so we can group + utts with similar lengths into a batch, and `sort_size` should + be less than `shuffle_size` + + Args: + source: Iterable[{fname, feat, label}] + sort_size: buffer size for sort + + Returns: + Iterable[{fname, feat, label}] + """ + + buf = [] + for sample in source: + buf.append(sample) + if len(buf) >= sort_size: + buf.sort(key=lambda x: x['feat'].shape[0]) + for x in buf: + yield x + buf = [] + # The sample left over + buf.sort(key=lambda x: x['feat'].shape[0]) + for x in buf: + yield x + +sort = pipelinefilter(_sort) + +def _batched(source, batch_size=16): + """ Static batch the data by `batch_size` + + Args: + data: Iterable[{fname, feat, label}] + batch_size: batch size + + Returns: + Iterable[List[{fname, feat, label}]] + """ + buf = [] + for sample in source: + buf.append(sample) + if len(buf) >= batch_size: + yield buf + buf = [] + if len(buf) > 0: + yield buf + +batched = pipelinefilter(_batched) + +def dynamic_batched(source, max_frames_in_batch=12000): + """ Dynamic batch the data until the total frames in batch + reach `max_frames_in_batch` + + Args: + source: Iterable[{fname, feat, label}] + max_frames_in_batch: max_frames in one batch + + Returns: + Iterable[List[{fname, feat, label}]] + """ + buf = [] + longest_frames = 0 + for sample in source: + assert 'feat' in sample + assert isinstance(sample['feat'], paddle.Tensor) + new_sample_frames = sample['feat'].size(0) + longest_frames = max(longest_frames, new_sample_frames) + frames_after_padding = longest_frames * (len(buf) + 1) + if frames_after_padding > max_frames_in_batch: + yield buf + buf = [sample] + longest_frames = new_sample_frames + else: + buf.append(sample) + if len(buf) > 0: + yield buf + + +def _padding(source): + """ Padding the data into training data + + Args: + source: Iterable[List[{fname, feat, label}]] + + Returns: + Iterable[Tuple(fname, feats, labels, feats lengths, label lengths)] + """ + for sample in source: + assert isinstance(sample, list) + feats_length = paddle.to_tensor([x['feat'].shape[0] for x in sample], + dtype="int64") + order = paddle.argsort(feats_length, descending=True) + feats_lengths = paddle.to_tensor( + [sample[i]['feat'].shape[0] for i in order], dtype="int64") + sorted_feats = [sample[i]['feat'] for i in order] + sorted_keys = [sample[i]['fname'] for i in order] + sorted_labels = [ + paddle.to_tensor(sample[i]['label'], dtype="int32") for i in order + ] + label_lengths = paddle.to_tensor([x.shape[0] for x in sorted_labels], + dtype="int64") + padded_feats = pad_sequence(sorted_feats, + batch_first=True, + padding_value=0) + padding_labels = pad_sequence(sorted_labels, + batch_first=True, + padding_value=-1) + + yield (sorted_keys, padded_feats, feats_lengths, padding_labels, + label_lengths) + +padding = pipelinefilter(_padding) + +def _cmvn(source, cmvn_file): + global_cmvn = GlobalCMVN(cmvn_file) + for batch in source: + sorted_keys, padded_feats, feats_lengths, padding_labels, label_lengths = batch + padded_feats = padded_feats.numpy() + padded_feats = global_cmvn(padded_feats) + padded_feats = paddle.to_tensor(padded_feats, dtype=paddle.float32) + yield (sorted_keys, padded_feats, feats_lengths, padding_labels, + label_lengths) + +cmvn = pipelinefilter(_cmvn) diff --git a/paddlespeech/audio/stream_data/paddle_utils.py b/paddlespeech/audio/stream_data/paddle_utils.py new file mode 100644 index 00000000..02bc4c84 --- /dev/null +++ b/paddlespeech/audio/stream_data/paddle_utils.py @@ -0,0 +1,33 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +# + +"""Mock implementations of paddle interfaces when paddle is not available.""" + + +try: + from paddle.io import DataLoader, IterableDataset +except ModuleNotFoundError: + + class IterableDataset: + """Empty implementation of IterableDataset when paddle is not available.""" + + pass + + class DataLoader: + """Empty implementation of DataLoader when paddle is not available.""" + + pass + +try: + from paddle import Tensor as PaddleTensor +except ModuleNotFoundError: + + class TorchTensor: + """Empty implementation of PaddleTensor when paddle is not available.""" + + pass diff --git a/paddlespeech/audio/stream_data/pipeline.py b/paddlespeech/audio/stream_data/pipeline.py new file mode 100644 index 00000000..b672773b --- /dev/null +++ b/paddlespeech/audio/stream_data/pipeline.py @@ -0,0 +1,127 @@ +# Copyright (c) 2017-2019 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +#%% +import copy, os, random, sys, time +from dataclasses import dataclass +from itertools import islice +from typing import List + +import braceexpand, yaml + +from webdataset import autodecode, extradatasets as eds, filters, shardlists, tariterators +from webdataset.handlers import reraise_exception +from .paddle_utils import DataLoader, IterableDataset +from .utils import PipelineStage + + +def add_length_method(obj): + def length(self): + return self.size + + Combined = type( + obj.__class__.__name__ + "_Length", + (obj.__class__, IterableDataset), + {"__len__": length}, + ) + obj.__class__ = Combined + return obj + + +class DataPipeline(IterableDataset, PipelineStage): + """A pipeline starting with an IterableDataset and a series of filters.""" + + def __init__(self, *args, **kwargs): + super().__init__() + self.pipeline = [] + self.length = -1 + self.repetitions = 1 + self.nsamples = -1 + for arg in args: + if arg is None: + continue + if isinstance(arg, list): + self.pipeline.extend(arg) + else: + self.pipeline.append(arg) + + def invoke(self, f, *args, **kwargs): + """Apply a pipeline stage, possibly to the output of a previous stage.""" + if isinstance(f, PipelineStage): + return f.run(*args, **kwargs) + if isinstance(f, (IterableDataset, DataLoader)) and len(args) == 0: + return iter(f) + if isinstance(f, list): + return iter(f) + if callable(f): + result = f(*args, **kwargs) + return result + raise ValueError(f"{f}: not a valid pipeline stage") + + def iterator1(self): + """Create an iterator through one epoch in the pipeline.""" + source = self.invoke(self.pipeline[0]) + for step in self.pipeline[1:]: + source = self.invoke(step, source) + return source + + def iterator(self): + """Create an iterator through the entire dataset, using the given number of repetitions.""" + for i in range(self.repetitions): + for sample in self.iterator1(): + yield sample + + def __iter__(self): + """Create an iterator through the pipeline, repeating and slicing as requested.""" + if self.repetitions != 1: + if self.nsamples > 0: + return islice(self.iterator(), self.nsamples) + else: + return self.iterator() + else: + return self.iterator() + + def stage(self, i): + """Return pipeline stage i.""" + return self.pipeline[i] + + def append(self, f): + """Append a pipeline stage (modifies the object).""" + self.pipeline.append(f) + + def compose(self, *args): + """Append a pipeline stage to a copy of the pipeline and returns the copy.""" + result = copy.copy(self) + for arg in args: + result.append(arg) + return result + + def with_length(self, n): + """Add a __len__ method returning the desired value. + + This does not change the actual number of samples in an epoch. + PyTorch IterableDataset should not have a __len__ method. + This is provided only as a workaround for some broken training environments + that require a __len__ method. + """ + self.size = n + return add_length_method(self) + + def with_epoch(self, nsamples=-1, nbatches=-1): + """Change the epoch to return the given number of samples/batches. + + The two arguments mean the same thing.""" + self.repetitions = sys.maxsize + self.nsamples = max(nsamples, nbatches) + return self + + def repeat(self, nepochs=-1, nbatches=-1): + """Repeat iterating through the dataset for the given #epochs up to the given #samples.""" + if nepochs > 0: + self.repetitions = nepochs + self.nsamples = nbatches + else: + self.repetitions = sys.maxsize + self.nsamples = nbatches + return self diff --git a/paddlespeech/audio/stream_data/shardlists.py b/paddlespeech/audio/stream_data/shardlists.py new file mode 100644 index 00000000..503bfe57 --- /dev/null +++ b/paddlespeech/audio/stream_data/shardlists.py @@ -0,0 +1,257 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# + +# Modified from https://github.com/webdataset/webdataset + +"""Train PyTorch models directly from POSIX tar archive. + +Code works locally or over HTTP connections. +""" + +import os, random, sys, time +from dataclasses import dataclass, field +from itertools import islice +from typing import List + +import braceexpand, yaml + +from . import utils +from .filters import pipelinefilter +from .paddle_utils import IterableDataset + + +def expand_urls(urls): + if isinstance(urls, str): + urllist = urls.split("::") + result = [] + for url in urllist: + result.extend(braceexpand.braceexpand(url)) + return result + else: + return list(urls) + + +class SimpleShardList(IterableDataset): + """An iterable dataset yielding a list of urls.""" + + def __init__(self, urls, seed=None): + """Iterate through the list of shards. + + :param urls: a list of URLs as a Python list or brace notation string + """ + super().__init__() + urls = expand_urls(urls) + self.urls = urls + assert isinstance(self.urls[0], str) + self.seed = seed + + def __len__(self): + return len(self.urls) + + def __iter__(self): + """Return an iterator over the shards.""" + urls = self.urls.copy() + if self.seed is not None: + random.Random(self.seed).shuffle(urls) + for url in urls: + yield dict(url=url) + + +def split_by_node(src, group=None): + rank, world_size, worker, num_workers = utils.paddle_worker_info(group=group) + if world_size > 1: + for s in islice(src, rank, None, world_size): + yield s + else: + for s in src: + yield s + + +def single_node_only(src, group=None): + rank, world_size, worker, num_workers = utils.paddle_worker_info(group=group) + if world_size > 1: + raise ValueError("input pipeline needs to be reconfigured for multinode training") + for s in src: + yield s + + +def split_by_worker(src): + rank, world_size, worker, num_workers = utils.paddle_worker_info() + if num_workers > 1: + for s in islice(src, worker, None, num_workers): + yield s + else: + for s in src: + yield s + + +def resampled_(src, n=sys.maxsize): + import random + + seed = time.time() + try: + seed = open("/dev/random", "rb").read(20) + except Exception as exn: + print(repr(exn)[:50], file=sys.stderr) + rng = random.Random(seed) + print("# resampled loading", file=sys.stderr) + items = list(src) + print(f"# resampled got {len(items)} samples, yielding {n}", file=sys.stderr) + for i in range(n): + yield rng.choice(items) + + +resampled = pipelinefilter(resampled_) + + +def non_empty(src): + count = 0 + for s in src: + yield s + count += 1 + if count == 0: + raise ValueError("pipeline stage received no data at all and this was declared as an error") + + +@dataclass +class MSSource: + """Class representing a data source.""" + + name: str = "" + perepoch: int = -1 + resample: bool = False + urls: List[str] = field(default_factory=list) + + +default_rng = random.Random() + + +def expand(s): + return os.path.expanduser(os.path.expandvars(s)) + + +class MultiShardSample(IterableDataset): + def __init__(self, fname): + """Construct a shardlist from multiple sources using a YAML spec.""" + self.epoch = -1 +class MultiShardSample(IterableDataset): + def __init__(self, fname): + """Construct a shardlist from multiple sources using a YAML spec.""" + self.epoch = -1 + self.parse_spec(fname) + + def parse_spec(self, fname): + self.rng = default_rng # capture default_rng if we fork + if isinstance(fname, dict): + spec = fname + fname = "{dict}" + else: + with open(fname) as stream: + spec = yaml.safe_load(stream) + assert set(spec.keys()).issubset(set("prefix datasets buckets".split())), list(spec.keys()) + prefix = expand(spec.get("prefix", "")) + self.sources = [] + for ds in spec["datasets"]: + assert set(ds.keys()).issubset(set("buckets name shards resample choose".split())), list( + ds.keys() + ) + buckets = ds.get("buckets", spec.get("buckets", [])) + if isinstance(buckets, str): + buckets = [buckets] + buckets = [expand(s) for s in buckets] + if buckets == []: + buckets = [""] + assert len(buckets) == 1, f"{buckets}: FIXME support for multiple buckets unimplemented" + bucket = buckets[0] + name = ds.get("name", "@" + bucket) + urls = ds["shards"] + if isinstance(urls, str): + urls = [urls] + # urls = [u for url in urls for u in braceexpand.braceexpand(url)] + urls = [ + prefix + os.path.join(bucket, u) for url in urls for u in braceexpand.braceexpand(expand(url)) + ] + resample = ds.get("resample", -1) + nsample = ds.get("choose", -1) + if nsample > len(urls): + raise ValueError(f"perepoch {nsample} must be no greater than the number of shards") + if (nsample > 0) and (resample > 0): + raise ValueError("specify only one of perepoch or choose") + entry = MSSource(name=name, urls=urls, perepoch=nsample, resample=resample) + self.sources.append(entry) + print(f"# {name} {len(urls)} {nsample}", file=sys.stderr) + + def set_epoch(self, seed): + """Set the current epoch (for consistent shard selection among nodes).""" + self.rng = random.Random(seed) + + def get_shards_for_epoch(self): + result = [] + for source in self.sources: + if source.resample > 0: + # sample with replacement + l = self.rng.choices(source.urls, k=source.resample) + elif source.perepoch > 0: + # sample without replacement + l = list(source.urls) + self.rng.shuffle(l) + l = l[: source.perepoch] + else: + l = list(source.urls) + result += l + self.rng.shuffle(result) + return result + + def __iter__(self): + shards = self.get_shards_for_epoch() + for shard in shards: + yield dict(url=shard) + + +def shardspec(spec): + if spec.endswith(".yaml"): + return MultiShardSample(spec) + else: + return SimpleShardList(spec) + + +class ResampledShards(IterableDataset): + """An iterable dataset yielding a list of urls.""" + + def __init__( + self, + urls, + nshards=sys.maxsize, + worker_seed=None, + deterministic=False, + ): + """Sample shards from the shard list with replacement. + + :param urls: a list of URLs as a Python list or brace notation string + """ + super().__init__() + urls = expand_urls(urls) + self.urls = urls + assert isinstance(self.urls[0], str) + self.nshards = nshards + self.worker_seed = utils.paddle_worker_seed if worker_seed is None else worker_seed + self.deterministic = deterministic + self.epoch = -1 + + def __iter__(self): + """Return an iterator over the shards.""" + self.epoch += 1 + if self.deterministic: + seed = utils.make_seed(self.worker_seed(), self.epoch) + else: + seed = utils.make_seed(self.worker_seed(), self.epoch, os.getpid(), time.time_ns(), os.urandom(4)) + if os.environ.get("WDS_SHOW_SEED", "0") == "1": + print(f"# ResampledShards seed {seed}") + self.rng = random.Random(seed) + for _ in range(self.nshards): + index = self.rng.randint(0, len(self.urls) - 1) + yield dict(url=self.urls[index]) diff --git a/paddlespeech/audio/stream_data/tariterators.py b/paddlespeech/audio/stream_data/tariterators.py new file mode 100644 index 00000000..d9469797 --- /dev/null +++ b/paddlespeech/audio/stream_data/tariterators.py @@ -0,0 +1,283 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). + +# Modified from https://github.com/webdataset/webdataset +# Modified from wenet(https://github.com/wenet-e2e/wenet) + +"""Low level iteration functions for tar archives.""" + +import random, re, tarfile + +import braceexpand + +from . import filters +from webdataset import gopen +from webdataset.handlers import reraise_exception + +trace = False +meta_prefix = "__" +meta_suffix = "__" + +from ... import audio as paddleaudio +import paddle +import numpy as np + +AUDIO_FORMAT_SETS = set(['flac', 'mp3', 'm4a', 'ogg', 'opus', 'wav', 'wma']) + +def base_plus_ext(path): + """Split off all file extensions. + + Returns base, allext. + + :param path: path with extensions + :param returns: path with all extensions removed + + """ + match = re.match(r"^((?:.*/|)[^.]+)[.]([^/]*)$", path) + if not match: + return None, None + return match.group(1), match.group(2) + + +def valid_sample(sample): + """Check whether a sample is valid. + + :param sample: sample to be checked + """ + return ( + sample is not None + and isinstance(sample, dict) + and len(list(sample.keys())) > 0 + and not sample.get("__bad__", False) + ) + + +# FIXME: UNUSED +def shardlist(urls, *, shuffle=False): + """Given a list of URLs, yields that list, possibly shuffled.""" + if isinstance(urls, str): + urls = braceexpand.braceexpand(urls) + else: + urls = list(urls) + if shuffle: + random.shuffle(urls) + for url in urls: + yield dict(url=url) + + +def url_opener(data, handler=reraise_exception, **kw): + """Given a stream of url names (packaged in `dict(url=url)`), yield opened streams.""" + for sample in data: + assert isinstance(sample, dict), sample + assert "url" in sample + url = sample["url"] + try: + stream = gopen.gopen(url, **kw) + sample.update(stream=stream) + yield sample + except Exception as exn: + exn.args = exn.args + (url,) + if handler(exn): + continue + else: + break + + +def tar_file_iterator( + fileobj, skip_meta=r"__[^/]*__($|/)", handler=reraise_exception +): + """Iterate over tar file, yielding filename, content pairs for the given tar stream. + + :param fileobj: byte stream suitable for tarfile + :param skip_meta: regexp for keys that are skipped entirely (Default value = r"__[^/]*__($|/)") + + """ + stream = tarfile.open(fileobj=fileobj, mode="r:*") + for tarinfo in stream: + fname = tarinfo.name + try: + if not tarinfo.isreg(): + continue + if fname is None: + continue + if ( + "/" not in fname + and fname.startswith(meta_prefix) + and fname.endswith(meta_suffix) + ): + # skipping metadata for now + continue + if skip_meta is not None and re.match(skip_meta, fname): + continue + + name = tarinfo.name + pos = name.rfind('.') + assert pos > 0 + prefix, postfix = name[:pos], name[pos + 1:] + if postfix == 'wav': + waveform, sample_rate = paddleaudio.load(stream.extractfile(tarinfo), normal=False) + result = dict(fname=prefix, wav=waveform, sample_rate = sample_rate) + else: + txt = stream.extractfile(tarinfo).read().decode('utf8').strip() + result = dict(fname=prefix, txt=txt) + #result = dict(fname=fname, data=data) + yield result + stream.members = [] + except Exception as exn: + if hasattr(exn, "args") and len(exn.args) > 0: + exn.args = (exn.args[0] + " @ " + str(fileobj),) + exn.args[1:] + if handler(exn): + continue + else: + break + del stream + +def tar_file_and_group_iterator( + fileobj, skip_meta=r"__[^/]*__($|/)", handler=reraise_exception +): + """ Expand a stream of open tar files into a stream of tar file contents. + And groups the file with same prefix + + Args: + data: Iterable[{src, stream}] + + Returns: + Iterable[{key, wav, txt, sample_rate}] + """ + stream = tarfile.open(fileobj=fileobj, mode="r:*") + prev_prefix = None + example = {} + valid = True + for tarinfo in stream: + name = tarinfo.name + pos = name.rfind('.') + assert pos > 0 + prefix, postfix = name[:pos], name[pos + 1:] + if prev_prefix is not None and prefix != prev_prefix: + example['fname'] = prev_prefix + if valid: + yield example + example = {} + valid = True + with stream.extractfile(tarinfo) as file_obj: + try: + if postfix == 'txt': + example['txt'] = file_obj.read().decode('utf8').strip() + elif postfix in AUDIO_FORMAT_SETS: + waveform, sample_rate = paddleaudio.load(file_obj, normal=False) + waveform = paddle.to_tensor(np.expand_dims(np.array(waveform),0), dtype=paddle.float32) + + example['wav'] = waveform + example['sample_rate'] = sample_rate + else: + example[postfix] = file_obj.read() + except Exception as exn: + if hasattr(exn, "args") and len(exn.args) > 0: + exn.args = (exn.args[0] + " @ " + str(fileobj),) + exn.args[1:] + if handler(exn): + continue + else: + break + valid = False + # logging.warning('error to parse {}'.format(name)) + prev_prefix = prefix + if prev_prefix is not None: + example['fname'] = prev_prefix + yield example + stream.close() + +def tar_file_expander(data, handler=reraise_exception): + """Expand a stream of open tar files into a stream of tar file contents. + + This returns an iterator over (filename, file_contents). + """ + for source in data: + url = source["url"] + try: + assert isinstance(source, dict) + assert "stream" in source + for sample in tar_file_iterator(source["stream"]): + assert ( + isinstance(sample, dict) and "data" in sample and "fname" in sample + ) + sample["__url__"] = url + yield sample + except Exception as exn: + exn.args = exn.args + (source.get("stream"), source.get("url")) + if handler(exn): + continue + else: + break + + + + +def tar_file_and_group_expander(data, handler=reraise_exception): + """Expand a stream of open tar files into a stream of tar file contents. + + This returns an iterator over (filename, file_contents). + """ + for source in data: + url = source["url"] + try: + assert isinstance(source, dict) + assert "stream" in source + for sample in tar_file_and_group_iterator(source["stream"]): + assert ( + isinstance(sample, dict) and "wav" in sample and "txt" in sample and "fname" in sample + ) + sample["__url__"] = url + yield sample + except Exception as exn: + exn.args = exn.args + (source.get("stream"), source.get("url")) + if handler(exn): + continue + else: + break + + +def group_by_keys(data, keys=base_plus_ext, lcase=True, suffixes=None, handler=None): + """Return function over iterator that groups key, value pairs into samples. + + :param keys: function that splits the key into key and extension (base_plus_ext) + :param lcase: convert suffixes to lower case (Default value = True) + """ + current_sample = None + for filesample in data: + assert isinstance(filesample, dict) + fname, value = filesample["fname"], filesample["data"] + prefix, suffix = keys(fname) + if trace: + print( + prefix, + suffix, + current_sample.keys() if isinstance(current_sample, dict) else None, + ) + if prefix is None: + continue + if lcase: + suffix = suffix.lower() + if current_sample is None or prefix != current_sample["__key__"]: + if valid_sample(current_sample): + yield current_sample + current_sample = dict(__key__=prefix, __url__=filesample["__url__"]) + if suffix in current_sample: + raise ValueError( + f"{fname}: duplicate file name in tar file {suffix} {current_sample.keys()}" + ) + if suffixes is None or suffix in suffixes: + current_sample[suffix] = value + if valid_sample(current_sample): + yield current_sample + + +def tarfile_samples(src, handler=reraise_exception): + streams = url_opener(src, handler=handler) + samples = tar_file_and_group_expander(streams, handler=handler) + return samples + + +tarfile_to_samples = filters.pipelinefilter(tarfile_samples) diff --git a/paddlespeech/audio/stream_data/utils.py b/paddlespeech/audio/stream_data/utils.py new file mode 100644 index 00000000..83a42bad --- /dev/null +++ b/paddlespeech/audio/stream_data/utils.py @@ -0,0 +1,128 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# + +# Modified from https://github.com/webdataset/webdataset + +"""Miscellaneous utility functions.""" + +import importlib +import itertools as itt +import os +import re +import sys +from typing import Any, Callable, Iterator, Optional, Union + + +def make_seed(*args): + seed = 0 + for arg in args: + seed = (seed * 31 + hash(arg)) & 0x7FFFFFFF + return seed + + +class PipelineStage: + def invoke(self, *args, **kw): + raise NotImplementedError + + +def identity(x: Any) -> Any: + """Return the argument as is.""" + return x + + +def safe_eval(s: str, expr: str = "{}"): + """Evaluate the given expression more safely.""" + if re.sub("[^A-Za-z0-9_]", "", s) != s: + raise ValueError(f"safe_eval: illegal characters in: '{s}'") + return eval(expr.format(s)) + + +def lookup_sym(sym: str, modules: list): + """Look up a symbol in a list of modules.""" + for mname in modules: + module = importlib.import_module(mname, package="webdataset") + result = getattr(module, sym, None) + if result is not None: + return result + return None + + +def repeatedly0( + loader: Iterator, nepochs: int = sys.maxsize, nbatches: int = sys.maxsize +): + """Repeatedly returns batches from a DataLoader.""" + for epoch in range(nepochs): + for sample in itt.islice(loader, nbatches): + yield sample + + +def guess_batchsize(batch: Union[tuple, list]): + """Guess the batch size by looking at the length of the first element in a tuple.""" + return len(batch[0]) + + +def repeatedly( + source: Iterator, + nepochs: int = None, + nbatches: int = None, + nsamples: int = None, + batchsize: Callable[..., int] = guess_batchsize, +): + """Repeatedly yield samples from an iterator.""" + epoch = 0 + batch = 0 + total = 0 + while True: + for sample in source: + yield sample + batch += 1 + if nbatches is not None and batch >= nbatches: + return + if nsamples is not None: + total += guess_batchsize(sample) + if total >= nsamples: + return + epoch += 1 + if nepochs is not None and epoch >= nepochs: + return + +def paddle_worker_info(group=None): + """Return node and worker info for PyTorch and some distributed environments.""" + rank = 0 + world_size = 1 + worker = 0 + num_workers = 1 + if "RANK" in os.environ and "WORLD_SIZE" in os.environ: + rank = int(os.environ["RANK"]) + world_size = int(os.environ["WORLD_SIZE"]) + else: + try: + import paddle.distributed + group = group or paddle.distributed.get_group() + rank = paddle.distributed.get_rank() + world_size = paddle.distributed.get_world_size() + except ModuleNotFoundError: + pass + if "WORKER" in os.environ and "NUM_WORKERS" in os.environ: + worker = int(os.environ["WORKER"]) + num_workers = int(os.environ["NUM_WORKERS"]) + else: + try: + import paddle.io.get_worker_info + worker_info = paddle.io.get_worker_info() + if worker_info is not None: + worker = worker_info.id + num_workers = worker_info.num_workers + except ModuleNotFoundError: + pass + + return rank, world_size, worker, num_workers + +def paddle_worker_seed(group=None): + """Compute a distinct, deterministic RNG seed for each worker and node.""" + rank, world_size, worker, num_workers = paddle_worker_info(group=group) + return rank * 1000 + worker diff --git a/paddlespeech/audio/transform/__init__.py b/paddlespeech/audio/transform/__init__.py new file mode 100644 index 00000000..185a92b8 --- /dev/null +++ b/paddlespeech/audio/transform/__init__.py @@ -0,0 +1,13 @@ +# 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. diff --git a/paddlespeech/audio/transform/add_deltas.py b/paddlespeech/audio/transform/add_deltas.py new file mode 100644 index 00000000..1387fe9d --- /dev/null +++ b/paddlespeech/audio/transform/add_deltas.py @@ -0,0 +1,54 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import numpy as np + + +def delta(feat, window): + assert window > 0 + delta_feat = np.zeros_like(feat) + for i in range(1, window + 1): + delta_feat[:-i] += i * feat[i:] + delta_feat[i:] += -i * feat[:-i] + delta_feat[-i:] += i * feat[-1] + delta_feat[:i] += -i * feat[0] + delta_feat /= 2 * sum(i**2 for i in range(1, window + 1)) + return delta_feat + + +def add_deltas(x, window=2, order=2): + """ + Args: + x (np.ndarray): speech feat, (T, D). + + Return: + np.ndarray: (T, (1+order)*D) + """ + feats = [x] + for _ in range(order): + feats.append(delta(feats[-1], window)) + return np.concatenate(feats, axis=1) + + +class AddDeltas(): + def __init__(self, window=2, order=2): + self.window = window + self.order = order + + def __repr__(self): + return "{name}(window={window}, order={order}".format( + name=self.__class__.__name__, window=self.window, order=self.order) + + def __call__(self, x): + return add_deltas(x, window=self.window, order=self.order) diff --git a/paddlespeech/audio/transform/channel_selector.py b/paddlespeech/audio/transform/channel_selector.py new file mode 100644 index 00000000..b078dcf8 --- /dev/null +++ b/paddlespeech/audio/transform/channel_selector.py @@ -0,0 +1,57 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import numpy + + +class ChannelSelector(): + """Select 1ch from multi-channel signal""" + + def __init__(self, train_channel="random", eval_channel=0, axis=1): + self.train_channel = train_channel + self.eval_channel = eval_channel + self.axis = axis + + def __repr__(self): + return ("{name}(train_channel={train_channel}, " + "eval_channel={eval_channel}, axis={axis})".format( + name=self.__class__.__name__, + train_channel=self.train_channel, + eval_channel=self.eval_channel, + axis=self.axis, )) + + def __call__(self, x, train=True): + # Assuming x: [Time, Channel] by default + + if x.ndim <= self.axis: + # If the dimension is insufficient, then unsqueeze + # (e.g [Time] -> [Time, 1]) + ind = tuple( + slice(None) if i < x.ndim else None + for i in range(self.axis + 1)) + x = x[ind] + + if train: + channel = self.train_channel + else: + channel = self.eval_channel + + if channel == "random": + ch = numpy.random.randint(0, x.shape[self.axis]) + else: + ch = channel + + ind = tuple( + slice(None) if i != self.axis else ch for i in range(x.ndim)) + return x[ind] diff --git a/paddlespeech/audio/transform/cmvn.py b/paddlespeech/audio/transform/cmvn.py new file mode 100644 index 00000000..2db0070b --- /dev/null +++ b/paddlespeech/audio/transform/cmvn.py @@ -0,0 +1,201 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import io +import json + +import h5py +import kaldiio +import numpy as np + + +class CMVN(): + "Apply Global/Spk CMVN/iverserCMVN." + + def __init__( + self, + stats, + norm_means=True, + norm_vars=False, + filetype="mat", + utt2spk=None, + spk2utt=None, + reverse=False, + std_floor=1.0e-20, ): + self.stats_file = stats + self.norm_means = norm_means + self.norm_vars = norm_vars + self.reverse = reverse + + if isinstance(stats, dict): + stats_dict = dict(stats) + else: + # Use for global CMVN + if filetype == "mat": + stats_dict = {None: kaldiio.load_mat(stats)} + # Use for global CMVN + elif filetype == "npy": + stats_dict = {None: np.load(stats)} + # Use for speaker CMVN + elif filetype == "ark": + self.accept_uttid = True + stats_dict = dict(kaldiio.load_ark(stats)) + # Use for speaker CMVN + elif filetype == "hdf5": + self.accept_uttid = True + stats_dict = h5py.File(stats) + else: + raise ValueError("Not supporting filetype={}".format(filetype)) + + if utt2spk is not None: + self.utt2spk = {} + with io.open(utt2spk, "r", encoding="utf-8") as f: + for line in f: + utt, spk = line.rstrip().split(None, 1) + self.utt2spk[utt] = spk + elif spk2utt is not None: + self.utt2spk = {} + with io.open(spk2utt, "r", encoding="utf-8") as f: + for line in f: + spk, utts = line.rstrip().split(None, 1) + for utt in utts.split(): + self.utt2spk[utt] = spk + else: + self.utt2spk = None + + # Kaldi makes a matrix for CMVN which has a shape of (2, feat_dim + 1), + # and the first vector contains the sum of feats and the second is + # the sum of squares. The last value of the first, i.e. stats[0,-1], + # is the number of samples for this statistics. + self.bias = {} + self.scale = {} + for spk, stats in stats_dict.items(): + assert len(stats) == 2, stats.shape + + count = stats[0, -1] + + # If the feature has two or more dimensions + if not (np.isscalar(count) or isinstance(count, (int, float))): + # The first is only used + count = count.flatten()[0] + + mean = stats[0, :-1] / count + # V(x) = E(x^2) - (E(x))^2 + var = stats[1, :-1] / count - mean * mean + std = np.maximum(np.sqrt(var), std_floor) + self.bias[spk] = -mean + self.scale[spk] = 1 / std + + def __repr__(self): + return ("{name}(stats_file={stats_file}, " + "norm_means={norm_means}, norm_vars={norm_vars}, " + "reverse={reverse})".format( + name=self.__class__.__name__, + stats_file=self.stats_file, + norm_means=self.norm_means, + norm_vars=self.norm_vars, + reverse=self.reverse, )) + + def __call__(self, x, uttid=None): + if self.utt2spk is not None: + spk = self.utt2spk[uttid] + else: + spk = uttid + + if not self.reverse: + # apply cmvn + if self.norm_means: + x = np.add(x, self.bias[spk]) + if self.norm_vars: + x = np.multiply(x, self.scale[spk]) + + else: + # apply reverse cmvn + if self.norm_vars: + x = np.divide(x, self.scale[spk]) + if self.norm_means: + x = np.subtract(x, self.bias[spk]) + + return x + + +class UtteranceCMVN(): + "Apply Utterance CMVN" + + def __init__(self, norm_means=True, norm_vars=False, std_floor=1.0e-20): + self.norm_means = norm_means + self.norm_vars = norm_vars + self.std_floor = std_floor + + def __repr__(self): + return "{name}(norm_means={norm_means}, norm_vars={norm_vars})".format( + name=self.__class__.__name__, + norm_means=self.norm_means, + norm_vars=self.norm_vars, ) + + def __call__(self, x, uttid=None): + # x: [Time, Dim] + square_sums = (x**2).sum(axis=0) + mean = x.mean(axis=0) + + if self.norm_means: + x = np.subtract(x, mean) + + if self.norm_vars: + var = square_sums / x.shape[0] - mean**2 + std = np.maximum(np.sqrt(var), self.std_floor) + x = np.divide(x, std) + + return x + + +class GlobalCMVN(): + "Apply Global CMVN" + + def __init__(self, + cmvn_path, + norm_means=True, + norm_vars=True, + std_floor=1.0e-20): + # cmvn_path: Option[str, dict] + cmvn = cmvn_path + self.cmvn = cmvn + self.norm_means = norm_means + self.norm_vars = norm_vars + self.std_floor = std_floor + if isinstance(cmvn, dict): + cmvn_stats = cmvn + else: + with open(cmvn) as f: + cmvn_stats = json.load(f) + self.count = cmvn_stats['frame_num'] + self.mean = np.array(cmvn_stats['mean_stat']) / self.count + self.square_sums = np.array(cmvn_stats['var_stat']) + self.var = self.square_sums / self.count - self.mean**2 + self.std = np.maximum(np.sqrt(self.var), self.std_floor) + + def __repr__(self): + return f"""{self.__class__.__name__}( + cmvn_path={self.cmvn}, + norm_means={self.norm_means}, + norm_vars={self.norm_vars},)""" + + def __call__(self, x, uttid=None): + # x: [Time, Dim] + if self.norm_means: + x = np.subtract(x, self.mean) + + if self.norm_vars: + x = np.divide(x, self.std) + return x diff --git a/paddlespeech/audio/transform/functional.py b/paddlespeech/audio/transform/functional.py new file mode 100644 index 00000000..271819ad --- /dev/null +++ b/paddlespeech/audio/transform/functional.py @@ -0,0 +1,86 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import inspect + +from paddlespeech.audio.transform.transform_interface import TransformInterface +from paddlespeech.audio.utils.check_kwargs import check_kwargs + + +class FuncTrans(TransformInterface): + """Functional Transformation + + WARNING: + Builtin or C/C++ functions may not work properly + because this class heavily depends on the `inspect` module. + + Usage: + + >>> def foo_bar(x, a=1, b=2): + ... '''Foo bar + ... :param x: input + ... :param int a: default 1 + ... :param int b: default 2 + ... ''' + ... return x + a - b + + + >>> class FooBar(FuncTrans): + ... _func = foo_bar + ... __doc__ = foo_bar.__doc__ + """ + + _func = None + + def __init__(self, **kwargs): + self.kwargs = kwargs + check_kwargs(self.func, kwargs) + + def __call__(self, x): + return self.func(x, **self.kwargs) + + @classmethod + def add_arguments(cls, parser): + fname = cls._func.__name__.replace("_", "-") + group = parser.add_argument_group(fname + " transformation setting") + for k, v in cls.default_params().items(): + # TODO(karita): get help and choices from docstring? + attr = k.replace("_", "-") + group.add_argument(f"--{fname}-{attr}", default=v, type=type(v)) + return parser + + @property + def func(self): + return type(self)._func + + @classmethod + def default_params(cls): + try: + d = dict(inspect.signature(cls._func).parameters) + except ValueError: + d = dict() + return { + k: v.default + for k, v in d.items() if v.default != inspect.Parameter.empty + } + + def __repr__(self): + params = self.default_params() + params.update(**self.kwargs) + ret = self.__class__.__name__ + "(" + if len(params) == 0: + return ret + ")" + for k, v in params.items(): + ret += "{}={}, ".format(k, v) + return ret[:-2] + ")" diff --git a/paddlespeech/audio/transform/perturb.py b/paddlespeech/audio/transform/perturb.py new file mode 100644 index 00000000..8044dc36 --- /dev/null +++ b/paddlespeech/audio/transform/perturb.py @@ -0,0 +1,561 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import librosa +import numpy +import scipy +import soundfile + +import io +import os +import h5py +import numpy as np + +class SoundHDF5File(): + """Collecting sound files to a HDF5 file + + >>> f = SoundHDF5File('a.flac.h5', mode='a') + >>> array = np.random.randint(0, 100, 100, dtype=np.int16) + >>> f['id'] = (array, 16000) + >>> array, rate = f['id'] + + + :param: str filepath: + :param: str mode: + :param: str format: The type used when saving wav. flac, nist, htk, etc. + :param: str dtype: + + """ + + def __init__(self, + filepath, + mode="r+", + format=None, + dtype="int16", + **kwargs): + self.filepath = filepath + self.mode = mode + self.dtype = dtype + + self.file = h5py.File(filepath, mode, **kwargs) + if format is None: + # filepath = a.flac.h5 -> format = flac + second_ext = os.path.splitext(os.path.splitext(filepath)[0])[1] + format = second_ext[1:] + if format.upper() not in soundfile.available_formats(): + # If not found, flac is selected + format = "flac" + + # This format affects only saving + self.format = format + + def __repr__(self): + return ''.format( + self.filepath, self.mode, self.format, self.dtype) + + def create_dataset(self, name, shape=None, data=None, **kwds): + f = io.BytesIO() + array, rate = data + soundfile.write(f, array, rate, format=self.format) + self.file.create_dataset( + name, shape=shape, data=np.void(f.getvalue()), **kwds) + + def __setitem__(self, name, data): + self.create_dataset(name, data=data) + + def __getitem__(self, key): + data = self.file[key][()] + f = io.BytesIO(data.tobytes()) + array, rate = soundfile.read(f, dtype=self.dtype) + return array, rate + + def keys(self): + return self.file.keys() + + def values(self): + for k in self.file: + yield self[k] + + def items(self): + for k in self.file: + yield k, self[k] + + def __iter__(self): + return iter(self.file) + + def __contains__(self, item): + return item in self.file + + def __len__(self, item): + return len(self.file) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.file.close() + + def close(self): + self.file.close() + +class SpeedPerturbation(): + """SpeedPerturbation + + The speed perturbation in kaldi uses sox-speed instead of sox-tempo, + and sox-speed just to resample the input, + i.e pitch and tempo are changed both. + + "Why use speed option instead of tempo -s in SoX for speed perturbation" + https://groups.google.com/forum/#!topic/kaldi-help/8OOG7eE4sZ8 + + Warning: + This function is very slow because of resampling. + I recommmend to apply speed-perturb outside the training using sox. + + """ + + def __init__( + self, + lower=0.9, + upper=1.1, + utt2ratio=None, + keep_length=True, + res_type="kaiser_best", + seed=None, ): + self.res_type = res_type + self.keep_length = keep_length + self.state = numpy.random.RandomState(seed) + + if utt2ratio is not None: + self.utt2ratio = {} + # Use the scheduled ratio for each utterances + self.utt2ratio_file = utt2ratio + self.lower = None + self.upper = None + self.accept_uttid = True + + with open(utt2ratio, "r") as f: + for line in f: + utt, ratio = line.rstrip().split(None, 1) + ratio = float(ratio) + self.utt2ratio[utt] = ratio + else: + self.utt2ratio = None + # The ratio is given on runtime randomly + self.lower = lower + self.upper = upper + + def __repr__(self): + if self.utt2ratio is None: + return "{}(lower={}, upper={}, " "keep_length={}, res_type={})".format( + self.__class__.__name__, + self.lower, + self.upper, + self.keep_length, + self.res_type, ) + else: + return "{}({}, res_type={})".format( + self.__class__.__name__, self.utt2ratio_file, self.res_type) + + def __call__(self, x, uttid=None, train=True): + if not train: + return x + x = x.astype(numpy.float32) + if self.accept_uttid: + ratio = self.utt2ratio[uttid] + else: + ratio = self.state.uniform(self.lower, self.upper) + + # Note1: resample requires the sampling-rate of input and output, + # but actually only the ratio is used. + y = librosa.resample( + x, orig_sr=ratio, target_sr=1, res_type=self.res_type) + + if self.keep_length: + diff = abs(len(x) - len(y)) + if len(y) > len(x): + # Truncate noise + y = y[diff // 2:-((diff + 1) // 2)] + elif len(y) < len(x): + # Assume the time-axis is the first: (Time, Channel) + pad_width = [(diff // 2, (diff + 1) // 2)] + [ + (0, 0) for _ in range(y.ndim - 1) + ] + y = numpy.pad( + y, pad_width=pad_width, constant_values=0, mode="constant") + return y + + +class SpeedPerturbationSox(): + """SpeedPerturbationSox + + The speed perturbation in kaldi uses sox-speed instead of sox-tempo, + and sox-speed just to resample the input, + i.e pitch and tempo are changed both. + + To speed up or slow down the sound of a file, + use speed to modify the pitch and the duration of the file. + This raises the speed and reduces the time. + The default factor is 1.0 which makes no change to the audio. + 2.0 doubles speed, thus time length is cut by a half and pitch is one interval higher. + + "Why use speed option instead of tempo -s in SoX for speed perturbation" + https://groups.google.com/forum/#!topic/kaldi-help/8OOG7eE4sZ8 + + tempo option: + sox -t wav input.wav -t wav output.tempo0.9.wav tempo -s 0.9 + + speed option: + sox -t wav input.wav -t wav output.speed0.9.wav speed 0.9 + + If we use speed option like above, the pitch of audio also will be changed, + but the tempo option does not change the pitch. + """ + + def __init__( + self, + lower=0.9, + upper=1.1, + utt2ratio=None, + keep_length=True, + sr=16000, + seed=None, ): + self.sr = sr + self.keep_length = keep_length + self.state = numpy.random.RandomState(seed) + + try: + import soxbindings as sox + except ImportError: + try: + from paddlespeech.s2t.utils import dynamic_pip_install + package = "sox" + dynamic_pip_install.install(package) + package = "soxbindings" + if sys.platform != "win32": + dynamic_pip_install.install(package) + import soxbindings as sox + except Exception: + raise RuntimeError( + "Can not install soxbindings on your system.") + self.sox = sox + + if utt2ratio is not None: + self.utt2ratio = {} + # Use the scheduled ratio for each utterances + self.utt2ratio_file = utt2ratio + self.lower = None + self.upper = None + self.accept_uttid = True + + with open(utt2ratio, "r") as f: + for line in f: + utt, ratio = line.rstrip().split(None, 1) + ratio = float(ratio) + self.utt2ratio[utt] = ratio + else: + self.utt2ratio = None + # The ratio is given on runtime randomly + self.lower = lower + self.upper = upper + + def __repr__(self): + if self.utt2ratio is None: + return f"""{self.__class__.__name__}( + lower={self.lower}, + upper={self.upper}, + keep_length={self.keep_length}, + sample_rate={self.sr})""" + + else: + return f"""{self.__class__.__name__}( + utt2ratio={self.utt2ratio_file}, + sample_rate={self.sr})""" + + def __call__(self, x, uttid=None, train=True): + if not train: + return x + + x = x.astype(numpy.float32) + if self.accept_uttid: + ratio = self.utt2ratio[uttid] + else: + ratio = self.state.uniform(self.lower, self.upper) + + tfm = self.sox.Transformer() + tfm.set_globals(multithread=False) + tfm.speed(ratio) + y = tfm.build_array(input_array=x, sample_rate_in=self.sr) + + if self.keep_length: + diff = abs(len(x) - len(y)) + if len(y) > len(x): + # Truncate noise + y = y[diff // 2:-((diff + 1) // 2)] + elif len(y) < len(x): + # Assume the time-axis is the first: (Time, Channel) + pad_width = [(diff // 2, (diff + 1) // 2)] + [ + (0, 0) for _ in range(y.ndim - 1) + ] + y = numpy.pad( + y, pad_width=pad_width, constant_values=0, mode="constant") + + if y.ndim == 2 and x.ndim == 1: + # (T, C) -> (T) + y = y.sequence(1) + return y + + +class BandpassPerturbation(): + """BandpassPerturbation + + Randomly dropout along the frequency axis. + + The original idea comes from the following: + "randomly-selected frequency band was cut off under the constraint of + leaving at least 1,000 Hz band within the range of less than 4,000Hz." + (The Hitachi/JHU CHiME-5 system: Advances in speech recognition for + everyday home environments using multiple microphone arrays; + http://spandh.dcs.shef.ac.uk/chime_workshop/papers/CHiME_2018_paper_kanda.pdf) + + """ + + def __init__(self, lower=0.0, upper=0.75, seed=None, axes=(-1, )): + self.lower = lower + self.upper = upper + self.state = numpy.random.RandomState(seed) + # x_stft: (Time, Channel, Freq) + self.axes = axes + + def __repr__(self): + return "{}(lower={}, upper={})".format(self.__class__.__name__, + self.lower, self.upper) + + def __call__(self, x_stft, uttid=None, train=True): + if not train: + return x_stft + + if x_stft.ndim == 1: + raise RuntimeError("Input in time-freq domain: " + "(Time, Channel, Freq) or (Time, Freq)") + + ratio = self.state.uniform(self.lower, self.upper) + axes = [i if i >= 0 else x_stft.ndim - i for i in self.axes] + shape = [s if i in axes else 1 for i, s in enumerate(x_stft.shape)] + + mask = self.state.randn(*shape) > ratio + x_stft *= mask + return x_stft + + +class VolumePerturbation(): + def __init__(self, + lower=-1.6, + upper=1.6, + utt2ratio=None, + dbunit=True, + seed=None): + self.dbunit = dbunit + self.utt2ratio_file = utt2ratio + self.lower = lower + self.upper = upper + self.state = numpy.random.RandomState(seed) + + if utt2ratio is not None: + # Use the scheduled ratio for each utterances + self.utt2ratio = {} + self.lower = None + self.upper = None + self.accept_uttid = True + + with open(utt2ratio, "r") as f: + for line in f: + utt, ratio = line.rstrip().split(None, 1) + ratio = float(ratio) + self.utt2ratio[utt] = ratio + else: + # The ratio is given on runtime randomly + self.utt2ratio = None + + def __repr__(self): + if self.utt2ratio is None: + return "{}(lower={}, upper={}, dbunit={})".format( + self.__class__.__name__, self.lower, self.upper, self.dbunit) + else: + return '{}("{}", dbunit={})'.format( + self.__class__.__name__, self.utt2ratio_file, self.dbunit) + + def __call__(self, x, uttid=None, train=True): + if not train: + return x + + x = x.astype(numpy.float32) + + if self.accept_uttid: + ratio = self.utt2ratio[uttid] + else: + ratio = self.state.uniform(self.lower, self.upper) + if self.dbunit: + ratio = 10**(ratio / 20) + return x * ratio + + +class NoiseInjection(): + """Add isotropic noise""" + + def __init__( + self, + utt2noise=None, + lower=-20, + upper=-5, + utt2ratio=None, + filetype="list", + dbunit=True, + seed=None, ): + self.utt2noise_file = utt2noise + self.utt2ratio_file = utt2ratio + self.filetype = filetype + self.dbunit = dbunit + self.lower = lower + self.upper = upper + self.state = numpy.random.RandomState(seed) + + if utt2ratio is not None: + # Use the scheduled ratio for each utterances + self.utt2ratio = {} + with open(utt2noise, "r") as f: + for line in f: + utt, snr = line.rstrip().split(None, 1) + snr = float(snr) + self.utt2ratio[utt] = snr + else: + # The ratio is given on runtime randomly + self.utt2ratio = None + + if utt2noise is not None: + self.utt2noise = {} + if filetype == "list": + with open(utt2noise, "r") as f: + for line in f: + utt, filename = line.rstrip().split(None, 1) + signal, rate = soundfile.read(filename, dtype="int16") + # Load all files in memory + self.utt2noise[utt] = (signal, rate) + + elif filetype == "sound.hdf5": + self.utt2noise = SoundHDF5File(utt2noise, "r") + else: + raise ValueError(filetype) + else: + self.utt2noise = None + + if utt2noise is not None and utt2ratio is not None: + if set(self.utt2ratio) != set(self.utt2noise): + raise RuntimeError("The uttids mismatch between {} and {}". + format(utt2ratio, utt2noise)) + + def __repr__(self): + if self.utt2ratio is None: + return "{}(lower={}, upper={}, dbunit={})".format( + self.__class__.__name__, self.lower, self.upper, self.dbunit) + else: + return '{}("{}", dbunit={})'.format( + self.__class__.__name__, self.utt2ratio_file, self.dbunit) + + def __call__(self, x, uttid=None, train=True): + if not train: + return x + x = x.astype(numpy.float32) + + # 1. Get ratio of noise to signal in sound pressure level + if uttid is not None and self.utt2ratio is not None: + ratio = self.utt2ratio[uttid] + else: + ratio = self.state.uniform(self.lower, self.upper) + + if self.dbunit: + ratio = 10**(ratio / 20) + scale = ratio * numpy.sqrt((x**2).mean()) + + # 2. Get noise + if self.utt2noise is not None: + # Get noise from the external source + if uttid is not None: + noise, rate = self.utt2noise[uttid] + else: + # Randomly select the noise source + noise = self.state.choice(list(self.utt2noise.values())) + # Normalize the level + noise /= numpy.sqrt((noise**2).mean()) + + # Adjust the noise length + diff = abs(len(x) - len(noise)) + offset = self.state.randint(0, diff) + if len(noise) > len(x): + # Truncate noise + noise = noise[offset:-(diff - offset)] + else: + noise = numpy.pad( + noise, pad_width=[offset, diff - offset], mode="wrap") + + else: + # Generate white noise + noise = self.state.normal(0, 1, x.shape) + + # 3. Add noise to signal + return x + noise * scale + + +class RIRConvolve(): + def __init__(self, utt2rir, filetype="list"): + self.utt2rir_file = utt2rir + self.filetype = filetype + + self.utt2rir = {} + if filetype == "list": + with open(utt2rir, "r") as f: + for line in f: + utt, filename = line.rstrip().split(None, 1) + signal, rate = soundfile.read(filename, dtype="int16") + self.utt2rir[utt] = (signal, rate) + + elif filetype == "sound.hdf5": + self.utt2rir = SoundHDF5File(utt2rir, "r") + else: + raise NotImplementedError(filetype) + + def __repr__(self): + return '{}("{}")'.format(self.__class__.__name__, self.utt2rir_file) + + def __call__(self, x, uttid=None, train=True): + if not train: + return x + + x = x.astype(numpy.float32) + + if x.ndim != 1: + # Must be single channel + raise RuntimeError( + "Input x must be one dimensional array, but got {}".format( + x.shape)) + + rir, rate = self.utt2rir[uttid] + if rir.ndim == 2: + # FIXME(kamo): Use chainer.convolution_1d? + # return [Time, Channel] + return numpy.stack( + [scipy.convolve(x, r, mode="same") for r in rir], axis=-1) + else: + return scipy.convolve(x, rir, mode="same") + diff --git a/paddlespeech/audio/transform/spec_augment.py b/paddlespeech/audio/transform/spec_augment.py new file mode 100644 index 00000000..c8f0a855 --- /dev/null +++ b/paddlespeech/audio/transform/spec_augment.py @@ -0,0 +1,214 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +"""Spec Augment module for preprocessing i.e., data augmentation""" +import random + +import numpy +from PIL import Image +from PIL.Image import BICUBIC + +from .functional import FuncTrans + + +def time_warp(x, max_time_warp=80, inplace=False, mode="PIL"): + """time warp for spec augment + + move random center frame by the random width ~ uniform(-window, window) + :param numpy.ndarray x: spectrogram (time, freq) + :param int max_time_warp: maximum time frames to warp + :param bool inplace: overwrite x with the result + :param str mode: "PIL" (default, fast, not differentiable) or "sparse_image_warp" + (slow, differentiable) + :returns numpy.ndarray: time warped spectrogram (time, freq) + """ + window = max_time_warp + if window == 0: + return x + + if mode == "PIL": + t = x.shape[0] + if t - window <= window: + return x + # NOTE: randrange(a, b) emits a, a + 1, ..., b - 1 + center = random.randrange(window, t - window) + warped = random.randrange(center - window, center + + window) + 1 # 1 ... t - 1 + + left = Image.fromarray(x[:center]).resize((x.shape[1], warped), BICUBIC) + right = Image.fromarray(x[center:]).resize((x.shape[1], t - warped), + BICUBIC) + if inplace: + x[:warped] = left + x[warped:] = right + return x + return numpy.concatenate((left, right), 0) + elif mode == "sparse_image_warp": + import paddle + + from espnet.utils import spec_augment + + # TODO(karita): make this differentiable again + return spec_augment.time_warp(paddle.to_tensor(x), window).numpy() + else: + raise NotImplementedError("unknown resize mode: " + mode + + ", choose one from (PIL, sparse_image_warp).") + + +class TimeWarp(FuncTrans): + _func = time_warp + __doc__ = time_warp.__doc__ + + def __call__(self, x, train): + if not train: + return x + return super().__call__(x) + + +def freq_mask(x, F=30, n_mask=2, replace_with_zero=True, inplace=False): + """freq mask for spec agument + + :param numpy.ndarray x: (time, freq) + :param int n_mask: the number of masks + :param bool inplace: overwrite + :param bool replace_with_zero: pad zero on mask if true else use mean + """ + if inplace: + cloned = x + else: + cloned = x.copy() + + num_mel_channels = cloned.shape[1] + fs = numpy.random.randint(0, F, size=(n_mask, 2)) + + for f, mask_end in fs: + f_zero = random.randrange(0, num_mel_channels - f) + mask_end += f_zero + + # avoids randrange error if values are equal and range is empty + if f_zero == f_zero + f: + continue + + if replace_with_zero: + cloned[:, f_zero:mask_end] = 0 + else: + cloned[:, f_zero:mask_end] = cloned.mean() + return cloned + + +class FreqMask(FuncTrans): + _func = freq_mask + __doc__ = freq_mask.__doc__ + + def __call__(self, x, train): + if not train: + return x + return super().__call__(x) + + +def time_mask(spec, T=40, n_mask=2, replace_with_zero=True, inplace=False): + """freq mask for spec agument + + :param numpy.ndarray spec: (time, freq) + :param int n_mask: the number of masks + :param bool inplace: overwrite + :param bool replace_with_zero: pad zero on mask if true else use mean + """ + if inplace: + cloned = spec + else: + cloned = spec.copy() + len_spectro = cloned.shape[0] + ts = numpy.random.randint(0, T, size=(n_mask, 2)) + for t, mask_end in ts: + # avoid randint range error + if len_spectro - t <= 0: + continue + t_zero = random.randrange(0, len_spectro - t) + + # avoids randrange error if values are equal and range is empty + if t_zero == t_zero + t: + continue + + mask_end += t_zero + if replace_with_zero: + cloned[t_zero:mask_end] = 0 + else: + cloned[t_zero:mask_end] = cloned.mean() + return cloned + + +class TimeMask(FuncTrans): + _func = time_mask + __doc__ = time_mask.__doc__ + + def __call__(self, x, train): + if not train: + return x + return super().__call__(x) + + +def spec_augment( + x, + resize_mode="PIL", + max_time_warp=80, + max_freq_width=27, + n_freq_mask=2, + max_time_width=100, + n_time_mask=2, + inplace=True, + replace_with_zero=True, ): + """spec agument + + apply random time warping and time/freq masking + default setting is based on LD (Librispeech double) in Table 2 + https://arxiv.org/pdf/1904.08779.pdf + + :param numpy.ndarray x: (time, freq) + :param str resize_mode: "PIL" (fast, nondifferentiable) or "sparse_image_warp" + (slow, differentiable) + :param int max_time_warp: maximum frames to warp the center frame in spectrogram (W) + :param int freq_mask_width: maximum width of the random freq mask (F) + :param int n_freq_mask: the number of the random freq mask (m_F) + :param int time_mask_width: maximum width of the random time mask (T) + :param int n_time_mask: the number of the random time mask (m_T) + :param bool inplace: overwrite intermediate array + :param bool replace_with_zero: pad zero on mask if true else use mean + """ + assert isinstance(x, numpy.ndarray) + assert x.ndim == 2 + x = time_warp(x, max_time_warp, inplace=inplace, mode=resize_mode) + x = freq_mask( + x, + max_freq_width, + n_freq_mask, + inplace=inplace, + replace_with_zero=replace_with_zero, ) + x = time_mask( + x, + max_time_width, + n_time_mask, + inplace=inplace, + replace_with_zero=replace_with_zero, ) + return x + + +class SpecAugment(FuncTrans): + _func = spec_augment + __doc__ = spec_augment.__doc__ + + def __call__(self, x, train): + if not train: + return x + return super().__call__(x) diff --git a/paddlespeech/audio/transform/spectrogram.py b/paddlespeech/audio/transform/spectrogram.py new file mode 100644 index 00000000..864f3f99 --- /dev/null +++ b/paddlespeech/audio/transform/spectrogram.py @@ -0,0 +1,475 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import librosa +import numpy as np +import paddle +from python_speech_features import logfbank + +from ..compliance import kaldi + + +def stft(x, + n_fft, + n_shift, + win_length=None, + window="hann", + center=True, + pad_mode="reflect"): + # x: [Time, Channel] + if x.ndim == 1: + single_channel = True + # x: [Time] -> [Time, Channel] + x = x[:, None] + else: + single_channel = False + x = x.astype(np.float32) + + # FIXME(kamo): librosa.stft can't use multi-channel? + # x: [Time, Channel, Freq] + x = np.stack( + [ + librosa.stft( + y=x[:, ch], + n_fft=n_fft, + hop_length=n_shift, + win_length=win_length, + window=window, + center=center, + pad_mode=pad_mode, ).T for ch in range(x.shape[1]) + ], + axis=1, ) + + if single_channel: + # x: [Time, Channel, Freq] -> [Time, Freq] + x = x[:, 0] + return x + + +def istft(x, n_shift, win_length=None, window="hann", center=True): + # x: [Time, Channel, Freq] + if x.ndim == 2: + single_channel = True + # x: [Time, Freq] -> [Time, Channel, Freq] + x = x[:, None, :] + else: + single_channel = False + + # x: [Time, Channel] + x = np.stack( + [ + librosa.istft( + stft_matrix=x[:, ch].T, # [Time, Freq] -> [Freq, Time] + hop_length=n_shift, + win_length=win_length, + window=window, + center=center, ) for ch in range(x.shape[1]) + ], + axis=1, ) + + if single_channel: + # x: [Time, Channel] -> [Time] + x = x[:, 0] + return x + + +def stft2logmelspectrogram(x_stft, + fs, + n_mels, + n_fft, + fmin=None, + fmax=None, + eps=1e-10): + # x_stft: (Time, Channel, Freq) or (Time, Freq) + fmin = 0 if fmin is None else fmin + fmax = fs / 2 if fmax is None else fmax + + # spc: (Time, Channel, Freq) or (Time, Freq) + spc = np.abs(x_stft) + # mel_basis: (Mel_freq, Freq) + mel_basis = librosa.filters.mel( + sr=fs, n_fft=n_fft, n_mels=n_mels, fmin=fmin, fmax=fmax) + # lmspc: (Time, Channel, Mel_freq) or (Time, Mel_freq) + lmspc = np.log10(np.maximum(eps, np.dot(spc, mel_basis.T))) + + return lmspc + + +def spectrogram(x, n_fft, n_shift, win_length=None, window="hann"): + # x: (Time, Channel) -> spc: (Time, Channel, Freq) + spc = np.abs(stft(x, n_fft, n_shift, win_length, window=window)) + return spc + + +def logmelspectrogram( + x, + fs, + n_mels, + n_fft, + n_shift, + win_length=None, + window="hann", + fmin=None, + fmax=None, + eps=1e-10, + pad_mode="reflect", ): + # stft: (Time, Channel, Freq) or (Time, Freq) + x_stft = stft( + x, + n_fft=n_fft, + n_shift=n_shift, + win_length=win_length, + window=window, + pad_mode=pad_mode, ) + + return stft2logmelspectrogram( + x_stft, + fs=fs, + n_mels=n_mels, + n_fft=n_fft, + fmin=fmin, + fmax=fmax, + eps=eps) + + +class Spectrogram(): + def __init__(self, n_fft, n_shift, win_length=None, window="hann"): + self.n_fft = n_fft + self.n_shift = n_shift + self.win_length = win_length + self.window = window + + def __repr__(self): + return ("{name}(n_fft={n_fft}, n_shift={n_shift}, " + "win_length={win_length}, window={window})".format( + name=self.__class__.__name__, + n_fft=self.n_fft, + n_shift=self.n_shift, + win_length=self.win_length, + window=self.window, )) + + def __call__(self, x): + return spectrogram( + x, + n_fft=self.n_fft, + n_shift=self.n_shift, + win_length=self.win_length, + window=self.window, ) + + +class LogMelSpectrogram(): + def __init__( + self, + fs, + n_mels, + n_fft, + n_shift, + win_length=None, + window="hann", + fmin=None, + fmax=None, + eps=1e-10, ): + self.fs = fs + self.n_mels = n_mels + self.n_fft = n_fft + self.n_shift = n_shift + self.win_length = win_length + self.window = window + self.fmin = fmin + self.fmax = fmax + self.eps = eps + + def __repr__(self): + return ("{name}(fs={fs}, n_mels={n_mels}, n_fft={n_fft}, " + "n_shift={n_shift}, win_length={win_length}, window={window}, " + "fmin={fmin}, fmax={fmax}, eps={eps}))".format( + name=self.__class__.__name__, + fs=self.fs, + n_mels=self.n_mels, + n_fft=self.n_fft, + n_shift=self.n_shift, + win_length=self.win_length, + window=self.window, + fmin=self.fmin, + fmax=self.fmax, + eps=self.eps, )) + + def __call__(self, x): + return logmelspectrogram( + x, + fs=self.fs, + n_mels=self.n_mels, + n_fft=self.n_fft, + n_shift=self.n_shift, + win_length=self.win_length, + window=self.window, ) + + +class Stft2LogMelSpectrogram(): + def __init__(self, fs, n_mels, n_fft, fmin=None, fmax=None, eps=1e-10): + self.fs = fs + self.n_mels = n_mels + self.n_fft = n_fft + self.fmin = fmin + self.fmax = fmax + self.eps = eps + + def __repr__(self): + return ("{name}(fs={fs}, n_mels={n_mels}, n_fft={n_fft}, " + "fmin={fmin}, fmax={fmax}, eps={eps}))".format( + name=self.__class__.__name__, + fs=self.fs, + n_mels=self.n_mels, + n_fft=self.n_fft, + fmin=self.fmin, + fmax=self.fmax, + eps=self.eps, )) + + def __call__(self, x): + return stft2logmelspectrogram( + x, + fs=self.fs, + n_mels=self.n_mels, + n_fft=self.n_fft, + fmin=self.fmin, + fmax=self.fmax, ) + + +class Stft(): + def __init__( + self, + n_fft, + n_shift, + win_length=None, + window="hann", + center=True, + pad_mode="reflect", ): + self.n_fft = n_fft + self.n_shift = n_shift + self.win_length = win_length + self.window = window + self.center = center + self.pad_mode = pad_mode + + def __repr__(self): + return ("{name}(n_fft={n_fft}, n_shift={n_shift}, " + "win_length={win_length}, window={window}," + "center={center}, pad_mode={pad_mode})".format( + name=self.__class__.__name__, + n_fft=self.n_fft, + n_shift=self.n_shift, + win_length=self.win_length, + window=self.window, + center=self.center, + pad_mode=self.pad_mode, )) + + def __call__(self, x): + return stft( + x, + self.n_fft, + self.n_shift, + win_length=self.win_length, + window=self.window, + center=self.center, + pad_mode=self.pad_mode, ) + + +class IStft(): + def __init__(self, n_shift, win_length=None, window="hann", center=True): + self.n_shift = n_shift + self.win_length = win_length + self.window = window + self.center = center + + def __repr__(self): + return ("{name}(n_shift={n_shift}, " + "win_length={win_length}, window={window}," + "center={center})".format( + name=self.__class__.__name__, + n_shift=self.n_shift, + win_length=self.win_length, + window=self.window, + center=self.center, )) + + def __call__(self, x): + return istft( + x, + self.n_shift, + win_length=self.win_length, + window=self.window, + center=self.center, ) + + +class LogMelSpectrogramKaldi(): + def __init__( + self, + fs=16000, + n_mels=80, + n_shift=160, # unit:sample, 10ms + win_length=400, # unit:sample, 25ms + energy_floor=0.0, + dither=0.1): + """ + The Kaldi implementation of LogMelSpectrogram + Args: + fs (int): sample rate of the audio + n_mels (int): number of mel filter banks + n_shift (int): number of points in a frame shift + win_length (int): number of points in a frame windows + energy_floor (float): Floor on energy in Spectrogram computation (absolute) + dither (float): Dithering constant + + Returns: + LogMelSpectrogramKaldi + """ + + self.fs = fs + self.n_mels = n_mels + num_point_ms = fs / 1000 + self.n_frame_length = win_length / num_point_ms + self.n_frame_shift = n_shift / num_point_ms + self.energy_floor = energy_floor + self.dither = dither + + def __repr__(self): + return ( + "{name}(fs={fs}, n_mels={n_mels}, " + "n_frame_shift={n_frame_shift}, n_frame_length={n_frame_length}, " + "dither={dither}))".format( + name=self.__class__.__name__, + fs=self.fs, + n_mels=self.n_mels, + n_frame_shift=self.n_frame_shift, + n_frame_length=self.n_frame_length, + dither=self.dither, )) + + def __call__(self, x, train): + """ + Args: + x (np.ndarray): shape (Ti,) + train (bool): True, train mode. + + Raises: + ValueError: not support (Ti, C) + + Returns: + np.ndarray: (T, D) + """ + dither = self.dither if train else 0.0 + if x.ndim != 1: + raise ValueError("Not support x: [Time, Channel]") + waveform = paddle.to_tensor(np.expand_dims(x, 0), dtype=paddle.float32) + mat = kaldi.fbank( + waveform, + n_mels=self.n_mels, + frame_length=self.n_frame_length, + frame_shift=self.n_frame_shift, + dither=dither, + energy_floor=self.energy_floor, + sr=self.fs) + mat = np.squeeze(mat.numpy()) + return mat + + +class LogMelSpectrogramKaldi_decay(): + def __init__( + self, + fs=16000, + n_mels=80, + n_fft=512, # fft point + n_shift=160, # unit:sample, 10ms + win_length=400, # unit:sample, 25ms + window="povey", + fmin=20, + fmax=None, + eps=1e-10, + dither=1.0): + self.fs = fs + self.n_mels = n_mels + self.n_fft = n_fft + if n_shift > win_length: + raise ValueError("Stride size must not be greater than " + "window size.") + self.n_shift = n_shift / fs # unit: ms + self.win_length = win_length / fs # unit: ms + + self.window = window + self.fmin = fmin + if fmax is None: + fmax_ = fmax if fmax else self.fs / 2 + elif fmax > int(self.fs / 2): + raise ValueError("fmax must not be greater than half of " + "sample rate.") + self.fmax = fmax_ + + self.eps = eps + self.remove_dc_offset = True + self.preemph = 0.97 + self.dither = dither # only work in train mode + + def __repr__(self): + return ( + "{name}(fs={fs}, n_mels={n_mels}, n_fft={n_fft}, " + "n_shift={n_shift}, win_length={win_length}, preemph={preemph}, window={window}, " + "fmin={fmin}, fmax={fmax}, eps={eps}, dither={dither}))".format( + name=self.__class__.__name__, + fs=self.fs, + n_mels=self.n_mels, + n_fft=self.n_fft, + n_shift=self.n_shift, + preemph=self.preemph, + win_length=self.win_length, + window=self.window, + fmin=self.fmin, + fmax=self.fmax, + eps=self.eps, + dither=self.dither, )) + + def __call__(self, x, train): + """ + + Args: + x (np.ndarray): shape (Ti,) + train (bool): True, train mode. + + Raises: + ValueError: not support (Ti, C) + + Returns: + np.ndarray: (T, D) + """ + dither = self.dither if train else 0.0 + if x.ndim != 1: + raise ValueError("Not support x: [Time, Channel]") + + if x.dtype in np.sctypes['float']: + # PCM32 -> PCM16 + bits = np.iinfo(np.int16).bits + x = x * 2**(bits - 1) + + # logfbank need PCM16 input + y = logfbank( + signal=x, + samplerate=self.fs, + winlen=self.win_length, # unit ms + winstep=self.n_shift, # unit ms + nfilt=self.n_mels, + nfft=self.n_fft, + lowfreq=self.fmin, + highfreq=self.fmax, + dither=dither, + remove_dc_offset=self.remove_dc_offset, + preemph=self.preemph, + wintype=self.window) + return y diff --git a/paddlespeech/audio/transform/transform_interface.py b/paddlespeech/audio/transform/transform_interface.py new file mode 100644 index 00000000..8bc62420 --- /dev/null +++ b/paddlespeech/audio/transform/transform_interface.py @@ -0,0 +1,35 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) + + +class TransformInterface: + """Transform Interface""" + + def __call__(self, x): + raise NotImplementedError("__call__ method is not implemented") + + @classmethod + def add_arguments(cls, parser): + return parser + + def __repr__(self): + return self.__class__.__name__ + "()" + + +class Identity(TransformInterface): + """Identity Function""" + + def __call__(self, x): + return x diff --git a/paddlespeech/audio/transform/transformation.py b/paddlespeech/audio/transform/transformation.py new file mode 100644 index 00000000..d24d6437 --- /dev/null +++ b/paddlespeech/audio/transform/transformation.py @@ -0,0 +1,158 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +"""Transformation module.""" +import copy +import io +import logging +from collections import OrderedDict +from collections.abc import Sequence +from inspect import signature + +import yaml + +from ..utils.dynamic_import import dynamic_import + +import_alias = dict( + identity="paddlespeech.audio.transform.transform_interface:Identity", + time_warp="paddlespeech.audio.transform.spec_augment:TimeWarp", + time_mask="paddlespeech.audio.transform.spec_augment:TimeMask", + freq_mask="paddlespeech.audio.transform.spec_augment:FreqMask", + spec_augment="paddlespeech.audio.transform.spec_augment:SpecAugment", + speed_perturbation="paddlespeech.audio.transform.perturb:SpeedPerturbation", + speed_perturbation_sox="paddlespeech.audio.transform.perturb:SpeedPerturbationSox", + volume_perturbation="paddlespeech.audio.transform.perturb:VolumePerturbation", + noise_injection="paddlespeech.audio.transform.perturb:NoiseInjection", + bandpass_perturbation="paddlespeech.audio.transform.perturb:BandpassPerturbation", + rir_convolve="paddlespeech.audio.transform.perturb:RIRConvolve", + delta="paddlespeech.audio.transform.add_deltas:AddDeltas", + cmvn="paddlespeech.audio.transform.cmvn:CMVN", + utterance_cmvn="paddlespeech.audio.transform.cmvn:UtteranceCMVN", + fbank="paddlespeech.audio.transform.spectrogram:LogMelSpectrogram", + spectrogram="paddlespeech.audio.transform.spectrogram:Spectrogram", + stft="paddlespeech.audio.transform.spectrogram:Stft", + istft="paddlespeech.audio.transform.spectrogram:IStft", + stft2fbank="paddlespeech.audio.transform.spectrogram:Stft2LogMelSpectrogram", + wpe="paddlespeech.audio.transform.wpe:WPE", + channel_selector="paddlespeech.audio.transform.channel_selector:ChannelSelector", + fbank_kaldi="paddlespeech.audio.transform.spectrogram:LogMelSpectrogramKaldi", + cmvn_json="paddlespeech.audio.transform.cmvn:GlobalCMVN") + + +class Transformation(): + """Apply some functions to the mini-batch + + Examples: + >>> kwargs = {"process": [{"type": "fbank", + ... "n_mels": 80, + ... "fs": 16000}, + ... {"type": "cmvn", + ... "stats": "data/train/cmvn.ark", + ... "norm_vars": True}, + ... {"type": "delta", "window": 2, "order": 2}]} + >>> transform = Transformation(kwargs) + >>> bs = 10 + >>> xs = [np.random.randn(100, 80).astype(np.float32) + ... for _ in range(bs)] + >>> xs = transform(xs) + """ + + def __init__(self, conffile=None): + if conffile is not None: + if isinstance(conffile, dict): + self.conf = copy.deepcopy(conffile) + else: + with io.open(conffile, encoding="utf-8") as f: + self.conf = yaml.safe_load(f) + assert isinstance(self.conf, dict), type(self.conf) + else: + self.conf = {"mode": "sequential", "process": []} + + self.functions = OrderedDict() + if self.conf.get("mode", "sequential") == "sequential": + for idx, process in enumerate(self.conf["process"]): + assert isinstance(process, dict), type(process) + opts = dict(process) + process_type = opts.pop("type") + class_obj = dynamic_import(process_type, import_alias) + # TODO(karita): assert issubclass(class_obj, TransformInterface) + try: + self.functions[idx] = class_obj(**opts) + except TypeError: + try: + signa = signature(class_obj) + except ValueError: + # Some function, e.g. built-in function, are failed + pass + else: + logging.error("Expected signature: {}({})".format( + class_obj.__name__, signa)) + raise + else: + raise NotImplementedError( + "Not supporting mode={}".format(self.conf["mode"])) + + def __repr__(self): + rep = "\n" + "\n".join(" {}: {}".format(k, v) + for k, v in self.functions.items()) + return "{}({})".format(self.__class__.__name__, rep) + + def __call__(self, xs, uttid_list=None, **kwargs): + """Return new mini-batch + + :param Union[Sequence[np.ndarray], np.ndarray] xs: + :param Union[Sequence[str], str] uttid_list: + :return: batch: + :rtype: List[np.ndarray] + """ + if not isinstance(xs, Sequence): + is_batch = False + xs = [xs] + else: + is_batch = True + + if isinstance(uttid_list, str): + uttid_list = [uttid_list for _ in range(len(xs))] + + if self.conf.get("mode", "sequential") == "sequential": + for idx in range(len(self.conf["process"])): + func = self.functions[idx] + # TODO(karita): use TrainingTrans and UttTrans to check __call__ args + # Derive only the args which the func has + try: + param = signature(func).parameters + except ValueError: + # Some function, e.g. built-in function, are failed + param = {} + _kwargs = {k: v for k, v in kwargs.items() if k in param} + try: + if uttid_list is not None and "uttid" in param: + xs = [ + func(x, u, **_kwargs) + for x, u in zip(xs, uttid_list) + ] + else: + xs = [func(x, **_kwargs) for x in xs] + except Exception: + logging.fatal("Catch a exception from {}th func: {}".format( + idx, func)) + raise + else: + raise NotImplementedError( + "Not supporting mode={}".format(self.conf["mode"])) + + if is_batch: + return xs + else: + return xs[0] diff --git a/paddlespeech/audio/transform/wpe.py b/paddlespeech/audio/transform/wpe.py new file mode 100644 index 00000000..777379d0 --- /dev/null +++ b/paddlespeech/audio/transform/wpe.py @@ -0,0 +1,58 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +from nara_wpe.wpe import wpe + + +class WPE(object): + def __init__(self, + taps=10, + delay=3, + iterations=3, + psd_context=0, + statistics_mode="full"): + self.taps = taps + self.delay = delay + self.iterations = iterations + self.psd_context = psd_context + self.statistics_mode = statistics_mode + + def __repr__(self): + return ("{name}(taps={taps}, delay={delay}" + "iterations={iterations}, psd_context={psd_context}, " + "statistics_mode={statistics_mode})".format( + name=self.__class__.__name__, + taps=self.taps, + delay=self.delay, + iterations=self.iterations, + psd_context=self.psd_context, + statistics_mode=self.statistics_mode, )) + + def __call__(self, xs): + """Return enhanced + + :param np.ndarray xs: (Time, Channel, Frequency) + :return: enhanced_xs + :rtype: np.ndarray + + """ + # nara_wpe.wpe: (F, C, T) + xs = wpe( + xs.transpose((2, 1, 0)), + taps=self.taps, + delay=self.delay, + iterations=self.iterations, + psd_context=self.psd_context, + statistics_mode=self.statistics_mode, ) + return xs.transpose(2, 1, 0) diff --git a/paddlespeech/audio/utils/check_kwargs.py b/paddlespeech/audio/utils/check_kwargs.py new file mode 100644 index 00000000..0aa839ac --- /dev/null +++ b/paddlespeech/audio/utils/check_kwargs.py @@ -0,0 +1,35 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import inspect + + +def check_kwargs(func, kwargs, name=None): + """check kwargs are valid for func + + If kwargs are invalid, raise TypeError as same as python default + :param function func: function to be validated + :param dict kwargs: keyword arguments for func + :param str name: name used in TypeError (default is func name) + """ + try: + params = inspect.signature(func).parameters + except ValueError: + return + if name is None: + name = func.__name__ + for k in kwargs.keys(): + if k not in params: + raise TypeError( + f"{name}() got an unexpected keyword argument '{k}'") diff --git a/paddlespeech/audio/utils/dynamic_import.py b/paddlespeech/audio/utils/dynamic_import.py new file mode 100644 index 00000000..99f93356 --- /dev/null +++ b/paddlespeech/audio/utils/dynamic_import.py @@ -0,0 +1,38 @@ +# 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. +# Modified from espnet(https://github.com/espnet/espnet) +import importlib + +__all__ = ["dynamic_import"] + + +def dynamic_import(import_path, alias=dict()): + """dynamic import module and class + + :param str import_path: syntax 'module_name:class_name' + e.g., 'paddlespeech.s2t.models.u2:U2Model' + :param dict alias: shortcut for registered class + :return: imported class + """ + if import_path not in alias and ":" not in import_path: + raise ValueError( + "import_path should be one of {} or " + 'include ":", e.g. "paddlespeech.s2t.models.u2:U2Model" : ' + "{}".format(set(alias), import_path)) + if ":" not in import_path: + import_path = alias[import_path] + + module_name, objname = import_path.split(":") + m = importlib.import_module(module_name) + return getattr(m, objname) diff --git a/paddlespeech/audio/utils/tensor_utils.py b/paddlespeech/audio/utils/tensor_utils.py new file mode 100644 index 00000000..bae473ec --- /dev/null +++ b/paddlespeech/audio/utils/tensor_utils.py @@ -0,0 +1,195 @@ +# 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. +"""Unility functions for Transformer.""" +from typing import List +from typing import Tuple + +import paddle + +from .log import Logger + +__all__ = ["pad_sequence", "add_sos_eos", "th_accuracy", "has_tensor"] + +logger = Logger(__name__) + + +def has_tensor(val): + if isinstance(val, (list, tuple)): + for item in val: + if has_tensor(item): + return True + elif isinstance(val, dict): + for k, v in val.items(): + print(k) + if has_tensor(v): + return True + else: + return paddle.is_tensor(val) + + +def pad_sequence(sequences: List[paddle.Tensor], + batch_first: bool=False, + padding_value: float=0.0) -> paddle.Tensor: + r"""Pad a list of variable length Tensors with ``padding_value`` + + ``pad_sequence`` stacks a list of Tensors along a new dimension, + and pads them to equal length. For example, if the input is list of + sequences with size ``L x *`` and if batch_first is False, and ``T x B x *`` + otherwise. + + `B` is batch size. It is equal to the number of elements in ``sequences``. + `T` is length of the longest sequence. + `L` is length of the sequence. + `*` is any number of trailing dimensions, including none. + + Example: + >>> from paddle.nn.utils.rnn import pad_sequence + >>> a = paddle.ones(25, 300) + >>> b = paddle.ones(22, 300) + >>> c = paddle.ones(15, 300) + >>> pad_sequence([a, b, c]).shape + paddle.Tensor([25, 3, 300]) + + Note: + This function returns a Tensor of size ``T x B x *`` or ``B x T x *`` + where `T` is the length of the longest sequence. This function assumes + trailing dimensions and type of all the Tensors in sequences are same. + + Args: + sequences (list[Tensor]): list of variable length sequences. + batch_first (bool, optional): output will be in ``B x T x *`` if True, or in + ``T x B x *`` otherwise + padding_value (float, optional): value for padded elements. Default: 0. + + Returns: + Tensor of size ``T x B x *`` if :attr:`batch_first` is ``False``. + Tensor of size ``B x T x *`` otherwise + """ + + # assuming trailing dimensions and type of all the Tensors + # in sequences are same and fetching those from sequences[0] + max_size = paddle.shape(sequences[0]) + # (TODO Hui Zhang): slice not supprot `end==start` + # trailing_dims = max_size[1:] + trailing_dims = tuple( + max_size[1:].numpy().tolist()) if sequences[0].ndim >= 2 else () + max_len = max([s.shape[0] for s in sequences]) + if batch_first: + out_dims = (len(sequences), max_len) + trailing_dims + else: + out_dims = (max_len, len(sequences)) + trailing_dims + out_tensor = paddle.full(out_dims, padding_value, sequences[0].dtype) + for i, tensor in enumerate(sequences): + length = tensor.shape[0] + # use index notation to prevent duplicate references to the tensor + logger.info( + f"length {length}, out_tensor {out_tensor.shape}, tensor {tensor.shape}" + ) + if batch_first: + # TODO (Hui Zhang): set_value op not supprot `end==start` + # TODO (Hui Zhang): set_value op not support int16 + # TODO (Hui Zhang): set_varbase 2 rank not support [0,0,...] + # out_tensor[i, :length, ...] = tensor + if length != 0: + out_tensor[i, :length] = tensor + else: + out_tensor[i, length] = tensor + else: + # TODO (Hui Zhang): set_value op not supprot `end==start` + # out_tensor[:length, i, ...] = tensor + if length != 0: + out_tensor[:length, i] = tensor + else: + out_tensor[length, i] = tensor + + return out_tensor + + +def add_sos_eos(ys_pad: paddle.Tensor, sos: int, eos: int, + ignore_id: int) -> Tuple[paddle.Tensor, paddle.Tensor]: + """Add and labels. + Args: + ys_pad (paddle.Tensor): batch of padded target sequences (B, Lmax) + sos (int): index of + eos (int): index of + ignore_id (int): index of padding + Returns: + ys_in (paddle.Tensor) : (B, Lmax + 1) + ys_out (paddle.Tensor) : (B, Lmax + 1) + Examples: + >>> sos_id = 10 + >>> eos_id = 11 + >>> ignore_id = -1 + >>> ys_pad + tensor([[ 1, 2, 3, 4, 5], + [ 4, 5, 6, -1, -1], + [ 7, 8, 9, -1, -1]], dtype=paddle.int32) + >>> ys_in,ys_out=add_sos_eos(ys_pad, sos_id , eos_id, ignore_id) + >>> ys_in + tensor([[10, 1, 2, 3, 4, 5], + [10, 4, 5, 6, 11, 11], + [10, 7, 8, 9, 11, 11]]) + >>> ys_out + tensor([[ 1, 2, 3, 4, 5, 11], + [ 4, 5, 6, 11, -1, -1], + [ 7, 8, 9, 11, -1, -1]]) + """ + # TODO(Hui Zhang): using comment code, + #_sos = paddle.to_tensor( + # [sos], dtype=paddle.long, stop_gradient=True, place=ys_pad.place) + #_eos = paddle.to_tensor( + # [eos], dtype=paddle.long, stop_gradient=True, place=ys_pad.place) + #ys = [y[y != ignore_id] for y in ys_pad] # parse padded ys + #ys_in = [paddle.cat([_sos, y], dim=0) for y in ys] + #ys_out = [paddle.cat([y, _eos], dim=0) for y in ys] + #return pad_sequence(ys_in, padding_value=eos), pad_sequence(ys_out, padding_value=ignore_id) + B = ys_pad.shape[0] + _sos = paddle.ones([B, 1], dtype=ys_pad.dtype) * sos + _eos = paddle.ones([B, 1], dtype=ys_pad.dtype) * eos + ys_in = paddle.cat([_sos, ys_pad], dim=1) + mask_pad = (ys_in == ignore_id) + ys_in = ys_in.masked_fill(mask_pad, eos) + + ys_out = paddle.cat([ys_pad, _eos], dim=1) + ys_out = ys_out.masked_fill(mask_pad, eos) + mask_eos = (ys_out == ignore_id) + ys_out = ys_out.masked_fill(mask_eos, eos) + ys_out = ys_out.masked_fill(mask_pad, ignore_id) + return ys_in, ys_out + + +def th_accuracy(pad_outputs: paddle.Tensor, + pad_targets: paddle.Tensor, + ignore_label: int) -> float: + """Calculate accuracy. + Args: + pad_outputs (Tensor): Prediction tensors (B * Lmax, D). + pad_targets (LongTensor): Target label tensors (B, Lmax, D). + ignore_label (int): Ignore label id. + Returns: + float: Accuracy value (0.0 - 1.0). + """ + pad_pred = pad_outputs.view(pad_targets.shape[0], pad_targets.shape[1], + pad_outputs.shape[1]).argmax(2) + mask = pad_targets != ignore_label + #TODO(Hui Zhang): sum not support bool type + # numerator = paddle.sum( + # pad_pred.masked_select(mask) == pad_targets.masked_select(mask)) + numerator = ( + pad_pred.masked_select(mask) == pad_targets.masked_select(mask)) + numerator = paddle.sum(numerator.type_as(pad_targets)) + #TODO(Hui Zhang): sum not support bool type + # denominator = paddle.sum(mask) + denominator = paddle.sum(mask.type_as(pad_targets)) + return float(numerator) / float(denominator) diff --git a/setup.py b/setup.py index 679549b4..b94a4cb2 100644 --- a/setup.py +++ b/setup.py @@ -38,7 +38,7 @@ base = [ "pypinyin", "pypinyin-dict", "python-dateutil", "pyworld", "resampy==0.2.2", "sacrebleu", "scipy", "sentencepiece~=0.1.96", "soundfile~=0.10", "textgrid", "timer", "tqdm", "typeguard", "visualdl", "webrtcvad", - "yacs~=0.1.8", "prettytable", "zhon", 'colorlog', 'pathos == 0.2.8' + "yacs~=0.1.8", "prettytable", "zhon", 'colorlog', 'pathos == 0.2.8', 'webdataset' ] server = [ From c7a7b113c856a455f92b70b256f782d25133bc8d Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Fri, 24 Jun 2022 05:01:44 +0000 Subject: [PATCH 02/27] support multi-gpu training with webdataset --- examples/wenetspeech/asr1/conf/conformer.yaml | 35 +- paddlespeech/audio/stream_data/__init__.py | 3 +- paddlespeech/audio/stream_data/filters.py | 39 +- paddlespeech/audio/stream_data/pipeline.py | 6 + paddlespeech/audio/stream_data/shardlists.py | 2 + paddlespeech/audio/utils/log.py | 3 +- paddlespeech/audio/utils/tensor_utils.py | 3 - paddlespeech/s2t/exps/u2/model.py | 269 ++++++---- paddlespeech/s2t/io/dataloader.py | 87 ++++ paddlespeech/s2t/io/reader.py | 2 +- paddlespeech/s2t/transform/__init__.py | 13 - paddlespeech/s2t/transform/add_deltas.py | 54 -- .../s2t/transform/channel_selector.py | 57 --- paddlespeech/s2t/transform/cmvn.py | 201 -------- paddlespeech/s2t/transform/functional.py | 86 ---- paddlespeech/s2t/transform/perturb.py | 471 ----------------- paddlespeech/s2t/transform/spec_augment.py | 214 -------- paddlespeech/s2t/transform/spectrogram.py | 475 ------------------ .../s2t/transform/transform_interface.py | 35 -- paddlespeech/s2t/transform/transformation.py | 158 ------ paddlespeech/s2t/transform/wpe.py | 58 --- 21 files changed, 341 insertions(+), 1930 deletions(-) delete mode 100644 paddlespeech/s2t/transform/__init__.py delete mode 100644 paddlespeech/s2t/transform/add_deltas.py delete mode 100644 paddlespeech/s2t/transform/channel_selector.py delete mode 100644 paddlespeech/s2t/transform/cmvn.py delete mode 100644 paddlespeech/s2t/transform/functional.py delete mode 100644 paddlespeech/s2t/transform/perturb.py delete mode 100644 paddlespeech/s2t/transform/spec_augment.py delete mode 100644 paddlespeech/s2t/transform/spectrogram.py delete mode 100644 paddlespeech/s2t/transform/transform_interface.py delete mode 100644 paddlespeech/s2t/transform/transformation.py delete mode 100644 paddlespeech/s2t/transform/wpe.py diff --git a/examples/wenetspeech/asr1/conf/conformer.yaml b/examples/wenetspeech/asr1/conf/conformer.yaml index 6c2bbca4..dd4ff0e2 100644 --- a/examples/wenetspeech/asr1/conf/conformer.yaml +++ b/examples/wenetspeech/asr1/conf/conformer.yaml @@ -50,26 +50,41 @@ test_manifest: data/manifest.test ########################################### # Dataloader # ########################################### -vocab_filepath: data/lang_char/vocab.txt +use_stream_data: True unit_type: 'char' +vocab_filepath: data/lang_char/vocab.txt +cmvn_file: data/mean_std.json preprocess_config: conf/preprocess.yaml spm_model_prefix: '' feat_dim: 80 stride_ms: 10.0 window_ms: 25.0 +dither: 0.1 sortagrad: 0 # Feed samples from shortest to longest ; -1: enabled for all epochs, 0: disabled, other: enabled for 'other' epochs batch_size: 64 +minlen_in: 10 maxlen_in: 512 # if input length > maxlen-in, batchsize is automatically reduced +minlen_out: 0 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: 0 -subsampling_factor: 1 +resample_rate: 16000 +shuffle_size: 10000 +sort_size: 500 +num_workers: 4 +prefetch_factor: 100 +dist_sampler: True num_encs: 1 +augment_conf: + max_w: 80 + w_inplace: True + w_mode: "PIL" + max_f: 30 + num_f_mask: 2 + f_inplace: True + f_replace_with_zero: False + max_t: 40 + num_t_mask: 2 + t_inplace: True + t_replace_with_zero: False ########################################### @@ -78,7 +93,7 @@ num_encs: 1 n_epoch: 240 accum_grad: 16 global_grad_clip: 5.0 -log_interval: 100 +log_interval: 1 checkpoint: kbest_n: 50 latest_n: 5 diff --git a/paddlespeech/audio/stream_data/__init__.py b/paddlespeech/audio/stream_data/__init__.py index fdb3458c..e9706d4e 100644 --- a/paddlespeech/audio/stream_data/__init__.py +++ b/paddlespeech/audio/stream_data/__init__.py @@ -41,7 +41,8 @@ from .filters import ( spec_aug, sort, padding, - cmvn + cmvn, + placeholder, ) from webdataset.handlers import ( ignore_and_continue, diff --git a/paddlespeech/audio/stream_data/filters.py b/paddlespeech/audio/stream_data/filters.py index 3112c954..db3e037a 100644 --- a/paddlespeech/audio/stream_data/filters.py +++ b/paddlespeech/audio/stream_data/filters.py @@ -758,27 +758,44 @@ def _compute_fbank(source, compute_fbank = pipelinefilter(_compute_fbank) -def _spec_aug(source, num_t_mask=2, num_f_mask=2, max_t=40, max_f=30, max_w=80): +def _spec_aug(source, + max_w=5, + w_inplace=True, + w_mode="PIL", + max_f=30, + num_f_mask=2, + f_inplace=True, + f_replace_with_zero=False, + max_t=40, + num_t_mask=2, + t_inplace=True, + t_replace_with_zero=False,): """ Do spec augmentation Inplace operation Args: source: Iterable[{fname, feat, label}] - num_t_mask: number of time mask to apply + max_w: max width of time warp + w_inplace: whether to inplace the original data while time warping + w_mode: time warp mode + max_f: max width of freq mask num_f_mask: number of freq mask to apply + f_inplace: whether to inplace the original data while frequency masking + f_replace_with_zero: use zero to mask max_t: max width of time mask - max_f: max width of freq mask - max_w: max width of time warp - + num_t_mask: number of time mask to apply + t_inplace: whether to inplace the original data while time masking + t_replace_with_zero: use zero to mask + Returns Iterable[{fname, feat, label}] """ for sample in source: x = sample['feat'] x = x.numpy() - x = time_warp(x, max_time_warp=max_w, inplace = True, mode= "PIL") - x = freq_mask(x, F = max_f, n_mask = num_f_mask, inplace = True, replace_with_zero = False) - x = time_mask(x, T = max_t, n_mask = num_t_mask, inplace = True, replace_with_zero = False) + x = time_warp(x, max_time_warp=max_w, inplace = w_inplace, mode= w_mode) + x = freq_mask(x, F = max_f, n_mask = num_f_mask, inplace = f_inplace, replace_with_zero = f_replace_with_zero) + x = time_mask(x, T = max_t, n_mask = num_t_mask, inplace = t_inplace, replace_with_zero = t_replace_with_zero) sample['feat'] = paddle.to_tensor(x, dtype=paddle.float32) yield sample @@ -910,3 +927,9 @@ def _cmvn(source, cmvn_file): label_lengths) cmvn = pipelinefilter(_cmvn) + +def _placeholder(source): + for data in source: + yield data + +placeholder = pipelinefilter(_placeholder) \ No newline at end of file diff --git a/paddlespeech/audio/stream_data/pipeline.py b/paddlespeech/audio/stream_data/pipeline.py index b672773b..e738083f 100644 --- a/paddlespeech/audio/stream_data/pipeline.py +++ b/paddlespeech/audio/stream_data/pipeline.py @@ -89,6 +89,12 @@ class DataPipeline(IterableDataset, PipelineStage): def append(self, f): """Append a pipeline stage (modifies the object).""" self.pipeline.append(f) + return self + + def append_list(self, *args): + for arg in args: + self.pipeline.append(arg) + return self def compose(self, *args): """Append a pipeline stage to a copy of the pipeline and returns the copy.""" diff --git a/paddlespeech/audio/stream_data/shardlists.py b/paddlespeech/audio/stream_data/shardlists.py index 503bfe57..3d1801cc 100644 --- a/paddlespeech/audio/stream_data/shardlists.py +++ b/paddlespeech/audio/stream_data/shardlists.py @@ -24,6 +24,8 @@ from .filters import pipelinefilter from .paddle_utils import IterableDataset +from ..utils.log import Logger +logger = Logger(__name__) def expand_urls(urls): if isinstance(urls, str): urllist = urls.split("::") diff --git a/paddlespeech/audio/utils/log.py b/paddlespeech/audio/utils/log.py index 5656b286..0a25bbd5 100644 --- a/paddlespeech/audio/utils/log.py +++ b/paddlespeech/audio/utils/log.py @@ -65,6 +65,7 @@ class Logger(object): def __init__(self, name: str=None): name = 'PaddleAudio' if not name else name + self.name = name self.logger = logging.getLogger(name) for key, conf in log_config.items(): @@ -101,7 +102,7 @@ class Logger(object): if not self.is_enable: return - self.logger.log(log_level, msg) + self.logger.log(log_level, self.name + " | " + msg) @contextlib.contextmanager def use_terminator(self, terminator: str): diff --git a/paddlespeech/audio/utils/tensor_utils.py b/paddlespeech/audio/utils/tensor_utils.py index bae473ec..16f60810 100644 --- a/paddlespeech/audio/utils/tensor_utils.py +++ b/paddlespeech/audio/utils/tensor_utils.py @@ -93,9 +93,6 @@ def pad_sequence(sequences: List[paddle.Tensor], for i, tensor in enumerate(sequences): length = tensor.shape[0] # use index notation to prevent duplicate references to the tensor - logger.info( - f"length {length}, out_tensor {out_tensor.shape}, tensor {tensor.shape}" - ) if batch_first: # TODO (Hui Zhang): set_value op not supprot `end==start` # TODO (Hui Zhang): set_value op not support int16 diff --git a/paddlespeech/s2t/exps/u2/model.py b/paddlespeech/s2t/exps/u2/model.py index efcc9629..d6c68f96 100644 --- a/paddlespeech/s2t/exps/u2/model.py +++ b/paddlespeech/s2t/exps/u2/model.py @@ -26,6 +26,7 @@ from paddle import distributed as dist from paddlespeech.s2t.frontend.featurizer import TextFeaturizer from paddlespeech.s2t.io.dataloader import BatchDataLoader +from paddlespeech.s2t.io.dataloader import StreamDataLoader from paddlespeech.s2t.models.u2 import U2Model from paddlespeech.s2t.training.optimizer import OptimizerFactory from paddlespeech.s2t.training.reporter import ObsScope @@ -106,7 +107,8 @@ class U2Trainer(Trainer): @paddle.no_grad() def valid(self): self.model.eval() - logger.info(f"Valid Total Examples: {len(self.valid_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Valid Total Examples: {len(self.valid_loader.dataset)}") valid_losses = defaultdict(list) num_seen_utts = 1 total_loss = 0.0 @@ -132,7 +134,7 @@ class U2Trainer(Trainer): msg = f"Valid: Rank: {dist.get_rank()}, " msg += "epoch: {}, ".format(self.epoch) msg += "step: {}, ".format(self.iteration) - msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) + #msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) msg += ', '.join('{}: {:>.6f}'.format(k, v) for k, v in valid_dump.items()) logger.info(msg) @@ -152,7 +154,8 @@ class U2Trainer(Trainer): self.before_train() - logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") while self.epoch < self.config.n_epoch: with Timer("Epoch-Train Time Cost: {}"): self.model.train() @@ -170,7 +173,8 @@ class U2Trainer(Trainer): self.train_batch(batch_index, batch, msg) self.after_train_batch() report('iter', batch_index + 1) - report('total', len(self.train_loader)) + if not self.use_streamdata: + report('total', len(self.train_loader)) report('reader_cost', dataload_time) observation['batch_cost'] = observation[ 'reader_cost'] + observation['step_cost'] @@ -218,92 +222,188 @@ class U2Trainer(Trainer): def setup_dataloader(self): config = self.config.clone() - + self.use_streamdata = config.get("use_stream_data", False) if self.train: # train/valid dataset, return token ids - self.train_loader = BatchDataLoader( - json_file=config.train_manifest, - train_mode=True, - sortagrad=config.sortagrad, - batch_size=config.batch_size, - maxlen_in=config.maxlen_in, - maxlen_out=config.maxlen_out, - minibatches=config.minibatches, - mini_batch_size=self.args.ngpu, - batch_count=config.batch_count, - batch_bins=config.batch_bins, - batch_frames_in=config.batch_frames_in, - batch_frames_out=config.batch_frames_out, - batch_frames_inout=config.batch_frames_inout, - preprocess_conf=config.preprocess_config, - n_iter_processes=config.num_workers, - subsampling_factor=1, - num_encs=1, - dist_sampler=config.get('dist_sampler', False), - shortest_first=False) - - self.valid_loader = BatchDataLoader( - json_file=config.dev_manifest, - train_mode=False, - sortagrad=False, - batch_size=config.batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=self.args.ngpu, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config.preprocess_config, - n_iter_processes=config.num_workers, - subsampling_factor=1, - num_encs=1, - dist_sampler=config.get('dist_sampler', False), - shortest_first=False) + if self.use_streamdata: + self.train_loader = StreamDataLoader( + manifest_file=config.train_manifest, + train_mode=True, + unit_type=config.unit_type, + batch_size=config.batch_size, + num_mel_bins=config.feat_dim, + frame_length=config.window_ms, + frame_shift=config.stride_ms, + dither=config.dither, + minlen_in=config.minlen_in, + maxlen_in=config.maxlen_in, + minlen_out=config.minlen_out, + maxlen_out=config.maxlen_out, + resample_rate=config.resample_rate, + augment_conf=config.augment_conf, # dict + shuffle_size=config.shuffle_size, + sort_size=config.sort_size, + n_iter_processes=config.num_workers, + prefetch_factor=config.prefetch_factor, + dist_sampler=config.get('dist_sampler', False), + cmvn_file=config.cmvn_file, + vocab_filepath=config.vocab_filepath, + ) + self.valid_loader = StreamDataLoader( + manifest_file=config.dev_manifest, + train_mode=False, + unit_type=config.unit_type, + batch_size=config.batch_size, + num_mel_bins=config.feat_dim, + frame_length=config.window_ms, + frame_shift=config.stride_ms, + dither=config.dither, + minlen_in=config.minlen_in, + maxlen_in=config.maxlen_in, + minlen_out=config.minlen_out, + maxlen_out=config.maxlen_out, + resample_rate=config.resample_rate, + augment_conf=config.augment_conf, # dict + shuffle_size=config.shuffle_size, + sort_size=config.sort_size, + n_iter_processes=config.num_workers, + prefetch_factor=config.prefetch_factor, + dist_sampler=config.get('dist_sampler', False), + cmvn_file=config.cmvn_file, + vocab_filepath=config.vocab_filepath, + ) + else: + self.train_loader = BatchDataLoader( + json_file=config.train_manifest, + train_mode=True, + sortagrad=config.sortagrad, + batch_size=config.batch_size, + maxlen_in=config.maxlen_in, + maxlen_out=config.maxlen_out, + minibatches=config.minibatches, + mini_batch_size=self.args.ngpu, + batch_count=config.batch_count, + batch_bins=config.batch_bins, + batch_frames_in=config.batch_frames_in, + batch_frames_out=config.batch_frames_out, + batch_frames_inout=config.batch_frames_inout, + preprocess_conf=config.preprocess_config, + n_iter_processes=config.num_workers, + subsampling_factor=1, + num_encs=1, + dist_sampler=config.get('dist_sampler', False), + shortest_first=False) + + self.valid_loader = BatchDataLoader( + json_file=config.dev_manifest, + train_mode=False, + sortagrad=False, + batch_size=config.batch_size, + maxlen_in=float('inf'), + maxlen_out=float('inf'), + minibatches=0, + mini_batch_size=self.args.ngpu, + batch_count='auto', + batch_bins=0, + batch_frames_in=0, + batch_frames_out=0, + batch_frames_inout=0, + preprocess_conf=config.preprocess_config, + n_iter_processes=config.num_workers, + subsampling_factor=1, + num_encs=1, + dist_sampler=config.get('dist_sampler', False), + shortest_first=False) logger.info("Setup train/valid Dataloader!") else: decode_batch_size = config.get('decode', dict()).get( 'decode_batch_size', 1) # test dataset, return raw text - self.test_loader = BatchDataLoader( - json_file=config.test_manifest, - train_mode=False, - sortagrad=False, - batch_size=decode_batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config.preprocess_config, - n_iter_processes=1, - subsampling_factor=1, - num_encs=1) - - self.align_loader = BatchDataLoader( - json_file=config.test_manifest, - train_mode=False, - sortagrad=False, - batch_size=decode_batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config.preprocess_config, - n_iter_processes=1, - subsampling_factor=1, - num_encs=1) + if self.use_streamdata: + self.test_loader = StreamDataLoader( + manifest_file=config.test_manifest, + train_mode=False, + unit_type=config.unit_type, + batch_size=config.batch_size, + num_mel_bins=config.feat_dim, + frame_length=config.window_ms, + frame_shift=config.stride_ms, + dither=0.0, + minlen_in=0.0, + maxlen_in=float('inf'), + minlen_out=0, + maxlen_out=float('inf'), + resample_rate=config.resample_rate, + augment_conf=config.augment_conf, # dict + shuffle_size=config.shuffle_size, + sort_size=config.sort_size, + n_iter_processes=config.num_workers, + prefetch_factor=config.prefetch_factor, + dist_sampler=config.get('dist_sampler', False), + cmvn_file=config.cmvn_file, + vocab_filepath=config.vocab_filepath, + ) + self.align_loader = StreamDataLoader( + manifest_file=config.test_manifest, + train_mode=False, + unit_type=config.unit_type, + batch_size=config.batch_size, + num_mel_bins=config.feat_dim, + frame_length=config.window_ms, + frame_shift=config.stride_ms, + dither=0.0, + minlen_in=0.0, + maxlen_in=float('inf'), + minlen_out=0, + maxlen_out=float('inf'), + resample_rate=config.resample_rate, + augment_conf=config.augment_conf, # dict + shuffle_size=config.shuffle_size, + sort_size=config.sort_size, + n_iter_processes=config.num_workers, + prefetch_factor=config.prefetch_factor, + dist_sampler=config.get('dist_sampler', False), + cmvn_file=config.cmvn_file, + vocab_filepath=config.vocab_filepath, + ) + else: + self.test_loader = BatchDataLoader( + json_file=config.test_manifest, + train_mode=False, + sortagrad=False, + batch_size=decode_batch_size, + maxlen_in=float('inf'), + maxlen_out=float('inf'), + minibatches=0, + mini_batch_size=1, + batch_count='auto', + batch_bins=0, + batch_frames_in=0, + batch_frames_out=0, + batch_frames_inout=0, + preprocess_conf=config.preprocess_config, + n_iter_processes=1, + subsampling_factor=1, + num_encs=1) + + self.align_loader = BatchDataLoader( + json_file=config.test_manifest, + train_mode=False, + sortagrad=False, + batch_size=decode_batch_size, + maxlen_in=float('inf'), + maxlen_out=float('inf'), + minibatches=0, + mini_batch_size=1, + batch_count='auto', + batch_bins=0, + batch_frames_in=0, + batch_frames_out=0, + batch_frames_inout=0, + preprocess_conf=config.preprocess_config, + n_iter_processes=1, + subsampling_factor=1, + num_encs=1) logger.info("Setup test/align Dataloader!") def setup_model(self): @@ -452,7 +552,8 @@ class U2Tester(U2Trainer): def test(self): assert self.args.result_file self.model.eval() - logger.info(f"Test Total Examples: {len(self.test_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Test Total Examples: {len(self.test_loader.dataset)}") stride_ms = self.config.stride_ms error_rate_type = None diff --git a/paddlespeech/s2t/io/dataloader.py b/paddlespeech/s2t/io/dataloader.py index 55aa13ff..c27969f0 100644 --- a/paddlespeech/s2t/io/dataloader.py +++ b/paddlespeech/s2t/io/dataloader.py @@ -28,6 +28,9 @@ from paddlespeech.s2t.io.dataset import TransformDataset from paddlespeech.s2t.io.reader import LoadInputsAndTargets from paddlespeech.s2t.utils.log import Log +import paddlespeech.audio.stream_data as stream_data +from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer + __all__ = ["BatchDataLoader"] logger = Log(__name__).getlog() @@ -56,6 +59,90 @@ def batch_collate(x): """ return x[0] +class StreamDataLoader(): + def __init__(self, + manifest_file: str, + train_mode: bool, + unit_type: str='char', + batch_size: int=0, + num_mel_bins=80, + frame_length=25, + frame_shift=10, + dither=0.0, + minlen_in: float=0.0, + maxlen_in: float=float('inf'), + minlen_out: float=0.0, + maxlen_out: float=float('inf'), + resample_rate: int=16000, + augment_conf: dict=None, + shuffle_size: int=10000, + sort_size: int=1000, + n_iter_processes: int=1, + prefetch_factor: int=2, + dist_sampler: bool=False, + cmvn_file="data/mean_std.json", + vocab_filepath='data/lang_char/vocab.txt'): + self.manifest_file = manifest_file + self.train_model = train_mode + self.batch_size = batch_size + self.prefetch_factor = prefetch_factor + self.dist_sampler = dist_sampler + self.n_iter_processes = n_iter_processes + + text_featurizer = TextFeaturizer(unit_type, vocab_filepath) + symbol_table = text_featurizer.vocab_dict + self.feat_dim = num_mel_bins + self.vocab_size = text_featurizer.vocab_size + + # The list of shard + shardlist = [] + with open(manifest_file, "r") as f: + for line in f.readlines(): + shardlist.append(line.strip()) + + if self.dist_sampler: + base_dataset = stream_data.DataPipeline( + stream_data.SimpleShardList(shardlist), + stream_data.split_by_node, + stream_data.split_by_worker, + stream_data.tarfile_to_samples(stream_data.reraise_exception) + ) + else: + base_dataset = stream_data.DataPipeline( + stream_data.SimpleShardList(shardlist), + stream_data.split_by_worker, + stream_data.tarfile_to_samples(stream_data.reraise_exception) + ) + + self.dataset = base_dataset.append_list( + stream_data.tokenize(symbol_table), + stream_data.data_filter(frame_shift=frame_shift, max_length=maxlen_in, min_length=minlen_in, token_max_length=maxlen_out, token_min_length=minlen_in), + stream_data.resample(resample_rate=resample_rate), + stream_data.compute_fbank(num_mel_bins=num_mel_bins, frame_length=frame_length, frame_shift=frame_shift, dither=dither), + stream_data.spec_aug(**augment_conf) if train_mode else stream_data.placeholder(), # num_t_mask=2, num_f_mask=2, max_t=40, max_f=30, max_w=80) + stream_data.shuffle(shuffle_size), + stream_data.sort(sort_size=sort_size), + stream_data.batched(batch_size), + stream_data.padding(), + stream_data.cmvn(cmvn_file) + ) + self.loader = stream_data.WebLoader( + self.dataset, + num_workers=self.n_iter_processes, + prefetch_factor = self.prefetch_factor, + batch_size=None + ) + + def __iter__(self): + return self.loader.__iter__() + + def __call__(self): + return self.__iter__() + + def __len__(self): + logger.info("Stream dataloader does not support calculate the length of the dataset") + return -1 + class BatchDataLoader(): def __init__(self, diff --git a/paddlespeech/s2t/io/reader.py b/paddlespeech/s2t/io/reader.py index 4e136bdc..5e018bef 100644 --- a/paddlespeech/s2t/io/reader.py +++ b/paddlespeech/s2t/io/reader.py @@ -19,7 +19,7 @@ import numpy as np import soundfile from .utility import feat_type -from paddlespeech.s2t.transform.transformation import Transformation +from paddlespeech.audio.transform.transformation import Transformation from paddlespeech.s2t.utils.log import Log # from paddlespeech.s2t.frontend.augmentor.augmentation import AugmentationPipeline as Transformation diff --git a/paddlespeech/s2t/transform/__init__.py b/paddlespeech/s2t/transform/__init__.py deleted file mode 100644 index 185a92b8..00000000 --- a/paddlespeech/s2t/transform/__init__.py +++ /dev/null @@ -1,13 +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. diff --git a/paddlespeech/s2t/transform/add_deltas.py b/paddlespeech/s2t/transform/add_deltas.py deleted file mode 100644 index 1387fe9d..00000000 --- a/paddlespeech/s2t/transform/add_deltas.py +++ /dev/null @@ -1,54 +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. -# Modified from espnet(https://github.com/espnet/espnet) -import numpy as np - - -def delta(feat, window): - assert window > 0 - delta_feat = np.zeros_like(feat) - for i in range(1, window + 1): - delta_feat[:-i] += i * feat[i:] - delta_feat[i:] += -i * feat[:-i] - delta_feat[-i:] += i * feat[-1] - delta_feat[:i] += -i * feat[0] - delta_feat /= 2 * sum(i**2 for i in range(1, window + 1)) - return delta_feat - - -def add_deltas(x, window=2, order=2): - """ - Args: - x (np.ndarray): speech feat, (T, D). - - Return: - np.ndarray: (T, (1+order)*D) - """ - feats = [x] - for _ in range(order): - feats.append(delta(feats[-1], window)) - return np.concatenate(feats, axis=1) - - -class AddDeltas(): - def __init__(self, window=2, order=2): - self.window = window - self.order = order - - def __repr__(self): - return "{name}(window={window}, order={order}".format( - name=self.__class__.__name__, window=self.window, order=self.order) - - def __call__(self, x): - return add_deltas(x, window=self.window, order=self.order) diff --git a/paddlespeech/s2t/transform/channel_selector.py b/paddlespeech/s2t/transform/channel_selector.py deleted file mode 100644 index b078dcf8..00000000 --- a/paddlespeech/s2t/transform/channel_selector.py +++ /dev/null @@ -1,57 +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. -# Modified from espnet(https://github.com/espnet/espnet) -import numpy - - -class ChannelSelector(): - """Select 1ch from multi-channel signal""" - - def __init__(self, train_channel="random", eval_channel=0, axis=1): - self.train_channel = train_channel - self.eval_channel = eval_channel - self.axis = axis - - def __repr__(self): - return ("{name}(train_channel={train_channel}, " - "eval_channel={eval_channel}, axis={axis})".format( - name=self.__class__.__name__, - train_channel=self.train_channel, - eval_channel=self.eval_channel, - axis=self.axis, )) - - def __call__(self, x, train=True): - # Assuming x: [Time, Channel] by default - - if x.ndim <= self.axis: - # If the dimension is insufficient, then unsqueeze - # (e.g [Time] -> [Time, 1]) - ind = tuple( - slice(None) if i < x.ndim else None - for i in range(self.axis + 1)) - x = x[ind] - - if train: - channel = self.train_channel - else: - channel = self.eval_channel - - if channel == "random": - ch = numpy.random.randint(0, x.shape[self.axis]) - else: - ch = channel - - ind = tuple( - slice(None) if i != self.axis else ch for i in range(x.ndim)) - return x[ind] diff --git a/paddlespeech/s2t/transform/cmvn.py b/paddlespeech/s2t/transform/cmvn.py deleted file mode 100644 index 2db0070b..00000000 --- a/paddlespeech/s2t/transform/cmvn.py +++ /dev/null @@ -1,201 +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. -# Modified from espnet(https://github.com/espnet/espnet) -import io -import json - -import h5py -import kaldiio -import numpy as np - - -class CMVN(): - "Apply Global/Spk CMVN/iverserCMVN." - - def __init__( - self, - stats, - norm_means=True, - norm_vars=False, - filetype="mat", - utt2spk=None, - spk2utt=None, - reverse=False, - std_floor=1.0e-20, ): - self.stats_file = stats - self.norm_means = norm_means - self.norm_vars = norm_vars - self.reverse = reverse - - if isinstance(stats, dict): - stats_dict = dict(stats) - else: - # Use for global CMVN - if filetype == "mat": - stats_dict = {None: kaldiio.load_mat(stats)} - # Use for global CMVN - elif filetype == "npy": - stats_dict = {None: np.load(stats)} - # Use for speaker CMVN - elif filetype == "ark": - self.accept_uttid = True - stats_dict = dict(kaldiio.load_ark(stats)) - # Use for speaker CMVN - elif filetype == "hdf5": - self.accept_uttid = True - stats_dict = h5py.File(stats) - else: - raise ValueError("Not supporting filetype={}".format(filetype)) - - if utt2spk is not None: - self.utt2spk = {} - with io.open(utt2spk, "r", encoding="utf-8") as f: - for line in f: - utt, spk = line.rstrip().split(None, 1) - self.utt2spk[utt] = spk - elif spk2utt is not None: - self.utt2spk = {} - with io.open(spk2utt, "r", encoding="utf-8") as f: - for line in f: - spk, utts = line.rstrip().split(None, 1) - for utt in utts.split(): - self.utt2spk[utt] = spk - else: - self.utt2spk = None - - # Kaldi makes a matrix for CMVN which has a shape of (2, feat_dim + 1), - # and the first vector contains the sum of feats and the second is - # the sum of squares. The last value of the first, i.e. stats[0,-1], - # is the number of samples for this statistics. - self.bias = {} - self.scale = {} - for spk, stats in stats_dict.items(): - assert len(stats) == 2, stats.shape - - count = stats[0, -1] - - # If the feature has two or more dimensions - if not (np.isscalar(count) or isinstance(count, (int, float))): - # The first is only used - count = count.flatten()[0] - - mean = stats[0, :-1] / count - # V(x) = E(x^2) - (E(x))^2 - var = stats[1, :-1] / count - mean * mean - std = np.maximum(np.sqrt(var), std_floor) - self.bias[spk] = -mean - self.scale[spk] = 1 / std - - def __repr__(self): - return ("{name}(stats_file={stats_file}, " - "norm_means={norm_means}, norm_vars={norm_vars}, " - "reverse={reverse})".format( - name=self.__class__.__name__, - stats_file=self.stats_file, - norm_means=self.norm_means, - norm_vars=self.norm_vars, - reverse=self.reverse, )) - - def __call__(self, x, uttid=None): - if self.utt2spk is not None: - spk = self.utt2spk[uttid] - else: - spk = uttid - - if not self.reverse: - # apply cmvn - if self.norm_means: - x = np.add(x, self.bias[spk]) - if self.norm_vars: - x = np.multiply(x, self.scale[spk]) - - else: - # apply reverse cmvn - if self.norm_vars: - x = np.divide(x, self.scale[spk]) - if self.norm_means: - x = np.subtract(x, self.bias[spk]) - - return x - - -class UtteranceCMVN(): - "Apply Utterance CMVN" - - def __init__(self, norm_means=True, norm_vars=False, std_floor=1.0e-20): - self.norm_means = norm_means - self.norm_vars = norm_vars - self.std_floor = std_floor - - def __repr__(self): - return "{name}(norm_means={norm_means}, norm_vars={norm_vars})".format( - name=self.__class__.__name__, - norm_means=self.norm_means, - norm_vars=self.norm_vars, ) - - def __call__(self, x, uttid=None): - # x: [Time, Dim] - square_sums = (x**2).sum(axis=0) - mean = x.mean(axis=0) - - if self.norm_means: - x = np.subtract(x, mean) - - if self.norm_vars: - var = square_sums / x.shape[0] - mean**2 - std = np.maximum(np.sqrt(var), self.std_floor) - x = np.divide(x, std) - - return x - - -class GlobalCMVN(): - "Apply Global CMVN" - - def __init__(self, - cmvn_path, - norm_means=True, - norm_vars=True, - std_floor=1.0e-20): - # cmvn_path: Option[str, dict] - cmvn = cmvn_path - self.cmvn = cmvn - self.norm_means = norm_means - self.norm_vars = norm_vars - self.std_floor = std_floor - if isinstance(cmvn, dict): - cmvn_stats = cmvn - else: - with open(cmvn) as f: - cmvn_stats = json.load(f) - self.count = cmvn_stats['frame_num'] - self.mean = np.array(cmvn_stats['mean_stat']) / self.count - self.square_sums = np.array(cmvn_stats['var_stat']) - self.var = self.square_sums / self.count - self.mean**2 - self.std = np.maximum(np.sqrt(self.var), self.std_floor) - - def __repr__(self): - return f"""{self.__class__.__name__}( - cmvn_path={self.cmvn}, - norm_means={self.norm_means}, - norm_vars={self.norm_vars},)""" - - def __call__(self, x, uttid=None): - # x: [Time, Dim] - if self.norm_means: - x = np.subtract(x, self.mean) - - if self.norm_vars: - x = np.divide(x, self.std) - return x diff --git a/paddlespeech/s2t/transform/functional.py b/paddlespeech/s2t/transform/functional.py deleted file mode 100644 index ccb50081..00000000 --- a/paddlespeech/s2t/transform/functional.py +++ /dev/null @@ -1,86 +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. -# Modified from espnet(https://github.com/espnet/espnet) -import inspect - -from paddlespeech.s2t.transform.transform_interface import TransformInterface -from paddlespeech.s2t.utils.check_kwargs import check_kwargs - - -class FuncTrans(TransformInterface): - """Functional Transformation - - WARNING: - Builtin or C/C++ functions may not work properly - because this class heavily depends on the `inspect` module. - - Usage: - - >>> def foo_bar(x, a=1, b=2): - ... '''Foo bar - ... :param x: input - ... :param int a: default 1 - ... :param int b: default 2 - ... ''' - ... return x + a - b - - - >>> class FooBar(FuncTrans): - ... _func = foo_bar - ... __doc__ = foo_bar.__doc__ - """ - - _func = None - - def __init__(self, **kwargs): - self.kwargs = kwargs - check_kwargs(self.func, kwargs) - - def __call__(self, x): - return self.func(x, **self.kwargs) - - @classmethod - def add_arguments(cls, parser): - fname = cls._func.__name__.replace("_", "-") - group = parser.add_argument_group(fname + " transformation setting") - for k, v in cls.default_params().items(): - # TODO(karita): get help and choices from docstring? - attr = k.replace("_", "-") - group.add_argument(f"--{fname}-{attr}", default=v, type=type(v)) - return parser - - @property - def func(self): - return type(self)._func - - @classmethod - def default_params(cls): - try: - d = dict(inspect.signature(cls._func).parameters) - except ValueError: - d = dict() - return { - k: v.default - for k, v in d.items() if v.default != inspect.Parameter.empty - } - - def __repr__(self): - params = self.default_params() - params.update(**self.kwargs) - ret = self.__class__.__name__ + "(" - if len(params) == 0: - return ret + ")" - for k, v in params.items(): - ret += "{}={}, ".format(k, v) - return ret[:-2] + ")" diff --git a/paddlespeech/s2t/transform/perturb.py b/paddlespeech/s2t/transform/perturb.py deleted file mode 100644 index b18caefb..00000000 --- a/paddlespeech/s2t/transform/perturb.py +++ /dev/null @@ -1,471 +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. -# Modified from espnet(https://github.com/espnet/espnet) -import librosa -import numpy -import scipy -import soundfile - -from paddlespeech.s2t.io.reader import SoundHDF5File - - -class SpeedPerturbation(): - """SpeedPerturbation - - The speed perturbation in kaldi uses sox-speed instead of sox-tempo, - and sox-speed just to resample the input, - i.e pitch and tempo are changed both. - - "Why use speed option instead of tempo -s in SoX for speed perturbation" - https://groups.google.com/forum/#!topic/kaldi-help/8OOG7eE4sZ8 - - Warning: - This function is very slow because of resampling. - I recommmend to apply speed-perturb outside the training using sox. - - """ - - def __init__( - self, - lower=0.9, - upper=1.1, - utt2ratio=None, - keep_length=True, - res_type="kaiser_best", - seed=None, ): - self.res_type = res_type - self.keep_length = keep_length - self.state = numpy.random.RandomState(seed) - - if utt2ratio is not None: - self.utt2ratio = {} - # Use the scheduled ratio for each utterances - self.utt2ratio_file = utt2ratio - self.lower = None - self.upper = None - self.accept_uttid = True - - with open(utt2ratio, "r") as f: - for line in f: - utt, ratio = line.rstrip().split(None, 1) - ratio = float(ratio) - self.utt2ratio[utt] = ratio - else: - self.utt2ratio = None - # The ratio is given on runtime randomly - self.lower = lower - self.upper = upper - - def __repr__(self): - if self.utt2ratio is None: - return "{}(lower={}, upper={}, " "keep_length={}, res_type={})".format( - self.__class__.__name__, - self.lower, - self.upper, - self.keep_length, - self.res_type, ) - else: - return "{}({}, res_type={})".format( - self.__class__.__name__, self.utt2ratio_file, self.res_type) - - def __call__(self, x, uttid=None, train=True): - if not train: - return x - x = x.astype(numpy.float32) - if self.accept_uttid: - ratio = self.utt2ratio[uttid] - else: - ratio = self.state.uniform(self.lower, self.upper) - - # Note1: resample requires the sampling-rate of input and output, - # but actually only the ratio is used. - y = librosa.resample( - x, orig_sr=ratio, target_sr=1, res_type=self.res_type) - - if self.keep_length: - diff = abs(len(x) - len(y)) - if len(y) > len(x): - # Truncate noise - y = y[diff // 2:-((diff + 1) // 2)] - elif len(y) < len(x): - # Assume the time-axis is the first: (Time, Channel) - pad_width = [(diff // 2, (diff + 1) // 2)] + [ - (0, 0) for _ in range(y.ndim - 1) - ] - y = numpy.pad( - y, pad_width=pad_width, constant_values=0, mode="constant") - return y - - -class SpeedPerturbationSox(): - """SpeedPerturbationSox - - The speed perturbation in kaldi uses sox-speed instead of sox-tempo, - and sox-speed just to resample the input, - i.e pitch and tempo are changed both. - - To speed up or slow down the sound of a file, - use speed to modify the pitch and the duration of the file. - This raises the speed and reduces the time. - The default factor is 1.0 which makes no change to the audio. - 2.0 doubles speed, thus time length is cut by a half and pitch is one interval higher. - - "Why use speed option instead of tempo -s in SoX for speed perturbation" - https://groups.google.com/forum/#!topic/kaldi-help/8OOG7eE4sZ8 - - tempo option: - sox -t wav input.wav -t wav output.tempo0.9.wav tempo -s 0.9 - - speed option: - sox -t wav input.wav -t wav output.speed0.9.wav speed 0.9 - - If we use speed option like above, the pitch of audio also will be changed, - but the tempo option does not change the pitch. - """ - - def __init__( - self, - lower=0.9, - upper=1.1, - utt2ratio=None, - keep_length=True, - sr=16000, - seed=None, ): - self.sr = sr - self.keep_length = keep_length - self.state = numpy.random.RandomState(seed) - - try: - import soxbindings as sox - except ImportError: - try: - from paddlespeech.s2t.utils import dynamic_pip_install - package = "sox" - dynamic_pip_install.install(package) - package = "soxbindings" - if sys.platform != "win32": - dynamic_pip_install.install(package) - import soxbindings as sox - except Exception: - raise RuntimeError( - "Can not install soxbindings on your system.") - self.sox = sox - - if utt2ratio is not None: - self.utt2ratio = {} - # Use the scheduled ratio for each utterances - self.utt2ratio_file = utt2ratio - self.lower = None - self.upper = None - self.accept_uttid = True - - with open(utt2ratio, "r") as f: - for line in f: - utt, ratio = line.rstrip().split(None, 1) - ratio = float(ratio) - self.utt2ratio[utt] = ratio - else: - self.utt2ratio = None - # The ratio is given on runtime randomly - self.lower = lower - self.upper = upper - - def __repr__(self): - if self.utt2ratio is None: - return f"""{self.__class__.__name__}( - lower={self.lower}, - upper={self.upper}, - keep_length={self.keep_length}, - sample_rate={self.sr})""" - - else: - return f"""{self.__class__.__name__}( - utt2ratio={self.utt2ratio_file}, - sample_rate={self.sr})""" - - def __call__(self, x, uttid=None, train=True): - if not train: - return x - - x = x.astype(numpy.float32) - if self.accept_uttid: - ratio = self.utt2ratio[uttid] - else: - ratio = self.state.uniform(self.lower, self.upper) - - tfm = self.sox.Transformer() - tfm.set_globals(multithread=False) - tfm.speed(ratio) - y = tfm.build_array(input_array=x, sample_rate_in=self.sr) - - if self.keep_length: - diff = abs(len(x) - len(y)) - if len(y) > len(x): - # Truncate noise - y = y[diff // 2:-((diff + 1) // 2)] - elif len(y) < len(x): - # Assume the time-axis is the first: (Time, Channel) - pad_width = [(diff // 2, (diff + 1) // 2)] + [ - (0, 0) for _ in range(y.ndim - 1) - ] - y = numpy.pad( - y, pad_width=pad_width, constant_values=0, mode="constant") - - if y.ndim == 2 and x.ndim == 1: - # (T, C) -> (T) - y = y.sequence(1) - return y - - -class BandpassPerturbation(): - """BandpassPerturbation - - Randomly dropout along the frequency axis. - - The original idea comes from the following: - "randomly-selected frequency band was cut off under the constraint of - leaving at least 1,000 Hz band within the range of less than 4,000Hz." - (The Hitachi/JHU CHiME-5 system: Advances in speech recognition for - everyday home environments using multiple microphone arrays; - http://spandh.dcs.shef.ac.uk/chime_workshop/papers/CHiME_2018_paper_kanda.pdf) - - """ - - def __init__(self, lower=0.0, upper=0.75, seed=None, axes=(-1, )): - self.lower = lower - self.upper = upper - self.state = numpy.random.RandomState(seed) - # x_stft: (Time, Channel, Freq) - self.axes = axes - - def __repr__(self): - return "{}(lower={}, upper={})".format(self.__class__.__name__, - self.lower, self.upper) - - def __call__(self, x_stft, uttid=None, train=True): - if not train: - return x_stft - - if x_stft.ndim == 1: - raise RuntimeError("Input in time-freq domain: " - "(Time, Channel, Freq) or (Time, Freq)") - - ratio = self.state.uniform(self.lower, self.upper) - axes = [i if i >= 0 else x_stft.ndim - i for i in self.axes] - shape = [s if i in axes else 1 for i, s in enumerate(x_stft.shape)] - - mask = self.state.randn(*shape) > ratio - x_stft *= mask - return x_stft - - -class VolumePerturbation(): - def __init__(self, - lower=-1.6, - upper=1.6, - utt2ratio=None, - dbunit=True, - seed=None): - self.dbunit = dbunit - self.utt2ratio_file = utt2ratio - self.lower = lower - self.upper = upper - self.state = numpy.random.RandomState(seed) - - if utt2ratio is not None: - # Use the scheduled ratio for each utterances - self.utt2ratio = {} - self.lower = None - self.upper = None - self.accept_uttid = True - - with open(utt2ratio, "r") as f: - for line in f: - utt, ratio = line.rstrip().split(None, 1) - ratio = float(ratio) - self.utt2ratio[utt] = ratio - else: - # The ratio is given on runtime randomly - self.utt2ratio = None - - def __repr__(self): - if self.utt2ratio is None: - return "{}(lower={}, upper={}, dbunit={})".format( - self.__class__.__name__, self.lower, self.upper, self.dbunit) - else: - return '{}("{}", dbunit={})'.format( - self.__class__.__name__, self.utt2ratio_file, self.dbunit) - - def __call__(self, x, uttid=None, train=True): - if not train: - return x - - x = x.astype(numpy.float32) - - if self.accept_uttid: - ratio = self.utt2ratio[uttid] - else: - ratio = self.state.uniform(self.lower, self.upper) - if self.dbunit: - ratio = 10**(ratio / 20) - return x * ratio - - -class NoiseInjection(): - """Add isotropic noise""" - - def __init__( - self, - utt2noise=None, - lower=-20, - upper=-5, - utt2ratio=None, - filetype="list", - dbunit=True, - seed=None, ): - self.utt2noise_file = utt2noise - self.utt2ratio_file = utt2ratio - self.filetype = filetype - self.dbunit = dbunit - self.lower = lower - self.upper = upper - self.state = numpy.random.RandomState(seed) - - if utt2ratio is not None: - # Use the scheduled ratio for each utterances - self.utt2ratio = {} - with open(utt2noise, "r") as f: - for line in f: - utt, snr = line.rstrip().split(None, 1) - snr = float(snr) - self.utt2ratio[utt] = snr - else: - # The ratio is given on runtime randomly - self.utt2ratio = None - - if utt2noise is not None: - self.utt2noise = {} - if filetype == "list": - with open(utt2noise, "r") as f: - for line in f: - utt, filename = line.rstrip().split(None, 1) - signal, rate = soundfile.read(filename, dtype="int16") - # Load all files in memory - self.utt2noise[utt] = (signal, rate) - - elif filetype == "sound.hdf5": - self.utt2noise = SoundHDF5File(utt2noise, "r") - else: - raise ValueError(filetype) - else: - self.utt2noise = None - - if utt2noise is not None and utt2ratio is not None: - if set(self.utt2ratio) != set(self.utt2noise): - raise RuntimeError("The uttids mismatch between {} and {}". - format(utt2ratio, utt2noise)) - - def __repr__(self): - if self.utt2ratio is None: - return "{}(lower={}, upper={}, dbunit={})".format( - self.__class__.__name__, self.lower, self.upper, self.dbunit) - else: - return '{}("{}", dbunit={})'.format( - self.__class__.__name__, self.utt2ratio_file, self.dbunit) - - def __call__(self, x, uttid=None, train=True): - if not train: - return x - x = x.astype(numpy.float32) - - # 1. Get ratio of noise to signal in sound pressure level - if uttid is not None and self.utt2ratio is not None: - ratio = self.utt2ratio[uttid] - else: - ratio = self.state.uniform(self.lower, self.upper) - - if self.dbunit: - ratio = 10**(ratio / 20) - scale = ratio * numpy.sqrt((x**2).mean()) - - # 2. Get noise - if self.utt2noise is not None: - # Get noise from the external source - if uttid is not None: - noise, rate = self.utt2noise[uttid] - else: - # Randomly select the noise source - noise = self.state.choice(list(self.utt2noise.values())) - # Normalize the level - noise /= numpy.sqrt((noise**2).mean()) - - # Adjust the noise length - diff = abs(len(x) - len(noise)) - offset = self.state.randint(0, diff) - if len(noise) > len(x): - # Truncate noise - noise = noise[offset:-(diff - offset)] - else: - noise = numpy.pad( - noise, pad_width=[offset, diff - offset], mode="wrap") - - else: - # Generate white noise - noise = self.state.normal(0, 1, x.shape) - - # 3. Add noise to signal - return x + noise * scale - - -class RIRConvolve(): - def __init__(self, utt2rir, filetype="list"): - self.utt2rir_file = utt2rir - self.filetype = filetype - - self.utt2rir = {} - if filetype == "list": - with open(utt2rir, "r") as f: - for line in f: - utt, filename = line.rstrip().split(None, 1) - signal, rate = soundfile.read(filename, dtype="int16") - self.utt2rir[utt] = (signal, rate) - - elif filetype == "sound.hdf5": - self.utt2rir = SoundHDF5File(utt2rir, "r") - else: - raise NotImplementedError(filetype) - - def __repr__(self): - return '{}("{}")'.format(self.__class__.__name__, self.utt2rir_file) - - def __call__(self, x, uttid=None, train=True): - if not train: - return x - - x = x.astype(numpy.float32) - - if x.ndim != 1: - # Must be single channel - raise RuntimeError( - "Input x must be one dimensional array, but got {}".format( - x.shape)) - - rir, rate = self.utt2rir[uttid] - if rir.ndim == 2: - # FIXME(kamo): Use chainer.convolution_1d? - # return [Time, Channel] - return numpy.stack( - [scipy.convolve(x, r, mode="same") for r in rir], axis=-1) - else: - return scipy.convolve(x, rir, mode="same") diff --git a/paddlespeech/s2t/transform/spec_augment.py b/paddlespeech/s2t/transform/spec_augment.py deleted file mode 100644 index 5ce95085..00000000 --- a/paddlespeech/s2t/transform/spec_augment.py +++ /dev/null @@ -1,214 +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. -# Modified from espnet(https://github.com/espnet/espnet) -"""Spec Augment module for preprocessing i.e., data augmentation""" -import random - -import numpy -from PIL import Image -from PIL.Image import BICUBIC - -from paddlespeech.s2t.transform.functional import FuncTrans - - -def time_warp(x, max_time_warp=80, inplace=False, mode="PIL"): - """time warp for spec augment - - move random center frame by the random width ~ uniform(-window, window) - :param numpy.ndarray x: spectrogram (time, freq) - :param int max_time_warp: maximum time frames to warp - :param bool inplace: overwrite x with the result - :param str mode: "PIL" (default, fast, not differentiable) or "sparse_image_warp" - (slow, differentiable) - :returns numpy.ndarray: time warped spectrogram (time, freq) - """ - window = max_time_warp - if window == 0: - return x - - if mode == "PIL": - t = x.shape[0] - if t - window <= window: - return x - # NOTE: randrange(a, b) emits a, a + 1, ..., b - 1 - center = random.randrange(window, t - window) - warped = random.randrange(center - window, center + - window) + 1 # 1 ... t - 1 - - left = Image.fromarray(x[:center]).resize((x.shape[1], warped), BICUBIC) - right = Image.fromarray(x[center:]).resize((x.shape[1], t - warped), - BICUBIC) - if inplace: - x[:warped] = left - x[warped:] = right - return x - return numpy.concatenate((left, right), 0) - elif mode == "sparse_image_warp": - import paddle - - from espnet.utils import spec_augment - - # TODO(karita): make this differentiable again - return spec_augment.time_warp(paddle.to_tensor(x), window).numpy() - else: - raise NotImplementedError("unknown resize mode: " + mode + - ", choose one from (PIL, sparse_image_warp).") - - -class TimeWarp(FuncTrans): - _func = time_warp - __doc__ = time_warp.__doc__ - - def __call__(self, x, train): - if not train: - return x - return super().__call__(x) - - -def freq_mask(x, F=30, n_mask=2, replace_with_zero=True, inplace=False): - """freq mask for spec agument - - :param numpy.ndarray x: (time, freq) - :param int n_mask: the number of masks - :param bool inplace: overwrite - :param bool replace_with_zero: pad zero on mask if true else use mean - """ - if inplace: - cloned = x - else: - cloned = x.copy() - - num_mel_channels = cloned.shape[1] - fs = numpy.random.randint(0, F, size=(n_mask, 2)) - - for f, mask_end in fs: - f_zero = random.randrange(0, num_mel_channels - f) - mask_end += f_zero - - # avoids randrange error if values are equal and range is empty - if f_zero == f_zero + f: - continue - - if replace_with_zero: - cloned[:, f_zero:mask_end] = 0 - else: - cloned[:, f_zero:mask_end] = cloned.mean() - return cloned - - -class FreqMask(FuncTrans): - _func = freq_mask - __doc__ = freq_mask.__doc__ - - def __call__(self, x, train): - if not train: - return x - return super().__call__(x) - - -def time_mask(spec, T=40, n_mask=2, replace_with_zero=True, inplace=False): - """freq mask for spec agument - - :param numpy.ndarray spec: (time, freq) - :param int n_mask: the number of masks - :param bool inplace: overwrite - :param bool replace_with_zero: pad zero on mask if true else use mean - """ - if inplace: - cloned = spec - else: - cloned = spec.copy() - len_spectro = cloned.shape[0] - ts = numpy.random.randint(0, T, size=(n_mask, 2)) - for t, mask_end in ts: - # avoid randint range error - if len_spectro - t <= 0: - continue - t_zero = random.randrange(0, len_spectro - t) - - # avoids randrange error if values are equal and range is empty - if t_zero == t_zero + t: - continue - - mask_end += t_zero - if replace_with_zero: - cloned[t_zero:mask_end] = 0 - else: - cloned[t_zero:mask_end] = cloned.mean() - return cloned - - -class TimeMask(FuncTrans): - _func = time_mask - __doc__ = time_mask.__doc__ - - def __call__(self, x, train): - if not train: - return x - return super().__call__(x) - - -def spec_augment( - x, - resize_mode="PIL", - max_time_warp=80, - max_freq_width=27, - n_freq_mask=2, - max_time_width=100, - n_time_mask=2, - inplace=True, - replace_with_zero=True, ): - """spec agument - - apply random time warping and time/freq masking - default setting is based on LD (Librispeech double) in Table 2 - https://arxiv.org/pdf/1904.08779.pdf - - :param numpy.ndarray x: (time, freq) - :param str resize_mode: "PIL" (fast, nondifferentiable) or "sparse_image_warp" - (slow, differentiable) - :param int max_time_warp: maximum frames to warp the center frame in spectrogram (W) - :param int freq_mask_width: maximum width of the random freq mask (F) - :param int n_freq_mask: the number of the random freq mask (m_F) - :param int time_mask_width: maximum width of the random time mask (T) - :param int n_time_mask: the number of the random time mask (m_T) - :param bool inplace: overwrite intermediate array - :param bool replace_with_zero: pad zero on mask if true else use mean - """ - assert isinstance(x, numpy.ndarray) - assert x.ndim == 2 - x = time_warp(x, max_time_warp, inplace=inplace, mode=resize_mode) - x = freq_mask( - x, - max_freq_width, - n_freq_mask, - inplace=inplace, - replace_with_zero=replace_with_zero, ) - x = time_mask( - x, - max_time_width, - n_time_mask, - inplace=inplace, - replace_with_zero=replace_with_zero, ) - return x - - -class SpecAugment(FuncTrans): - _func = spec_augment - __doc__ = spec_augment.__doc__ - - def __call__(self, x, train): - if not train: - return x - return super().__call__(x) diff --git a/paddlespeech/s2t/transform/spectrogram.py b/paddlespeech/s2t/transform/spectrogram.py deleted file mode 100644 index 19f0237b..00000000 --- a/paddlespeech/s2t/transform/spectrogram.py +++ /dev/null @@ -1,475 +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. -# Modified from espnet(https://github.com/espnet/espnet) -import librosa -import numpy as np -import paddle -from python_speech_features import logfbank - -import paddlespeech.audio.compliance.kaldi as kaldi - - -def stft(x, - n_fft, - n_shift, - win_length=None, - window="hann", - center=True, - pad_mode="reflect"): - # x: [Time, Channel] - if x.ndim == 1: - single_channel = True - # x: [Time] -> [Time, Channel] - x = x[:, None] - else: - single_channel = False - x = x.astype(np.float32) - - # FIXME(kamo): librosa.stft can't use multi-channel? - # x: [Time, Channel, Freq] - x = np.stack( - [ - librosa.stft( - y=x[:, ch], - n_fft=n_fft, - hop_length=n_shift, - win_length=win_length, - window=window, - center=center, - pad_mode=pad_mode, ).T for ch in range(x.shape[1]) - ], - axis=1, ) - - if single_channel: - # x: [Time, Channel, Freq] -> [Time, Freq] - x = x[:, 0] - return x - - -def istft(x, n_shift, win_length=None, window="hann", center=True): - # x: [Time, Channel, Freq] - if x.ndim == 2: - single_channel = True - # x: [Time, Freq] -> [Time, Channel, Freq] - x = x[:, None, :] - else: - single_channel = False - - # x: [Time, Channel] - x = np.stack( - [ - librosa.istft( - stft_matrix=x[:, ch].T, # [Time, Freq] -> [Freq, Time] - hop_length=n_shift, - win_length=win_length, - window=window, - center=center, ) for ch in range(x.shape[1]) - ], - axis=1, ) - - if single_channel: - # x: [Time, Channel] -> [Time] - x = x[:, 0] - return x - - -def stft2logmelspectrogram(x_stft, - fs, - n_mels, - n_fft, - fmin=None, - fmax=None, - eps=1e-10): - # x_stft: (Time, Channel, Freq) or (Time, Freq) - fmin = 0 if fmin is None else fmin - fmax = fs / 2 if fmax is None else fmax - - # spc: (Time, Channel, Freq) or (Time, Freq) - spc = np.abs(x_stft) - # mel_basis: (Mel_freq, Freq) - mel_basis = librosa.filters.mel( - sr=fs, n_fft=n_fft, n_mels=n_mels, fmin=fmin, fmax=fmax) - # lmspc: (Time, Channel, Mel_freq) or (Time, Mel_freq) - lmspc = np.log10(np.maximum(eps, np.dot(spc, mel_basis.T))) - - return lmspc - - -def spectrogram(x, n_fft, n_shift, win_length=None, window="hann"): - # x: (Time, Channel) -> spc: (Time, Channel, Freq) - spc = np.abs(stft(x, n_fft, n_shift, win_length, window=window)) - return spc - - -def logmelspectrogram( - x, - fs, - n_mels, - n_fft, - n_shift, - win_length=None, - window="hann", - fmin=None, - fmax=None, - eps=1e-10, - pad_mode="reflect", ): - # stft: (Time, Channel, Freq) or (Time, Freq) - x_stft = stft( - x, - n_fft=n_fft, - n_shift=n_shift, - win_length=win_length, - window=window, - pad_mode=pad_mode, ) - - return stft2logmelspectrogram( - x_stft, - fs=fs, - n_mels=n_mels, - n_fft=n_fft, - fmin=fmin, - fmax=fmax, - eps=eps) - - -class Spectrogram(): - def __init__(self, n_fft, n_shift, win_length=None, window="hann"): - self.n_fft = n_fft - self.n_shift = n_shift - self.win_length = win_length - self.window = window - - def __repr__(self): - return ("{name}(n_fft={n_fft}, n_shift={n_shift}, " - "win_length={win_length}, window={window})".format( - name=self.__class__.__name__, - n_fft=self.n_fft, - n_shift=self.n_shift, - win_length=self.win_length, - window=self.window, )) - - def __call__(self, x): - return spectrogram( - x, - n_fft=self.n_fft, - n_shift=self.n_shift, - win_length=self.win_length, - window=self.window, ) - - -class LogMelSpectrogram(): - def __init__( - self, - fs, - n_mels, - n_fft, - n_shift, - win_length=None, - window="hann", - fmin=None, - fmax=None, - eps=1e-10, ): - self.fs = fs - self.n_mels = n_mels - self.n_fft = n_fft - self.n_shift = n_shift - self.win_length = win_length - self.window = window - self.fmin = fmin - self.fmax = fmax - self.eps = eps - - def __repr__(self): - return ("{name}(fs={fs}, n_mels={n_mels}, n_fft={n_fft}, " - "n_shift={n_shift}, win_length={win_length}, window={window}, " - "fmin={fmin}, fmax={fmax}, eps={eps}))".format( - name=self.__class__.__name__, - fs=self.fs, - n_mels=self.n_mels, - n_fft=self.n_fft, - n_shift=self.n_shift, - win_length=self.win_length, - window=self.window, - fmin=self.fmin, - fmax=self.fmax, - eps=self.eps, )) - - def __call__(self, x): - return logmelspectrogram( - x, - fs=self.fs, - n_mels=self.n_mels, - n_fft=self.n_fft, - n_shift=self.n_shift, - win_length=self.win_length, - window=self.window, ) - - -class Stft2LogMelSpectrogram(): - def __init__(self, fs, n_mels, n_fft, fmin=None, fmax=None, eps=1e-10): - self.fs = fs - self.n_mels = n_mels - self.n_fft = n_fft - self.fmin = fmin - self.fmax = fmax - self.eps = eps - - def __repr__(self): - return ("{name}(fs={fs}, n_mels={n_mels}, n_fft={n_fft}, " - "fmin={fmin}, fmax={fmax}, eps={eps}))".format( - name=self.__class__.__name__, - fs=self.fs, - n_mels=self.n_mels, - n_fft=self.n_fft, - fmin=self.fmin, - fmax=self.fmax, - eps=self.eps, )) - - def __call__(self, x): - return stft2logmelspectrogram( - x, - fs=self.fs, - n_mels=self.n_mels, - n_fft=self.n_fft, - fmin=self.fmin, - fmax=self.fmax, ) - - -class Stft(): - def __init__( - self, - n_fft, - n_shift, - win_length=None, - window="hann", - center=True, - pad_mode="reflect", ): - self.n_fft = n_fft - self.n_shift = n_shift - self.win_length = win_length - self.window = window - self.center = center - self.pad_mode = pad_mode - - def __repr__(self): - return ("{name}(n_fft={n_fft}, n_shift={n_shift}, " - "win_length={win_length}, window={window}," - "center={center}, pad_mode={pad_mode})".format( - name=self.__class__.__name__, - n_fft=self.n_fft, - n_shift=self.n_shift, - win_length=self.win_length, - window=self.window, - center=self.center, - pad_mode=self.pad_mode, )) - - def __call__(self, x): - return stft( - x, - self.n_fft, - self.n_shift, - win_length=self.win_length, - window=self.window, - center=self.center, - pad_mode=self.pad_mode, ) - - -class IStft(): - def __init__(self, n_shift, win_length=None, window="hann", center=True): - self.n_shift = n_shift - self.win_length = win_length - self.window = window - self.center = center - - def __repr__(self): - return ("{name}(n_shift={n_shift}, " - "win_length={win_length}, window={window}," - "center={center})".format( - name=self.__class__.__name__, - n_shift=self.n_shift, - win_length=self.win_length, - window=self.window, - center=self.center, )) - - def __call__(self, x): - return istft( - x, - self.n_shift, - win_length=self.win_length, - window=self.window, - center=self.center, ) - - -class LogMelSpectrogramKaldi(): - def __init__( - self, - fs=16000, - n_mels=80, - n_shift=160, # unit:sample, 10ms - win_length=400, # unit:sample, 25ms - energy_floor=0.0, - dither=0.1): - """ - The Kaldi implementation of LogMelSpectrogram - Args: - fs (int): sample rate of the audio - n_mels (int): number of mel filter banks - n_shift (int): number of points in a frame shift - win_length (int): number of points in a frame windows - energy_floor (float): Floor on energy in Spectrogram computation (absolute) - dither (float): Dithering constant - - Returns: - LogMelSpectrogramKaldi - """ - - self.fs = fs - self.n_mels = n_mels - num_point_ms = fs / 1000 - self.n_frame_length = win_length / num_point_ms - self.n_frame_shift = n_shift / num_point_ms - self.energy_floor = energy_floor - self.dither = dither - - def __repr__(self): - return ( - "{name}(fs={fs}, n_mels={n_mels}, " - "n_frame_shift={n_frame_shift}, n_frame_length={n_frame_length}, " - "dither={dither}))".format( - name=self.__class__.__name__, - fs=self.fs, - n_mels=self.n_mels, - n_frame_shift=self.n_frame_shift, - n_frame_length=self.n_frame_length, - dither=self.dither, )) - - def __call__(self, x, train): - """ - Args: - x (np.ndarray): shape (Ti,) - train (bool): True, train mode. - - Raises: - ValueError: not support (Ti, C) - - Returns: - np.ndarray: (T, D) - """ - dither = self.dither if train else 0.0 - if x.ndim != 1: - raise ValueError("Not support x: [Time, Channel]") - waveform = paddle.to_tensor(np.expand_dims(x, 0), dtype=paddle.float32) - mat = kaldi.fbank( - waveform, - n_mels=self.n_mels, - frame_length=self.n_frame_length, - frame_shift=self.n_frame_shift, - dither=dither, - energy_floor=self.energy_floor, - sr=self.fs) - mat = np.squeeze(mat.numpy()) - return mat - - -class LogMelSpectrogramKaldi_decay(): - def __init__( - self, - fs=16000, - n_mels=80, - n_fft=512, # fft point - n_shift=160, # unit:sample, 10ms - win_length=400, # unit:sample, 25ms - window="povey", - fmin=20, - fmax=None, - eps=1e-10, - dither=1.0): - self.fs = fs - self.n_mels = n_mels - self.n_fft = n_fft - if n_shift > win_length: - raise ValueError("Stride size must not be greater than " - "window size.") - self.n_shift = n_shift / fs # unit: ms - self.win_length = win_length / fs # unit: ms - - self.window = window - self.fmin = fmin - if fmax is None: - fmax_ = fmax if fmax else self.fs / 2 - elif fmax > int(self.fs / 2): - raise ValueError("fmax must not be greater than half of " - "sample rate.") - self.fmax = fmax_ - - self.eps = eps - self.remove_dc_offset = True - self.preemph = 0.97 - self.dither = dither # only work in train mode - - def __repr__(self): - return ( - "{name}(fs={fs}, n_mels={n_mels}, n_fft={n_fft}, " - "n_shift={n_shift}, win_length={win_length}, preemph={preemph}, window={window}, " - "fmin={fmin}, fmax={fmax}, eps={eps}, dither={dither}))".format( - name=self.__class__.__name__, - fs=self.fs, - n_mels=self.n_mels, - n_fft=self.n_fft, - n_shift=self.n_shift, - preemph=self.preemph, - win_length=self.win_length, - window=self.window, - fmin=self.fmin, - fmax=self.fmax, - eps=self.eps, - dither=self.dither, )) - - def __call__(self, x, train): - """ - - Args: - x (np.ndarray): shape (Ti,) - train (bool): True, train mode. - - Raises: - ValueError: not support (Ti, C) - - Returns: - np.ndarray: (T, D) - """ - dither = self.dither if train else 0.0 - if x.ndim != 1: - raise ValueError("Not support x: [Time, Channel]") - - if x.dtype in np.sctypes['float']: - # PCM32 -> PCM16 - bits = np.iinfo(np.int16).bits - x = x * 2**(bits - 1) - - # logfbank need PCM16 input - y = logfbank( - signal=x, - samplerate=self.fs, - winlen=self.win_length, # unit ms - winstep=self.n_shift, # unit ms - nfilt=self.n_mels, - nfft=self.n_fft, - lowfreq=self.fmin, - highfreq=self.fmax, - dither=dither, - remove_dc_offset=self.remove_dc_offset, - preemph=self.preemph, - wintype=self.window) - return y diff --git a/paddlespeech/s2t/transform/transform_interface.py b/paddlespeech/s2t/transform/transform_interface.py deleted file mode 100644 index 8bc62420..00000000 --- a/paddlespeech/s2t/transform/transform_interface.py +++ /dev/null @@ -1,35 +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. -# Modified from espnet(https://github.com/espnet/espnet) - - -class TransformInterface: - """Transform Interface""" - - def __call__(self, x): - raise NotImplementedError("__call__ method is not implemented") - - @classmethod - def add_arguments(cls, parser): - return parser - - def __repr__(self): - return self.__class__.__name__ + "()" - - -class Identity(TransformInterface): - """Identity Function""" - - def __call__(self, x): - return x diff --git a/paddlespeech/s2t/transform/transformation.py b/paddlespeech/s2t/transform/transformation.py deleted file mode 100644 index 3b433cb0..00000000 --- a/paddlespeech/s2t/transform/transformation.py +++ /dev/null @@ -1,158 +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. -# Modified from espnet(https://github.com/espnet/espnet) -"""Transformation module.""" -import copy -import io -import logging -from collections import OrderedDict -from collections.abc import Sequence -from inspect import signature - -import yaml - -from paddlespeech.s2t.utils.dynamic_import import dynamic_import - -import_alias = dict( - identity="paddlespeech.s2t.transform.transform_interface:Identity", - time_warp="paddlespeech.s2t.transform.spec_augment:TimeWarp", - time_mask="paddlespeech.s2t.transform.spec_augment:TimeMask", - freq_mask="paddlespeech.s2t.transform.spec_augment:FreqMask", - spec_augment="paddlespeech.s2t.transform.spec_augment:SpecAugment", - speed_perturbation="paddlespeech.s2t.transform.perturb:SpeedPerturbation", - speed_perturbation_sox="paddlespeech.s2t.transform.perturb:SpeedPerturbationSox", - volume_perturbation="paddlespeech.s2t.transform.perturb:VolumePerturbation", - noise_injection="paddlespeech.s2t.transform.perturb:NoiseInjection", - bandpass_perturbation="paddlespeech.s2t.transform.perturb:BandpassPerturbation", - rir_convolve="paddlespeech.s2t.transform.perturb:RIRConvolve", - delta="paddlespeech.s2t.transform.add_deltas:AddDeltas", - cmvn="paddlespeech.s2t.transform.cmvn:CMVN", - utterance_cmvn="paddlespeech.s2t.transform.cmvn:UtteranceCMVN", - fbank="paddlespeech.s2t.transform.spectrogram:LogMelSpectrogram", - spectrogram="paddlespeech.s2t.transform.spectrogram:Spectrogram", - stft="paddlespeech.s2t.transform.spectrogram:Stft", - istft="paddlespeech.s2t.transform.spectrogram:IStft", - stft2fbank="paddlespeech.s2t.transform.spectrogram:Stft2LogMelSpectrogram", - wpe="paddlespeech.s2t.transform.wpe:WPE", - channel_selector="paddlespeech.s2t.transform.channel_selector:ChannelSelector", - fbank_kaldi="paddlespeech.s2t.transform.spectrogram:LogMelSpectrogramKaldi", - cmvn_json="paddlespeech.s2t.transform.cmvn:GlobalCMVN") - - -class Transformation(): - """Apply some functions to the mini-batch - - Examples: - >>> kwargs = {"process": [{"type": "fbank", - ... "n_mels": 80, - ... "fs": 16000}, - ... {"type": "cmvn", - ... "stats": "data/train/cmvn.ark", - ... "norm_vars": True}, - ... {"type": "delta", "window": 2, "order": 2}]} - >>> transform = Transformation(kwargs) - >>> bs = 10 - >>> xs = [np.random.randn(100, 80).astype(np.float32) - ... for _ in range(bs)] - >>> xs = transform(xs) - """ - - def __init__(self, conffile=None): - if conffile is not None: - if isinstance(conffile, dict): - self.conf = copy.deepcopy(conffile) - else: - with io.open(conffile, encoding="utf-8") as f: - self.conf = yaml.safe_load(f) - assert isinstance(self.conf, dict), type(self.conf) - else: - self.conf = {"mode": "sequential", "process": []} - - self.functions = OrderedDict() - if self.conf.get("mode", "sequential") == "sequential": - for idx, process in enumerate(self.conf["process"]): - assert isinstance(process, dict), type(process) - opts = dict(process) - process_type = opts.pop("type") - class_obj = dynamic_import(process_type, import_alias) - # TODO(karita): assert issubclass(class_obj, TransformInterface) - try: - self.functions[idx] = class_obj(**opts) - except TypeError: - try: - signa = signature(class_obj) - except ValueError: - # Some function, e.g. built-in function, are failed - pass - else: - logging.error("Expected signature: {}({})".format( - class_obj.__name__, signa)) - raise - else: - raise NotImplementedError( - "Not supporting mode={}".format(self.conf["mode"])) - - def __repr__(self): - rep = "\n" + "\n".join(" {}: {}".format(k, v) - for k, v in self.functions.items()) - return "{}({})".format(self.__class__.__name__, rep) - - def __call__(self, xs, uttid_list=None, **kwargs): - """Return new mini-batch - - :param Union[Sequence[np.ndarray], np.ndarray] xs: - :param Union[Sequence[str], str] uttid_list: - :return: batch: - :rtype: List[np.ndarray] - """ - if not isinstance(xs, Sequence): - is_batch = False - xs = [xs] - else: - is_batch = True - - if isinstance(uttid_list, str): - uttid_list = [uttid_list for _ in range(len(xs))] - - if self.conf.get("mode", "sequential") == "sequential": - for idx in range(len(self.conf["process"])): - func = self.functions[idx] - # TODO(karita): use TrainingTrans and UttTrans to check __call__ args - # Derive only the args which the func has - try: - param = signature(func).parameters - except ValueError: - # Some function, e.g. built-in function, are failed - param = {} - _kwargs = {k: v for k, v in kwargs.items() if k in param} - try: - if uttid_list is not None and "uttid" in param: - xs = [ - func(x, u, **_kwargs) - for x, u in zip(xs, uttid_list) - ] - else: - xs = [func(x, **_kwargs) for x in xs] - except Exception: - logging.fatal("Catch a exception from {}th func: {}".format( - idx, func)) - raise - else: - raise NotImplementedError( - "Not supporting mode={}".format(self.conf["mode"])) - - if is_batch: - return xs - else: - return xs[0] diff --git a/paddlespeech/s2t/transform/wpe.py b/paddlespeech/s2t/transform/wpe.py deleted file mode 100644 index 777379d0..00000000 --- a/paddlespeech/s2t/transform/wpe.py +++ /dev/null @@ -1,58 +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. -# Modified from espnet(https://github.com/espnet/espnet) -from nara_wpe.wpe import wpe - - -class WPE(object): - def __init__(self, - taps=10, - delay=3, - iterations=3, - psd_context=0, - statistics_mode="full"): - self.taps = taps - self.delay = delay - self.iterations = iterations - self.psd_context = psd_context - self.statistics_mode = statistics_mode - - def __repr__(self): - return ("{name}(taps={taps}, delay={delay}" - "iterations={iterations}, psd_context={psd_context}, " - "statistics_mode={statistics_mode})".format( - name=self.__class__.__name__, - taps=self.taps, - delay=self.delay, - iterations=self.iterations, - psd_context=self.psd_context, - statistics_mode=self.statistics_mode, )) - - def __call__(self, xs): - """Return enhanced - - :param np.ndarray xs: (Time, Channel, Frequency) - :return: enhanced_xs - :rtype: np.ndarray - - """ - # nara_wpe.wpe: (F, C, T) - xs = wpe( - xs.transpose((2, 1, 0)), - taps=self.taps, - delay=self.delay, - iterations=self.iterations, - psd_context=self.psd_context, - statistics_mode=self.statistics_mode, ) - return xs.transpose(2, 1, 0) From 0c7abc1f1753d4af1b104a3aae30b5f55661b8c1 Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Mon, 27 Jun 2022 11:06:30 +0000 Subject: [PATCH 03/27] add training scripts --- examples/wenetspeech/asr1/conf/conformer.yaml | 28 +- examples/wenetspeech/asr1/local/data.sh | 125 ++--- .../asr1/local/wenetspeech_data_prep.sh | 4 +- .../{stream_data => streamdata}/__init__.py | 6 +- paddlespeech/audio/streamdata/autodecode.py | 445 +++++++++++++++++ .../{stream_data => streamdata}/cache.py | 4 +- .../{stream_data => streamdata}/compat.py | 2 +- .../audio/streamdata/extradatasets.py | 141 ++++++ .../{stream_data => streamdata}/filters.py | 4 +- paddlespeech/audio/streamdata/gopen.py | 340 +++++++++++++ paddlespeech/audio/streamdata/handlers.py | 47 ++ paddlespeech/audio/streamdata/mix.py | 85 ++++ .../paddle_utils.py | 0 .../{stream_data => streamdata}/pipeline.py | 3 +- .../{stream_data => streamdata}/shardlists.py | 0 .../tariterators.py | 4 +- .../{stream_data => streamdata}/utils.py | 0 paddlespeech/audio/streamdata/writer.py | 450 ++++++++++++++++++ paddlespeech/s2t/io/dataloader.py | 61 ++- setup.py | 3 +- 20 files changed, 1620 insertions(+), 132 deletions(-) rename paddlespeech/audio/{stream_data => streamdata}/__init__.py (87%) create mode 100644 paddlespeech/audio/streamdata/autodecode.py rename paddlespeech/audio/{stream_data => streamdata}/cache.py (98%) rename paddlespeech/audio/{stream_data => streamdata}/compat.py (99%) create mode 100644 paddlespeech/audio/streamdata/extradatasets.py rename paddlespeech/audio/{stream_data => streamdata}/filters.py (99%) create mode 100644 paddlespeech/audio/streamdata/gopen.py create mode 100644 paddlespeech/audio/streamdata/handlers.py create mode 100644 paddlespeech/audio/streamdata/mix.py rename paddlespeech/audio/{stream_data => streamdata}/paddle_utils.py (100%) rename paddlespeech/audio/{stream_data => streamdata}/pipeline.py (96%) rename paddlespeech/audio/{stream_data => streamdata}/shardlists.py (100%) rename paddlespeech/audio/{stream_data => streamdata}/tariterators.py (99%) rename paddlespeech/audio/{stream_data => streamdata}/utils.py (100%) create mode 100644 paddlespeech/audio/streamdata/writer.py diff --git a/examples/wenetspeech/asr1/conf/conformer.yaml b/examples/wenetspeech/asr1/conf/conformer.yaml index dd4ff0e2..f46d4bd9 100644 --- a/examples/wenetspeech/asr1/conf/conformer.yaml +++ b/examples/wenetspeech/asr1/conf/conformer.yaml @@ -1,7 +1,6 @@ ############################################ # Network Architecture # ############################################ -cmvn_file: cmvn_file_type: "json" # encoder related encoder: conformer @@ -43,9 +42,9 @@ model_conf: ########################################### # Data # ########################################### -train_manifest: data/manifest.train -dev_manifest: data/manifest.dev -test_manifest: data/manifest.test +train_manifest: data/train_l/data.list +dev_manifest: data/dev/data.list +test_manifest: data/test_meeting/data.list ########################################### # Dataloader # @@ -54,23 +53,22 @@ use_stream_data: True unit_type: 'char' vocab_filepath: data/lang_char/vocab.txt cmvn_file: data/mean_std.json -preprocess_config: conf/preprocess.yaml spm_model_prefix: '' feat_dim: 80 stride_ms: 10.0 window_ms: 25.0 dither: 0.1 sortagrad: 0 # Feed samples from shortest to longest ; -1: enabled for all epochs, 0: disabled, other: enabled for 'other' epochs -batch_size: 64 +batch_size: 32 minlen_in: 10 -maxlen_in: 512 # if input length > maxlen-in, batchsize is automatically reduced +maxlen_in: 1200 # if input length(number of frames) > maxlen-in, data is automatically removed minlen_out: 0 -maxlen_out: 150 # if output length > maxlen-out, batchsize is automatically reduced +maxlen_out: 150 # if output length(number of tokens) > maxlen-out, data is automatically removed resample_rate: 16000 -shuffle_size: 10000 -sort_size: 500 -num_workers: 4 -prefetch_factor: 100 +shuffle_size: 1500 +sort_size: 1000 +num_workers: 0 +prefetch_factor: 10 dist_sampler: True num_encs: 1 augment_conf: @@ -90,10 +88,10 @@ augment_conf: ########################################### # Training # ########################################### -n_epoch: 240 -accum_grad: 16 +n_epoch: 30 +accum_grad: 32 global_grad_clip: 5.0 -log_interval: 1 +log_interval: 100 checkpoint: kbest_n: 50 latest_n: 5 diff --git a/examples/wenetspeech/asr1/local/data.sh b/examples/wenetspeech/asr1/local/data.sh index d216dd84..b3472a8f 100755 --- a/examples/wenetspeech/asr1/local/data.sh +++ b/examples/wenetspeech/asr1/local/data.sh @@ -2,6 +2,8 @@ # Copyright 2021 Mobvoi Inc(Author: Di Wu, Binbin Zhang) # NPU, ASLP Group (Author: Qijie Shao) +# +# Modified from wenet(https://github.com/wenet-e2e/wenet) stage=-1 stop_stage=100 @@ -30,7 +32,7 @@ mkdir -p data TARGET_DIR=${MAIN_ROOT}/dataset mkdir -p ${TARGET_DIR} -if [ ${stage} -le -2 ] && [ ${stop_stage} -ge -2 ]; then +if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then # download data echo "Please follow https://github.com/wenet-e2e/WenetSpeech to download the data." exit 0; @@ -44,86 +46,57 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then data || exit 1; fi -if [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then - # 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 - # compute mean and stddev for normalizer - if $cmvn; then - full_size=`cat data/${train_set}/wav.scp | wc -l` - sampling_size=$((full_size / cmvn_sampling_divisor)) - shuf -n $sampling_size data/$train_set/wav.scp \ - > data/$train_set/wav.scp.sampled - num_workers=$(nproc) - - python3 ${MAIN_ROOT}/utils/compute_mean_std.py \ - --manifest_path="data/manifest.train.raw" \ - --spectrum_type="fbank" \ - --feat_dim=80 \ - --delta_delta=false \ - --stride_ms=10 \ - --window_ms=25 \ - --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 -fi - -dict=data/dict/lang_char.txt +dict=data/lang_char/vocab.txt if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then - # download data, generate manifests - # build vocabulary - python3 ${MAIN_ROOT}/utils/build_vocab.py \ - --unit_type="char" \ - --count_threshold=0 \ - --vocab_path="data/lang_char/vocab.txt" \ - --manifest_paths "data/manifest.train.raw" - - if [ $? -ne 0 ]; then - echo "Build vocabulary failed. Terminated." - exit 1 - fi + echo "Make a dictionary" + echo "dictionary: ${dict}" + mkdir -p $(dirname $dict) + echo "" > ${dict} # 0 will be used for "blank" in CTC + echo "" >> ${dict} # must be 1 + echo "▁" >> ${dict} # ▁ is for space + utils/text2token.py -s 1 -n 1 --space "▁" data/${train_set}/text \ + | cut -f 2- -d" " | tr " " "\n" \ + | sort | uniq | grep -a -v -e '^\s*$' \ + | grep -v "▁" \ + | awk '{print $0}' >> ${dict} \ + || exit 1; + echo "" >> $dict 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 \ - --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}" + echo "Compute cmvn" + # Here we use all the training data, you can sample some some data to save time + # BUG!!! We should use the segmented data for CMVN + if $cmvn; then + full_size=`cat data/${train_set}/wav.scp | wc -l` + sampling_size=$((full_size / cmvn_sampling_divisor)) + shuf -n $sampling_size data/$train_set/wav.scp \ + > data/$train_set/wav.scp.sampled + python3 utils/compute_cmvn_stats.py \ + --num_workers 16 \ + --train_config $train_config \ + --in_scp data/$train_set/wav.scp.sampled \ + --out_cmvn data/$train_set/mean_std.json \ + || exit 1; + fi +fi - if [ $? -ne 0 ]; then - echo "Formt mnaifest failed. Terminated." - exit 1 - fi - } & - done - wait +if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then + echo "Making shards, please wait..." + RED='\033[0;31m' + NOCOLOR='\033[0m' + echo -e "It requires ${RED}1.2T ${NOCOLOR}space for $shards_dir, please make sure you have enough space" + echo -e "It takes about ${RED}12 ${NOCOLOR}hours with 32 threads" + for x in $dev_set $test_sets ${train_set}; do + dst=$shards_dir/$x + mkdir -p $dst + utils/make_filted_shard_list.py --resample 16000 --num_utts_per_shard 1000 \ + --do_filter --num_node 1 --num_gpus_per_node 8 \ + --num_threads 32 --segments data/$x/segments \ + data/$x/wav.scp data/$x/text \ + $(realpath $dst) data/$x/data.list + done fi -echo "Aishell data preparation done." +echo "Wenetspeech data preparation done." exit 0 diff --git a/examples/wenetspeech/asr1/local/wenetspeech_data_prep.sh b/examples/wenetspeech/asr1/local/wenetspeech_data_prep.sh index 85853053..baa2b32d 100755 --- a/examples/wenetspeech/asr1/local/wenetspeech_data_prep.sh +++ b/examples/wenetspeech/asr1/local/wenetspeech_data_prep.sh @@ -24,7 +24,7 @@ stage=1 prefix= train_subset=L -. ./tools/parse_options.sh || exit 1; +. ./utils/parse_options.sh || exit 1; filter_by_id () { idlist=$1 @@ -132,4 +132,4 @@ if [ $stage -le 2 ]; then done fi -echo "$0: Done" \ No newline at end of file +echo "$0: Done" diff --git a/paddlespeech/audio/stream_data/__init__.py b/paddlespeech/audio/streamdata/__init__.py similarity index 87% rename from paddlespeech/audio/stream_data/__init__.py rename to paddlespeech/audio/streamdata/__init__.py index e9706d4e..d84fbb52 100644 --- a/paddlespeech/audio/stream_data/__init__.py +++ b/paddlespeech/audio/streamdata/__init__.py @@ -11,7 +11,7 @@ from .cache import ( pipe_cleaner, ) from .compat import WebDataset, WebLoader, FluidWrapper -from webdataset.extradatasets import MockDataset, with_epoch, with_length +from .extradatasets import MockDataset, with_epoch, with_length from .filters import ( associate, batched, @@ -65,5 +65,5 @@ from .shardlists import ( ) from .tariterators import tarfile_samples, tarfile_to_samples from .utils import PipelineStage, repeatedly -from webdataset.writer import ShardWriter, TarWriter, numpy_dumps -from webdataset.mix import RandomMix, RoundRobin +from .writer import ShardWriter, TarWriter, numpy_dumps +from .mix import RandomMix, RoundRobin diff --git a/paddlespeech/audio/streamdata/autodecode.py b/paddlespeech/audio/streamdata/autodecode.py new file mode 100644 index 00000000..8c74b685 --- /dev/null +++ b/paddlespeech/audio/streamdata/autodecode.py @@ -0,0 +1,445 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +# + +"""Automatically decode webdataset samples.""" + +import io, json, os, pickle, re, tempfile +from functools import partial + +import numpy as np + +"""Extensions passed on to the image decoder.""" +image_extensions = "jpg jpeg png ppm pgm pbm pnm".split() + + +################################################################ +# handle basic datatypes +################################################################ + + +def paddle_loads(data): + """Load data using paddle.loads, importing paddle only if needed. + + :param data: data to be decoded + """ + import io + + import paddle + + stream = io.BytesIO(data) + return paddle.load(stream) + + +def tenbin_loads(data): + from . import tenbin + + return tenbin.decode_buffer(data) + + +def msgpack_loads(data): + import msgpack + + return msgpack.unpackb(data) + + +def npy_loads(data): + import numpy.lib.format + + stream = io.BytesIO(data) + return numpy.lib.format.read_array(stream) + + +def cbor_loads(data): + import cbor + + return cbor.loads(data) + + +decoders = { + "txt": lambda data: data.decode("utf-8"), + "text": lambda data: data.decode("utf-8"), + "transcript": lambda data: data.decode("utf-8"), + "cls": lambda data: int(data), + "cls2": lambda data: int(data), + "index": lambda data: int(data), + "inx": lambda data: int(data), + "id": lambda data: int(data), + "json": lambda data: json.loads(data), + "jsn": lambda data: json.loads(data), + "pyd": lambda data: pickle.loads(data), + "pickle": lambda data: pickle.loads(data), + "pdparams": lambda data: paddle_loads(data), + "ten": tenbin_loads, + "tb": tenbin_loads, + "mp": msgpack_loads, + "msg": msgpack_loads, + "npy": npy_loads, + "npz": lambda data: np.load(io.BytesIO(data)), + "cbor": cbor_loads, +} + + +def basichandlers(key, data): + """Handle basic file decoding. + + This function is usually part of the post= decoders. + This handles the following forms of decoding: + + - txt -> unicode string + - cls cls2 class count index inx id -> int + - json jsn -> JSON decoding + - pyd pickle -> pickle decoding + - pdparams -> paddle.loads + - ten tenbin -> fast tensor loading + - mp messagepack msg -> messagepack decoding + - npy -> Python NPY decoding + + :param key: file name extension + :param data: binary data to be decoded + """ + extension = re.sub(r".*[.]", "", key) + + if extension in decoders: + return decoders[extension](data) + + return None + + +################################################################ +# Generic extension handler. +################################################################ + + +def call_extension_handler(key, data, f, extensions): + """Call the function f with the given data if the key matches the extensions. + + :param key: actual key found in the sample + :param data: binary data + :param f: decoder function + :param extensions: list of matching extensions + """ + extension = key.lower().split(".") + for target in extensions: + target = target.split(".") + if len(target) > len(extension): + continue + if extension[-len(target) :] == target: + return f(data) + return None + + +def handle_extension(extensions, f): + """Return a decoder function for the list of extensions. + + Extensions can be a space separated list of extensions. + Extensions can contain dots, in which case the corresponding number + of extension components must be present in the key given to f. + Comparisons are case insensitive. + + Examples: + handle_extension("jpg jpeg", my_decode_jpg) # invoked for any file.jpg + handle_extension("seg.jpg", special_case_jpg) # invoked only for file.seg.jpg + """ + extensions = extensions.lower().split() + return partial(call_extension_handler, f=f, extensions=extensions) + + +################################################################ +# handle images +################################################################ + +imagespecs = { + "l8": ("numpy", "uint8", "l"), + "rgb8": ("numpy", "uint8", "rgb"), + "rgba8": ("numpy", "uint8", "rgba"), + "l": ("numpy", "float", "l"), + "rgb": ("numpy", "float", "rgb"), + "rgba": ("numpy", "float", "rgba"), + "paddlel8": ("paddle", "uint8", "l"), + "paddlergb8": ("paddle", "uint8", "rgb"), + "paddlergba8": ("paddle", "uint8", "rgba"), + "paddlel": ("paddle", "float", "l"), + "paddlergb": ("paddle", "float", "rgb"), + "paddle": ("paddle", "float", "rgb"), + "paddlergba": ("paddle", "float", "rgba"), + "pill": ("pil", None, "l"), + "pil": ("pil", None, "rgb"), + "pilrgb": ("pil", None, "rgb"), + "pilrgba": ("pil", None, "rgba"), +} + + +class ImageHandler: + """Decode image data using the given `imagespec`. + + The `imagespec` specifies whether the image is decoded + to numpy/paddle/pi, decoded to uint8/float, and decoded + to l/rgb/rgba: + + - l8: numpy uint8 l + - rgb8: numpy uint8 rgb + - rgba8: numpy uint8 rgba + - l: numpy float l + - rgb: numpy float rgb + - rgba: numpy float rgba + - paddlel8: paddle uint8 l + - paddlergb8: paddle uint8 rgb + - paddlergba8: paddle uint8 rgba + - paddlel: paddle float l + - paddlergb: paddle float rgb + - paddle: paddle float rgb + - paddlergba: paddle float rgba + - pill: pil None l + - pil: pil None rgb + - pilrgb: pil None rgb + - pilrgba: pil None rgba + + """ + + def __init__(self, imagespec, extensions=image_extensions): + """Create an image handler. + + :param imagespec: short string indicating the type of decoding + :param extensions: list of extensions the image handler is invoked for + """ + if imagespec not in list(imagespecs.keys()): + raise ValueError("Unknown imagespec: %s" % imagespec) + self.imagespec = imagespec.lower() + self.extensions = extensions + + def __call__(self, key, data): + """Perform image decoding. + + :param key: file name extension + :param data: binary data + """ + import PIL.Image + + extension = re.sub(r".*[.]", "", key) + if extension.lower() not in self.extensions: + return None + imagespec = self.imagespec + atype, etype, mode = imagespecs[imagespec] + with io.BytesIO(data) as stream: + img = PIL.Image.open(stream) + img.load() + img = img.convert(mode.upper()) + if atype == "pil": + return img + elif atype == "numpy": + result = np.asarray(img) + if result.dtype != np.uint8: + raise ValueError("ImageHandler: numpy image must be uint8") + if etype == "uint8": + return result + else: + return result.astype("f") / 255.0 + elif atype == "paddle": + import paddle + + result = np.asarray(img) + if result.dtype != np.uint8: + raise ValueError("ImageHandler: paddle image must be uint8") + if etype == "uint8": + result = np.array(result.transpose(2, 0, 1)) + return paddle.tensor(result) + else: + result = np.array(result.transpose(2, 0, 1)) + return paddle.tensor(result) / 255.0 + return None + + +def imagehandler(imagespec, extensions=image_extensions): + """Create an image handler. + + This is just a lower case alias for ImageHander. + + :param imagespec: textual image spec + :param extensions: list of extensions the handler should be applied for + """ + return ImageHandler(imagespec, extensions) + + +################################################################ +# torch video +################################################################ + +''' +def torch_video(key, data): + """Decode video using the torchvideo library. + + :param key: file name extension + :param data: data to be decoded + """ + extension = re.sub(r".*[.]", "", key) + if extension not in "mp4 ogv mjpeg avi mov h264 mpg webm wmv".split(): + return None + + import torchvision.io + + with tempfile.TemporaryDirectory() as dirname: + fname = os.path.join(dirname, f"file.{extension}") + with open(fname, "wb") as stream: + stream.write(data) + return torchvision.io.read_video(fname, pts_unit="sec") +''' + + +################################################################ +# paddleaudio +################################################################ + + +def paddle_audio(key, data): + """Decode audio using the paddleaudio library. + + :param key: file name extension + :param data: data to be decoded + """ + extension = re.sub(r".*[.]", "", key) + if extension not in ["flac", "mp3", "sox", "wav", "m4a", "ogg", "wma"]: + return None + + import paddleaudio + + with tempfile.TemporaryDirectory() as dirname: + fname = os.path.join(dirname, f"file.{extension}") + with open(fname, "wb") as stream: + stream.write(data) + return paddleaudio.load(fname) + + +################################################################ +# special class for continuing decoding +################################################################ + + +class Continue: + """Special class for continuing decoding. + + This is mostly used for decompression, as in: + + def decompressor(key, data): + if key.endswith(".gz"): + return Continue(key[:-3], decompress(data)) + return None + """ + + def __init__(self, key, data): + """__init__. + + :param key: + :param data: + """ + self.key, self.data = key, data + + +def gzfilter(key, data): + """Decode .gz files. + + This decodes compressed files and the continues decoding. + + :param key: file name extension + :param data: binary data + """ + import gzip + + if not key.endswith(".gz"): + return None + decompressed = gzip.open(io.BytesIO(data)).read() + return Continue(key[:-3], decompressed) + + +################################################################ +# decode entire training amples +################################################################ + + +default_pre_handlers = [gzfilter] +default_post_handlers = [basichandlers] + + +class Decoder: + """Decode samples using a list of handlers. + + For each key/data item, this iterates through the list of + handlers until some handler returns something other than None. + """ + + def __init__(self, handlers, pre=None, post=None, only=None, partial=False): + """Create a Decoder. + + :param handlers: main list of handlers + :param pre: handlers called before the main list (.gz handler by default) + :param post: handlers called after the main list (default handlers by default) + :param only: a list of extensions; when give, only ignores files with those extensions + :param partial: allow partial decoding (i.e., don't decode fields that aren't of type bytes) + """ + if isinstance(only, str): + only = only.split() + self.only = only if only is None else set(only) + if pre is None: + pre = default_pre_handlers + if post is None: + post = default_post_handlers + assert all(callable(h) for h in handlers), f"one of {handlers} not callable" + assert all(callable(h) for h in pre), f"one of {pre} not callable" + assert all(callable(h) for h in post), f"one of {post} not callable" + self.handlers = pre + handlers + post + self.partial = partial + + def decode1(self, key, data): + """Decode a single field of a sample. + + :param key: file name extension + :param data: binary data + """ + key = "." + key + for f in self.handlers: + result = f(key, data) + if isinstance(result, Continue): + key, data = result.key, result.data + continue + if result is not None: + return result + return data + + def decode(self, sample): + """Decode an entire sample. + + :param sample: the sample, a dictionary of key value pairs + """ + result = {} + assert isinstance(sample, dict), sample + for k, v in list(sample.items()): + if k[0] == "_": + if isinstance(v, bytes): + v = v.decode("utf-8") + result[k] = v + continue + if self.only is not None and k not in self.only: + result[k] = v + continue + assert v is not None + if self.partial: + if isinstance(v, bytes): + result[k] = self.decode1(k, v) + else: + result[k] = v + else: + assert isinstance(v, bytes) + result[k] = self.decode1(k, v) + return result + + def __call__(self, sample): + """Decode an entire sample. + + :param sample: the sample + """ + assert isinstance(sample, dict), (len(sample), sample) + return self.decode(sample) diff --git a/paddlespeech/audio/stream_data/cache.py b/paddlespeech/audio/streamdata/cache.py similarity index 98% rename from paddlespeech/audio/stream_data/cache.py rename to paddlespeech/audio/streamdata/cache.py index 724f6911..e7bbffa1 100644 --- a/paddlespeech/audio/stream_data/cache.py +++ b/paddlespeech/audio/streamdata/cache.py @@ -6,8 +6,8 @@ import itertools, os, random, re, sys from urllib.parse import urlparse from . import filters -from webdataset import gopen -from webdataset.handlers import reraise_exception +from . import gopen +from .handlers import reraise_exception from .tariterators import tar_file_and_group_expander default_cache_dir = os.environ.get("WDS_CACHE", "./_cache") diff --git a/paddlespeech/audio/stream_data/compat.py b/paddlespeech/audio/streamdata/compat.py similarity index 99% rename from paddlespeech/audio/stream_data/compat.py rename to paddlespeech/audio/streamdata/compat.py index ee564431..11308d03 100644 --- a/paddlespeech/audio/stream_data/compat.py +++ b/paddlespeech/audio/streamdata/compat.py @@ -8,7 +8,7 @@ from typing import List import braceexpand, yaml -from webdataset import autodecode +from . import autodecode from . import cache, filters, shardlists, tariterators from .filters import reraise_exception from .pipeline import DataPipeline diff --git a/paddlespeech/audio/streamdata/extradatasets.py b/paddlespeech/audio/streamdata/extradatasets.py new file mode 100644 index 00000000..e6d61772 --- /dev/null +++ b/paddlespeech/audio/streamdata/extradatasets.py @@ -0,0 +1,141 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +# + + +"""Train PyTorch models directly from POSIX tar archive. + +Code works locally or over HTTP connections. +""" + +import itertools as itt +import os +import random +import sys + +import braceexpand + +from . import utils +from .paddle_utils import IterableDataset +from .utils import PipelineStage + + +class MockDataset(IterableDataset): + """MockDataset. + + A mock dataset for performance testing and unit testing. + """ + + def __init__(self, sample, length): + """Create a mock dataset instance. + + :param sample: the sample to be returned repeatedly + :param length: the length of the mock dataset + """ + self.sample = sample + self.length = length + + def __iter__(self): + """Return an iterator over this mock dataset.""" + for i in range(self.length): + yield self.sample + + +class repeatedly(IterableDataset, PipelineStage): + """Repeatedly yield samples from a dataset.""" + + def __init__(self, source, nepochs=None, nbatches=None, length=None): + """Create an instance of Repeatedly. + + :param nepochs: repeat for a maximum of nepochs + :param nbatches: repeat for a maximum of nbatches + """ + self.source = source + self.length = length + self.nbatches = nbatches + + def invoke(self, source): + """Return an iterator that iterates repeatedly over a source.""" + return utils.repeatedly( + source, + nepochs=self.nepochs, + nbatches=self.nbatches, + ) + + +class with_epoch(IterableDataset): + """Change the actual and nominal length of an IterableDataset. + + This will continuously iterate through the original dataset, but + impose new epoch boundaries at the given length/nominal. + This exists mainly as a workaround for the odd logic in DataLoader. + It is also useful for choosing smaller nominal epoch sizes with + very large datasets. + + """ + + def __init__(self, dataset, length): + """Chop the dataset to the given length. + + :param dataset: IterableDataset + :param length: declared length of the dataset + :param nominal: nominal length of dataset (if different from declared) + """ + super().__init__() + self.length = length + self.source = None + + def __getstate__(self): + """Return the pickled state of the dataset. + + This resets the dataset iterator, since that can't be pickled. + """ + result = dict(self.__dict__) + result["source"] = None + return result + + def invoke(self, dataset): + """Return an iterator over the dataset. + + This iterator returns as many samples as given by the `length` + parameter. + """ + if self.source is None: + self.source = iter(dataset) + for i in range(self.length): + try: + sample = next(self.source) + except StopIteration: + self.source = iter(dataset) + try: + sample = next(self.source) + except StopIteration: + return + yield sample + self.source = None + + +class with_length(IterableDataset, PipelineStage): + """Repeatedly yield samples from a dataset.""" + + def __init__(self, dataset, length): + """Create an instance of Repeatedly. + + :param dataset: source dataset + :param length: stated length + """ + super().__init__() + self.dataset = dataset + self.length = length + + def invoke(self, dataset): + """Return an iterator that iterates repeatedly over a source.""" + return iter(dataset) + + def __len__(self): + """Return the user specified length.""" + return self.length diff --git a/paddlespeech/audio/stream_data/filters.py b/paddlespeech/audio/streamdata/filters.py similarity index 99% rename from paddlespeech/audio/stream_data/filters.py rename to paddlespeech/audio/streamdata/filters.py index db3e037a..0ade66f9 100644 --- a/paddlespeech/audio/stream_data/filters.py +++ b/paddlespeech/audio/streamdata/filters.py @@ -21,7 +21,7 @@ from functools import reduce, wraps import numpy as np -from webdataset import autodecode +from . import autodecode from . import utils from .paddle_utils import PaddleTensor from .utils import PipelineStage @@ -932,4 +932,4 @@ def _placeholder(source): for data in source: yield data -placeholder = pipelinefilter(_placeholder) \ No newline at end of file +placeholder = pipelinefilter(_placeholder) diff --git a/paddlespeech/audio/streamdata/gopen.py b/paddlespeech/audio/streamdata/gopen.py new file mode 100644 index 00000000..457d048a --- /dev/null +++ b/paddlespeech/audio/streamdata/gopen.py @@ -0,0 +1,340 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# + + +"""Open URLs by calling subcommands.""" + +import os, sys, re +from subprocess import PIPE, Popen +from urllib.parse import urlparse + +# global used for printing additional node information during verbose output +info = {} + + +class Pipe: + """Wrapper class for subprocess.Pipe. + + This class looks like a stream from the outside, but it checks + subprocess status and handles timeouts with exceptions. + This way, clients of the class do not need to know that they are + dealing with subprocesses. + + :param *args: passed to `subprocess.Pipe` + :param **kw: passed to `subprocess.Pipe` + :param timeout: timeout for closing/waiting + :param ignore_errors: don't raise exceptions on subprocess errors + :param ignore_status: list of status codes to ignore + """ + + def __init__( + self, + *args, + mode=None, + timeout=7200.0, + ignore_errors=False, + ignore_status=[], + **kw, + ): + """Create an IO Pipe.""" + self.ignore_errors = ignore_errors + self.ignore_status = [0] + ignore_status + self.timeout = timeout + self.args = (args, kw) + if mode[0] == "r": + self.proc = Popen(*args, stdout=PIPE, **kw) + self.stream = self.proc.stdout + if self.stream is None: + raise ValueError(f"{args}: couldn't open") + elif mode[0] == "w": + self.proc = Popen(*args, stdin=PIPE, **kw) + self.stream = self.proc.stdin + if self.stream is None: + raise ValueError(f"{args}: couldn't open") + self.status = None + + def __str__(self): + return f"" + + def check_status(self): + """Poll the process and handle any errors.""" + status = self.proc.poll() + if status is not None: + self.wait_for_child() + + def wait_for_child(self): + """Check the status variable and raise an exception if necessary.""" + verbose = int(os.environ.get("GOPEN_VERBOSE", 0)) + if self.status is not None and verbose: + # print(f"(waiting again [{self.status} {os.getpid()}:{self.proc.pid}])", file=sys.stderr) + return + self.status = self.proc.wait() + if verbose: + print( + f"pipe exit [{self.status} {os.getpid()}:{self.proc.pid}] {self.args} {info}", + file=sys.stderr, + ) + if self.status not in self.ignore_status and not self.ignore_errors: + raise Exception(f"{self.args}: exit {self.status} (read) {info}") + + def read(self, *args, **kw): + """Wrap stream.read and checks status.""" + result = self.stream.read(*args, **kw) + self.check_status() + return result + + def write(self, *args, **kw): + """Wrap stream.write and checks status.""" + result = self.stream.write(*args, **kw) + self.check_status() + return result + + def readLine(self, *args, **kw): + """Wrap stream.readLine and checks status.""" + result = self.stream.readLine(*args, **kw) + self.status = self.proc.poll() + self.check_status() + return result + + def close(self): + """Wrap stream.close, wait for the subprocess, and handle errors.""" + self.stream.close() + self.status = self.proc.wait(self.timeout) + self.wait_for_child() + + def __enter__(self): + """Context handler.""" + return self + + def __exit__(self, etype, value, traceback): + """Context handler.""" + self.close() + + +def set_options( + obj, timeout=None, ignore_errors=None, ignore_status=None, handler=None +): + """Set options for Pipes. + + This function can be called on any stream. It will set pipe options only + when its argument is a pipe. + + :param obj: any kind of stream + :param timeout: desired timeout + :param ignore_errors: desired ignore_errors setting + :param ignore_status: desired ignore_status setting + :param handler: desired error handler + """ + if not isinstance(obj, Pipe): + return False + if timeout is not None: + obj.timeout = timeout + if ignore_errors is not None: + obj.ignore_errors = ignore_errors + if ignore_status is not None: + obj.ignore_status = ignore_status + if handler is not None: + obj.handler = handler + return True + + +def gopen_file(url, mode="rb", bufsize=8192): + """Open a file. + + This works for local files, files over HTTP, and pipe: files. + + :param url: URL to be opened + :param mode: mode to open it with + :param bufsize: requested buffer size + """ + return open(url, mode) + + +def gopen_pipe(url, mode="rb", bufsize=8192): + """Use gopen to open a pipe. + + :param url: a pipe: URL + :param mode: desired mode + :param bufsize: desired buffer size + """ + assert url.startswith("pipe:") + cmd = url[5:] + if mode[0] == "r": + return Pipe( + cmd, + mode=mode, + shell=True, + bufsize=bufsize, + ignore_status=[141], + ) # skipcq: BAN-B604 + elif mode[0] == "w": + return Pipe( + cmd, + mode=mode, + shell=True, + bufsize=bufsize, + ignore_status=[141], + ) # skipcq: BAN-B604 + else: + raise ValueError(f"{mode}: unknown mode") + + +def gopen_curl(url, mode="rb", bufsize=8192): + """Open a URL with `curl`. + + :param url: url (usually, http:// etc.) + :param mode: file mode + :param bufsize: buffer size + """ + if mode[0] == "r": + cmd = f"curl -s -L '{url}'" + return Pipe( + cmd, + mode=mode, + shell=True, + bufsize=bufsize, + ignore_status=[141, 23], + ) # skipcq: BAN-B604 + elif mode[0] == "w": + cmd = f"curl -s -L -T - '{url}'" + return Pipe( + cmd, + mode=mode, + shell=True, + bufsize=bufsize, + ignore_status=[141, 26], + ) # skipcq: BAN-B604 + else: + raise ValueError(f"{mode}: unknown mode") + + +def gopen_htgs(url, mode="rb", bufsize=8192): + """Open a URL with `curl`. + + :param url: url (usually, http:// etc.) + :param mode: file mode + :param bufsize: buffer size + """ + if mode[0] == "r": + url = re.sub(r"(?i)^htgs://", "gs://", url) + cmd = f"curl -s -L '{url}'" + return Pipe( + cmd, + mode=mode, + shell=True, + bufsize=bufsize, + ignore_status=[141, 23], + ) # skipcq: BAN-B604 + elif mode[0] == "w": + raise ValueError(f"{mode}: cannot write") + else: + raise ValueError(f"{mode}: unknown mode") + + + +def gopen_gsutil(url, mode="rb", bufsize=8192): + """Open a URL with `curl`. + + :param url: url (usually, http:// etc.) + :param mode: file mode + :param bufsize: buffer size + """ + if mode[0] == "r": + cmd = f"gsutil cat '{url}'" + return Pipe( + cmd, + mode=mode, + shell=True, + bufsize=bufsize, + ignore_status=[141, 23], + ) # skipcq: BAN-B604 + elif mode[0] == "w": + cmd = f"gsutil cp - '{url}'" + return Pipe( + cmd, + mode=mode, + shell=True, + bufsize=bufsize, + ignore_status=[141, 26], + ) # skipcq: BAN-B604 + else: + raise ValueError(f"{mode}: unknown mode") + + + +def gopen_error(url, *args, **kw): + """Raise a value error. + + :param url: url + :param args: other arguments + :param kw: other keywords + """ + raise ValueError(f"{url}: no gopen handler defined") + + +"""A dispatch table mapping URL schemes to handlers.""" +gopen_schemes = dict( + __default__=gopen_error, + pipe=gopen_pipe, + http=gopen_curl, + https=gopen_curl, + sftp=gopen_curl, + ftps=gopen_curl, + scp=gopen_curl, + gs=gopen_gsutil, + htgs=gopen_htgs, +) + + +def gopen(url, mode="rb", bufsize=8192, **kw): + """Open the URL. + + This uses the `gopen_schemes` dispatch table to dispatch based + on scheme. + + Support for the following schemes is built-in: pipe, file, + http, https, sftp, ftps, scp. + + When no scheme is given the url is treated as a file. + + You can use the OPEN_VERBOSE argument to get info about + files being opened. + + :param url: the source URL + :param mode: the mode ("rb", "r") + :param bufsize: the buffer size + """ + global fallback_gopen + verbose = int(os.environ.get("GOPEN_VERBOSE", 0)) + if verbose: + print("GOPEN", url, info, file=sys.stderr) + assert mode in ["rb", "wb"], mode + if url == "-": + if mode == "rb": + return sys.stdin.buffer + elif mode == "wb": + return sys.stdout.buffer + else: + raise ValueError(f"unknown mode {mode}") + pr = urlparse(url) + if pr.scheme == "": + bufsize = int(os.environ.get("GOPEN_BUFFER", -1)) + return open(url, mode, buffering=bufsize) + if pr.scheme == "file": + bufsize = int(os.environ.get("GOPEN_BUFFER", -1)) + return open(pr.path, mode, buffering=bufsize) + handler = gopen_schemes["__default__"] + handler = gopen_schemes.get(pr.scheme, handler) + return handler(url, mode, bufsize, **kw) + + +def reader(url, **kw): + """Open url with gopen and mode "rb". + + :param url: source URL + :param kw: other keywords forwarded to gopen + """ + return gopen(url, "rb", **kw) diff --git a/paddlespeech/audio/streamdata/handlers.py b/paddlespeech/audio/streamdata/handlers.py new file mode 100644 index 00000000..7f3d28b6 --- /dev/null +++ b/paddlespeech/audio/streamdata/handlers.py @@ -0,0 +1,47 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# + +"""Pluggable exception handlers. + +These are functions that take an exception as an argument and then return... + +- the exception (in order to re-raise it) +- True (in order to continue and ignore the exception) +- False (in order to ignore the exception and stop processing) + +They are used as handler= arguments in much of the library. +""" + +import time, warnings + + +def reraise_exception(exn): + """Call in an exception handler to re-raise the exception.""" + raise exn + + +def ignore_and_continue(exn): + """Call in an exception handler to ignore any exception and continue.""" + return True + + +def warn_and_continue(exn): + """Call in an exception handler to ignore any exception, isssue a warning, and continue.""" + warnings.warn(repr(exn)) + time.sleep(0.5) + return True + + +def ignore_and_stop(exn): + """Call in an exception handler to ignore any exception and stop further processing.""" + return False + + +def warn_and_stop(exn): + """Call in an exception handler to ignore any exception and stop further processing.""" + warnings.warn(repr(exn)) + time.sleep(0.5) + return False diff --git a/paddlespeech/audio/streamdata/mix.py b/paddlespeech/audio/streamdata/mix.py new file mode 100644 index 00000000..7d790f00 --- /dev/null +++ b/paddlespeech/audio/streamdata/mix.py @@ -0,0 +1,85 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +# + +"""Classes for mixing samples from multiple sources.""" + +import itertools, os, random, time, sys +from functools import reduce, wraps + +import numpy as np + +from . import autodecode, utils +from .paddle_utils import PaddleTensor, IterableDataset +from .utils import PipelineStage + + +def round_robin_shortest(*sources): + i = 0 + while True: + try: + sample = next(sources[i % len(sources)]) + yield sample + except StopIteration: + break + i += 1 + + +def round_robin_longest(*sources): + i = 0 + while len(sources) > 0: + try: + sample = next(sources[i]) + i += 1 + yield sample + except StopIteration: + del sources[i] + + +class RoundRobin(IterableDataset): + def __init__(self, datasets, longest=False): + self.datasets = datasets + self.longest = longest + + def __iter__(self): + """Return an iterator over the sources.""" + sources = [iter(d) for d in self.datasets] + if self.longest: + return round_robin_longest(*sources) + else: + return round_robin_shortest(*sources) + + +def random_samples(sources, probs=None, longest=False): + if probs is None: + probs = [1] * len(sources) + else: + probs = list(probs) + while len(sources) > 0: + cum = (np.array(probs) / np.sum(probs)).cumsum() + r = random.random() + i = np.searchsorted(cum, r) + try: + yield next(sources[i]) + except StopIteration: + if longest: + del sources[i] + del probs[i] + else: + break + + +class RandomMix(IterableDataset): + def __init__(self, datasets, probs=None, longest=False): + self.datasets = datasets + self.probs = probs + self.longest = longest + + def __iter__(self): + """Return an iterator over the sources.""" + sources = [iter(d) for d in self.datasets] + return random_samples(sources, self.probs, longest=self.longest) diff --git a/paddlespeech/audio/stream_data/paddle_utils.py b/paddlespeech/audio/streamdata/paddle_utils.py similarity index 100% rename from paddlespeech/audio/stream_data/paddle_utils.py rename to paddlespeech/audio/streamdata/paddle_utils.py diff --git a/paddlespeech/audio/stream_data/pipeline.py b/paddlespeech/audio/streamdata/pipeline.py similarity index 96% rename from paddlespeech/audio/stream_data/pipeline.py rename to paddlespeech/audio/streamdata/pipeline.py index e738083f..7339a762 100644 --- a/paddlespeech/audio/stream_data/pipeline.py +++ b/paddlespeech/audio/streamdata/pipeline.py @@ -10,8 +10,7 @@ from typing import List import braceexpand, yaml -from webdataset import autodecode, extradatasets as eds, filters, shardlists, tariterators -from webdataset.handlers import reraise_exception +from .handlers import reraise_exception from .paddle_utils import DataLoader, IterableDataset from .utils import PipelineStage diff --git a/paddlespeech/audio/stream_data/shardlists.py b/paddlespeech/audio/streamdata/shardlists.py similarity index 100% rename from paddlespeech/audio/stream_data/shardlists.py rename to paddlespeech/audio/streamdata/shardlists.py diff --git a/paddlespeech/audio/stream_data/tariterators.py b/paddlespeech/audio/streamdata/tariterators.py similarity index 99% rename from paddlespeech/audio/stream_data/tariterators.py rename to paddlespeech/audio/streamdata/tariterators.py index d9469797..2c1daae1 100644 --- a/paddlespeech/audio/stream_data/tariterators.py +++ b/paddlespeech/audio/streamdata/tariterators.py @@ -14,8 +14,8 @@ import random, re, tarfile import braceexpand from . import filters -from webdataset import gopen -from webdataset.handlers import reraise_exception +from . import gopen +from .handlers import reraise_exception trace = False meta_prefix = "__" diff --git a/paddlespeech/audio/stream_data/utils.py b/paddlespeech/audio/streamdata/utils.py similarity index 100% rename from paddlespeech/audio/stream_data/utils.py rename to paddlespeech/audio/streamdata/utils.py diff --git a/paddlespeech/audio/streamdata/writer.py b/paddlespeech/audio/streamdata/writer.py new file mode 100644 index 00000000..7d4f7703 --- /dev/null +++ b/paddlespeech/audio/streamdata/writer.py @@ -0,0 +1,450 @@ +# +# Copyright (c) 2017-2021 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# This file is part of the WebDataset library. +# See the LICENSE file for licensing terms (BSD-style). +# Modified from https://github.com/webdataset/webdataset +# + +"""Classes and functions for writing tar files and WebDataset files.""" + +import io, json, pickle, re, tarfile, time +from typing import Any, Callable, Optional, Union + +import numpy as np + +from . import gopen + + +def imageencoder(image: Any, format: str = "PNG"): # skipcq: PYL-W0622 + """Compress an image using PIL and return it as a string. + + Can handle float or uint8 images. + + :param image: ndarray representing an image + :param format: compression format (PNG, JPEG, PPM) + + """ + import PIL + + assert isinstance(image, (PIL.Image.Image, np.ndarray)), type(image) + + if isinstance(image, np.ndarray): + if image.dtype in [np.dtype("f"), np.dtype("d")]: + if not (np.amin(image) > -0.001 and np.amax(image) < 1.001): + raise ValueError( + f"image values out of range {np.amin(image)} {np.amax(image)}" + ) + image = np.clip(image, 0.0, 1.0) + image = np.array(image * 255.0, "uint8") + assert image.ndim in [2, 3] + if image.ndim == 3: + assert image.shape[2] in [1, 3] + image = PIL.Image.fromarray(image) + if format.upper() == "JPG": + format = "JPEG" + elif format.upper() in ["IMG", "IMAGE"]: + format = "PPM" + if format == "JPEG": + opts = dict(quality=100) + else: + opts = {} + with io.BytesIO() as result: + image.save(result, format=format, **opts) + return result.getvalue() + + +def bytestr(data: Any): + """Convert data into a bytestring. + + Uses str and ASCII encoding for data that isn't already in string format. + + :param data: data + """ + if isinstance(data, bytes): + return data + if isinstance(data, str): + return data.encode("ascii") + return str(data).encode("ascii") + +def paddle_dumps(data: Any): + """Dump data into a bytestring using paddle.dumps. + + This delays importing paddle until needed. + + :param data: data to be dumped + """ + import io + + import paddle + + stream = io.BytesIO() + paddle.save(data, stream) + return stream.getvalue() + +def numpy_dumps(data: np.ndarray): + """Dump data into a bytestring using numpy npy format. + + :param data: data to be dumped + """ + import io + + import numpy.lib.format + + stream = io.BytesIO() + numpy.lib.format.write_array(stream, data) + return stream.getvalue() + + +def numpy_npz_dumps(data: np.ndarray): + """Dump data into a bytestring using numpy npz format. + + :param data: data to be dumped + """ + import io + + stream = io.BytesIO() + np.savez_compressed(stream, **data) + return stream.getvalue() + + +def tenbin_dumps(x): + from . import tenbin + + if isinstance(x, list): + return memoryview(tenbin.encode_buffer(x)) + else: + return memoryview(tenbin.encode_buffer([x])) + + +def cbor_dumps(x): + import cbor + + return cbor.dumps(x) + + +def mp_dumps(x): + import msgpack + + return msgpack.packb(x) + + +def add_handlers(d, keys, value): + if isinstance(keys, str): + keys = keys.split() + for k in keys: + d[k] = value + + +def make_handlers(): + """Create a list of handlers for encoding data.""" + handlers = {} + add_handlers( + handlers, "cls cls2 class count index inx id", lambda x: str(x).encode("ascii") + ) + add_handlers(handlers, "txt text transcript", lambda x: x.encode("utf-8")) + add_handlers(handlers, "html htm", lambda x: x.encode("utf-8")) + add_handlers(handlers, "pyd pickle", pickle.dumps) + add_handlers(handlers, "pdparams", paddle_dumps) + add_handlers(handlers, "npy", numpy_dumps) + add_handlers(handlers, "npz", numpy_npz_dumps) + add_handlers(handlers, "ten tenbin tb", tenbin_dumps) + add_handlers(handlers, "json jsn", lambda x: json.dumps(x).encode("utf-8")) + add_handlers(handlers, "mp msgpack msg", mp_dumps) + add_handlers(handlers, "cbor", cbor_dumps) + add_handlers(handlers, "jpg jpeg img image", lambda data: imageencoder(data, "jpg")) + add_handlers(handlers, "png", lambda data: imageencoder(data, "png")) + add_handlers(handlers, "pbm", lambda data: imageencoder(data, "pbm")) + add_handlers(handlers, "pgm", lambda data: imageencoder(data, "pgm")) + add_handlers(handlers, "ppm", lambda data: imageencoder(data, "ppm")) + return handlers + + +default_handlers = make_handlers() + + +def encode_based_on_extension1(data: Any, tname: str, handlers: dict): + """Encode data based on its extension and a dict of handlers. + + :param data: data + :param tname: file extension + :param handlers: handlers + """ + if tname[0] == "_": + if not isinstance(data, str): + raise ValueError("the values of metadata must be of string type") + return data + extension = re.sub(r".*\.", "", tname).lower() + if isinstance(data, bytes): + return data + if isinstance(data, str): + return data.encode("utf-8") + handler = handlers.get(extension) + if handler is None: + raise ValueError(f"no handler found for {extension}") + return handler(data) + + +def encode_based_on_extension(sample: dict, handlers: dict): + """Encode an entire sample with a collection of handlers. + + :param sample: data sample (a dict) + :param handlers: handlers for encoding + """ + return { + k: encode_based_on_extension1(v, k, handlers) for k, v in list(sample.items()) + } + + +def make_encoder(spec: Union[bool, str, dict, Callable]): + """Make an encoder function from a specification. + + :param spec: specification + """ + if spec is False or spec is None: + + def encoder(x): + """Do not encode at all.""" + return x + + elif callable(spec): + encoder = spec + elif isinstance(spec, dict): + + def f(sample): + """Encode based on extension.""" + return encode_based_on_extension(sample, spec) + + encoder = f + + elif spec is True: + handlers = default_handlers + + def g(sample): + """Encode based on extension.""" + return encode_based_on_extension(sample, handlers) + + encoder = g + + else: + raise ValueError(f"{spec}: unknown decoder spec") + if not callable(encoder): + raise ValueError(f"{spec} did not yield a callable encoder") + return encoder + + +class TarWriter: + """A class for writing dictionaries to tar files. + + :param fileobj: fileobj: file name for tar file (.tgz/.tar) or open file descriptor + :param encoder: sample encoding (Default value = True) + :param compress: (Default value = None) + + `True` will use an encoder that behaves similar to the automatic + decoder for `Dataset`. `False` disables encoding and expects byte strings + (except for metadata, which must be strings). The `encoder` argument can + also be a `callable`, or a dictionary mapping extensions to encoders. + + The following code will add two file to the tar archive: `a/b.png` and + `a/b.output.png`. + + ```Python + tarwriter = TarWriter(stream) + image = imread("b.jpg") + image2 = imread("b.out.jpg") + sample = {"__key__": "a/b", "png": image, "output.png": image2} + tarwriter.write(sample) + ``` + """ + + def __init__( + self, + fileobj, + user: str = "bigdata", + group: str = "bigdata", + mode: int = 0o0444, + compress: Optional[bool] = None, + encoder: Union[None, bool, Callable] = True, + keep_meta: bool = False, + ): + """Create a tar writer. + + :param fileobj: stream to write data to + :param user: user for tar files + :param group: group for tar files + :param mode: mode for tar files + :param compress: desired compression + :param encoder: encoder function + :param keep_meta: keep metadata (entries starting with "_") + """ + if isinstance(fileobj, str): + if compress is False: + tarmode = "w|" + elif compress is True: + tarmode = "w|gz" + else: + tarmode = "w|gz" if fileobj.endswith("gz") else "w|" + fileobj = gopen.gopen(fileobj, "wb") + self.own_fileobj = fileobj + else: + tarmode = "w|gz" if compress is True else "w|" + self.own_fileobj = None + self.encoder = make_encoder(encoder) + self.keep_meta = keep_meta + self.stream = fileobj + self.tarstream = tarfile.open(fileobj=fileobj, mode=tarmode) + + self.user = user + self.group = group + self.mode = mode + self.compress = compress + + def __enter__(self): + """Enter context.""" + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + """Exit context.""" + self.close() + + def close(self): + """Close the tar file.""" + self.tarstream.close() + if self.own_fileobj is not None: + self.own_fileobj.close() + self.own_fileobj = None + + def write(self, obj): + """Write a dictionary to the tar file. + + :param obj: dictionary of objects to be stored + :returns: size of the entry + + """ + total = 0 + obj = self.encoder(obj) + if "__key__" not in obj: + raise ValueError("object must contain a __key__") + for k, v in list(obj.items()): + if k[0] == "_": + continue + if not isinstance(v, (bytes, bytearray, memoryview)): + raise ValueError( + f"{k} doesn't map to a bytes after encoding ({type(v)})" + ) + key = obj["__key__"] + for k in sorted(obj.keys()): + if k == "__key__": + continue + if not self.keep_meta and k[0] == "_": + continue + v = obj[k] + if isinstance(v, str): + v = v.encode("utf-8") + now = time.time() + ti = tarfile.TarInfo(key + "." + k) + ti.size = len(v) + ti.mtime = now + ti.mode = self.mode + ti.uname = self.user + ti.gname = self.group + if not isinstance(v, (bytes, bytearray, memoryview)): + raise ValueError(f"converter didn't yield bytes: {k}, {type(v)}") + stream = io.BytesIO(v) + self.tarstream.addfile(ti, stream) + total += ti.size + return total + + +class ShardWriter: + """Like TarWriter but splits into multiple shards.""" + + def __init__( + self, + pattern: str, + maxcount: int = 100000, + maxsize: float = 3e9, + post: Optional[Callable] = None, + start_shard: int = 0, + **kw, + ): + """Create a ShardWriter. + + :param pattern: output file pattern + :param maxcount: maximum number of records per shard (Default value = 100000) + :param maxsize: maximum size of each shard (Default value = 3e9) + :param kw: other options passed to TarWriter + """ + self.verbose = 1 + self.kw = kw + self.maxcount = maxcount + self.maxsize = maxsize + self.post = post + + self.tarstream = None + self.shard = start_shard + self.pattern = pattern + self.total = 0 + self.count = 0 + self.size = 0 + self.fname = None + self.next_stream() + + def next_stream(self): + """Close the current stream and move to the next.""" + self.finish() + self.fname = self.pattern % self.shard + if self.verbose: + print( + "# writing", + self.fname, + self.count, + "%.1f GB" % (self.size / 1e9), + self.total, + ) + self.shard += 1 + stream = open(self.fname, "wb") + self.tarstream = TarWriter(stream, **self.kw) + self.count = 0 + self.size = 0 + + def write(self, obj): + """Write a sample. + + :param obj: sample to be written + """ + if ( + self.tarstream is None + or self.count >= self.maxcount + or self.size >= self.maxsize + ): + self.next_stream() + size = self.tarstream.write(obj) + self.count += 1 + self.total += 1 + self.size += size + + def finish(self): + """Finish all writing (use close instead).""" + if self.tarstream is not None: + self.tarstream.close() + assert self.fname is not None + if callable(self.post): + self.post(self.fname) + self.tarstream = None + + def close(self): + """Close the stream.""" + self.finish() + del self.tarstream + del self.shard + del self.count + del self.size + + def __enter__(self): + """Enter context.""" + return self + + def __exit__(self, *args, **kw): + """Exit context.""" + self.close() diff --git a/paddlespeech/s2t/io/dataloader.py b/paddlespeech/s2t/io/dataloader.py index c27969f0..2f3803fa 100644 --- a/paddlespeech/s2t/io/dataloader.py +++ b/paddlespeech/s2t/io/dataloader.py @@ -18,6 +18,7 @@ from typing import Text import jsonlines import numpy as np +import paddle from paddle.io import BatchSampler from paddle.io import DataLoader from paddle.io import DistributedBatchSampler @@ -28,7 +29,7 @@ from paddlespeech.s2t.io.dataset import TransformDataset from paddlespeech.s2t.io.reader import LoadInputsAndTargets from paddlespeech.s2t.utils.log import Log -import paddlespeech.audio.stream_data as stream_data +import paddlespeech.audio.streamdata as streamdata from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer __all__ = ["BatchDataLoader"] @@ -101,38 +102,46 @@ class StreamDataLoader(): shardlist.append(line.strip()) if self.dist_sampler: - base_dataset = stream_data.DataPipeline( - stream_data.SimpleShardList(shardlist), - stream_data.split_by_node, - stream_data.split_by_worker, - stream_data.tarfile_to_samples(stream_data.reraise_exception) + base_dataset = streamdata.DataPipeline( + streamdata.SimpleShardList(shardlist), + streamdata.split_by_node, + streamdata.split_by_worker, + streamdata.tarfile_to_samples(streamdata.reraise_exception) ) else: - base_dataset = stream_data.DataPipeline( - stream_data.SimpleShardList(shardlist), - stream_data.split_by_worker, - stream_data.tarfile_to_samples(stream_data.reraise_exception) + base_dataset = streamdata.DataPipeline( + streamdata.SimpleShardList(shardlist), + streamdata.split_by_worker, + streamdata.tarfile_to_samples(streamdata.reraise_exception) ) self.dataset = base_dataset.append_list( - stream_data.tokenize(symbol_table), - stream_data.data_filter(frame_shift=frame_shift, max_length=maxlen_in, min_length=minlen_in, token_max_length=maxlen_out, token_min_length=minlen_in), - stream_data.resample(resample_rate=resample_rate), - stream_data.compute_fbank(num_mel_bins=num_mel_bins, frame_length=frame_length, frame_shift=frame_shift, dither=dither), - stream_data.spec_aug(**augment_conf) if train_mode else stream_data.placeholder(), # num_t_mask=2, num_f_mask=2, max_t=40, max_f=30, max_w=80) - stream_data.shuffle(shuffle_size), - stream_data.sort(sort_size=sort_size), - stream_data.batched(batch_size), - stream_data.padding(), - stream_data.cmvn(cmvn_file) - ) - self.loader = stream_data.WebLoader( - self.dataset, - num_workers=self.n_iter_processes, - prefetch_factor = self.prefetch_factor, - batch_size=None + streamdata.tokenize(symbol_table), + streamdata.data_filter(frame_shift=frame_shift, max_length=maxlen_in, min_length=minlen_in, token_max_length=maxlen_out, token_min_length=minlen_in), + streamdata.resample(resample_rate=resample_rate), + streamdata.compute_fbank(num_mel_bins=num_mel_bins, frame_length=frame_length, frame_shift=frame_shift, dither=dither), + streamdata.spec_aug(**augment_conf) if train_mode else streamdata.placeholder(), # num_t_mask=2, num_f_mask=2, max_t=40, max_f=30, max_w=80) + streamdata.shuffle(shuffle_size), + streamdata.sort(sort_size=sort_size), + streamdata.batched(batch_size), + streamdata.padding(), + streamdata.cmvn(cmvn_file) ) + if paddle.__version__ >= '2.3.2': + self.loader = streamdata.WebLoader( + self.dataset, + num_workers=self.n_iter_processes, + prefetch_factor = self.prefetch_factor, + batch_size=None + ) + else: + self.loader = streamdata.WebLoader( + self.dataset, + num_workers=self.n_iter_processes, + batch_size=None + ) + def __iter__(self): return self.loader.__iter__() diff --git a/setup.py b/setup.py index b94a4cb2..035d0b2d 100644 --- a/setup.py +++ b/setup.py @@ -38,7 +38,8 @@ base = [ "pypinyin", "pypinyin-dict", "python-dateutil", "pyworld", "resampy==0.2.2", "sacrebleu", "scipy", "sentencepiece~=0.1.96", "soundfile~=0.10", "textgrid", "timer", "tqdm", "typeguard", "visualdl", "webrtcvad", - "yacs~=0.1.8", "prettytable", "zhon", 'colorlog', 'pathos == 0.2.8', 'webdataset' + "yacs~=0.1.8", "prettytable", "zhon", "colorlog", "pathos == 0.2.8", + "braceexpand", "pyyaml" ] server = [ From aa12b9ab523eb7ca1e178dda663ecdcc62c6dd3b Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Tue, 28 Jun 2022 02:49:52 +0000 Subject: [PATCH 04/27] replace s2t.transform with audio.transform --- paddlespeech/cli/asr/infer.py | 2 +- paddlespeech/s2t/exps/u2/bin/test_wav.py | 2 +- paddlespeech/server/engine/asr/online/onnx/asr_engine.py | 2 +- .../server/engine/asr/online/paddleinference/asr_engine.py | 2 +- paddlespeech/server/engine/asr/online/python/asr_engine.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/paddlespeech/cli/asr/infer.py b/paddlespeech/cli/asr/infer.py index 24839a89..df7c5835 100644 --- a/paddlespeech/cli/asr/infer.py +++ b/paddlespeech/cli/asr/infer.py @@ -33,8 +33,8 @@ from ..log import logger from ..utils import CLI_TIMER from ..utils import stats_wrapper from ..utils import timer_register +from paddlespeech.s2t.audio.transformation import Transformation from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer -from paddlespeech.s2t.transform.transformation import Transformation from paddlespeech.s2t.utils.utility import UpdateConfig __all__ = ['ASRExecutor'] diff --git a/paddlespeech/s2t/exps/u2/bin/test_wav.py b/paddlespeech/s2t/exps/u2/bin/test_wav.py index 86c3db89..887ec7a6 100644 --- a/paddlespeech/s2t/exps/u2/bin/test_wav.py +++ b/paddlespeech/s2t/exps/u2/bin/test_wav.py @@ -20,10 +20,10 @@ import paddle import soundfile from yacs.config import CfgNode +from paddlespeech.audio.transform.transformation import Transformation from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer from paddlespeech.s2t.models.u2 import U2Model from paddlespeech.s2t.training.cli import default_argument_parser -from paddlespeech.s2t.transform.transformation import Transformation from paddlespeech.s2t.utils.log import Log from paddlespeech.s2t.utils.utility import UpdateConfig logger = Log(__name__).getlog() diff --git a/paddlespeech/server/engine/asr/online/onnx/asr_engine.py b/paddlespeech/server/engine/asr/online/onnx/asr_engine.py index 06793164..cb743ea2 100644 --- a/paddlespeech/server/engine/asr/online/onnx/asr_engine.py +++ b/paddlespeech/server/engine/asr/online/onnx/asr_engine.py @@ -26,7 +26,7 @@ from paddlespeech.cli.log import logger from paddlespeech.resource import CommonTaskResource from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer from paddlespeech.s2t.modules.ctc import CTCDecoder -from paddlespeech.s2t.transform.transformation import Transformation +from paddlespeech.audio.transform.transformation import Transformation from paddlespeech.s2t.utils.utility import UpdateConfig from paddlespeech.server.engine.base_engine import BaseEngine from paddlespeech.server.utils import onnx_infer diff --git a/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py b/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py index efb726aa..bcd0fa7f 100644 --- a/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py +++ b/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py @@ -24,9 +24,9 @@ from yacs.config import CfgNode from paddlespeech.cli.asr.infer import ASRExecutor from paddlespeech.cli.log import logger from paddlespeech.resource import CommonTaskResource +from paddlespeech.audio.transform.transformation import Transformation from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer from paddlespeech.s2t.modules.ctc import CTCDecoder -from paddlespeech.s2t.transform.transformation import Transformation from paddlespeech.s2t.utils.utility import UpdateConfig from paddlespeech.server.engine.base_engine import BaseEngine from paddlespeech.server.utils.paddle_predictor import init_predictor diff --git a/paddlespeech/server/engine/asr/online/python/asr_engine.py b/paddlespeech/server/engine/asr/online/python/asr_engine.py index daa9fc50..2ffbba99 100644 --- a/paddlespeech/server/engine/asr/online/python/asr_engine.py +++ b/paddlespeech/server/engine/asr/online/python/asr_engine.py @@ -24,9 +24,9 @@ from yacs.config import CfgNode from paddlespeech.cli.asr.infer import ASRExecutor from paddlespeech.cli.log import logger from paddlespeech.resource import CommonTaskResource +from paddlespeech.audio.transform.transformation import Transformation from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer from paddlespeech.s2t.modules.ctc import CTCDecoder -from paddlespeech.s2t.transform.transformation import Transformation from paddlespeech.s2t.utils.tensor_utils import add_sos_eos from paddlespeech.s2t.utils.tensor_utils import pad_sequence from paddlespeech.s2t.utils.utility import UpdateConfig From 81934d7191230b62db8241d03f0eef22c2351d93 Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Tue, 28 Jun 2022 09:20:00 +0000 Subject: [PATCH 05/27] fix run.sh --- examples/wenetspeech/asr1/local/train.sh | 69 ++++++++++++++++++++++++ examples/wenetspeech/asr1/run.sh | 3 +- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100755 examples/wenetspeech/asr1/local/train.sh diff --git a/examples/wenetspeech/asr1/local/train.sh b/examples/wenetspeech/asr1/local/train.sh new file mode 100755 index 00000000..df84ee62 --- /dev/null +++ b/examples/wenetspeech/asr1/local/train.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +profiler_options= +benchmark_batch_size=0 +benchmark_max_step=0 + +# seed may break model convergence +seed=0 + +source ${MAIN_ROOT}/utils/parse_options.sh || exit 1; + +ngpu=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}') +echo "using $ngpu gpus..." + +if [ ${seed} != 0 ]; then + export FLAGS_cudnn_deterministic=True + echo "using seed $seed & FLAGS_cudnn_deterministic=True ..." +fi + +if [ $# -lt 2 ] && [ $# -gt 3 ];then + echo "usage: CUDA_VISIBLE_DEVICES=0 ${0} config_path ckpt_name ips(optional)" + exit -1 +fi + +config_path=$1 +ckpt_name=$2 +ips=$3 + +if [ ! $ips ];then + ips_config= +else + ips_config="--ips="${ips} +fi +echo ${ips_config} + +mkdir -p exp + +if [ ${ngpu} == 0 ]; then +python3 -u ${BIN_DIR}/train.py \ +--ngpu ${ngpu} \ +--seed ${seed} \ +--config ${config_path} \ +--output exp/${ckpt_name} \ +--profiler-options "${profiler_options}" \ +--benchmark-batch-size ${benchmark_batch_size} \ +--benchmark-max-step ${benchmark_max_step} +else +#NCCL_SOCKET_IFNAME=eth0 +python3 -m paddle.distributed.launch --gpus=${CUDA_VISIBLE_DEVICES} ${ips_config} ${BIN_DIR}/train.py \ +--ngpu ${ngpu} \ +--seed ${seed} \ +--config ${config_path} \ +--output exp/${ckpt_name} \ +--profiler-options "${profiler_options}" \ +--benchmark-batch-size ${benchmark_batch_size} \ +--benchmark-max-step ${benchmark_max_step} +fi + + +if [ ${seed} != 0 ]; then + unset FLAGS_cudnn_deterministic +fi + +if [ $? -ne 0 ]; then + echo "Failed in training!" + exit 1 +fi + +exit 0 diff --git a/examples/wenetspeech/asr1/run.sh b/examples/wenetspeech/asr1/run.sh index 9995bc63..f2f29246 100644 --- a/examples/wenetspeech/asr1/run.sh +++ b/examples/wenetspeech/asr1/run.sh @@ -7,6 +7,7 @@ gpus=0,1,2,3,4,5,6,7 stage=0 stop_stage=100 conf_path=conf/conformer.yaml +ips= #xxx.xxx.xxx, xxx.xxx.xxx.xxx decode_conf_path=conf/tuning/decode.yaml average_checkpoint=true avg_num=10 @@ -26,7 +27,7 @@ fi if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then # train model, all `ckpt` under `exp` dir - CUDA_VISIBLE_DEVICES=${gpus} ./local/train.sh ${conf_path} ${ckpt} + CUDA_VISIBLE_DEVICES=${gpus} ./local/train.sh ${conf_path} ${ckpt} ${ips} fi if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then From 429221dc0379eb0435f5e3e6194d7191ab571831 Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Wed, 29 Jun 2022 03:30:04 +0000 Subject: [PATCH 06/27] adopt multi machine traiing --- examples/wenetspeech/asr1/conf/conformer.yaml | 2 +- examples/wenetspeech/asr1/local/train.sh | 3 +-- paddlespeech/audio/streamdata/shardlists.py | 2 ++ paddlespeech/audio/streamdata/utils.py | 10 +++++++--- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/examples/wenetspeech/asr1/conf/conformer.yaml b/examples/wenetspeech/asr1/conf/conformer.yaml index f46d4bd9..013c3e0c 100644 --- a/examples/wenetspeech/asr1/conf/conformer.yaml +++ b/examples/wenetspeech/asr1/conf/conformer.yaml @@ -67,7 +67,7 @@ maxlen_out: 150 # if output length(number of tokens) > maxlen-out, data is auto resample_rate: 16000 shuffle_size: 1500 sort_size: 1000 -num_workers: 0 +num_workers: 8 prefetch_factor: 10 dist_sampler: True num_encs: 1 diff --git a/examples/wenetspeech/asr1/local/train.sh b/examples/wenetspeech/asr1/local/train.sh index df84ee62..01af00b6 100755 --- a/examples/wenetspeech/asr1/local/train.sh +++ b/examples/wenetspeech/asr1/local/train.sh @@ -45,8 +45,7 @@ python3 -u ${BIN_DIR}/train.py \ --benchmark-batch-size ${benchmark_batch_size} \ --benchmark-max-step ${benchmark_max_step} else -#NCCL_SOCKET_IFNAME=eth0 -python3 -m paddle.distributed.launch --gpus=${CUDA_VISIBLE_DEVICES} ${ips_config} ${BIN_DIR}/train.py \ +NCCL_SOCKET_IFNAME=eth0 python3 -m paddle.distributed.launch --gpus=${CUDA_VISIBLE_DEVICES} ${ips_config} ${BIN_DIR}/train.py \ --ngpu ${ngpu} \ --seed ${seed} \ --config ${config_path} \ diff --git a/paddlespeech/audio/streamdata/shardlists.py b/paddlespeech/audio/streamdata/shardlists.py index 3d1801cc..cfaf9a64 100644 --- a/paddlespeech/audio/streamdata/shardlists.py +++ b/paddlespeech/audio/streamdata/shardlists.py @@ -65,6 +65,7 @@ class SimpleShardList(IterableDataset): def split_by_node(src, group=None): rank, world_size, worker, num_workers = utils.paddle_worker_info(group=group) + logger.info(f"world_size:{world_size}, rank:{rank}") if world_size > 1: for s in islice(src, rank, None, world_size): yield s @@ -83,6 +84,7 @@ def single_node_only(src, group=None): def split_by_worker(src): rank, world_size, worker, num_workers = utils.paddle_worker_info() + logger.info(f"num_workers:{num_workers}, worker:{worker}") if num_workers > 1: for s in islice(src, worker, None, num_workers): yield s diff --git a/paddlespeech/audio/streamdata/utils.py b/paddlespeech/audio/streamdata/utils.py index 83a42bad..c7294f2b 100644 --- a/paddlespeech/audio/streamdata/utils.py +++ b/paddlespeech/audio/streamdata/utils.py @@ -16,6 +16,9 @@ import re import sys from typing import Any, Callable, Iterator, Optional, Union +from ..utils.log import Logger + +logger = Logger(__name__) def make_seed(*args): seed = 0 @@ -112,13 +115,14 @@ def paddle_worker_info(group=None): num_workers = int(os.environ["NUM_WORKERS"]) else: try: - import paddle.io.get_worker_info + from paddle.io import get_worker_info worker_info = paddle.io.get_worker_info() if worker_info is not None: worker = worker_info.id num_workers = worker_info.num_workers - except ModuleNotFoundError: - pass + except ModuleNotFoundError as E: + logger.info(f"not found {E}") + exit(-1) return rank, world_size, worker, num_workers From 7463df89c5a2b738457ea2a81c5664374765bc9c Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Wed, 29 Jun 2022 09:20:04 +0000 Subject: [PATCH 07/27] fix nxpu --- paddlespeech/s2t/exps/deepspeech2/bin/train.py | 6 ------ paddlespeech/s2t/training/cli.py | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/paddlespeech/s2t/exps/deepspeech2/bin/train.py b/paddlespeech/s2t/exps/deepspeech2/bin/train.py index fee7079d..2c9942f9 100644 --- a/paddlespeech/s2t/exps/deepspeech2/bin/train.py +++ b/paddlespeech/s2t/exps/deepspeech2/bin/train.py @@ -31,12 +31,6 @@ def main(config, args): if __name__ == "__main__": parser = default_argument_parser() - parser.add_argument( - '--nxpu', - type=int, - default=0, - choices=[0, 1], - help="if nxpu == 0 and ngpu == 0, use cpu.") args = parser.parse_args() print_arguments(args, globals()) diff --git a/paddlespeech/s2t/training/cli.py b/paddlespeech/s2t/training/cli.py index bb85732a..1b6bec8a 100644 --- a/paddlespeech/s2t/training/cli.py +++ b/paddlespeech/s2t/training/cli.py @@ -82,6 +82,12 @@ def default_argument_parser(parser=None): type=int, default=1, help="number of parallel processes. 0 for cpu.") + train_group.add_argument( + '--nxpu', + type=int, + default=0, + choices=[0, 1], + help="if nxpu == 0 and ngpu == 0, use cpu.") train_group.add_argument( "--config", metavar="CONFIG_FILE", help="config file.") train_group.add_argument( From adc7c9b4aac2825e0abe56df9566a02d6d85b969 Mon Sep 17 00:00:00 2001 From: KP <109694228@qq.com> Date: Wed, 29 Jun 2022 17:57:21 +0800 Subject: [PATCH 08/27] Fix unnecessary download present in issue #2067. --- paddlespeech/cli/tts/infer.py | 17 +++++++++++++++-- paddlespeech/resource/resource.py | 11 +++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/paddlespeech/cli/tts/infer.py b/paddlespeech/cli/tts/infer.py index 4e0337bc..5468f257 100644 --- a/paddlespeech/cli/tts/infer.py +++ b/paddlespeech/cli/tts/infer.py @@ -175,14 +175,21 @@ class TTSExecutor(BaseExecutor): if hasattr(self, 'am_inference') and hasattr(self, 'voc_inference'): logger.info('Models had been initialized.') return + # am + if am_ckpt is None or am_config is None or am_stat is None or phones_dict is None: + use_pretrained_am = True + else: + use_pretrained_am = False + am_tag = am + '-' + lang self.task_resource.set_task_model( model_tag=am_tag, model_type=0, # am + skip_download=not use_pretrained_am, version=None, # default version ) - if am_ckpt is None or am_config is None or am_stat is None or phones_dict is None: + if use_pretrained_am: self.am_res_path = self.task_resource.res_dir self.am_config = os.path.join(self.am_res_path, self.task_resource.res_dict['config']) @@ -220,13 +227,19 @@ class TTSExecutor(BaseExecutor): self.speaker_dict = speaker_dict # voc + if voc_ckpt is None or voc_config is None or voc_stat is None: + use_pretrained_voc = True + else: + use_pretrained_voc = False + voc_tag = voc + '-' + lang self.task_resource.set_task_model( model_tag=voc_tag, model_type=1, # vocoder + skip_download=not use_pretrained_voc, version=None, # default version ) - if voc_ckpt is None or voc_config is None or voc_stat is None: + if use_pretrained_voc: self.voc_res_path = self.task_resource.voc_res_dir self.voc_config = os.path.join( self.voc_res_path, self.task_resource.voc_res_dict['config']) diff --git a/paddlespeech/resource/resource.py b/paddlespeech/resource/resource.py index 70f12b64..8e9914b2 100644 --- a/paddlespeech/resource/resource.py +++ b/paddlespeech/resource/resource.py @@ -60,6 +60,7 @@ class CommonTaskResource: def set_task_model(self, model_tag: str, model_type: int=0, + skip_download: bool=False, version: Optional[str]=None): """Set model tag and version of current task. @@ -83,16 +84,18 @@ class CommonTaskResource: self.version = version self.res_dict = self.pretrained_models[model_tag][version] self._format_path(self.res_dict) - self.res_dir = self._fetch(self.res_dict, - self._get_model_dir(model_type)) + if not skip_download: + self.res_dir = self._fetch(self.res_dict, + self._get_model_dir(model_type)) else: assert self.task == 'tts', 'Vocoder will only be used in tts task.' self.voc_model_tag = model_tag self.voc_version = version self.voc_res_dict = self.pretrained_models[model_tag][version] self._format_path(self.voc_res_dict) - self.voc_res_dir = self._fetch(self.voc_res_dict, - self._get_model_dir(model_type)) + if not skip_download: + self.voc_res_dir = self._fetch(self.voc_res_dict, + self._get_model_dir(model_type)) @staticmethod def get_model_class(model_name) -> List[object]: From 986953d3a57c8bf1920c320328d970c521fac6eb Mon Sep 17 00:00:00 2001 From: Jackwaterveg <87408988+Jackwaterveg@users.noreply.github.com> Date: Wed, 29 Jun 2022 17:59:17 +0800 Subject: [PATCH 09/27] update conformer_aishell, test=doc --- docs/source/released_model.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/released_model.md b/docs/source/released_model.md index 551a86ef..a1e3eb87 100644 --- a/docs/source/released_model.md +++ b/docs/source/released_model.md @@ -10,7 +10,7 @@ Acoustic Model | Training Data | Token-based | Size | Descriptions | CER | WER | [Ds2 Offline Aishell ASR0 Model](https://paddlespeech.bj.bcebos.com/s2t/aishell/asr0/asr0_deepspeech2_offline_aishell_ckpt_1.0.1.model.tar.gz)| Aishell Dataset | Char-based | 1.4 GB | 2 Conv + 5 bidirectional LSTM layers| 0.0554 |-| 151 h | [Ds2 Offline Aishell ASR0](../../examples/aishell/asr0) | inference/python | [Conformer Online Wenetspeech ASR1 Model](https://paddlespeech.bj.bcebos.com/s2t/wenetspeech/asr1/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar.gz) | WenetSpeech Dataset | Char-based | 457 MB | Encoder:Conformer, Decoder:Transformer, Decoding method: Attention rescoring| 0.11 (test\_net) 0.1879 (test\_meeting) |-| 10000 h |- | python | [Conformer Online Aishell ASR1 Model](https://paddlespeech.bj.bcebos.com/s2t/aishell/asr1/asr1_chunk_conformer_aishell_ckpt_0.2.0.model.tar.gz) | Aishell Dataset | Char-based | 189 MB | Encoder:Conformer, Decoder:Transformer, Decoding method: Attention rescoring| 0.0544 |-| 151 h | [Conformer Online Aishell ASR1](../../examples/aishell/asr1) | python | -[Conformer Offline Aishell ASR1 Model](https://paddlespeech.bj.bcebos.com/s2t/aishell/asr1/asr1_conformer_aishell_ckpt_0.1.2.model.tar.gz) | Aishell Dataset | Char-based | 189 MB | Encoder:Conformer, Decoder:Transformer, Decoding method: Attention rescoring | 0.0464 |-| 151 h | [Conformer Offline Aishell ASR1](../../examples/aishell/asr1) | python | +[Conformer Offline Aishell ASR1 Model](https://paddlespeech.bj.bcebos.com/s2t/aishell/asr1/asr1_conformer_aishell_ckpt_1.0.1.model.tar.gz) | Aishell Dataset | Char-based | 189 MB | Encoder:Conformer, Decoder:Transformer, Decoding method: Attention rescoring | 0.0460 |-| 151 h | [Conformer Offline Aishell ASR1](../../examples/aishell/asr1) | python | [Transformer Aishell ASR1 Model](https://paddlespeech.bj.bcebos.com/s2t/aishell/asr1/asr1_transformer_aishell_ckpt_0.1.1.model.tar.gz) | Aishell Dataset | Char-based | 128 MB | Encoder:Transformer, Decoder:Transformer, Decoding method: Attention rescoring | 0.0523 || 151 h | [Transformer Aishell ASR1](../../examples/aishell/asr1) | python | [Ds2 Offline Librispeech ASR0 Model](https://paddlespeech.bj.bcebos.com/s2t/librispeech/asr0/asr0_deepspeech2_offline_librispeech_ckpt_1.0.1.model.tar.gz)| Librispeech Dataset | Char-based | 1.3 GB | 2 Conv + 5 bidirectional LSTM layers| - |0.0467| 960 h | [Ds2 Offline Librispeech ASR0](../../examples/librispeech/asr0) | inference/python | [Conformer Librispeech ASR1 Model](https://paddlespeech.bj.bcebos.com/s2t/librispeech/asr1/asr1_conformer_librispeech_ckpt_0.1.1.model.tar.gz) | Librispeech Dataset | subword-based | 191 MB | Encoder:Conformer, Decoder:Transformer, Decoding method: Attention rescoring |-| 0.0338 | 960 h | [Conformer Librispeech ASR1](../../examples/librispeech/asr1) | python | From 1b0cda961f9c41da2abfadca0fcbf07ba2a78cf3 Mon Sep 17 00:00:00 2001 From: Jackwaterveg <87408988+Jackwaterveg@users.noreply.github.com> Date: Wed, 29 Jun 2022 18:01:16 +0800 Subject: [PATCH 10/27] test=doc --- examples/aishell/asr1/RESULTS.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/aishell/asr1/RESULTS.md b/examples/aishell/asr1/RESULTS.md index f16d423a..79c695b1 100644 --- a/examples/aishell/asr1/RESULTS.md +++ b/examples/aishell/asr1/RESULTS.md @@ -2,13 +2,13 @@ ## Conformer paddle version: 2.2.2 -paddlespeech version: 0.2.0 +paddlespeech version: 1.0.1 | Model | Params | Config | Augmentation| Test set | Decode method | Loss | CER | | --- | --- | --- | --- | --- | --- | --- | --- | -| conformer | 47.07M | conf/conformer.yaml | spec_aug | test | attention | - | 0.0530 | -| conformer | 47.07M | conf/conformer.yaml | spec_aug | test | ctc_greedy_search | - | 0.0495 | -| conformer | 47.07M | conf/conformer.yaml | spec_aug| test | ctc_prefix_beam_search | - | 0.0494 | -| conformer | 47.07M | conf/conformer.yaml | spec_aug | test | attention_rescoring | - | 0.0464 | +| conformer | 47.07M | conf/conformer.yaml | spec_aug | test | attention | - | 0.0522 | +| conformer | 47.07M | conf/conformer.yaml | spec_aug | test | ctc_greedy_search | - | 0.0481 | +| conformer | 47.07M | conf/conformer.yaml | spec_aug| test | ctc_prefix_beam_search | - | 0.0480 | +| conformer | 47.07M | conf/conformer.yaml | spec_aug | test | attention_rescoring | - | 0.0460 | ## Conformer Streaming From 32e8c6f16c299df3fc99461d546626e3611b8754 Mon Sep 17 00:00:00 2001 From: Jackwaterveg <87408988+Jackwaterveg@users.noreply.github.com> Date: Wed, 29 Jun 2022 18:02:39 +0800 Subject: [PATCH 11/27] test=doc --- examples/aishell/asr1/conf/conformer.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/aishell/asr1/conf/conformer.yaml b/examples/aishell/asr1/conf/conformer.yaml index 2419d07a..f5e7070f 100644 --- a/examples/aishell/asr1/conf/conformer.yaml +++ b/examples/aishell/asr1/conf/conformer.yaml @@ -57,7 +57,7 @@ feat_dim: 80 stride_ms: 10.0 window_ms: 25.0 sortagrad: 0 # Feed samples from shortest to longest ; -1: enabled for all epochs, 0: disabled, other: enabled for 'other' epochs -batch_size: 64 +batch_size: 32 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 @@ -73,8 +73,8 @@ num_encs: 1 ########################################### # Training # ########################################### -n_epoch: 240 -accum_grad: 2 +n_epoch: 150 +accum_grad: 8 global_grad_clip: 5.0 dist_sampler: True optim: adam From 527744d5f0ab6b91c6e0e338db091161d14534e1 Mon Sep 17 00:00:00 2001 From: KP <109694228@qq.com> Date: Wed, 29 Jun 2022 18:06:49 +0800 Subject: [PATCH 12/27] Fix unnecessary download present in issue #2067. --- .../engine/tts/online/python/tts_engine.py | 16 ++++++++++++++-- .../engine/tts/paddleinference/tts_engine.py | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/paddlespeech/server/engine/tts/online/python/tts_engine.py b/paddlespeech/server/engine/tts/online/python/tts_engine.py index 2e8997e0..74364382 100644 --- a/paddlespeech/server/engine/tts/online/python/tts_engine.py +++ b/paddlespeech/server/engine/tts/online/python/tts_engine.py @@ -105,13 +105,19 @@ class TTSServerExecutor(TTSExecutor): logger.info('Models had been initialized.') return # am model info + if am_ckpt is None or am_config is None or am_stat is None or phones_dict is None: + use_pretrained_am = True + else: + use_pretrained_am = False + am_tag = am + '-' + lang self.task_resource.set_task_model( model_tag=am_tag, model_type=0, # am + skip_download=not use_pretrained_am, version=None, # default version ) - if am_ckpt is None or am_config is None or am_stat is None or phones_dict is None: + if use_pretrained_am: self.am_res_path = self.task_resource.res_dir self.am_config = os.path.join(self.am_res_path, self.task_resource.res_dict['config']) @@ -138,13 +144,19 @@ class TTSServerExecutor(TTSExecutor): self.speaker_dict = None # voc model info + if voc_ckpt is None or voc_config is None or voc_stat is None: + use_pretrained_voc = True + else: + use_pretrained_voc = False + voc_tag = voc + '-' + lang self.task_resource.set_task_model( model_tag=voc_tag, model_type=1, # vocoder + skip_download=not use_pretrained_voc, version=None, # default version ) - if voc_ckpt is None or voc_config is None or voc_stat is None: + if use_pretrained_voc: self.voc_res_path = self.task_resource.voc_res_dir self.voc_config = os.path.join( self.voc_res_path, self.task_resource.voc_res_dict['config']) diff --git a/paddlespeech/server/engine/tts/paddleinference/tts_engine.py b/paddlespeech/server/engine/tts/paddleinference/tts_engine.py index ab5b721f..a5632487 100644 --- a/paddlespeech/server/engine/tts/paddleinference/tts_engine.py +++ b/paddlespeech/server/engine/tts/paddleinference/tts_engine.py @@ -68,13 +68,19 @@ class TTSServerExecutor(TTSExecutor): logger.info('Models had been initialized.') return # am + if am_model is None or am_params is None or phones_dict is None: + use_pretrained_am = True + else: + use_pretrained_am = False + am_tag = am + '-' + lang self.task_resource.set_task_model( model_tag=am_tag, model_type=0, # am + skip_download=not use_pretrained_am, version=None, # default version ) - if am_model is None or am_params is None or phones_dict is None: + if use_pretrained_am: self.am_res_path = self.task_resource.res_dir self.am_model = os.path.join(self.am_res_path, self.task_resource.res_dict['model']) @@ -113,13 +119,19 @@ class TTSServerExecutor(TTSExecutor): self.speaker_dict = speaker_dict # voc + if voc_model is None or voc_params is None: + use_pretrained_voc = True + else: + use_pretrained_voc = False + voc_tag = voc + '-' + lang self.task_resource.set_task_model( model_tag=voc_tag, model_type=1, # vocoder + skip_download=not use_pretrained_voc, version=None, # default version ) - if voc_model is None or voc_params is None: + if use_pretrained_voc: self.voc_res_path = self.task_resource.voc_res_dir self.voc_model = os.path.join( self.voc_res_path, self.task_resource.voc_res_dict['model']) From 822a4e612721871c3ec36877971683ab674e6381 Mon Sep 17 00:00:00 2001 From: iftaken Date: Wed, 29 Jun 2022 19:21:07 +0800 Subject: [PATCH 13/27] use paddle web for streaming asr --- demos/streaming_asr_server/web/app.py | 23 - demos/streaming_asr_server/web/favicon.ico | Bin 0 -> 4286 bytes demos/streaming_asr_server/web/index.html | 218 ++ .../web/paddle_web_demo.png | Bin 971934 -> 96114 bytes demos/streaming_asr_server/web/readme.md | 20 +- .../web/static/css/font-awesome.min.css | 4 - .../web/static/css/style.css | 453 ---- .../web/static/fonts/FontAwesome.otf | Bin 134808 -> 0 bytes .../web/static/fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../web/static/fonts/fontawesome-webfont.svg | 1951 ----------------- .../web/static/fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../web/static/fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../static/fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes .../web/static/image/PaddleSpeech_logo.png | Bin 73215 -> 0 bytes .../web/static/image/voice-dictation.svg | 94 - .../web/static/js/SoundRecognizer.js | 133 -- .../web/static/js/jquery-3.2.1.min.js | 4 - .../web/static/js/recorder/engine/mp3.js | 6 - .../web/static/js/recorder/engine/pcm.js | 6 - .../web/static/js/recorder/engine/wav.js | 6 - .../extensions/frequency.histogram.view.js | 6 - .../static/js/recorder/extensions/lib.fft.js | 6 - .../web/static/js/recorder/recorder-core.js | 6 - .../web/static/paddle.ico | Bin 4286 -> 0 bytes .../web/templates/index.html | 156 -- 25 files changed, 229 insertions(+), 2863 deletions(-) delete mode 100644 demos/streaming_asr_server/web/app.py create mode 100644 demos/streaming_asr_server/web/favicon.ico create mode 100644 demos/streaming_asr_server/web/index.html delete mode 100644 demos/streaming_asr_server/web/static/css/font-awesome.min.css delete mode 100644 demos/streaming_asr_server/web/static/css/style.css delete mode 100644 demos/streaming_asr_server/web/static/fonts/FontAwesome.otf delete mode 100644 demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.eot delete mode 100644 demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.svg delete mode 100644 demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.ttf delete mode 100644 demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.woff delete mode 100644 demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.woff2 delete mode 100644 demos/streaming_asr_server/web/static/image/PaddleSpeech_logo.png delete mode 100644 demos/streaming_asr_server/web/static/image/voice-dictation.svg delete mode 100644 demos/streaming_asr_server/web/static/js/SoundRecognizer.js delete mode 100644 demos/streaming_asr_server/web/static/js/jquery-3.2.1.min.js delete mode 100644 demos/streaming_asr_server/web/static/js/recorder/engine/mp3.js delete mode 100644 demos/streaming_asr_server/web/static/js/recorder/engine/pcm.js delete mode 100644 demos/streaming_asr_server/web/static/js/recorder/engine/wav.js delete mode 100644 demos/streaming_asr_server/web/static/js/recorder/extensions/frequency.histogram.view.js delete mode 100644 demos/streaming_asr_server/web/static/js/recorder/extensions/lib.fft.js delete mode 100644 demos/streaming_asr_server/web/static/js/recorder/recorder-core.js delete mode 100644 demos/streaming_asr_server/web/static/paddle.ico delete mode 100644 demos/streaming_asr_server/web/templates/index.html diff --git a/demos/streaming_asr_server/web/app.py b/demos/streaming_asr_server/web/app.py deleted file mode 100644 index 22993c08..00000000 --- a/demos/streaming_asr_server/web/app.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright 2021 Mobvoi Inc. All Rights Reserved. -# Author: zhendong.peng@mobvoi.com (Zhendong Peng) -import argparse - -from flask import Flask -from flask import render_template - -parser = argparse.ArgumentParser(description='training your network') -parser.add_argument('--port', default=19999, type=int, help='port id') -args = parser.parse_args() - -app = Flask(__name__) - - -@app.route('/') -def index(): - return render_template('index.html') - - -if __name__ == '__main__': - app.run(host='0.0.0.0', port=args.port, debug=True) diff --git a/demos/streaming_asr_server/web/favicon.ico b/demos/streaming_asr_server/web/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..342038720d7c5a8fbbef1110d098e50f7a0e6274 GIT binary patch literal 4286 zcmeHL>q`_-6rcWsKK0p;{RKUUa<#NnFx0X%4NHqmOOdT0^MeNMhcKcCJxB~GG0DJ^ zgea7XUIdmwnMP!_GqdlPJL~ScbGqkDEaNzO2a*Wdvz%e>J-_=qXYM)oTv$O^!G2j; z0zQSlm4dKJ5QNoC*_2>oit{AQW)x@k8pvp74>C3I57a=;I`FmHNyV+3xaZPUQ$bi) zZ50=5HNWxkcYqSSc#g~IJ836uQkKA(yPk`;5`(YpgvKd3`JA@3kevQTc>n3PW%2Js z&L7jn>1%K0at6+xA#7rDf{V5C{fG&4I*2nq@sZD&w-M(2KEiui8u)k%{a(yxoWX#` z*<8=%40T;4Z0z+5E_Sg!aM$kxPt&2aDkG0I&X>oHjW$R`!&K`IslRaF7! zT>C2*;u{ZuSd_bHe9?#Z$)E9ooETdw6f~M>oS2#fxv~^y?)B3+Iy?m7o-R|YIvaz~ zwM(WkxT<%8@@#aTCcb_lo|&OR@H;vnI{ZMVLxA;xlKlA{T-D{Erc$6L65y_@*5R}@ zxSuISA-uoilxYmc+{k;%(wtIhq3N2~n^(l?J>Cq;=o5O6^!AuyJ*<{cX2;%|+Kv8k ztUMi|HR0PgP1i*Fd&!RH-+j22-cyk*+0e*|L|Vp zywIunVEd<+(2Xl;K4VYDyyyjMMJmou;}`pG{k*5Cp6V&weVx{M*jd6_oEaPdZ%gBR zF4jNsETG+0vzu&@yL~jq+Q+l3=l+v-_rbm3#~#h@O)d}XlYU1#$W=S|ShnXpK0FV2 z)=+}K^Rm<$%sC47)#bP=splzC;>7P-$~W4=x4H?N6xqGXa>T=1vC9=Dtk3fA2jXHm g@*X=1Qc1zG__h*X2E(u8%pU#Udu04S;BSwA0j&u;7XSbN literal 0 HcmV?d00001 diff --git a/demos/streaming_asr_server/web/index.html b/demos/streaming_asr_server/web/index.html new file mode 100644 index 00000000..33c676c5 --- /dev/null +++ b/demos/streaming_asr_server/web/index.html @@ -0,0 +1,218 @@ + + + + + + + 飞桨PaddleSpeech + + + + +
+ + + diff --git a/demos/streaming_asr_server/web/paddle_web_demo.png b/demos/streaming_asr_server/web/paddle_web_demo.png index 214edffd076bd4f6df18b4faa3587239154b958a..db4b63ab9ed39cdc2c4ab75e291ae0dab02859c6 100644 GIT binary patch literal 96114 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∾-;%~AW>?ik}K>j+-Qb!g_jn#ZiS z>;@E;4V7foNPGC&>HF8dp0OEz>WU^;yB6)$(p&6tdCidN*~gDw_P9jI?z$nXI_Qh4 z{ItuiUBw>HhUE_w-2Mdz>nc;eR`Kqa4{Mn;6M&}&qo+Tlw^Ho4JR9n*1!GKZg?_A2 zrMvcCXir>k*z0ybY*;qE6bev7#>Wr_VOe$_oNx_se}Y+Qbtsd|$Vr zK}*vdncr$PIqVs*MN0p;ZC)f(13P*^it4h&oLpgI5FV0nqndqpJQcLS0ZE`fSu{5Nt`udXImFszjqgha?6*}rQb*2h5|$l*nL`d18nAdRe?#)r z2GP7Z1q%Q8O6{UEDiU}X<$}NV2)D*pnkJSeyHYhI5I-Td6Tl19gNBn_CRMc4%iy0jJ5c8fHeK)v^11b#9@m&4*$N8I&Z%LIsr@XcE${!5& zEn!zWo6gLqvn_lvonEin@27rKm#CvJlI{O6*B(Nm{wPo8LVr6*1vMshe^{m^_bJKB6L(R=uYm0j@h@W>^-O>B@ZT=)wVv5p>bms?js z{C^AQ;M5D;yKb?Gc@wOuqfP<)G7S|YIL>vZ*~hj=_f{A1H< zP#g|;YWM_+Y*YEyI(_tIAqG2&XS2V${f{zA@gMK_zFcf^#LDF=x1aM=fo(Y|aj&Oh zxeG$U?^wHQ?A+h7%yhS$%)p9NsF?Zp0fCja6Dg~kO?Q7?u`S7iV%W78qeVhh>uV7P ze=~vwUjHK1kI{4{8~i!V#N5}4O=`4alZMRx0EJKhed&zw*{vRhborIzXwi4C&gRIz zwY-Mq03jjqT(gx2i|w%ps=mOm4#&`fbpLymF5p)APKnb?%_ZH;IW32N|1)IdcFWt$ z5f!q(O&ghF*UpxqT2nJ7PEd1T`;Xt2J}H6QtCEVn#%`o@eQN*;ba~UE(@7oB%wcCZ zYe{Tck4)cPLq#;ABA4xyv%kxb|05oY;@e*NC*TJJN zCAPBnbba3Z<9s7ncCUXKeyg;9nLdR&fO*aT1(l!GFx}`p>7!B_QPPiZM$@WEyqBWo z2YF8iCJj`S4P8yXWai2kthJZ0(8*4TG}}Aph0I}~emhHkBp5l`Tul^W?R%$ewfjBh zSGCl=IKr1^nD}_t9cj_YAx{``MG|4fXlvu0DUKAYo>8t?d0>Fh!c zyzH*8Y`{^2SKrov(o<=#pSs`-Ui4_3+MqJJYNh9?`CRQ&m+3{vF!)}lLDz&odm@)B zn@o9#n>v>#UMWxJqiDDy(A#M;JIj~6@vDL>C_}~XFg~`MTjMjrC3JDEn z>`mY9?co#k!Q1CdZF9$~vq{yMFg&Hv0%9DXdbQpc?LSO-uBc<@tBB9y$6lnKn)|twVqBH|3AG?WM7EmK5n|qqeWs zBl37_lPe&&Dh^7dbx_D*>9DSU!Pgrdh%*#R6x}#SQ<@bQgG97BS~RhLJ1eC3J+bs} z6jBs)0k>KXsXE)bLw58Dzf*>)a(02HUs56H|^qTb7qzBTkQM)hix)S((RlkfI9P zqL$eOGK$t6j_urN(j{sQps-WhlVe{A!6EktHw^!)&rkryI$$f zQe7SNB#pQvTSpImK}r8)m(SKmKQelBoCm(5FDvZPS&dp^!O%0o>YvIeo4vwMiNjlC{X=#P$gf%&9SjGJyZ{v}SN zRwai#_MbkS#XRX5dBmW@{`Xd$|LYDH6I}URrUj5n#F`R7v(o0aM z<0;6D#YTEW502g=+6k@?n&Mu`1;W3m*hr19t{l=W)gMC3dG$7@= zQA_ai+O%vZ_UoQK-aVM9zZZGDQ<-`#~{8aRD

kd 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�Q@_6fX<^|oY7);s-VkXUrbuWW<( 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�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Ð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

O5hC0BPOJA5ls%#;oi#vgVNj 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

O`QM%=5rccrF1b({-!zvgWrj(}t6v6tn< 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

EYW7YQ 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

LL&!zTWWtO99eS?<#Ovy4Y$j)e-Xm!wa#Z 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�w<>PMB?^Bb_5o8U{F%XvERA-Qe3aNbdZF<@g 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 O@3gA=iOgdc{Qn=F_*GQ^ diff --git a/demos/streaming_asr_server/web/readme.md b/demos/streaming_asr_server/web/readme.md index 8310a257..bef42171 100644 --- a/demos/streaming_asr_server/web/readme.md +++ b/demos/streaming_asr_server/web/readme.md @@ -1,18 +1,20 @@ # paddlespeech serving 网页Demo -- 感谢[wenet](https://github.com/wenet-e2e/wenet)团队的前端demo代码. +![图片](./paddle_web_demo.png) +step1: 开启流式语音识别服务器端 -## 使用方法 -### 1. 在本地电脑启动网页服务 - ``` - python app.py +``` +# 开启流式语音识别服务 +cd PaddleSpeech/demos/streaming_asr_server +paddlespeech_server start --config_file conf/ws_conformer_wenetspeech_application_faster.yaml +``` - ``` +step2: 谷歌游览器打开 `web`目录下`index.html` -### 2. 本地电脑浏览器 +step3: 点击`连接`,验证WebSocket是否成功连接 + +step4:点击开始录音(弹窗询问,允许录音) -在浏览器中输入127.0.0.1:19999 即可看到相关网页Demo。 -![图片](./paddle_web_demo.png) diff --git a/demos/streaming_asr_server/web/static/css/font-awesome.min.css b/demos/streaming_asr_server/web/static/css/font-awesome.min.css deleted file mode 100644 index 540440ce..00000000 --- a/demos/streaming_asr_server/web/static/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/demos/streaming_asr_server/web/static/css/style.css b/demos/streaming_asr_server/web/static/css/style.css deleted file mode 100644 index a3040718..00000000 --- a/demos/streaming_asr_server/web/static/css/style.css +++ /dev/null @@ -1,453 +0,0 @@ -/* -* @Author: baipengxia -* @Date: 2021-03-12 11:44:28 -* @Last Modified by: baipengxia -* @Last Modified time: 2021-03-12 15:14:24 -*/ - -/** COMMON RESET **/ -* { - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -body, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -p, -dl, -dt, -dd, -ul, -ol, -li, -fieldset, -lengend, -button, -input, -textarea, -th, -td { - margin: 0; - padding: 0; - color: #000; -} - -body { - font-size: 14px; -} -html, body { - min-width: 1200px; -} - -button, -input, -select, -textarea { - font-size: 14px; -} - -h1 { - font-size: 18px; -} - -h2 { - font-size: 14px; -} - -h3 { - font-size: 14px; -} - -ul, -ol, -li { - list-style: none; -} - -a { - text-decoration: none; -} - -a:hover { - text-decoration: none; -} - -fieldset, -img { - border: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -i { - font-style: normal; -} - -label { - position: inherit; -} - -.clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} - -.clearfix { - zoom: 1; - display: block; -} - -html, -body { - font-family: Tahoma, Arial, 'microsoft yahei', 'Roboto', 'Droid Sans', 'Helvetica Neue', 'Droid Sans Fallback', 'Heiti SC', 'Hiragino Sans GB', 'Simsun', 'sans-self'; -} - - - -.audio-banner { - width: 100%; - overflow: auto; - padding: 0; - background: url('../image/voice-dictation.svg'); - background-size: cover; -} -.weaper { - width: 1200px; - height: 155px; - margin: 72px auto; -} -.text-content { - width: 670px; - height: 100%; - float: left; -} -.text-content .title { - font-size: 34px; - font-family: 'PingFangSC-Medium'; - font-weight: 500; - color: rgba(255, 255, 255, 1); - line-height: 48px; -} -.text-content .con { - font-size: 16px; - font-family: PingFangSC-Light; - font-weight: 300; - color: rgba(255, 255, 255, 1); - line-height: 30px; -} -.img-con { - width: 416px; - height: 100%; - float: right; -} -.img-con img { - width: 100%; - height: 100%; -} -.con-container { - margin-top: 34px; -} - -.audio-advantage { - background: #f8f9fa; -} -.asr-advantage { - width: 1200px; - margin: 0 auto; -} -.asr-advantage h2 { - text-align: center; - font-size: 22px; - padding: 30px 0 0 0; -} -.asr-advantage > ul > li { - box-sizing: border-box; - padding: 0 16px; - width: 33%; - text-align: center; - margin-bottom: 35px; -} -.asr-advantage > ul > li .icons{ - margin-top: 10px; - margin-bottom: 20px; - width: 42px; - height: 42px; -} -.service-item-content { - margin-top: 35px; - display: flex; - justify-content: center; - flex-wrap: wrap; -} -.service-item-content img { - width: 160px; - vertical-align: bottom; -} -.service-item-content > li { - box-sizing: border-box; - padding: 0 16px; - width: 33%; - text-align: center; - margin-bottom: 35px; -} -.service-item-content > li .service-item-content-title { - line-height: 1.5; - font-weight: 700; - margin-top: 10px; -} -.service-item-content > li .service-item-content-desc { - margin-top: 5px; - line-height: 1.8; - color: #657384; -} - - -.audio-scene-con { - width: 100%; - padding-bottom: 84px; - background: #fff; -} -.audio-scene { - overflow: auto; - width: 1200px; - background: #fff; - text-align: center; - padding: 0; - margin: 0 auto; -} -.audio-scene h2 { - padding: 30px 0 0 0; - font-size: 22px; - text-align: center; -} - -.audio-experience { - width: 100%; - height: 538px; - background: #fff; - padding: 0; - margin: 0; - overflow: auto; -} -.asr-box { - width: 1200px; - height: 394px; - margin: 64px auto; -} -.asr-box h2 { - font-size: 22px; - text-align: center; - margin-bottom: 64px; -} -.voice-container { - position: relative; - width: 1200px; - height: 308px; - background: rgba(255, 255, 255, 1); - border-radius: 8px; - border: 1px solid rgba(225, 225, 225, 1); -} -.voice-container .voice { - height: 236px; - width: 100%; - border-radius: 8px; -} -.voice-container .voice textarea { - height: 100%; - width: 100%; - border: none; - outline: none; - border-radius: 8px; - padding: 25px; - font-size: 14px; - box-sizing: border-box; - resize: none; -} -.voice-input { - width: 100%; - height: 72px; - box-sizing: border-box; - padding-left: 35px; - background: rgba(242, 244, 245, 1); - border-radius: 8px; - line-height: 72px; -} -.voice-input .el-select { - width: 492px; -} -.start-voice { - display: inline-block; - margin-left: 10px; -} -.start-voice .time { - margin-right: 25px; -} -.asr-advantage > ul > li { - margin-bottom: 77px; -} -#msg { - width: 100%; - line-height: 40px; - font-size: 14px; - margin-left: 330px; -} -#captcha { - margin-left: 350px !important; - display: inline-block; - position: relative; -} -.black { - position: fixed; - width: 100%; - height: 100%; - z-index: 5; - background: rgba(0, 0, 0, 0.5); - top: 0; - left: 0; -} -.container { - position: fixed; - z-index: 6; - top: 25%; - left: 10%; -} -.audio-scene-con { - width: 100%; - padding-bottom: 84px; - background: #fff; -} -#sound { - color: #fff; - cursor: pointer; - background: #147ede; - padding: 10px; - margin-top: 30px; - margin-left: 135px; - width: 176px; - height: 30px !important; - text-align: center; - line-height: 30px !important; - border-radius: 10px; -} -.con-ten { - position: absolute; - width: 100%; - height: 100%; - z-index: 5; - background: #fff; - opacity: 0.5; - top: 0; - left: 0; -} -.websocket-url { - width: 320px; - height: 20px; - border: 1px solid #dcdfe6; - line-height: 20px; - padding: 10px; - border-radius: 4px; -} -.voice-btn { - color: #fff; - background-color: #409eff; - font-weight: 500; - padding: 12px 20px; - font-size: 14px; - border-radius: 4px; - border: 0; - cursor: pointer; -} -.voice-btn.end { - display: none; -} -.result-text { - background: #fff; - padding: 20px; -} -.voice-footer { - border-top: 1px solid #dddede; - background: #f7f9fa; - text-align: center; - margin-bottom: 8px; - color: #333; - font-size: 12px; - padding: 20px 0; -} - -/** line animate **/ -.time-box { - display: none; - margin-left: 10px; - width: 300px; -} -.total-time { - font-size: 14px; - color: #545454; -} -.voice-btn.end.show, -.time-box.show { - display: inline; -} -.start-taste-line { - margin-right: 20px; - display: inline-block; -} -.start-taste-line hr { - background-color: #187cff; - width: 3px; - height: 8px; - margin: 0 3px; - display: inline-block; - border: none; -} -.hr { - animation: note 0.2s ease-in-out; - animation-iteration-count: infinite; - animation-direction: alternate; -} -.hr-one { - animation-delay: -0.9s; -} -.hr-two { - animation-delay: -0.8s; -} -.hr-three { - animation-delay: -0.7s; -} -.hr-four { - animation-delay: -0.6s; -} -.hr-five { - animation-delay: -0.5s; -} -.hr-six { - animation-delay: -0.4s; -} -.hr-seven { - animation-delay: -0.3s; -} -.hr-eight { - animation-delay: -0.2s; -} -.hr-nine { - animation-delay: -0.1s; -} -@keyframes note { - from { - transform: scaleY(1); - } - to { - transform: scaleY(4); - } -} \ No newline at end of file diff --git a/demos/streaming_asr_server/web/static/fonts/FontAwesome.otf b/demos/streaming_asr_server/web/static/fonts/FontAwesome.otf deleted file mode 100644 index 401ec0f36e4f73b8efa40bd6f604fe80d286db70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134808 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 diff --git a/demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.eot b/demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953f93e35eab4108bd414bc02ddcf3928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165742 zcmd443w)Ht)jvM-T=tf|Uz5#kH`z;W1W0z103j^*Tev7F2#5hiQ9w~aka}5_DkxP1 zRJ3Y?7YePlysh?CD|XvjdsAv#YOS?>W2@EHO9NV8h3u2x_sp}KECIB>@9+Qn{FBV{ zJTr4<=FH5QnRCvZnOu5{#2&j@Vw_3r#2?PKa|-F4dtx{Ptp0P(#$Rn88poKQO<|X@ zOW8U$o^4<&*p=|D!J9EVI}`7V*m|~_En`<8B*M-{$Q6LOSfmND1Z!lia3ffVHQ_mu zwE*t)c_Na~v9UCh+1x2p=FeL7+|;L;bTeUAHg(eEDN-*};9m=WXwJOhO^lgVEPBX5Gh_bo8QSSFY{vM^4hsD-mzHX!X?>-tpg$&tfe27?V1mUAbb} z1dVewCjIN7C5$=lXROG% zX4%HIa)VTc_%^_YE?u@}#b58a4S8RL@|2s`UUucWZ{P9NJxp5Fi!#@Xx+(mZ+kdt3 zobw#*|6)Z(BxCGw^Gi+ncRvs|a|3xz=tRA9@HDV~1eqD)`^`KTPEg`UdXhq18})-@}JTHp30^)`L{?* z;c)alkYAc@67|W!7RDPu6Tsy@xJCK8{2T9-fJw6?@=A(w^}KCVjwlOd=JTO=3Zr+< zIdd?1zo-M^76}Jf!cpLfH`+2q=}d5id5XLcPw#xVocH5RVG7;@@%R>Sxpy8{(H9JH zY1V)?J1-AIeIxKhoG1%;AWq7C50ok3DSe?!Gatbry_zpS*VoS6`$~lK9E?(!mcrm1 z^cLZ1fmx5Ds`-ethCvMtDTz zMd=G1)gR$jic|1SaTLaL-{ePJOFkUs%j634IMp}dnR5yGMtsXmA$+JDyxRuSq*)bk zt3tSN2(J<@ooh3|!(R%VsE#5%U{m-mB7fcy&h(8kC(#>yA(JCmQ6|O1<=_U=0+$AY zC)@~M`UboR6Xm2?$e8Z$r#u8)TEP0~`viw@@+){#874R?kHRP|IU4&!?+9Cy52v^I zPV4Xd{9yc;)#l?0VS#6g@ z`#y))03Laq@^6Z#Z*uvzpl{$JzFJgn&xHlNBS|Eb!E@}~Z$^m!a9k34KX zT|VETZ;B_E$Ai8J#t5#kATCAUlqbr&P~-s)k^FfWyz}iK@`B$FI6L0u1uz5fgfqgU zRBmB>F8s_qp1HWm1!aXOEbpf`U?X|>{F`8Md500U3i;Mh9Kvbd(CeuC>077ww4g^h zKgM(A48W`XEDE~N*Th^NqP#S7&^w2Vpq+df2#@A*&4u~I+>t)9&GYcop9OtUo=;2d zGSq?IMBAYZffMC1v^|Z|AWdQ38UdJS4(H(nFI<|%=>0iAn3lvcSjIR(^7r7QuQI0a zm+@Z9QXmf!efG1**%Ryq_G-AQs-mi^*WO#v+tE9_cWLjXz1Q{L-uqzh z-Vb`UBlaT|M;ecG9GQJ&>5)s1TzBO5BM%;V{K#`h4juXPkq?e&N9{)|j&>ZKeRS#3 zOOIZ6^!B3<9)0}ib4L#y{qxZe{ss8}C5PC)Atkb2XK%PS)jPMht9Na0x_5hTckhAT zOz+FRJ-xk0*b(QE(2)^GQb*<<={mCZNczb3Bi%<19LXGc`AE-^-lOcO^Jw^J>ge2~ zT}Rg*O&{HUwEO6RqnV>GAMK$M`~TX%q<>-my#5LOBmex)pWgq|V@{jX>a;k`PLtE< zG&ohK;*_0|<6n-C93MK4I*vGc9shKE;CSEhp5tA|KOBE|yyJM=@i)g?jyD~Db^OKg zhNH*vXUCr$uRH$ec+K$#$E%LtJ6>`8&T-iBTicKH)SNMZS zB8UG!{1{Y=QL&oLMgLzR(}0Y>sN0TqgG|kLqv_VcVSLD)aJ?AC^D!bLa6K5Ut1)YA zghRXq;YBrYhrzOK23vXorq6v~v*CBb?*bYw$l-3J@cY5H}8Gr;t8{e8!J}L*5e>!hOQnM3g=8eoXDiYZBlmBW?=(Qvo;ib;hP4-|5>J zo6*MD%*UW90?aI=ncV;fJZB$fY|a73<^rd=!0(I%TsLE9TH#hRHV<&~b~82~@n<2= z1-*oTQL{zWh}4H zGjX>}SbW{R;(k^VBouiebp<&Q9S1P`GIlM(uLaz7TNt~37h`FJ-B1j-jj@}iF}B$Yhy1^cv|oM`3X|20-GXwq z0QapK#%@FUZ9ik|D}cWpad#li_7EK6?wrrq4l5kOc5H@2*p5ENc6Pxb%`OEl1=q{i zU1`Sdjxcu562^8fWbEEDi1(A=o?`5)DC_=i#vVX^45ZpSrpE35`g>WA+_QYDo!1%Byk?;4A*Y^%H_McC{^)mJp(mf6Mr$1rr8Klp< z@9$&m+0Bd{OfmMH!q^XxU*>tneq@E)#@LU6-}5Nz`DYpXi4*QA#$MRP*w045^)U8x zl=XAu_Y36n%QPIqUi^r$mjH7JWgdEmv0oiv>}BNj>jtO;GSSiGr=LO--M;f3$4%-kcdA5=kp1;?w1)iU%_3WyqWQmjf@AcVZ3xc<7I~# zFHgbYU4b-}3LN4>NEZft6=17@TlH$jBZ!NjjQC2%Yu;hJu9NWwZ@DynQp=tBj8Wjw$e9<5A{>pD{iW zZqogXPX_!HxT$LypN98z;4>ox_a@^r4>R7`&G@Wh#%HG(p9^;e{AczsK5r7^^FxfE z1>DZ=f&=UVl(8@Y2be_)+!n?cUjPUAC8+bcuQI+Aab3F@Uxu=lJpt$oQq38DE=X{7U3=m6P!eKVy6&>UK5q-?WYKFCon} zcwbuv_Xy+HBi;48;XYwJy_)eGknfFvzbOHS_{~WFRt)zJ zijpU?=0x zkwe%IkXL3J<39wBKYX6?A1iQgGX8uw<3E|t_zN{~?=k)}E8{7uHGX6%I@xLJ5o5hU3g}A@9GyXR4dV3$^??m7ZGyeD0jQ;~={sZ6d0>}3fa8JQ~ z#Q6Kj>z^jLM;Px_;9g|>2lp6?Oy32JW8UD|ZH#LugXW9=mzl&9Ov2uUBsVZgS;-{zFeKKwOfnbOFe$i&Nu~HMe}YLB^Wk1(Qs^2cg^_pF zV@!&4GARo9*fb`^0bBDClWMmysSaUvuQREB7n2(BZbV*M)y$0@8CXG!nX&m5FyO}f|^_bYrq)EtQ3jEW$ z;E;a$iwt`}|2xOlf`@fNIFLzjYz@1@vMcQB;TbKpR_b1>hK{W@uw#sVI6JqW86H;C ztQ;P%k-Nf8ey^cATop^SG>2V0mP~Z;=5SL5H#}UQ-NIABSS;9=rYBEjx70^!0%|%? z6H%vBBRb1si5UK{xwWyrI#6mdl~NhlB{DFSQ4f#HYnQ4Tr9_9++!S!BCwdbtt-PhV z2|9^MD=%7f(aK494ZCcz4t6dY`X;_62ywrIPovV+sT0pH?+{mwxjh%^> zh_?T`uiv2^KX}>z4HVY!Y%V1QDcBvi>!sD@MEbj99(bg@lcBxTD9~gYzfIm>7jFFl;^hEgOD8Clhu+6jw>0z&OhJ=2DoJ42R3QaA zWOOLCseE6;o!xG!?ra~f^>o~D+1yBE?qxT0^k{Eo?@YU;MW)Dk7u-Ja^-t=jry`Nm z^!iU;|I=I9eR|&CLf`eUDtM5Q2iZ}-MO8dOpsgMv)7Ge`r77T1(I!FduCuw%>+xyh zv~lQApLDjitE7#8{D!C9^9KL8O}^S6)E?BVMw_qP`rdoia-YG@KjOf%Qh4Bnt8Mcoi9h#JRYY3kEvn*UVbReO50BrmV+ z;MZw4c4)uX7XS38vL%mZ(`R5ww4GL|?R_+gqd5vmpyBRdmy(bdo1(0=sB8@yxdn)~lxbJjigu9=)pPhNBHJ@OCr@Hfy7 zMKpelG=3bck_~6$*c^5qw$ra?cd)OqZ$smlOvLJWm7$z_{bM*t_;dW+m52!n&yhSI z0)LYKbKpO(yrBb!r(;1ei=F17uvjq5XquDp?1L{4s1~Hu@I46id3j>UeJTcx0fQ!$ z&o9RBJJn}4D52n3P@|_Z2y%SzQ!WJ22E$LC;WNiX*{T?@;Pj!}DC|#~nZ>-HpIS<2 za>P22_kUiz%sLYqOLTT7B=H>lmeZ$;kr+*xoe54)>BRz1U!muO7@@$$G=552gn*!9 zJ(lYeq-%(OX#D?e|IqRz)>flsYTDXrc#58b-%`5Jmp#FEV%&+o&w?z>k%vUF^x&@! zd}aqf<-yN_(1OoX0~BNi5+XV}sW1Mo_rky5sw&#MPqeg*Iv+ow^-qi|g!>=1)d@|( zIJ=tJ4Yw%YfhiFbenxIIR1N1mmKeveFq!eFI?k+2%4<3`YlV3hM zS45R<;g^uVtW5iZbSGet@1^}8sBUEktA@_c>)?i}IE-EQTR@N-j%b9$Syc1{S3U?8e~d3B1?Lij0H27USiF&gR}A>wG-vBGIPuh*4ry;{Khxekv}wCTm%_>vhFZSJ)Pw2iv6Q4YVoQ`J2w?yCkiavVTWeVa)j|q=T9@J0pTtcQX!VHnIM6Al- z^*7Og!1y$xN4)5fYK&2X5x-Om4A;1k20|=O+$wl^1T}IRHkcq<^P$a{C0fAii(ypB z{ef1n(U1a&g|>5}zY?N{!tOqN_uYr3yPejjJ>KeR7IW!#ztw(g!*Hj~SpH|bkC%t5kd^Q2w*f{D8tJPwQ z++kT&2yEHVY_jXXBg!P7SUbSC;y1@rj$sqoMWF2=y$%ua1S%Nn_dvGwR*;O^!Fd?1 z8#WkKL1{>+GcdW?sX2^RC#k8D;~{~1M4#fpPxGDbOWPf?oRS^(Y!}arFj}-9Ta5B$ zZhP0#34P$Fx`;w}a*AU%t?#oPQ+U$umO}+(WIxS!wnBcQuM;%yiYhbKnNwXa7LiRjmf+(2(ZG}wiz%sgWJi>jgGIsPnZ=KfX?8mJ2^L!4-hBx#UR zZa((80+3k2t!n9h@La(dm&Qrs_teRTeB}Y= zShqm6zJdPGS+juA6^_Mu3_1sz1Hvx#*|M6pnqz`jk<&F@Wt;g%i&gunm7lM5)wE@q zvbn6Q=6IU;C_@UMWs|fmylAcBqr(MowarQT7@9BsXzyH534G z1e0`Rlnqb_RAIW{M7dQoxdg$ z;&VZRA?1jrgF9nN0lg?)7VU>c#YI}iVKVtMV&I^SUL2sA9Xn2<8mY@_)qZF;^OV!$ z;QVMjZTMUtC^eDXuo)DkX75sJ*#d6g{w?U1!Fbwid(nlSiF_z zStRqVrV`8MJBg{|ZM^Kzrps2`fI(Eq&qUZ%VCjWLQn)GthGkFz0LcT(tUy)_i~PWb ze1obC@Hu0-n}r4LO@8%lp3+uoAMDWnx#|WFhG&pQo@eXSCzjp(&Xl4$kfY60LiIx^ zs+SA=sm(K<-^V>WxOdf!NXC0qN&86q?xh#r;L)>)B|KXvOuO+4*98HO?4jfcxpk`^ zU^8+npM|PWn*7Nj9O_U%@pt)^gcu2m|17^}h}J6KWCJ>t zv@Qsc2z0711@V0%PDVqW?i)a)=GC>nC+Kx~*FeS}p5iNes=&dpY_lv9^<|K`GOJMG zE5^7&yqgjFK*qz6I-su3QFo4`PbRSbk|gNIa3+>jPUVH}5I6C)+!U&5lUe4HyYIe4 z>&a$lqL(n;XP)9F?USc6ZA6!;oE+i8ksYGTfe8;xbPFg9e&VVdrRpkO9Zch#cxJH7 z%@Bt~=_%2;shO9|R5K-|zrSznwM%ZBp3!<;&S0$4H~PJ&S3PrGtf}StbLZKDF_le= z9k)|^Do10}k~3$n&#EP*_H_-3h8^ZuQ2JXaU@zY|dW@$oQAY%Z@s0V8+F~YQ=#aqp z=je#~nV5}oI1J`wLIQ^&`Mj01oDZ;O`V>BvWCRJd%56g!((T@-{aY6fa;a0Vs+v@O z0IK2dXum&DKB?-ese^F~xB8#t6TFirdTy3(-MedKc;2cI&D}ztv4^I%ThCj* ziyQ90UpuyI`FYm%sUlWqP(!Qcg-7n%dk-&uY15{cw0HD+gbuz}CQP*u8*(+KCYFiz80m1pT=kmx0(q(xrCPMsUH1k{mefDSp) zD5G^q?m1N%Jbl&_iz65-uBs{~7YjNpQ%+H^=H7i%nHnwimHSGDPZ(Z;cWG1wcZw|v z%*juq&!(bo!`O7T>Wkon^QZ-rLvkd_^z#)5Hg zxufObryg!`lzZc#{xRRv6592P5fce0Hl-xEm^*nBcP$v z0`KR64y6=xK{a*oNxW9jv+9)$I9SxN-Oig_c%UK7hZDj_WEb$BDlO#*M?@b>eU7 zxN!%UE+w#Wg$bqFfc# zeDOpwnoY)%(93rx(=q9nQKg6?XKJZrRP#oo(u>h_l6NOMld)_IF( zs6M+iRmTC+ALc}C7V>JEuRjk9o)*YO8Y}oKQNl2t?D;qFLv4U`StSyoFzFYuq>i@C zEa1!N?B0BK0gjTwsL04McVmu=$6B!!-4bi1u_j7ZpCQm-l2u7AlYMmx zH!4a*@eEhENs{b-gUMy{c*AjMjcwAWGv@lW4YQtoQvvf*jQ2wL8+EGF4rQjAc;uiEzG%4uf z9wX{X3(U5*s$>6M z)n+q=_&#l6nEa|4ez8YOb9q{(?8h1|AYN<53x+g()8?U_N+)sEV;tdoV{pJ^DTD)ZvO|;^t&(V6L2z~TSiWu zI&#bLG#NGMHVY^mJXXH_jBGA?Np1q;)EYzS3U=1VKn3aXyU}xGihu`L8($R|e#HpJ zzo`QozgXO&25>bM*l>oHk|GV&2I+U-2>)u7C$^yP7gAuth~}8}eO^2>X_8+G@2GX0 zUG8;wZgm*=I4#ww{Ufg2!~-Uu*`{`!$+eE)in1}WPMJ%i|32CjmFLR8);bg^+jrF* zW0A!Zuas6whwVl!G+Vp(ysAHq9%glv8)6>Sr8w=pzPe1s`fRb9oO^yGOQW^-OZ=5? zNNaJk+iSAxa}{PtjC&tu_+{8J_cw=JiFhMqFC!}FHB@j}@Q$b&*h-^U)Y&U$fDWad zC!K&D&RZgww6M(~`@DA92;#vDM1_`->Ss*g8*57^PdIP-=;>u#;wD4g#4|T7ZytTY zx(Q8lO+5Ris0v-@GZXC@|&A*DPrZ51ZeSyziwc>%X>dNyCAL zOSDTJAwK7d2@UOGmtsjCPM9{#I9Gbb7#z25{*;Tyl-Zho(Oh~-u(5CLQl;2ot%#Nl z_cf{VEA=LuSylKv$-{%A=U+QBv0&8bP;vDOcU|zc3n!Nu{9=5j6^6DL&6tm-J4|~) z9#1w(@m3N|G3n9Xf)O<|NO+P)+F(TgqN3E#F8`eIrDZn0=@MQ%cDBb8e*D_eBUXH+ zOtn|s5j9y2W~uaQm*j{3fV=j|wxar?@^xjmPHKMYy0eTPkG*<=QA$Wf)g`tfRlZ0v ztEyRwH(8<%&+zbQ+pg>z^Ucf8Jj>x$N*h{buawh;61^S+&ZX>H^j?#nw!}!~35^Z# zqU|=INy-tBD+E^RCJdtvC_M2+Bx*2%C6nTfGS!1b*MJvhKZZPkBfkjIFf@kLBCdo) zszai4sxmBgklbZ>Iqddc=N%2_4$qxi==t>5E!Ll+-y(NJc+^l)uMgMZH+KM<|+cUS^t~AUy&z{UpW?AA~QO;;xntfuA^Rj7SU%j)& zVs~)K>u%=e(ooP|$In{9cdb}2l?KYZinZ8o+i;N-baM#CG$-JMDcX1$y9-L(TsuaT zfPY9MCb3xN8WGxNDB@4sjvZ10JTUS1Snvy5l9QPbZJ1#AG@_xCVXxndg&0Cz99x`Z zKvV%^1YbB2L)tU+ww(e6EZYzc6gI5g;!?*}TsL=hotb0Mow8kxW*HVdXfdVep4yL` zdfTcM*7nwv5)3M-)^@ASp~`(sR`IsMgXV>xPx0&5!lR8(L&vn@?_Oi2EXy)sj?Q8S$Mm zP{=PsbQ)rJtxy*+R9EqNek1fupF(7d1z|uHBZdEQMm`l!QnDTsJ_DX2E=_R?o*D5) z4}Rh2eEvVeTQ^UXfsDXgAf@6dtaXG>!t?(&-a~B^KF@z*dl$BLVOt|yVElz!`rm5n z&%<$O{7{?+>7|f%3ctTlD}Sc0Zs_hY;YO-&eOIT+Kh%FJdM|_@8b7qIL;aj#^MhF1 z(>x4_KPKYTl+AOj0Q$t3La4&;o`HP%m8bgb`*0vs83ZT@J#{j%7e8dKm;){k%rMw* zG9eKbw_mh1PHLUB$7VNcJ=oL;nV~#W;r|rv;ISD5+Q-FH5g~=&gD`RrnNm>lGJ1GE zw`K+PW!P*uxsEyAzhLvBOEUkj>)1sV6q-RhP*nGS(JD%Z$|wijTm)a5S+oj03MzBz zPjp$XjyM!3`cFtv`8wrA`EpL(8Soof9J(X7wr2l^Y-+>){TrmrhW&h}yVPonlai>; zrF!_zz4@5^8y@95z(7+GLY@+~o<>}!RDp|@N4vi4Y-r@AF@6Q7ET8d9j~&O$3l#Yuo`voKB12v8pK*p3sJO+k{- zak5sNppfOFju-S9tC#^&UI}&^S-3TB^fmi<0$e%==MK3AqBrn!K@ZCzuah-}pRZc{ z?&7p`mEU5_{>6x=RAFr4-F+FYOMN%GSL@mvX-UT3jRI;_TJH7}l*La_ztFn+GQ3;r zNk;eb?nh&>e?Z$I<$LDON!e1tJ26yLILq`~hFYrCA|rj2uGJHxzz@8b<} z&bETBnbLPG9E*iz!<03Ld4q;C140%fzRO5j*Ql#XY*C-ELCtp24zs*#$X0ZhlF~Qj zq$4Nq9U@=qSTzHghxD(IcI0@hO0e}l7_PKLX|J5jQe+67(8W~90a!?QdAYyLs6f^$ zgAUsZ6%aIOhqZ;;;WG@EpL1!Mxhc_XD!cTY%MEAnbR^8{!>s|QGte5Y=ivx6=T9Ei zP_M&x-e`XKwm+O(fpg~P{^7QV&DZPW)$j@GX#kClVjXN6u+n=I$K0{Y-O4?f;0vgV zY+%5cgK;dNK1}{#_x-Zyaw9sN`r9jST(^5&m&8IY?IBml#h0G3e?uSWfByzKHLe8) z9oCU{cfd~u97`w2ATe{wQPagk*)FX|S+YdySpplm-DSKB*|c>@nSp$=zj{v3WyAgw zqtk_K3c5J|0pC zSpww86>3JZSitYm_b*{%7cv?=elhCFy1v6m)^n?211803vG_;TRU3WPV`g7=>ywvsW6B76c-kXXYuS7~J+@Lc zSf%7^`HIJ4D|VX9{BlBG~IV;M->JId%#U?}jR@kQ&o5A3HyYDx}6Nc^pMjj0Jeun)M=&7-NLZ9@2 z)j60}@#z8oft^qhO`qgPG;Gf4Q@Zbq!Fx_DP1GkX<}_%EF`!5fg*xCsir}$yMH#85 zT3Y4bdV)bucC=X;w24>D>XjaA@K`En^++$6E!jmvauA$rc9F%b=P&f^I7M+{{--HM z0JXFl21+}*Oz8zr@T8JQp9Td0TZ7rr0+&rWePPKdaG}l-^)$@O*ON;2pkAjf4ZSg# zy{PLo>hhTUUK_q5L{o!vKb^7AIkbXB zm3BG{rbFE>fKfZsL4iKVYubQMO_AvYWH<3F_@;7*b}ss*4!r5a-5Mr{qoVbpXW1cja+YCd!nQ3xt*CEBq_FNhDc93rhj=>>F59=AN5 zoRmKmL))oDox0VF;gltwNSdcF9cb*OX3{Gx?X{Q-krC~b9}_3yG8Bn{`W6m}6YD#q zAkEzk)zB|ZA2Ao`dW^gC77j#kXk7>zOYg~2Y0NyG9@9L)X=yRL!=`tj7; z^S=K3l)dWTz%eniebMP!Z)q@7d(l_cR;2OvPv7I~Va{X>R@4XXh- zOMOMef=}m)U?`>^E`qUO(+Ng$xKwZ1|FQ|>X41&zvAf`(9 zj3GGCzGHqa8_lMGV+Q3A(d5seacFHJ92meB0vj+?SfQ~dL#3UE!1{}wjz|HPWCEHI zW{zYTeA(UwAEq6F%|@%!oD5ebM$D`kG45gkQ6COfjjk-==^@y6=Tp0-#~0px=I@H# z7Z|LQii;EBSfjse{lo}m?iuTG`$i6*F?L9m*kGMV_JUqsuT##HNJkrNL~cklwZK&3 zgesq4oycISoHuCg>Jo;0K(3&I(n-j7+uaf)NPK7+@p8+z!=r!xa45cmV`Mna1hT=i zAkgv-=xDHofR+dHn7FZvghtoxVqmi^U=Tk5i*(?UbiEGt9|mBN4tXfwT0b zIQSzTbod84Y<){2C!IJja=k65vqPM|!xFS?-HOK!3%&6=!T(Z$<>g6+rTpioPBf57 z$!8fVo=}&Z?KB-UB4$>vfxffiJ*^StPHhnl@7Fw@3-N|6BAyp|HhmV#(r=Ll2Y3af zNJ44J*!nZfs0Z5o%Qy|_7UzOtMt~9CA*sTy5=4c0Q9mP-JJ+p-7G&*PyD$6sj+4b>6a~%2eXf~A?KRzL4v_GQ!SRxsdZi`B(7Jx*fGf@DK z&P<|o9z*F!kX>I*;y78= z>JB#p1zld#NFeK3{?&UgU*1uzsxF7qYP34!>yr;jKktE5CNZ3N_W+965o=}3S?jx3 zv`#Wqn;l-4If#|AeD6_oY2Y||U?Fss}Sa>HvkP$9_KPcb_jB*Jc;M0XIE+qhbP$U2d z&;h?{>;H=Sp?W2>Uc{rF29ML>EiCy?fyim_mQtrgMA~^uv?&@WN@gUOPn(379I}U4Vg~Qo)jwJb7e_Pg^`Gmp+s5vF{tNzJVhBQ z$VB8M@`XJsXC!-){6wetDsTY94 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.ttf b/demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa1196aad98c2adf4378a7611dd713aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165548 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 z 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 d0mRO}xo^G_%I z2O^L=ATW7lM&^H<^*^2eAN0eSJq3(x4DA1L)&F4euaO6sK5joV1E+r+DAqq4sQ>Wu z0|aVj?P25hA?l{GgpFa`oP%>HM?@(=7t5y$lA|Hyyb+&}%lcF7Py zVOq>>oZbI%cmJ;c1Ox&!PmnY&6cmq2?4Nt?RBbj#@*S#u% z($dm;AKJG3Yv)w@yrS19dscW!&dp@T$utcaiktwRu?l%Fgn7##v*Q%&IaI$|O!P}5 zE!tXI-Ss#N&%~+2xwep6)=D=@bER^nrNZX=A{Jq3H3E=sm}xcLG|pUA-88}8wRPyv zPnoSTxscjcm{McuVx_s+*=h#*Xv3UB1T}&E{uxPi!CD1QZy{>6F_-GvT;_v+@h3%S z3~p6JKLUMaO+O0%W$iTHs4{|UN^?L;ts#@G+64bnV>gujTO1A$SfkJKhUN{&{#iBu zbrz-NBAI4CWjjIN*&fwVu4RubbB`IvgcJ!WV;{$}bpWy2K1lw(2Xe|eWcN9U#V^J= z0v&sgD$Y5Kh^J4utKJ8w`)YkScnEwZDG=2~oYvdtqau)|6HAhwqW$r>MKydMdi-xf z|IPEi=Mls`ySoS4Uu8Lk>GP(?uENKw#l^+NO;vrl>caNS*3!n4J~PMG6%1?`Lo`8D zP!I`IikK!Gm+D~0Tx5dT2;-4lEPJvvNz@Roxn4bK2&F(-3ukKoTzvdLw9r!ZsOd)GFakMtPqh`I$P>j#E63N~^t! z8t)N`OP-Ey8cNVPKsgcS6B*&w9LA&4rPERq64J$9K^)cnN)EQxZgj#nJKXDP(AwtHNPvj4d!y|3WE|h>aXutjp#eR1Va1(D~!1cD@#G$XK@| z8ScdxW>*_WC0A}fCWQ_Gk+039h^tbyU`-AaRQXE3C@|xuc#bIvB-u`7jVA9qExYjR z=L}OyA;5`@PuJUM+d|rr+H3CQORerU?U9!{Bot;XUqe}i%R=!=DIcZf5IBHt${UX7 z$u&nXerDE=@3Wd|0@Hz$q*rpVDJ+Wsi!-OJ!$UKaeXQAz3oz@z3unQS7l<)x)linz zAH493JdOfC{BNrjX7CVfZBLDtgiqO>03bm9Y%opN;dZI*d!CgC7s1So zx$n!T6vhxG4g7BozT_i+(EXciSh1 z*WKx5dLayUw$Hadz3+<5D}%BZCKe`cE4yNK&2O zC_2B@YGbYTJ=@>6O14_I7;gA)sBiMPW}zMqr`$mljy|@#K)X4 zywlOE7bt(D_<9aY(j=81rYh}wpQBZ2>BFX$_0y{XD7Q1jV-(PFSPU`4DYgBSjuXGW zB&TypZ4-Ia;ZDv{*YiZ4BK%bLvA^d#3^`kw)^(lO=^V#PS}I{JY8vD2<6?gDUgByH zoos%w5n5SA70~&_wmZ}=sE_CH+$5D%I~M^tEkJ<ZQI7BsvH)rso$j0Tno$9{71< z@V}SCAhApjLIvlX0Pxk%zZqkf%M1LSF2n#NI}?5xPC=! zobSQlu20xcw~DY&-wOel-n@?qJ&by)A02bP=f7VUb$6h9A&zxij{$poi1x&>usk&q z)o~Zd^jeapPeoI1Jmh>Rc-6+ws~2@GiSZz{hBgw^soz#me0J4++L57M=6^+@00R~q za2yth-1NjYw%qz!q2gOQL3>x?qI6L_n5iR9jUE#0ppndAXQSaxXgAAg+?Y2ZVSq`= z9KUjbab4|QH-zBoMtL>BP)ja&OJ4O?2yYF#*>9aH4X@u0(otsJ5@}kXX@!4~Fy4Wh zDN>w`7i{CSlIi9?H2YDBB_h~K`_cJqA-9`a@G}pVc;w6b)PGdJz9MqO5mS;`wb~72i`W#}dhh!aglheCet+(79kLz+P{)7XRuyhb{YxtDFZ#1N?6e^# zh*vvtce7F3I~yiY){1)rPtn#OV%8zxe}b9$IU5=66PVl01yCBSd^dXUKhK1G0R|IV zcvk_Ac>q2IN6uR13{;c-_cRbEqYJTB_{Fr4IijaDP_s&jXx0$`sG}^H^o5 zz-Q`#Xift$p?Wb<=fxuzXVyNKg#>QnXBe)ocjuyk{hgW=c?V zRs~?RkX9n-Kuh2ogdASyGctZ-79U~PP*d!u<<~CRR3B7LYtxF8T{?!Nye0d%0n1-I zI4RC68nKpBKg^rfqiJ-i4HXbQx4>=dyxjLao>lA4TIu938pOX`7jX~@WPeN@jr_P# z^lTrnNnS5FJgePCzFZ$yZEE2?4_z#R){UKOsw3qqM;Tb8H@A2_3MP!1!fsit%Vn(B za_2OfhiiPV49y_-YDhUHAURUHq=tlP%rx5l^&mD@G^8z-Y=Z-tIt3L`u!>WVQxz;^ z&9LZUjm7~;VIecrymMSz9sAiMQWB|u=tF>$?NZ<_+~80;Rt&KJZ1cdqEdhb%EWus! zdJaxE0R*U{g1~6{#~l&e3R1mY+6nb{2=-5{7mcd@paR4GV(zxv{CelE`s$Ei#`XXd z)c6s?t)+nM8@GOItmYqze$tkR-@pNBhUdU3!dN9ILMYJOj4^aUvZMFQFK=P@cL1r6 z@U=sJ<=N(Bq`QQC3-wJHuee;+1OIT=^WJf^vichJbLK-(8A>DTum-ya`_|C7PvY^V z-X#zAoguBv{!+QTW6rx3-!1S_UiFDt_}ti$D*F?fI@AHKaETKn;7R7C5HXlh^h{!o zsrxdvVOX}7A?4Tr{6o+@q_3pMQZTg)Ea1)Q8|O#l$}N5<%GqV~ZE>N)M!~x7JUKA5 z9t(l39F)9Tiu!T`O`2ZQdW$v?+Qe4m558`xNHnv~bX8j4G6ay*PnvTLCWgm@K+IP1 z^SI~_P^NN)(Qy;gv`8wrCM0r zdu^7~mAS%W$G8dDhB^z`1T=lN-^sNz%Wcwkz4|)K)IQg@u1iEb91XhJ5xEwYDfvM6 zkLOfT>Goml>)dkK7RrcGd}4t$1w4`Vi@x?8r-Xz-T@erhoTTvYj;62sm##V72KMKy z7jCvo37#eEob8=(e^%k-w*#CwiWcoBL~yaY-mZ;3#7$hwrE0n&Z&_iqW9;qZ8h>;~ zOjAz(rmb4$^7bp}HHOIkg&1oXJz&O9f5ETRc`KDiwH!c>87$jXR}9R=#e{N-{typMNosUZX^8aPu^3Zb=_A_|$kJ2>CKI25a~u?@$|xUD0E z3rV0H2Dkhmtcz}Bqr1R;PGC&s1*q_(cw=w!eh^JIxmYy6ip|~R@0t~6h9kSKF8k`r z-rmZ)soKb2jgHIODnmo-1=6%KLu=Va>yJSJgYnC@P2eB{+<2U~g=4b-hjNb|x!65z z5!Z3c@32#?=kl#m5f8>l8a@f=Wi6&X>j+N1+ruaQG?CtDV~PXb>@WWf2Q($z>z7U+ zMBlz(Z=2s-T8$d;Ue6M3l3xRuVhSxm5s{3BKIpgmi-?-oisza zkmgcLp`Vnlx?L~qe?(H=WYV)H)PPR{pA7{5h`m_l^X{d`q$MOR49YduCf{c>9PI^G zU)!twAe$_^TtGrD{jAw%Wfw1k)5`DgJXWP`-7XNQ20MryLW6t0#t42k2 z0hnOio5PA`bpihQ)A=v&;|;YU&l?F@fC_Npa}OspB^Vr!zTb{NLwi)Hy`}19z@fr? zU3Jh7xd)*wL=El;v+()ck_u(iI_w^muPd_R6?OAcCyxtX2(vAWE-tjbs3u$PJ&jfGp*j;7`8P+@e0HF88@NU#6t?jH*EMz0L$My9PHiB zRVebeoyHC8Wl&pm$IT(G**{Utw9Bh)HAE_^TCH*ta-8|<-fxJ&aV4hWUSV75)+$)r zdIu%X^B9`Hh`wv*IW6Ho^#zL)v08Di99QNKyQ4Ex^x@3G;Cg6K(hX}D-{D_(j!D%6g}xd;qA)E>mv@<*$ZX$rUpcaK+~5kxF2pAac=%N>3B`6+-EO>fzLHkzfcD>r`}fy+!N&}- zUH9`HP&unio@pV+24r=ON7xE68a7?3>8!kAzHyK4Lb=YbvQ+HBn+||W{Eg?GVcYQ!l ztSPK!t!;Un>i4P0$ET?I9pdIh^EU0+RcYthPqRm& zPB}LVBWJC5;`qzHr{VN*QZ9;5?qvVIY@^viP)2>OQxb+mdkWDzLq#%PR5z67y??M+ zSjDiw%%q&n3QENt>Lwj~Ps8*c{0xvFm@csrU=eyiH}Cpb=6h0&O92O%dTc0WV%R`6~bS z;QT3eZTz7V7f#K|S{Kj{_}e_u;Joz^)V0uvH!H@e3WnVKG*Y;R5RQx=UKb=?4!qeb z=_DKa-vz<$?}ZxrbHii^hC> zLN`k`gS9^kaeye-(%)p=Q!i(kFa)B=q#!VbG7-calS3zKZMl8Kg`I^HD#h_iN?($! z>66rNVaPiYq<@#JX$rYXkw1$h7(yVDzNky$V^i%H!;0ZYI+ZXhW#@zfK7#lXMnh2Y z^3kcr0*7W=&Ss!urbd>4di6HWv0K><1f+uu%DQIF7AJcpusQzmE==J_e z-fwZbee~KU31mUe(k?U$jD<>ni>OKvN0|-t=m-(#j;6O&G~<{8=r6^gv3$D&K-xY8 z-A~Ae;#6^CAZ`&J{>W;EQAqsZ`r@~1+yiz(zXcIDK*GBO!0caA&f@eEcUcd0SLAp% ziK^4%9xfj7AK-j%&m}#)l$Krz(B|KAu~u{JsH3mYsRF-@7#pkE z;OJGjbEEV%#{Qt8>G*G(Vfh9<)rQPk1eaSAEZCJ)F~PoR(h+g}tl-VX($ zYO0R@KF7}dH^^v=pHnQ9YSNiTJWm+f!v@BwqQ$Y$ei`a_1{_|I-ss`3Ry;b`bNIE$Rnb+z+c*ky}aexvI*zKtJjccvTTZIqk!Rw!$+NgN&BT7q-IM^YM>9lAFF3qsj z{Ui)Y_-SRrj^=N_HhESJD-ltQtL~Y=Od(%jfPRpq8P9`F;O6pc)s_oF{z{=|n6er5 z!u-{h;{bvm_L%5agg+m)4aA0YAb@K`Qv~YLWx~sGmt6*V!|?F z%7PdL2(eqp+SqbvQ;>6xmHK-4tnG6El;(blqDJ+}Q2=*wlRYGBr%&K>9+K^{Aa z9GQ#O*$%Ki>UYmph71RnuwA?#!9vfTIuG|p%N;AWWwB5C+IE2*>xGPGkT?t@?Dvhd zt%Wpg_71*1_@0kBba@@FZN^TvjpVY+rkq1h2gtm zJPXCjvMjf7K+`s#pH$0kv}>*SPOV2H-e;NChSuuNAtqhRtEe-DVqBG7vr*enVEmVd zAv-&^RqMyAthD#nN)(w!Yp^GI_VB1e$~skiRlP3K6DJObNVTJM{r0E+{x$grTNFbh z_uBsc88W7$jtTI-pPGD>}Uj((F_m&nMmhI4lhx z;SZUOC;SP$w;q=0ux8Ozq190iFGeAoD%-HBSfOO9W&PK~Tem;KeV~3gA0dW>Pv6I1 zYNn)N-+Qq-I+AJB!=V9uxeoR-tL7t;-ZGy%%>9l;tMtQJm7z}(vh)}z8v;!QqkT%c z`Pr;kXU{<7gZGe(<&Zjp1|1&SGt0&iI1JiBIdPElDo}oD(oS=FPy1_j?dy9UkEB(@ z9bfbpt~myqXy`*o?NPpA2S*3Iq3$t0QzT^=d^GlO7pmjpsXe^IwU{J-P?mtkdD4jT zbfg}pfa66t&>R@5s6DBCTElqWD~=VAB5A$Y$g3nSX4Ol}s9ozugn47sFrns|d)D7D8mh1^h>F8%3W z2a5TI9W)%RgrtE1+L(i!DwwV@xZ@VytBSnvu3ay?9Y$%KBd@=bFp#4X>B};lBl^>;B5%>LW8TFDeNLsW?@@;#fCxMm!*pX9lfHt)uuajgiV$d zT#h**{Ipyhjltvp#_fvwZ6(9T&)Rb;VTsa~=gJDe$;q~EJzFO3Apn2EXrlA~F^1;i;H_jG>WmV*SvFHky zf3twjY=>%B`6@dr95pk37;>@x#zI%UP>yJ?6%2RCAY-s(SLIof9c#sG+>FEDjD6gU zD+r3UOyZKt5Q%XW6oZUQHH@|K!@vgu>y(j~#NpH5x9l+GPE6*P91EzHBE}krNo7~5 zb|0;8aj<>dJDCakJW=LK#vk^V^`8D9UP$2lLk&K$X+Ag;(w#ZeR7?dFGzJkJMi;Oc zoicM8#T@0|)<b|u?YyW0!6Ew$>Y~pX2XU`J zDYoQ`d*fm7~YwxoZtL1W7$X*5n>+fi8oUqvJri& z6nm&FFcO9AAX=7k9_;yussklMDtxu6t5OkjY3tvL7s1PUqGstoYssPT_ItLMXX))Z zJ03DK>_IPJgIKX7x8Rw<+?!kIc9MEA5hw)}5-iqzE8VFOr%mr5VC50inCtJ#tAQL} z1%tXg16rH5cZ?pPJcaYO6~hh*gGh%x5*s)RLDozXG<$(Q=kn_7fh78e%R|8C^X%4F zm9*vMr4{4*^7ibRo5iK-C*+ed7*^J_i&Im+>V~x=%ybD)(9wLptciZLN_)YB5O^v@ z{$Ja{Qtd!!GiH0^v6Ue$NG8nsD)~)N*JjWChU+1?Ny%198}eb+iG#cLFl;OopkF>K zIJg1zG{!THV!AKNdnO5aW zt-47+g@#B%3Z{it%Q@M`87PUsQr8-l>(V z7?crSbh@OEA$m#}=67-ZTp889W3?AU=1tjMdw;Ne(Izfm0-RQ+6jH&8gwGA_(Q}sf z2cqudmvKpmxhIPXLGEOm41F$3^s>mhI5{xLs3uHjw&8hlNfyhYWJ>LMMzm7Au8{{4 z-78CWHW(hd0`W;PqChl|g^3)t!&RZbm@=i00BhlV_)wg0=hMU42F)9g3L@3ao5I}H z8I}fZ8eb0a?<61oj=9=X+T!Eq!RN*aH=0Y9i8s}rg8IT>C(zNJ!Th>8L<=0PZ>~y% zhz0Bh?ag(U19g*K4YsztBIx+FBiiPs)+@S)uF6ph=|=6xgUL*jcixtPvskp*56`B0 z={4aNiYE!i0tq@Z1;pR-k?I3o>lQ~?sYinu)T9ag!9h~z6;ikT8&2oT|A@)-z( zaQOIKXY~=W6~KLycubCWOz(G95I!BBDB0Pny<_|zlgVmqx-mrqM_VmHhiBtJ`$Z5w zCPrd45%V_Ko8gYvDbKOB4l<(Fy#)}+&?NnmY-1A}rTwO$s?$(4W6U5%XfMI)w58zk zbnp#zcaX9eQujFlW$d|exgN>CX+D9ODCFX{GoRcYei!0W`_4DPA4@ELI0BSq?GTP9{qy5{Jp>{!$ilU=1r*;&BcRg z$*q-IA(UIbR;y$MuoVtrm}_sru-Iv6QF-Z$*v_HQLPEzhFGyrl8>MSf`fNpzygHW~ z_QJA574ufXwN23TR!mhNU*^BKQw@5<dJs*_=x{mDYt5qy%uW6HuIrYQdUw=BHHG z5Nt@%wEdaq4{)mv_E2B_!pNn?M`+Gf3%JA^GCHQY{6Z+#==o?VMBVKN&I-5tw2=+-ea|`(iVDzDkf` z_o4ZdXMG*j@}fOMk`);6@zP0?jJxg|pqYLnuYp;NEjq=E37d$523+{9c|=_m;Y=FC2zr0q z9ABp`#xa?^D8x?{^m9Pb8P5(LYi&GbahTA*2ISmx(8c(0gM7mGV0*-m^P2+5>2y*D zK>!ty(}TsN$-pvPyv8MaFTTJ&O7I6s@>;4;BIl36G56wWqHwlP{~pWLHf$Uy#0Puy zeV;G?gvis^Jxj`$>M5o?zm}_}UVzVP!9jt89Pwn(1x#nRAN`d2;9sJ`tk0AOz$1+E zH{8RxgaNe%M&|1hrS+*9C*P^Q=fDJ&p_?m6QWaQ!V5kK*vuF%HaecM^I*D{f1%Ubp+IA5m}APs2n1ZJu)J^J{Rl04s^nuyFN`DfFR|@!RJFA-DyQV<_xaV4SNKY62@hT@DgkLAq~ zhG+%xacHfgNfA`ZaU>zuj+4n`fU3TLj}&960XK1bcKm{wvmh9SVn*;5QgF*KxDXp> z;Zr51Q6HgH%jqJevB^Jiu6LMSlE`WNR1ubZUzzA5+#sU+UBVg8!D?yT@>=FvY+EEQ zC!*yn>I=^d@TLt~CRiEKJXWgp@5P+?!Jd%4yZjSDVZ z`OkMD7`^B2*g{%}qlKpgf7Zmo0$lvg7&BQ)Aza@3G~b|J$Ysk*P8I&CB}bAMZW-~Z zIR_wi6Up0t%hZXSOGa=}k*;=(xjt200^6TTRMf=`GX0xknXv$dY&rT#xsb_X8RNyA_$By$)d>6vNs2f?oR!rfdl)uT3^wm? zQwUBwSI&b&0r(I>$MjJH`fi%N1_>bz?&Ie_?js~TGj-`X%$+E9%n{r<<}`S$e`-p) z=*`trS)6S1Q%@D>CURjquWCtl()2l|<=i+Y;!j1i7jdhWpckp=OwWUJ0MIi}l3TJ6 z%ie2wuVKrrw_6uhff+-6)=_Nlw(qWRJwWbgGK?~1p|U<-iQ8R_>vJhnE;jiLPcBi1 zRW@hF{B?5XRh6|AR&h%$^yWc*ouol%@U#QTr4H?XOSYZzd|Vm2@o@5F7Ops_jl7Q) z_!ybL>GEq;&gio9wM`Qi-TlKa5EY2IY0@jteHNx%WR6`sJuJP1f$&aYFSPnLp{u4Y zEC0QDql)X^>kq8ecE4t_gb{C=2=3N2Gdry^aVqO$<8QdOeXI3e?r5`^^}Z(42qSR{ z0UzZY8>scj$7ip(7LQ+vQ=uIKkHj_~tcpcgSP5 zl5+MbW(cv;e_PPRsa@@MkrcgqMx5Z%N!L9-bn~Ur<+53s7!rjk3?KlB}I?)Qdv;%ICl2PJN$ftp)ow;+k%4wA>Ck$|vtQ zY_;32dscrw)Oop1ekSSV`gS{<%RUw@3VxU0lDzU1SQNO$YkfWP$ke$i6f&=S)<#|) zlsaMpADLw$TU8oa^N=>@h~Cf?=Nn=+j|^}w(vlxqQu54&1r>x{W^6ldqjSsVb<$rwy}rmwYQ01Baz>U?dDE) z6Enk8YWv#EPCC25t@EorUGU5O{POaAz%~D^imu19F!K|CcOQ6u9A(3jzt&6Lx23hJ z_sY^Wy`DrdJCS0duxEW>Bp16>_r;eS+N9O(hQNvjVv4ZBkPTG)KZS(quq)nebe34H)H7M%ti+!MZpA9N4oWcss21+ zAQwnD0vc>}2(d1Q#3z7x%6;?j6E#S26$>I+F1&^X5Yhyy)jZx2)-|Upucn@=gqJ|1 znjL{ulPOb0eXL1wk8Ah>PJa-YixeC}tZx!&A(kWBz|&k)2zfAfgt^NQ;Olk0Vk3P% zSYd$?<92$LGI`4r+F>*)w>2H8@J!QRnSiB-i2PD1f4t*yB0TW=VEPmk1ex?YExNMN zI9GtnDg}xUYG}IWCAHvEm4{~@{-51el6Asc*;aKov?K-kv&2q9S;tVToYnO+c-B=` znQKkgiC7CwY$Fiqj<-%#M!D%}%W?y{P=lzvRFF$pViFDB=NX-O>E6kM3WCB9`o^B* z{MM$j4lm`~NPO5-ia@%@awPiq@h@2GFf=ysU@*00s(yk}5oIaOg0TGff)nIUWYyxN zcEn}cZ}y^F)#s&R>KDsgsBwSUKb9_R?p87K-R`$x3itD)iTviK$x&+bcHFT*Q!eFg zNcceU!8YQz_sVsSd;ERa>;c4~o)C6(H5wX?RrI-;Mgfj(au5r*P)ju{uKG+ds!M@l zW?klvU;Oq*8pDCohHSQ24f7DeFk&%(PZcU>rFa>O6fcD4U}U3XS#+b?NZOc2maoDf zS5>B4E6*}7JnfMM)^Z2!u|FFCSETDqB*+}eo{nd-W7`sNQ!;2e+6~Ni)KbM22iZWB z%yRrZnm~6U0RBToY0kZLy)+s{VKacat74^qa)$4)&Ph1*?@Ov-g?MMEm?8Zb;eqt! zLvhaQgRdzKuk?`*jXV%Juuj*{CsQsj!V&}8J|X^iw$%6jIW)vwOI{HkFX{!z0lWlKgw@5_{( zOMVy%4F^Dsc0R@>XubIc?i6ec|UaBw?M>gea5yPFzj5S zT>m(ee^IdLw=-~?{o7xKpf^)qkrM(2p!((az6XGrED0(FM33D<0}i-zg79zA=DNXS zEsb+Zs~m#O<|j?o&r=|HRfL83{B0M~P{4zigdGU_Y0sk`&i#!eN@q9FI$Eh0D@$c= zHCwJI_FH!WbsFo5orbP4n^#UY>8;Ped9MS08=u=>R+PXtTkh6>nUbtX-mk~TlT<&} zv`4nQ78`LiHas=DuR9r3LjJaDID5~MGzV7ac6>D$N#lJ)K*b$#vtKZ<$~-Garg^@I zP>8fe%19Y_zr@ojHZ~{hg_(b+=~elZnQQ=ZFK<0h^nP0I2;dD#pcOcEKg%FDH|FA= zgCO~T$_6o8I$2SShA9w6s>(w(SXOn4pJ?h|oFzAC(qSCg$%!_$fG;Qnflw=yLUdWW zA)3k1AMBe)===HMKi6Z+RK3K-|6!Nf$WbMb-SFwgWqST%&t-)@hRVSed2jSKYbX^_BIu^IWwbNF9 zpJnu1Rn|Wqa>o_q$=jWj4UQukG7HKuhoijLbIp1FaSe$CRlFxs!%%g2>DL85wjvj( zy86kPCL7BS#|tDau=B}#QE|ffG7?kw$s+S;oe~>*PDr08^U!7HjxX!ohnTQt-D1S< zv>{kD2r9{5>ItH#v8$A+WSK86m8%+ql61HsP9hz+9q#mvT0C!ly1bL)-)G``ieJy& zd%tNl6e$!ua=U}>dM}XA>NTG{gA*PE_J3EIFWC8k4~p(C2wkZV>yfP7W~hmm#ntLo z8zO~R9Z9@lS@sMv$@L065Op;&QPR1FUw{cSF>(@B%9&rewXJ#8_cAc=o6*#1DT$xOzeycmC9E)Kw;29{@u_qV|P2(ZS zxS}xa+vYYvo$*1@$w1$QXeJ2ZsA|VX769oq82C&5=~|MRo4VlmF*%RSB7`4{P#pDd zHVO!rfZDXw4$Zpt!Il+oD?D$1+{uEk#nJjBK(eeJY%HhD`*}7)n_Btv{`Im!O4a(D z%EQ}+PvTbP=WADI;~|5XOqn2(kOqamX)kKHqw#y&_tnem731aRZGz5@?m$TdETNl9 zYS>UXk-v4THB7I;csa~%`a0{~6#Le+(mw=byX1PI&dDx!XDsGYB|_m zcnJe4os^9}S8d;{%WfLBg;;#j0-p7l;vBtSuFqcnEiu4ur+K*sVg3u1YtU+w(t}S* znYH047Q2SAnx}fb`rn$h^+M=ct#RG8&mx;^A;cRG6M`R-O{L-D%KMi~ug2yjTfo~> zH4VQ8Mvs>gE0<^aSeNJZh7>i+(1$u(`q{(nwWQK^YY{7>(QcDGjqqfWJw2Vyf}@0< z*0q@`%Zi=ABF2bB1I%U^tnxIB&zV$RNhKpCH@w6qHX=p|SL^r?GC$PTAhC+K`1sxu z=1&f_c)8l2Cc3u2W@J%(6;VRUbf0Btl2F`Y)VYf`m|vxeoTi>`gW96 zdvwr9$IR>Y)MUHq$%$rM=IkMf`b<@d5=nY#^q%C`fbwITF7v&Kd~K}4z;F$*^rQ0@ z4Sj#ac5hQzCLMN`*^3>aRyVd2a?)5z3k(T7strykphhh$nsZ>Qc7_&FaAzY51H=Kq zn4HbEn!l9dl5~X1xNQFng5l~P)~B!E-}j`fMweF^Ns421yno{$UANe9e-h$_dT3dQTzRcqepkzHk^z|s)HyzqDH#~EbY*nE z!3acTnuFHKm4Be2=5dmGaC(Z~Y(EH2Sh?kod(}((&UA6`XTR-YOn2Lq=K8Ed9J;;w zkQ210aTLZ=kK-~tSZUlpgbb=&zrtSoh^z`D-34aSz#KFN6OkBL#w9Qm3&c|6wm}xW zpST@|N0Y+_&$;v!^lp@ufMv?cYmi{r4I{lR1#NwKkwjJrH|5aRv8PE^P+iKQnnsxV zp9t{@(G&~gYy7pdSBcci0$eh7${KG?ZP|P5B!Hh!V~Ydjpyepjlz9e_y56W~f?UN1 zT}>?Ii^u;+sVa<|K{^5K$KG$V_fNK*c-!7`SKC-ilQU~8d^Yh?4bl^Be3ZK^lT{8= zS8p}8Foc24u}xec3~k@==9w{AJZg;u$Bsi94Ws6U%vuicdGkP86 zxPP_v64Oubdj3pnSIZt6EKDi*gaANFtS^9aDeN6?*l&Po^l(+nHNdVjB*mkA<#9R( zcBb{DRXMY=mRP1rN=ufcI?i2TqDX}okf?on<4}r zl;fjdikvb6STV!q@K~{=8VjL*l6Q)k40Kr!tD_9n-j}cIQH4J3L)rJNMja`rb^JJA zOox=e;F?5I3T&fsrC0_^(Yus3APsM;-FFE!Cx%+-tsa;5@zPj%AVh-)t$ zF+X@&4pt>X7%PsBv14&KggqdqHG1W^!jSt~HJUay?gXlvWsLkQPE0grR#Im*_Tl>X z$Zi}x0nE$Bk%)~}`lYFe!RX7JuD=ox%p`whlQ6|bqgsXfHaF81jT$YIL9{f(HSak? zpn0T?m@}WjLFh8hI=OyV6rERA*m#w}U1h2qzjXGbsml6#Jw&N*zdT-dd=15Ie+EtT z*#yE+H{;eR8(c31v!LGR%vg8(nR?iWQ!X zgB&?&SyDYVk5FD=GAgy6YMPzYc)U?f6w91AysneldB*ZfNwqr7o)r^k6yycj+5=oG zIsm{uOIXjQV$7>=Gfq1Zc(Qc~$x7f?D4xDB3DhOeHps*Sz*-D^I+uTCI|L@ z!^~0YFTBJ!r7pCmhdi8L0w%yf7id5|2Cex45Bt0=AS`Qc>_st%GM2eiFurXA8)&vn z(v1_c41I0zS)vsNNO%C$bu$RG48L{WZ2&C)?)C# z>17e@z3yu@{by7YpJ=5K$JiT#A#la2nF;S3f; zDSR=#+R(v$PoqqAEtF7EmCxP>bl;Bz4el=aO=r4jf0+oz{lpsf`JTJPo^$7U#Lirz z*rL0Ew*_?NZcc0iwo4?}+q1LDEVUGyv&xom@Y2<247cIV0>W%XhlS_CXn+GXfhKB1 zlkLEMF9fYoKw9yoIFBEbwmtAoO2?fPtK2%89$@3BqiiYqJ(gJ#O3CSZtS5)QCq#Td zD;_7RGd7geKFUW=+l}kCIyx@xSzhNHB=BU*rOC2NCU#BeGr7%XUc3KTRu(22MeP|OfeK}h6Sw$9 znybF@fKbPT$!GsTdDghElPCbj>FE=w$Ot1AM3OO`xCeU~O~LnREf(PRSZF*d#^Q?o z>;6J)+eJi7qg3szm{M%>vS1BMpTSV>egNC$?5H3hAr1~m4Pbo}?=89Nzi~9tHbPTP z;2V^AM16l1wX0b{vq4OIUpnQ|fwiRQ8kTb|JSWSTROq@C$lwruW0aX#qk-YnxK8H> zHw!#`jFjBf=_XQx5f~Oa{a_)-ei$&AuTgrk;Fu{BoqrAlS)sby2vM(P>jNt|rNgh>#=@{8vwQ;2CN+C+RNN7dj;t?ykeFtlMtesE?J!WjV9* z3rus4%J)WW(aIZ8p^48E4n3tHQ9k8b_cpaLHU+paT&KQ&zhG@L^d~+YM|w33YEs); zo?4rq3NcCzHtF8B$38y_U>LwR7r2++O5|Bv z#$sZ13Jk+K41jjkomNzn@>A+j*ifN0KeIZ^$OW<*yfL`NGz?~QZUTT{3buT*ARp{p{y4spA`#PCdq%(!t zgVbI=WSZrJZYhdd&(h!^D?ghV6EWy@F=6~$$K`8cR2A~~Yg!i~=>Q|o`GeD>@AK1s z*Uv*oP}N%In7?%8Abm7D=%i3{BPIHITKaU$uuS!$8KP0af*C~(-(~u;_{URw3*`*_ zdq{v!3xx93adJg%>3)ftaFArB(~d`3U&FxMhmx>t4)wF+v~l@12ZgHeOpelk^&}8 z>}dr$wl6ypRB);DsHO8~b^1t@aoA=_md7tRbz;K2)jSa&9J7=@>-9u+J;6&>r7Fe} z1Q+j@6rI;ze+5kFhp}4Uw>xg0GSfUi8Zhbz}Y@6}@->kHZ+jo_eNB zh(V%q_s&vwdO2BFfGpWxY$G-%v(_2hc5_AcDm2Jepu?qKUkzVEKPk4WM>j+2dM@ow z8vq`m^&8RJX*`fav$SU)?UJt_67BmEgZxsQOvV2JJV3+0J-Z{8?Apzzotf{|zIMm{ zv!jhM>cxsvuURNkE@|ysfs8o<_zT7QN@VBJQPZ3}3lcCuLXJ*(Vf-n-Y6LJ=XrD6d ztc1sN0qxRH0G(w}9yLBmu9JSRk?N^2Appkvq5mzs20=JsXT)mCPH|p0tTyVyWvdgg zFNy5FhuyPMb=0E4S|_06JTmFIA{Aep?DP~m+37hq-Z^Hn+1lxt zjM>@#ipY5E0K9@)7GY0>x+%?jWiTetLN0y zEVe7E>1ZOYDLtsHRm(ok5FV|sc~;NMl_AU6R$a+j>o`YW3Kwcu3mdMoaHyt8>hvJi ztWh>ls2=G!J$JBCIlEm~jLh;lFuvFj6jER{Lt;v4rIl!cMM*%Xx!m-4piw}Fxh>dAv%`Oh{%GoMl%m&=Avcrz zha=aWj=EV2(W6)pt)ZS4nWhCY?9WY&>4|QM(#Dh+q|(i4CW0erg?KVggqHH&GZrj>>FO8onE`P~>Jp5+Qe*(xghpone*3 zu1DM1jR5gVrXYiMOB;=6>H$|z)2x)cOke3Fn~-#fv72Fx=vyIaCjK5x7wtYu7UH2y zLT24kfdm$wx}YVs4BMkNA>nVV1`C;nts)i#B-$)Wy&Zc9@e*t@B2jO_27`#O6(d3f zQ70iH5)l(4vDyrxo=5_+I*Bd`ZwZPf{sW51Mjs9JdX%( zA>}GQiTJA7Gl{)M} zh#*o$5avbfvtlA(tb<&{U~yv6rqjDcLB!Z>auT6hXE50Xt6vJsSTIUh@ClI6sk78M z1cEWI$09;bEVuyMDLC~9Yl2At^On5i86XGx%Y{aA|c5HRqkDqve$iyKc zNpBn+=_%prn2e*^$A7B%LVg zWb8%&7H(uS14v;QdcBtj&=W}%3^t`B-iD(fdyIE)BbuN+J z1Hjl=s|20iY}O0NVkM%7POR0$TLmwSrGY9}IG_Rm2jl^`t3p2+aIGK&TbgU&-=>v>s+%nlBRP1Tm*_D-F+c#|3O2I|S|Agvju6c28f}K4-G;3MQTwF;jYKaR z&B!iPI|xqze2HK&#K2`YN;M;x*q2|8Z3>7gbgv0;-zr;{WR!>9^6WaP0KdH^d8 zVS^|P-yVJh>H%cIL|dzaX{L}ypaNJ{SQG$?t3+72Myw~i4LU;%adVx$%IfB&Y8}&# zaGi09w=$Z^MKvKyD89a^kxS)QYXQue!~|#K*taO0lHl@apQF%FEBv{_QmUi6UQzI| z=)?FePs_XaXv#qCyC&Fd>TkX!Jb07dYA@b}{2r1=Hc~BCd~D6bXn%C-9nWb@rC_bG z-gs|kjzX! z{0(PIY%gm5;t%KYP}*An+WRJfV{)o)schzsDjc(KMa6}i>~*TltlOR8WL2ggffBez z{#Ok(s$B3f!*-nPLw`W;*ECS2V!nLOO_Z@re6@? z_~N%!=oLKu5cbuSvwSa@ilceTLf3Y;3y*eQdwYlAQZRPiL&yIL~}Uiw~k zk*Ck;F=Z3DM!pQBXD3jJ@sy@YK~m`>Mw-nmD+EQg@t_%5tU%N!(B=0-r%N9Ux?g=l zed2yPK*f&%-H$GZ0NH0U#poRxOM@mT4EL^ow@$B$T*xrLR{r(-BNu zi3t!xUR+Fp7e0N}9g8;KEcWf_nA$7wxdS&2AG+~?jy~~bP52Q56fT^HE^BP^L~8CXSa#ff_m0%s zZC6}6HP)1Bg1^|*ORw0rR){m%Lba~=sqDg2^A_GDY`eQA;%RC`>se$;Pwjqjv+yAo ziw2^{|F1O6x^s;(QIsPOiO ziw`Wm=*Nq9+_ZH0awvJUw`k)s$839Z8eDMHKnpdgNI!_BUBgPXNXota)ag8Im-lYP zXu`=S5$c#Ru>MfPZO^0JQ*Xl_y5~1(zx5=V@WQ>_ht~J?)cyqMjq72}nVEilkXn6b zP?ymp`-_q`P4pNDqG-w$F1Vlb33>@xcyw&=D&a#f06BR3^}(H zmpa4Q6HG9d$!ONIZ^*FgXohW5A>rbrQ|4ltnc-&SL?TYQnaLn1i~6Xw6)1#RaYqv5 ziXxZ9jQN8*Lu(}(;|y&?r~O2z&6#a>OJUwMIv#N1HH-H=aM#imMrqBWJqH#~)0=nh zH0!4=KCoxe8cAqqx@hkMdls*eAf@ga{AG*XX3o_L#D98Kb9~{dE9OMCSM$Pnb9BxX ztF#xg3wCJlJjwJ9RBSVgs}Y{d)jsv+BYv13Jv}Hr}V^v*_?X!fW?1+PP83)pHRp zLBA|9>K>+eLYA~uT=sNALP0$W%JdK^exfs(E_=km(v47Ih<*_Q(N989y8_cXbL!7g zQ-M9di#kxZRP5S**amTB`oZKQK!7WL!IZ zmDlV1z-YA3)M{L-%V2h6l@rl*#YLhM*Bk)7r3FnQrOd zxmsB9{jh6qm1n_Ui5W^N*NwjuIh zDv_kvrYJ=-3Ht>H;g(Gc*Y{4IG`XhfYM*XWShh{Etw(b&O>|=Qkl51O+fq~29J&RV-l}mAJ*F{yQYFKdO6j$mz5UH5H9OeJR^BrqBbCImq)JXt=8jaZOE($K+EIK zc*=uC)4OH&$jE7TSg_$lm9cgWTO&GRuI^0ksb9KiYi(OC!kyVp*^H1yoEYj_e(}0x zZB4EAu-zqDf##O$o360nC9n7I09t=ybhcawZ^`QQRhApfQSlx1PdCr&2)6hg!LYxrefHz?*Bo5hG1V19m@G9A zGgi!!*My9s)hES_vU=xtHuX18X`dVjHn;TkZ(r~Pn)`B9_|)yCxp8oup)A8O_L~Ct zaZhO$BP#oDALAc8HviN9vGtApMkxJGdBrE{E8L@FRPNkypFCxyo07Xs7D1pQab=r^ z=-#qZ9dQ!Nc%c_eP*E6~SNVlex(`>Md8}xULT37sP1M2%5WXnP6tILut>#!upXKY!LZ!58LIB^o^PRM0)Iu4MVKth5Dp^$Ke0O2O) zD$tNZxp@h#+5)BA;e}FKXiZCb3oS?6mjbc1`OnO*4j&=B@BjNgh_$o3v%531vop^# z&-46#c%*0p;51w2hak8?{yi)cPo5NG;)|lla(H|4m6aKt6SG&l{pcpHlmZ}-lVPS&85{;Y5Mk9GhZqr%A{xj4Dn9cH)-#oi+0E$s3k{i#|D_Sb=hN>&lb+Gqn>Haxk@WWbpmY z%4P7Tl=$Iv`Fw}A!nVHoiN8$V^<-b~6T8nUpEbj1V{|NMseR-A8}GlouNha)9<6Da z?_BA$Je40~ymOKN;cz_&|7qSG7j`!E?7D2?+S|RXPN=Xrq}D};-?{se2mZdW*}r{Z zam|FybEnqGD_7r|4Mfh_w%kNs!`O*FTSQRd1Zo{|Txv5Gbb^s+Ac|xhTf`O_DWTFg za`NH#X!rQ}u~k=HwQ6Zg?>RU24-E9*_X=2i?z!io|A3e;!@?b|&^~8fEO5)?qix0UoTI_``5>_HnA!vfJrG-6}# z__6%cH*b``e16-u=Yjb~;Cby=+aKO_V&~2iyXIbbR(mmr^s2`V^r{nYojCCp-1w&a z>{B=+CNHoB>wK0 z);6*cMUUX2|$Yqei7s%w7PUQH4LMqk(gY+B9 zn2C}hcm}8#3?<14jMkZu2w4(+7D-DWCDmnc9+28d(Fx^RQUw(O0RxZ>5zK)U#vDii z;wvF34*ANp2`ULOLVz*LtgAvBV9h@FASRK2A1TA9oP-G`ugnUNpaZ}JDYNn{9Db82 zd`Nxn@YtFnii-G%Z)6bjL5`kV`(aNyDY56Kldwmj&d$zvOmeW_D0!Kl!KB2zmd`_i z`)7(#u;<((TU8v|y8dfXY`-LM;}*V2?)#xuM-dgOC+@x(5S zMw0vP?GDD_flZLuzJoCg9Y*m2Qw~XBK?$+qsx(o`LU~04=)1gO%J~rhBIi$O_z{@e zP`s>^o$ zAq*DGIv9}$6MS`1i71v7Rr86@oMqRy&Fo!H-uWYFJUfTP{gtcu7Iwu|7kd+u6@7)G z-e&QM=4#-x1xSb`SSCLSR)BT$;GEU#ez=;sR(@*sg0}fKz5Ems`#~qPmQ7jLcJxj9 z+94nPM^M|ja%JbVv(Fy-ApH^)*YB7V@kG+^f@{H-a=m#o>i z^L13l(o;6>Z|rZePn&NTXe|y-^>8@emsO9oG9(NI)f*T0$?v0`HQ`8=zRDd?d%xLIB+O2nqE@Nq-+*_#C+VvjV6VjP2Ityoof&i9| zl@;7PM%F!mD#xo-8-mf`Il&;nma%exo+UslhccOUA#{P>uGNy2G9$W`-i>amK{vNS z^ceK4(OFTc#>l$o6jhGu63$_GDE`Ely%k$Frsra-v%;Jds{%NRo%nlTF5!|9IWit` zz|1RlA4`V$9V7`0GSDlVuh($y+A4lc^K!Gb`_=r^H@@gq?@&^Iw zYK&$D&H-ItUIWOP=}@IdJ_7c*Dh0Po-pkHto^hbGdq(pXLCNt7*=$$xrR2ds6cv2{ zxF_*VuK7}aJTopRm|J!{|4~R#L$VKsq~~J_8huI39Aa`{To`^}I2soLiSCkn~*E4ZCWUitU^n_ih#+p}bL+c_al zbLHQG`1fDsfV*s#F>t$n48li`=GGu^>_#KCI=>d#I@E>mTlfwX1@PVY2}t~-7t629 z|GuNI=j?#Lup&Bh`Yk|r#~tZAF>b=~GoUN5jo%AZ;Tk5{`{>#^H`mwCvr5G}q4&{O zAN}k8zn=kWVep$Xqb%&Y-~<{Uz$uEp2#sMr#SW_&AmS3M7$;O`cr;4TK^*Y1UDT&P zG8Qp9i-mbX?qf8fQDlG3IL% zSqbyGKjsf#4@F83l21pHBaeBE7;Xc(30}eTvH4UKL7u8FRYD4TWQwfFj=9%W2bFyi zcv#v4F>+sNeSSD%DwWAS#$H`lDswG9n(C@c)#qfB6w+pAQHxc%DC6*sk#j7uT4j|H zt4&40@vkDydUo{!gz0#)12MAWfB3lwsfB=hMe~ zZ@#$~i!ik_XV$_FeaI;3s;Z_n>qkNRp}%n3!eg(E4r`$^8pCoS_$Dw zER-@?yNU*B#BQvCus+3>;v2PC;>*Txw+tsmA*=T^l5Fw1yPU-AjA^o(2~(&J6eyS9 zfmF`eQeVoTl+A?af+Swb2mQdC#fnXzi}KG;lXu>)EYoAtiqVATgPyEhNw{FlR4KKT z*d|F>xvDdv=2xQ{tO`?hBu4bzxD|W2WuY;!W=I0I$eYXjVR!Nmy9I4#t+{P;P1n}i!dTGl z4%QVpoK>|Ib#)cBRZd4y9X=K-tlipGv-!4FM>kKHu=yw%{}t?67l}b3%hWmBkisKL z+$GF;xRjw>pt=HQW<1$184U*c=UOdD5UR)?Oom8MCQtSgl;0i&MH2L&TA+VAln*m5 zCNM&z1brE>NV2q?g@nvt1QKqdD2V|s&sl&nwk%8#$bN@inWaQwfZTWhlTr3yGRhS? zn6Wlrbw0K>-wx=eDJ%L8kK21c>=8uJL+m{LgaNZ3RcnReZDNDo`+nSGd>d5!_+abd zzOL5d6Qj!*CXUMrK1J3KH=-g!oVJYkF{l;p(&ZKQJIdHE;F_TP27@5Vq>Vw3B!70A zLT38A8vnJ3>d9Gj*sQMx9Y#z@|hsip2 zD5hQ}q_}P9gN?l%_QuJZ`ZrB!DA)%k?{M>e)xX^R;-NiUAnAB&aomSDmXm12~beaIJq-laFD z_~Mf_A?5AiaABKrhDZ{%*|3Ev4GMhpz3+!yoX*l5z;5rp;^RPbyx51+fo6-2bA{f& z7awYvf?9`GoDLGLD{b=jBOiWvWS{l72MMHxrvyoHqI@1%y*nhLoe~ek{9p%vYu!f< zUTIs|ike2{`c&+ySep$hzENxr9v$gUk*q6}ilH9Kctpwl1l5u0AEJ_q3lyaGElr?< zOcH~}?ORHt^dOSA6wjxDq14iSEVU1{X)Z=AG9p6k`$vV*iSHQ*_PqkX6xlGL%JzQp zrb%UiPwDii!92B z#X^zeXqY&@54+m2sdN&37DHd*kAT*r4+Sdlusy^XuYY9vTf&(E(dbQk_Z?U4zDoRx zgk}Q;19vWAG_Z{{vhx-n=0pYR3~$K+}5} z|Nr{>GvyyyUyKND$#`3i!eYX_(pfPrhu2Nz(x>v$^l6TtF8zNaKRnIx;bq47skm+g z7>mkhe;>%!^k1VZo_8$$uQ3jemHI!GQ6B4H?&sw77<6<%5#aLNf$<9DcYHHXQNO3Y z`hWkG{BL?`)-NNkzZQTD-#{Qb+}o%HL~Nt+?IXUd2J?TVcYojBcM5C5XdJ|8r5BP@ zdF4r}_sjH6kU*m(=D|t)AM2xM=ut!0Gf6KVu)Tvx(y!>0QqZ2BtYejuuFQQtfLtLD zgpkmY$nuzD+iNpM2Fka-5(w9fI46!In^P>%&wH`W8EtD9STd{d-A;M0*;e zifKh!OcLpbNe!m@bJC(09R&Sj*XHx@6e2VD90V60TPips-~);XUQS0NmH;0JW2;~^ z9F1c`W;7mgprg?ysQCJVh=WDiI-dmchjRZwLjL_E-26TLi9~;@$Lmd|Qc173Cx!Qk zFf<7S69b?pc~AorUi3dw!vw7t^bdGbUX3&9)S&GE==W-|BADjV~aZN6xnv}ZW(i~Eq6gz>hgM;SCRB$G!zOnAY7mri*TINstE6`d|8QmNF3M?fNx zOs2d;1H(8|G4n}|E_H<8qXG{?@DE4f01-bvnac6j!VGh2zU?-p*sd@IM#hGP2Lu^= z0nq<3!Z&e5xxNpV>saNIQ%c!V%CnSGB}SG^A#+VAr5k<$Y#d%Nh~(@U^uL%0lH$f; zjdmm#F0Td5SO?)&U9HZgldE((@D@tc>U8oBupb;4^YAf}B1h1Vl4XayLpSzeQZ6GZ z*MDZpMdf^3a-6!%SO?);{BY&I`_U7~O~G5JTw@)EGnBHDz5QUnTH-3**oSesW>8l% z5oYeN_8QI)A&zyBiJYm{!w!Eos;Kz+;QTQUQ%bpxp>l1_Z?6#?6XIA0QMpcA-7yZs zW20X#%7F_u#$h}bq5cK8lJ|&9r3EADmQhDia}Vn`^k-u?78&1A-+*(o_x#?S;B;@B z+;avnG7);Na?k(43k2t$?w#O!R-$`u&6V?eHa=Z>n&wpP(2Cqxt>C5Rqx2}Ye5)s` zk=M0?Xxg4n85#2U!4zHy z?N?x%`sqz(bHCXPC z_aNf{KQ}za}--K*7MVC)=<*B%t6N9($#_rVs$xPB$sFlj;+&^LXkdHKHO%l9!~s-|}Z z&}{F%rI__`>Aqj~O~)DK|5BuN#gLx92H$Y{bow9o(&g!Ul#@zGg1kk!G9$-k`z)1@ zbis{8B~g7F^E%@&{#szAF{FYDVv7C2+4AB3S2jz;E1}WxV%lWj4Q7*tWdp4%H{WvG zN=#ZSQxeu8(FYHIeRmY}|4{xj?{{e}R+Bcsb;Q^7Z=WA4HsF|Dk`4c06j%A&A7rs) zDe~RbP>b+PAOL?As3R*|A8y| ze63fwBj?<^;rhF8*th=P4H5ShptpNoN5{P3KNnr_fK9KrJ#fLIOQ%-~Lgn;Jf#!{i zW^8H>XgO(I>*@)+-u&#yoJHH#&YBnS&Y8J(+rruX!@nyBehccjhrgQd9DNnGB&3R` z6FKuUCXF3Mpfmu> zxte_XGQMnW?lx$+9`W6dT{k;{@l)*m*y93!F8_nNX`Hp=)ml{-xSSeXS2_Mat6QX? z+MKDD2Hgf#6>9&tb<-2y{c>#O&-fwYF82MalnlAjMBju-mmK<^)kHB0f+zk*g;(V~ zv{7c6_V2es!i@0mDlt<5e>lJ?5D>mvIw1-vQAi4+67i5p!h~8GbtAw1cIwdkhf;6L zZ-a`r>EzoWHR>9iTt}*-dUz3>@?;WJfCm6(F*jw`MetaR{iyL=IhR^NZJ>5gmy(s& zd#J~V6(7|J4F{+m@w{|6FOBk`_lDA_7Qxf!IpguurP=(nC7X`oeTlG>jkF1vd(7xx z(mY^B|I|H(G7lkvk?t|4v**bMjJ=!L%9OgF+oIcU!WVptrq$`uZwYoLM$iPCNRBV_ ze$!u$IwX&=qi%q*QUA&PB%c|_pAIGQAAS&xe-)8Bp{~{0sWNH-mew-9LA-_Vgb-{1 zFv4u8S_d=HaoEw6$)ZQZiQ8)?Vhj!L$p`n(XhCY(`;B|nQZ~V=P6v&sMSb8_;J8$D{l$4 z#-&XL)+}0a>`$idEb75!R4p}`+Je7Bj<>}m@{7{pC>koYs5xw;QVtuc7dnaRYP0|U zY8E>2#4E2o_R!n!(x3e8Mytfu8*8O1S4E)0?r=$KpV%N-%W5t-_Tc_X-wlHg{jb^z zI#cE~&-8#tUeKKX+(x1~w*oR%)+oV>*88HWBtV^qr>w?O{6C7S2Uz~}$FhQw=2 zNG>7k2PFy{=ZN(KyLDvzDeN3;K|#kl&d58OO<*DoWxy)ze z`3)+^=&IGc)4@sdm5jsCYBVxnyOMxck6D5JW3NOp zzLQ^}i!F@9$m*3ux_9i#<$U9xrEC~e2iP+3G`K<-w~_$XVIm5}Pg2D0dLuH~&=Zg- zOAu@nal2?-Sl%j0oY7w%E#x#-jxK=ZHzwY>Yj_@T+wlj%i<2?BiYj|!NAOAV790sM zqw%KQyXy@WpmBkN_f45)92}8PK3VwlV~VT_PaWg-umhBiDn)guL~T!794sBy0*T@4)%W=^;2Th|FW3vyNlPiKv%AwNdq5{zS;}a3izc4AXOId&HeiPdcSWfV zCV5F1m%-Y^vN=SfNj*XE*8-nn0nD2De5x;nqUh#GsN<;j;dMOX^im1urjzLJ7?aGH zDu()pSuW_g|3>{qtNof7c2L&ep}(Fy>jvGEXW{r-t3|p0J#A|1LRVSXLUx_x66R^LnM!_p>J}HsA6^_PFKwOVDp*{H6?b%quFIumldITL5G-q+ zr5;qU?vo^z(}=Y9Ad+;KQoYnRYOl%=tgbxTtq#Q}miV}Y^5jJ}8>0}$;96)0)6zg*EG!EZ2psuQ zo9zo=anEsIUsx!AE(UC%dtUmcFXS&&I2|COWAY;^Vh)&TgV*HUCjC$4*5IaL4+Pp% z6zK_oY$AE#xC11A{{0#OCrkw5>^hKjV{d~$*O z6We-)G>Xc*<$c2*hR1^*^pOmab||9W-f5Tsj=lv&2GD6 zUV)`JC{@nAKHzSwE=v>@oMqPR)_IIT*V=niM%RY;d-h-+t$gGQg{C(%k=gJ!OOKr0 zlFAxz$dyQBsIXBYsc_LKKxA3i3y@R|W9d|gSxXE{O5iJ`R-zwImUm>tLnKWb5Uz5o89GOdB; zwb1H3c|QmM^8+6-A+14cDEsIE`78Oi@c!4`g<_(wy{)R%7pe*C-AjW-6LzesU*6PM z-t6mE<{=jQkkNZl-8#Qt-PqIDjsE_1`+Hhu=;3wiKIgnECaqdMjX87G-h16$2}aj! z;`;W+j&L`r7eKn##jJuiM+LDDyB#mXkRA~t^B7(^O@i(;B|pM_WzrW6B}0vAD%561 zX&R+zlqNWPOw>QUaEPiH=SN!xZI$)D_sLk=t6*di^lXeLYxDD%6ebj{%f%jJVjneb zpc?qY{-_0GWMDxT2QX&>mI*Bqri!uQ=EqnY3IPyO5EjoG*IC&SJkJa4djG|}RW0)Z z;{xZ*o_D?{=&1^JuQ;p?YK;IwSRAAeujmd|q2uSz?>-0Rn%9!}Yc*h5;0#n$+8b)R z%jYZsPtL}tE(+fqW|7#Ti#7y1Dm%x`TD)XVd3Q~Ny|NqsL}HZIjRC-J|FYIZVdtj1Ra>x;1CUFy?oR0eeqb&+2=e% z$~&q)yU&x+xIagyW8NZLd1w0iEzZ_yoa4bRW|Nh>@_e#OrLeVvlUDzJp`GK)pdB;>@7<$p`HuiC$DPtZWNvO@KGlI(6RZ6DEme z6}VQuV!a4^0I$V$D>>!m6uV?)u5Q4JrB@oW@DT(bq-tbSxcu>02{u0U6G0U?Z+dk0 z7Aq9wB(F8-6GnEv{9p3lX-?24EQSG{8SLumJ`UyqRLh$cqmmiEds=*T<@xB* zVHJ?xp;f`(^Pdl2LyuE#hi(fZ@@u3Z^yHDx$ECtWQ;PW-%7?Ew)AK<*mWg&zAn>&# zp3hvJR~so;NiebjfYJgZ3kyaTV2pQ=X?|^{Ax6G~%2D-FUc$(w<p&={&Y211-(yzcTTRn`)<;I4W|;^f2$aBJ}s1dJd5rt`Qknxu^-C+ z9(q4Lc?uX;1bzrU?iiff$UGAooQj6GSLCmN9<09puDifoFz#n+TbX%j92DwK-1#wM8;kZc8hOXTWOdlrk!v(g2;SK#-^cux!keFA4IM5Sc;|DiJ&Mc}6jWbN6Y^+S9;oR__{BE9E~mL0O5f<*Tuox#%@ zr7@25ogU>&ovbe_mhk0T9_E1gk&^W^o|L?To0L7|qZK6_;V~BcuGxCxX>ty!CxO z5RFNr6Q(Vo7)uyI2+byk4`} zVj6{$eA*oOvW%srAmjK=LgF-BiGv^}^XxTk(ofBo)YkiHV_?8ZBLf=sjg zd>Uh|;;ZU#ZhTc8z8+pXv@M7(>feO&Z3xl_g6JZ&vpcw9Si2~?|HzQ#F??AShgo`* zUoG)oRhAfrd#mR7_wxGouoZ?g_;uk0$|17mLn}ybIft%fKJO_U$gbDRwS*Q`$w}|c zr$9yHBq|YolD(KJ#D3Q0AO}{Cy}<)H`d|8_Sen8?S2m5t(62RvM5Ckq~2E?EaN1Epf{! zbW=IyvY5gAqdUm}}cfVfXIXhj^SM|VEr3QlwhK4oQV<1asbP(k8~-7Cvm)go_7q?N7BqPS)$?!|4HXXLz(F@M zMSJsH3`aR2f>bgIW~Kjhib5Ls2gFHH$qiSGn38jNZW!^ZQpM{~J{r^vBS(snt;Ad? zI^>izQIb;*(NYSNr8ld7o<{8RIsDDh%L2u6!tDmB;y@tn9p)4|V*DCWCS|x#2Z=M6 z$x@n5mRdvynk6PmAmP}4`Z9rg0)ap=NV(l|qFDaj_b(IiQ&#N1F$XwfnG*Q^0p(f0 z&$oq+=-hYZHKhf&ZTjyt8Hvdi^y|ZUj$FCrjxFn{oZky-NFdo8;7(Dv8@Eg0 zEEz8q#6KSW!){H1?qWTFTDGucdDpw5aH&y}FMC1(H3n4ODT;mz=?^Ovp7pGViM<%x zFz}OOyaLgS*IVgul?EH?vTIG4rCY6rN+pS*h3L0_bwm^{H%b$Cb$1l77SlT3Y|_Hb zdxOE*yF9_}x>&e!X7$8zRRxyk?~sg_3u42D_GXc@7-nlsf{}K_TNjqCxWG~toL*HO zt?!9X3cA3GTRw0-j9cSjZAE3oiJo=24njR#<<&nx)lnU4ov=uKXM52*Yt6{u0^sc`Q*f9H zXPt-RSpg=Lk;5~g;N`&Xz}A|*qVRy@?H}C_N(7z8_Di!?ejQ_dY}$91U7k!b3mW>GYNjjw8r7aOGob3_51*en?@!+BA%Wv)m- z4UwpU%8R6RUqA)&S7A!B-AxfWYB9nxQeP#KM&oKE)6HzT4rk@yl7~>IATf%-t89NG z|4gINiNBC^?@B@4IR0lE+s`aItw#RUyQI(k0r-_IstTAU3hRv0d{O8%N^qjtY!>B( zp@q&x7I3d*7A)!KBxA22&Xnir!IAbamYEF;_}{$+Dd>_vvI)%BaRj zd;4%yS0C7zeo1}^d`lKAdC7Qx#zdX5TSNCt^tzWWk`v%AdCz~JKhlv69k>ydeY+s$ z@egSz1Cn+M&}e%e>KRf%vRfT>F)8kI_#)u|K7f=U<$$6i(xk`G0a{^_rn9BZjfZsR zz4)YITRTr@7aVwOtB13XOa}mL3&`(#!ChAdCW9k0@1Bj0Z1lf?;3+#Ur*XLp1HF$IGVpgX!?{~3hfpur|&OJ_kB{+8(>)LPD>DVP3ahB`+kD)PR zJ}5`(GlLnv9!e&YX{1Wa@1PxY=vXr8MZGkAv(pKC(XXI`y+qblR+hmclhNRmZw9?i z<=0>|$q%R*uzp*AiemnX+A%^+C745YOnf3Rye$y*hiw6iAALq~Bn4R_p@0QDC^~B6 z(TFXEflxg(U022U2?%LzD~ET`)PQzcIp$jN#_ijTd}QXfi|5?hU3RNDReGs-W39%_ z>5N?)-%j{$ol|=2tew3rCp;BXnitj1(r6k(9W@iGYCO`Ef|BOi&hiO7+vJ~E(G)5X z>Ex4Lg@>=4a?a#xJ9BCf3{j`RQxR|ofZ~pO0T}ukel^4wH=Uinqols1z`#NI$AD%H zW|zMTeB+Dw96AmF`86~>Xaq-bm4b^wuqD)ZNo?eIuu9Be-jvKxb^+Wh2gkVTOWmfREs<6p@(we=^m8 zsqmQempb|9I-@}^r|?Q#iukf%x0jCe(_phfi%HWA;$JU-ars)#q!+ZdZ{CszrdR)~ zdb<4K!>_Q8W5G+u?iE`;K9?lTOBOM{mv=0Zyt}^4zUs=Gaev)+L zB-xQk=L9LTbBZE6=(lIATIWH(|MLtNc5A@? z5p^Ec8o74zW~;Jgtfl~4&fEZ`&$F+qeZC!g1P6(cpIGis-{*r?4DB5bh2x4G8V_Jz zLN)3Me*hT30Lcj0?E>?WuoD+G)wOnZ)J{&{d74Up?yB$JKB=|JDTYnvU})YNGqlaF z==;IJb9deAk<0G~kk^Qx#q1$aOy!qYT=4JK+-Jc#O>q2yHJh8xu%E495x; zL|>Z~lY&7WFE3Fcmpd4AyF&dTmrQKD!0QSz{c#grWwDsT+Q!6XC0&+@w=bNrE8q&1 z6gYcpI((u_tL62DR>@V>S?x1vfh38vpkaV*<`!bLLHC62Yyb!PUC>tH?P{rS06jp$ zzi9|=n$!i0-L7%~f-ZPTK@h?%iG@C~Ian61XtqkW;@Z+?k2BO&;pd!IVT-!vkH-B3 zi7|7lIE>ksH&TNS+HFJ|h7RlmL*R@t`7cyxjMXN=?a@SI4mI+}TTj;z>*HYaO!;q& zMxaH}3bZC)b!U}JvKH!jt=1*_I%;~I1tlR@VAqU=w@GAhvNl(Q%Yx0KZ((8!guw!Mi7N;|xyxM)yC!W4 zHlT*<@?sSF%vy$)*pbSq7StN6sf($rs5_}gsb3IY6YLp}SIHt6S}lkKM)ZG_MSrRh zFQP8rTUgac2xYu`^LYt6sS1AS zCH)ME_k1`&z%XqQOms>-wvf1_EZkur4vSijfLe}G3wSpbSRy%0p4dVj7_I7W{I0HWjX@fgjS7fsmt##Wj^E){pUy?{bo1~jqeueyZ z`Lio3Cg`kI-GuV}FtooMrPIctuN`xPS5<`MT1|LQ4?%<$pS%sTepn9;&mIjVl44-Bns< zds15@*u~P2yXlf9cPLcU&^00A0tTC&uD?AJxxFq;|731O6KgWDO%)4|Ju1Vj_1;^;2^ebV9-R=m3 zIcJ?U)VM)@Y5i*8UA)-i7HP0pW2hP*1IM(MSZ(>@#g*e@7A=^w1PyCdkGaF`9pS>F z@T93oQGx0H1q?V!@$QB~D(c=_`5ufXT>56Wz`7n~zsSmO+~EPtWX zRUdmVy?%T=?w)Im=t?FnTsJEii3DdILz}4Et)+kQ)}%>qO-?WTbX!w5XR~qLO`AT) zY2Iq(QJN9t&GJ8hY1)Bx^W<+QKRg><9qN9#8{cG(Y>c-Coe^+AzRm~jY`uP>(gI? zZoN)t|Dwz(9}^)c2>-)QuMy>GResD{fL@`=R0&p_Z9`{)^etA4sS=*&rLU>XjM2*2 zBxU(U@OlrnAlPWmfxWQefE)pKK=xu`fW&aeDC5f>Tk+GPhS%(VUaQrZpDC8;IB$8@ zBgt!!x^4A7E%F+zJOpmh{C?OXH4Q%S>kXFQ0{Mr6U@W0$8v^MtlzjoDV1xGo{7>^0 zqcLkJ9Zxa;MyXD+hA-7J#Q=leD{S^f08?|CfPnM_U#O%SDl-Y{*)1SM_~u)=NDTf8 zd?Xh>^8je*>;zuH=k$66P70$^0wD1vf*^RjP9GW}2IVW>klz?zQ&JL~;2fPp@Pa{b z^T{+=r)3$M=5%I;Yn1#SF;BXjouuz!v7CAnHK>;x?@TDeRxiKa%Zig=|OqxZ`@T006KsJsT{LMft~U z6__JC>l7)U2!vf_^WZilWz^0DjSle^NVcG0`i z7x%zRPTqCo$QZsCv#51BFP97$Z3gGI#2-R(5tfcW$k&Y#4@G?$AJ8|d$_bN~Mm^>tw{GPWReo8)X^!-VC*mrFr zI3FYZWg^+g*G#kup*m8&G;r%hk6d)oBk&Qj$?zB{U*OOK_?Y@H|2YuNUYG}5^05&u zh{S!vT(ziQ%jdz^aycqTm-j*)7#xX|a7ccA06vzU(GP0IicjulFJbRN`UH-yY{z{8 z*tsx{Gm4>iSB1%P(Mv>cQ$p{#ghjmpJ5D2MQ6ljWNQR`*{M81KxZ?qw#1Y(uAUe$8 zGng|YUczGE54u{jJsK`543%`oHwrJVY@1Fq*DqbN^CRojiW>O?`Lpt>gy>lsZ~o~0 zw&>CY8k4c2WWgIRtgD(bCt)q{a^fFhe89$;pK#4*E6ROC@~z(-GTDqQ548cCOG_8| z>q|VlkAq!c+-=Qf0Pkz-@>=H1v51By%Z4o#g%?g*lGJE!hCAH>t){w$*ZEzA0WDut zsL=$5MAw@3PV4w;+M==gqk*31&DtAo;QaOU)A!3xPhFv9PsqK=P&Ce6r>%Wy*F#fX zl^%~tUnK??R&`lh2@b6Ct~6w{Z$vsdVYdzuD&kn2gtL=SeF?V@9y77>fksuSE*1)- zkH!QDhaqm*80J%8IbLaN4~>p9SXU8835MNsO3Fcbc-}P4qJ4cdj8{&+_DO4dxZ<`4 zD?;ryW0l|Y;#GoYqfHGfmL$yNU>n~ zf;7#C3z)t>&Twn}YAKo4q1 z%tL_cz%gK`S^d}^h=-Lb8cAYN)Sn2#pwH&BSUso(=|{R9k1XyzwrQsCfvHpy zGye@{$d4Mm?c-;@@mZi1!1|>ZT+j%;@46N)+qkfj<>f^~>64zis0YA&JHNsp8%9%G z6^vSZQS8ux20k7Mg!oylV3aL%Q)@+2NnL>sfK$|Q4PXnRYdZFpFT8Elq|3qG`RzCT zDLZhKj&p!(egP)yDi-uED7a5v-mtB20tDlk>fyFf`cwj@QQa|Wk9};F9)4vu%6IFG zf=<4}sL@(gyg;P1ndPKT2a;wvarc>G+beh~VgMy#Iz;`I%89aqcFrrX!VE8ju3Zw># zA2Oi1lzLCaEQPnau&^HR(=e(^ z+gN5N8lS=u3NqZP3elazYG*fx=UtMlS+Zb4%k0^an{T{+^X8*d*Z2A>SFWA1V|iWO ztiXf=@`pv9wpc9KPEViq2%ymnGhz4c=e=H^AMLRJ{OHg@kH_zyP?BhmEZ=<5i_FfJ z>C@X{qMp0)oDJh>GtC&X{`>@sT#*haUSPB0t zeJ+fqcMN^L8{SBtH}o;Q1G{xAxU=jYGT#>>NpuF%fhejrM&>6*-LlForgUxv%8~?B zwqSLaEG~qJjSvS~V()tF$y$uv7;vCCPreNG!>F}`54;YC*A9+*?RKwYXt1ogX+d){ zGb>R!y?H_Nf#&kEW-zTP0e`$9IkYNy&J^BYG?W zDsO5+^C*_Pz9pO+Cdv;qNEHZz2Z0f{=dcESr;P*gENxUn`)gEYzp&14Z zSmQcXDhvO#Dl7$d^9B)U z#}&}PU+6A^Kx^T39HZwg09c(CD*$$_CJco~5-0Yp1rtRS-kd zg1Ml~67u`pb|Zuwr{|4y;jEb5R%WMxr^qNeW@#YcG&U~-IfjL>q>3$NtPg0-bg@TM zCRBwPBL`@!uIhrzDja$PM9<`Gv;#s5w3|vm`^@xRw4T#KT1V4*8r%c57LL`j9HfOZ zQLBGkXP`NTp#??*W2})jX|*g3fetc^M$iDW0OM9WI$?pu?bLIcYHKTZ3smjs-vCpgN>Y0;{? zaC}Flo-2Zs>Jxcg!!kMXdnsA<=A= zboFPIHnns{$LqshpN|%RU~-w=%o-p8&VY7JwBE?cbAZOevKl>VUmdN%FC5CZicV93 z+gzmc^X2UL^Q_jkySJ4>rgCRhxVcy~fYv#l61#1JUqgEUsI3F^!~)60GYQsHYSYr1 zJtm|;@(mLKXec&S6hm6C1x1qG1IkJmlVETF!NqDECOv=_V9;8$0*6XMbH$9rAPJOV zOb!4HX33;ww2);Pj^=^T>@w(Ei?uXg&^ErKh-$YhZMu-{0x8vb51u#yJgky{SX6Xt@Fn=M`wKqHaRi z^3%F$ey!7NFT!-*YhxYOYwI?>c-F3R8z^#@9qCxHWApl^Hy74SDTUAwM?7x5NsW)kvY0@5ksMt`)l#k00_;^34AB8>^v4`y zbSTXD@GR|6=z!5!f(8mN8{+XG2mE}D#q&GbVWdzPUqwcfR#59<9I;^$1Z68BG{8MZf>nuNIEmc*D>?(4-D$J@ZZ1 ztV_2}+Bv1!^bvgsXszwjcTXz7s}LnKCU-PP%RRcCBlNHmd?ja_vGAH1`or-0n$~5! zaM6d07vHwLLofpNH}Bjx;h#5s(Omq+$J75pp9{cs_ewu{+chcHY?J+eeH0i95)GY& z(K6PFx)+VK0~WqC79OM8ey!AUtbbI|)c|uRM`}H^;(LXeh#`)LEe3>J9>>kn89PcV zREW1Y!ZfR(&ta)3h6x!(j6KKP7;aoNqo&tWSSFedmUonvRJf`eHa*nSk=)oGnzo?% z&{=kG_k_sonzGuW+Q@%D*!hEv6TyZLkL>N8(Rr;r_}oTwx4HvZyaV2=og1rg>YY4q zHoGh{oIbxZQ5j!cRou3*vt>zhP$;nr*3xjqTUqICu3UO)aPszpM?UN}Z+s50*LKe6 z-K*@#gLsGN=M_kIc!k8Wv{4--;wobgi4%PCT0&DC%CmCD;+zhK4gR?~c$EF#r49D5swLbYDMy*C(Ztpb2 zyXMdrtVr1JWLjr1Gk@Xm`>lhIp$GK1Ohu->EjDy*Sy9mad8fQv{*}dUtFT*jTG?H| zYwca^-uQ~XzM)SopaEP;jaYY3G?h`FnrFZ`#dc{TGlK!uVw>IT54lbflMIV~Qw*{9 z4pD@d91=?|vFFl4E>kEISBCws1_=M7VucFR0h?qeeoVv2S?c0aG(f9tZ6x*^$?}<) zAC{^wjTHU4@@s9#m6}-9Uo|o13TeNt{Bu#HwB8J;&UGNUt`ksZx#!aVxb)Kh00X7< z(mnWsOO>)RxU50qiK_~` zfzxc2Hp}9(QT5&RiHS=ml0TH*)D4r}o8$pf8ag2>Jb67sn@CCCl*i*OeNZMCf1tm6 z(2Ah)QMOA2w@u<5NcaN5DhCh z&Mh1yG1e?`3l4^`3n!K{<3Zvh%*F}XJi+i`i6gGV&Zd^!_Rgp8+_ps7fQ^hA2(a7=X5$VsO@1*7Q;8+7|rM`s8!Ay49Z#gb#&Hj{N@{js{8$vy_gbF52b>5 zT*Jc}M@GO%ZAp-0)S*s{l@Li8LwsPzVIqk$pU3K-lwW?l_t&S^9{p_ZK{Q{6mdlq7 z+>R+`x4r{|Ty1?8(%9&GL`m-TT?mwYz@#%D;BL4hnC- z1vp;a&B1Zwif6vD^@fv&B4V*ns$iRODb=Q3u6i&MbG~nsAOEP>mP8(!23(u}1*0=3 z$r%pwVEs^m|D%Qo(g(4^f*Ox0%oRI1yNqT`bkMp`PIGj5i zHVSXp%wp8~=PmuXVj<;1x~Aa&WZ&!P|f)F}$^yO}A}WyEI?uczUqORQNyr0TI; z2+fT&8ucAkLV?J(mJPP0zAWrfvr;xZ(ims z&;`!vy}FsB8B-Y$4R)3_Ypiu9b5X3kw9p7SQLAI2z;gx7M$v4K{>PlC)h+N43G|#r z(1`xB)?jlrgG6%3S#`i0uI1=&5+8e`k+KGN84_vXrDw6Gkf(rQtpS9(o9;I1~?Sx!Q-CPV9OwHpeHnitg+vOrVP*xOk;(P;2%p*dJXR7!dM_Fkacr%KcCk9>!A@(~D33l{qFO=^ zPys_@NV`;2${;yL4xtlRWydNyya$_pXWHyy$Lwtytx+iAEgr%1MCG40ZkSzNeWGvU z3Zx_U%cli>FPfWH`aZaaaDPs7^`V7@;|;}yyZ$-kpKKCb zKK~@I`!=JSW%b5lfz>Zx+f(9yX2r6l?xH7}dv2I4I6gb1Y_93J_R`+g_8m{1vlTGO z2Y)avah+g5y#O|~v~4vCdeosB*TWUdch#e(qcXJh7}3+6<5=UYp7d6?ORROzdAws% zROE{5t2x*7eA!|PrKKdy7f<+Yk*4jzYo3tDq|7D2%%g$QVrN9=+@mi%fAqjF{efS~ zx20cw;(k!VM4xyy{TL{@-@knM!fy^9{Dy6j-9z%(tKJ39XThZ3q|4;LzPkz>83KRt z{6>COS?fcx!%ifpZNO_UG!|7kiYF)^Xe<^WHXi`=am8?&#c8$}#G+L!()$?!X*g(j z!fPV}{*XDGWOsTOE$>~md{(pBvROXzrsQ%-$3XeolBvrVtz0nIx8RUA%ot z$BH=%5|!NKi&rjaiTLa+W6-##)Yl22NawlDB`jwZH9S&}gzDI$6_<3taLdg3^SYWW z7Dp}ToZh`-+cn@P-P>BcwBRYw={}Ob1+Gv5c;~nvYK#@r_ROue24;3uT-pz4NLz~P zr)`~FXpzP>wYAll%sV?d>!fL$HecOQ(Aj;~qPde}CKI#N#XH)fjm6M0^Wr%z9ua*$ z^z~Qpj;5**tU+Rn4aqKlV=3ZEZYA+mM8X1!&pxpEEch>I%P=xAf7?2{K^{tfF?%cX zo58Zo-`3gm%-LIkd*b{Z^1py_$NY(4@+s;Rn2LU`YHy#nV@IBxi4n?b)cBw=X-w^> z3GQN&Dv@c1WK$tBeek;iz2G%t@R=U{u7Iy$GO=3L;cTq=WUS(8%ZfQmaRGBwteDBP z|2qpipcWCdVP;f?kySqRouwTmzbk8|xnho#-$z*+sF2HQQNqqFRvbh79RX@7>|13} z!^RAup%=eLJQ$C@{o-64zIYnO0M(vb_FcRIYIHsDekXl^>f^o)$>cUFh9g0VIEJOM zxC76vR0Ip94l)|i3XoWwkc(nVgXFXMaI}|1pIX}}zxnL#^4GVW_>pDjA;3Sg=bi1) z-FS*JnoBKT$feF8-2*kkg4o36y&XYtzr5ZIepPDu2rPT`u|M1fw6{M2%33dt{qeGA zH|Cme$)G41-hGa{u1nugYic%i^xW~M_fHOcpL>7H zY2<%NJq_P+5Z|Rao!031B(oI-bP((?xg7Eib#ojr7YFw-a<9LP%<6pO8eTynea1~H! zjj@kC>McGZ!4Owez{k<#=D?A@K92Vz@e~N49MF+kIv`<)Uf^LOtS=N_hot2e47n?6B961WqG6M}P#$nCuIyP>bjKY< z%X+F7xqz1us%tw-z)M5gZJ3D#B4VQL{7}iJ63_S> z#>>A6m5p~gu~#T~6AXYiv4<#Q^cC2;6YBSYu|(z&|785JVhvHTA|a(Rm&_0}v;jJo z46AOeNW;t}Rd_qp5K=q_f;7v1(K>h8L-qW;rs^4{xcqWlGq1V2%M`z*$ksADUUB>S z+g$}(Kz=?aJ+U^!~?f*yHcfdzgW&gi>-+S|>w>Q0J`lKf_nVIxXfRKa`dT60{2_PL| zXkr5urKl)T5gT?aD7snuT2L3a;Ln1)xVyHs7a()_-}~N72+00)KmY$fFz?;^%6+$- zbI&>769Z*&=?HR_*glK7a&$buXKoKElE}L~AsJqgKU5P(FP2Kt>A9d{{)Kxr*@7n3 z1v(-?mv&@d2GXwVL+Kuy>A-2c3`wM#O$4gJKqV6TgxlkNDK@RXep=ykg~}XxX_&4J zmnO3Ndc&nvfx^c_v_tLSEk=XU!s8GP6uz4CbxqEk0Ec`A(>nj4L0PM^q(LcaA10Id1)q5Mpm{izktGVY2Q2Q*gQ*eJRBACr@puIbLIEL@7DPWm zjku>lcqhI;$s6>={lta0XyS>feU>+wg*6a=TgdV8SP7NI;H4T8kewi2ZsJsyKaS%; z;sXT7P3s%Lq8I`ZsuTP?D{`?0p>G*Nj%v{AB_o@h2R&;uI_84kDJ2!8iU{(6(UE2|vUSj0y=3{EPz<3MEAZkh4?@ z-}u~5geN5)?UET^(Mg$TyH4l@-XwIC1kaixiL}410I|9?8aO_!p4Hbli-VRA!v8_#;~WRI1yY20!=v6?X8MN?3Zmg^1^!cmM}mWf2H#pUM_M2ST>zjS z{Qe8iCfOTAofg0o0R{?YAoqc#xc_go)X4~&` z0@ru0ER4rW%N@18Hu(Ae>YSeNB8%V0-zi?j;{K{A69Jq2>txg#-bq;I|8C!nK(}n zyH_vOCP*VpL^&`hDAAMswTM3r*c@Tg6sIXcfNg>y-b_4v3)rTZo}wjO+R(#{4@@-T zkCk9<&_7_7z_Wvi8LZV-qkmUxwGzFgXw}MMi5?v*X^zF3!S7}-%aE$MaE}!Oy$jsTzR>bSvL0Td++;NVs(S)dH55%@kQ}9 zC6b&R$u4(6flxDj9-LF@ZezX+W#!?k=jO0_^u44tt1`zGQCZEaA9!H3)uJi}Coj&I zxbW;l5SbHc@Ueci6yXI$l@ljmV`)W|D!_$|qywF&CONJ1(w<8lLHq8d9V3?74ZIy( zxr>}SD=)ocDHw4f|8m$~J-mC-aP*16Za1u4-LYhGJHU&ngO7i-dY!@U;Mdq3YucAA z0S{cr)sQ*rPA~X_C50G888F~QV%`c z_X4;U3_0`YBYm4*z$tX;a-trS+WXMYXC4J|bUL@9A{Q>W|J&~mUQvEK`ti{-ryd5% zs&e#gPDMq|Kz@bbeNX}7W?XcSdJ+1V?M>C9tVx?-FE}x2Q|-X-+XGI(-c6HGR;qRr z<2+wsPl|swDaHH)_h=cuk4~_54+yw9WO?vdflmkUNCHFa?10A9=U@nWiX_|&4LD~oIt&J{VgAvV4G-hI#pqgGW-vSqTyMOA{?^xV zXUBdqu|GIqe8~iC)FR?rh!WUtV)HQ|q)h{PbGihv?SMkuCq{n3h?`nsxpqfR4E>M} zz;zE_X5h_o2?ek;|GJo<5eSx{NlTr$pJ9?9>3G4va`nAm>yuP(DYul~0kR zHfJB@;anW`_dSJ!;OFz(S59T0m2q$4`E(<7gnErSO1)40o%$#BDfK1w72!c$G*Qr3 zL#}}J5lvDT=LRMm4T=UNC5dW?rw78K3Ys^JNNkfO5zqSqM{Ukf*ie#2=^%oV5Sc&( z8#!}AO`8)1T&Mu%5Z5c1EOo&eU^HXmPFf@CED?oO%%#!fg7}F9$}VB%fCx+-s)kWK zG)X2O#i=o)2Gl_2&$M4#E4vOtwpB>|Bxz-yq#st5{-?!Q>L@(G*198G`hylksi z?Nj7RIhZ}X?~uAQPefLxcyR$w0~ljS=AUV)}eG5SO1d|eseqLIbM-1TxU zEtAXmIH%|vWy^KP3rg911?^WpQiR^t08XQjav&F~IC!Z+2b8I`BbAb30E8=xJgy#( zv42x$Op{HbHsNJ0nBEN``ms8qxjEnENpAGphYlatomjdb!WL&kQ`xTNtFvrvb%PDQ z!Yqd~w)SoGIeHuY<4?&@MaQs?LSEhMt8)4Cq#Mfe4(1yDqZ>vhLJ?kV@)lzb!ywOc z&@|(*bIQ$yYK>f(XE8`Q15`0`MnXf4TBDONN>FIZ&v%R*1;XX!VE}HK*mRAlM^*GZN`LxS7LC}Tp=s~i2@Nv2#zU{1ib`}XIQdz67W%>n10p53?ab~WbNn>tsHZds}vbw53O<>=-m>M_qWDs~HH zTzh)(KWA;Bv1KNl)nY4XP~wc{IYP$mdz=kVjZrLZ8@&>|)w9P{TVQPJTs3+~w|2~f zb;>=8z?@)!6oh(m$L6`@j`*Le;qX`uey~;3nhk|#c8*>(d9Wj|Q7AGeeM4961EUp7 z8FTBUiqTItq@OpP)sSx+HfxpWw?o9t7(|VuCQwtT+0;DhO6pFspA#$;T-Aj{WzJAq zLopE~)1ky5Dstj~g3&S2y~JaI$b|$QPf=x)78Epnq*OwXh9x4bIRpYa7MSS}o_5WE z)!|P_ZXqDTi2EW!U1GY82N%!@qU=yfNGE8wBy?;f4`&*6a62#?40*X+Bh%0@!os*| zNsDoVTGt4rv!o#xgn+e~EqXZvBmqTv;S4CRSIDdk18J*+wwBZ?FJl?iTQsK(x?DE1 zngO)OP~_)z@VT0+&-@IZNHsIZXFWdSue0)xp#oTiPTv*}Z`@Jt88!Ty8mU~$I6TbI z2L?~MZnVZ7kb|9lr`4$fPQ?<1Xbon63m|56D;NWKjpn2>gOiQH*=@$F~Vxs zSpv|}e>?!{|1Q6)CtR9JGRevH=e#T5>0Lf3Ma|naxn4qrOT+jvy259Y{ndc_VnKA# z)c>Xc*bb=Da1Wx0H*catFQL-1n;L33o&y$9>je*j4^h9P-l9Ijl-OCI0d7zTYA&+l z*Y6}zYof%~zv&oRLGG+Fo_tUy{=zWL7Ioxp)bf0vzI~=G-RIqy= zz2En$pjwwiNkO%)6!=L2$H|kV!Y86`9h>&OO!iZpg4AdPk$;JN52hUnUjjs5F(AE! zvJpm4EGqEq=kwwW;xr~Opfte-2?)MnL~;t#XUgEXs+P5t_}IFp65ThdwPjP2Z~#{= z2l}VHHTAiTU)9v7nxE{x`)x3!YFw~#O)ELB1v6SlHEn7k2PRxOzisK>q2zc=>R9{o zMSGjuS1h`<@CEeg(t;|dqI3L?F~=TUeynYNW%Dgd@p0(hrE^xaH}74vyuJC>Ma2H< zECq=#aHEL1$eYr}?&8DaXNSE@rsPAvt=Hy<`BRpR-gV!u(e&5XzZB?uUC;!J1zx&7 z`Q5Fzes>O2Bx85v##B7ev7vmRA|FviQcYup2%D&wYDvOmDp?DkPBo>P*wcP@s@75O zNY%Ri1wq(r$}_>glfT!XaQQlzB?e2 zCx#EB!DujhD(FGA)>+X^!jqaqyC((UQoWj`+)}@NNvl6 zR^A2V`@5fg_SsYw>hf1>PpH)=ApRp~ZM7ft1Z%ZVgX{3IS1#|>)&^1c)7n~5rh=pt z3-No)aJvVo0;-Pe)*3xDK{gH2n8J%fj~6pPl-MIVkHHl1L}DdAPs~Gjb)P3dJdfcV zp~KQX4_Ar+INR6REdhJ<2WpniW!WVH;E z8#X_3aO2kfzw?H{C96y8fxI=tYjGKz`w&5A?e|(B?7^Bd`ez|RnS%icMF|7t1Hv3q zh{u(nK0|HEVc<@4&PhSvv_e2(q7t8I@wxMP`T1-iB@%(3>|cz_$3Y+ zZkRIXW;qzY>)5efH~tZREaQh&qrZqB=%?+kZre6v<~BOJXYrEZ?TgW?2bPu>84UOu zl`AbC7A_P&=1qepuDoV;-?5#$j=ggudJY6ufOl~^>Y1@^+pF8R5w!8MV> zh*J`DAVCz@*f^%@O?0CMqKSCyD>#kJ3)}Jz-B2^N$W1fP=^!Wd4ZlW`JfbY-^@DGe z{^J;T-`~nop~Cmj3;f51_OPYcS7a%IyWiC-OscTI%G0Fq{u7j~-TpqBwAr76%EMPBf_D|%LupDifIOO`dql`u{(^jd|*IYIx^%=U!>7yBr-47Ol zc@Jn!Ci>ADbj>qLFvIO&puv=9jiZ;)&On>b;5C`#dU^<0@WPiP(ba}A<8PkSpi%+a zuF+J9eWX?@_Ia|e+i(sog7@IoB19zDpEA&J)RQqF%{UUl?MJ$YnW!*;6O%Vjp1gS@ z{quNek)I`m?`CX zY04@_DTGP(Byqi&6pxsmOXAXZPF}x$GMcnWw5yep={8DLU_QQe0I&AHJg|tf>`8mX zGV>X`S#a*%(a_T{GX}gj;}Ozea?>R861C*4G@- zhW-T8O%{g`xo3(k--|pwtyrawaCHlinyNY~P&b4|2Fu!9_TYU?{>(HYQztLlM zXS)^7Ef4Mk`Lm6@GxyC4;pdyO_@!Q1uE8m_&sNyK2phNMsG?S%)U#IQ1G+-<&|!sK zz~#=71{$lB*%K}h1_9BRE&e7vp@xZHHjd^nj~&9H1fTFQ6ne)3%!tj~?n1{vp#^;k z&fqY}XWmIY?M72w=qnc}go9mRp9|<*cJsh1dyk{KIEaWj&(GgPXKMwPM)$JG*_y&p8DY%xvJzCY}QIyR;rbx zo&}!+Ij4|uDzG5AP9|HIlr_Eex=jAsTQWQ{KmXxNh2qN}lx*MkD%JOWD)(nUYGvGy zpGjoM1Q(*sKXMBFk6^7{F&yQ6FIDj0gLipF7Lt5xG=2+C%T%hA4t|Eu zAI5e8fs~@M{0ThOkRAFeVEW%SNqDs_(u55s)(=!sOsnQjFo#fc;#avQa*2G9EjZ;<2+8&q=@BuQPKx z5AmlgC|eT|E)b+;WD{4y8O1$w4hnwzh&?+X)*(i+2TN=YDquvgzsIkQ516u010XTu zNsgGj$MC<9ful*$5V?wk4f@EKEMbp0!ubw!ugd~p9w<25P^VC9T#@@TaTmLwYe7L`ijHUhI!FC)hA$^^2PjE)Wk8#F5X zI08b260F_26PnnTsJ+w$S6D7>DN-}cW?_ph1H&A4G@>hHXet!F4=&~}=FBWy0N z*o2uY0D@tUr2?Jilz@@j!n5;b8VE;sU$L&^mPlA*ER;Z+b*&k+AK5LJhsV*Yb2_;I z9cCDS>zZ(Tq~^x$m?&;oIA&3)!r}mcI9h02<@gk44GmIt~kvezZgb zd?f|MH5&m|C$yapw>TY*{c20kZQ8#t$bU5|I2n5 z`P}r}VY68|i(i_7EJx380lvoG z7aGu~&9fOLje8d(QOs*WA2vSw{BLN6&*sg$o#Um9gyCe&?epdV9k9)xzmMY?8ed1b z54XwJ=#z|&%)s|A6?B1rYYSkGQuNb}DGh?`2z)v+atYYtufKB^7(D69mYjy+%{4_G z=(>r3U9qynU0Ut_Z7+DY#+>XJvC_`ZPyGp4fKu=281L3x?45F`$Zwo^be>qk3>Z;e z%J8eNz$E*qUb6Yo-qVd~(%(FGHR;K{X2~>oK2^jrpAE zv+>v8!AHQwbwIEX7PO$_d@M?wB*HWq4U&S%*M_TPQpf#DaA)DZzv0vwPz_%)+S_Eyj-?UB` zGhQS69XBN61n5y45|PzRS^;$>6d_(g3jj$m2r0kbIWdt#d`BMGL>Plj2ejajo8PcO z8#fqP-HaJJ)~J8hZWudO9}hylq=bjO;kV3A1yWP$1aT#Kx3F(~wr0{Fg%}A( zdI4z`wG90PWU}A1j?u|XU4V}ezke@ze<1G!a@j?`e}WoD@RNSin^hCrQ9!iciG`_P zzTz=)wBWZ05LI_#zKE$@OepYTS&|w0^^e~rwJD+sTKdEjQW^(r(!Z(k%c|9XyD%Ls zS83o?(4?wKpMO(};41|2mA?B9Um=LE1oCqyrUYv^s@O1^zH4o{32a!$+aH?4qWoq zduTWM>gBF`zZ?R>hkJiG*1K;#V3eV(*(1hwPM`4fU(zytPMp^ylpJ$Ydd!(x2{r%^ zbOAOIl7T>G!x{5#IyQi56rCaMRE)4BA`AUjH~~G19{>IC=_n3;haPPOTD*9DeKlxH z-Nn55d-OO^rS77m-o7`DdB(msysRC zbP4)u1AzWRUH}zq*IrX7R1-<5M=*>1mFQ()_G-vQy@r$r4alafZ_DNya&gaR6 zf`p?Vz=P=B>v1L!m}jD`kiiRgvC;G{9+%Mp^La(DTGB;VesMRWq0bBkkiGAVOC~D! zFPqXj41^v#04#Tc({J3f_R87X8f8OkqO~=aH=?d?=!nI2tM0yM&9&1e)wh(iH<#rO zud5&0v8ZPCeXy_KmDT${1@eF1b;;B5Q0~$@%5Oe$JNn{Ii3NSVdi!+4P<35HJl2@g z*wN9LbM1;%+ovw5t&f%s5)-zaZ+{?SZxXAT1mQo66Ce>RNrWU?DhnUI zAx@ta7ktaIW;_9NCIfu!m#Y7;7j3@(`HuTKoFgOy@x^>#j@0j>6WU8IGv@p9InlG8$3E~Z0(A*-Lpql>2xaE>8+2n zH_w{0aWG1u8UMKPXV4+iJwjhoVm>!awNsO*1=K3)O6n%!ZzJd@o)hqY%+zuC7}O@r z5{{@{6Dvk87EgrY33Ht0h#{ARsP33?7fb|0L~EOLOOlI^5qtrB89Y&@i-qETN{f%8 z?j^2}AXS7~q$^MZjA0njIOaSxczWL3=(c&~&b+!C-`CZp{x;HNFPk>4%*A*3SZVn@ zblcmdb-MR&tjk;dsapLncf;Yb&Z3fuB}JWOha24gQma4p)E}-GSCqFPuV`Gw;d+!) zS4xTpeP#1N7o(k4W;c!W`#N}6nW@YdBsVFodk1s@)z*{fMRWkYcyjC3lb{lGg36PR zU1WgFs+YWV&|4fSyC-jq66ze4C7wgz=0l#+Qpb$$h3H@2gKtUdfpSdVJ!KI%p*?3z zPW!~xI~w%g$mQSY8}0x{K)AnXohT$tYPq9P|FvBHwZ8F=78tCDiZMC&mgbat4!)JT zAI&=CDXDbKUf4auQCjK=dT_?QIb#$M-x{x-1&uuKcKakd(*p1gSF_@q9MhRreZi_ph)aweN8Rc zIeJuQG;o>IxnxXaj)vAX#w>JTR(^v|d!(UO&AKglQq3j9Ee;u)YEOVo1!i**S{ae8 zGIo3nmvtB{?!sj>fX4&zil7C)=TF1~{#bnE1sJaqsu9maM+6LPt+0o=fLcMkdicD= zzXDBGBoZJaL-3?7AhWPWt;Z{)A6bUpwwBFrzN?bS9=*`PSneHh_2I(4=kmwH zsgu2)38`DgKk{NIT-i0Q0!(3`IC2e22S2-b7G}cyxrm>U`g`WoIeo75t5y0#=X+ z4#q(u0VCU9K@qu;n4}O3aRD1ffSn}TyCSd<*<=>LkBMRhCPL`uCBrMD)v=%Qf!)aB zVWKt$n;OGagSCr$z`ysR?{2GYFq&D`Z;X~reKgt9l6>@ed@7Nvg4y!gNqhgg{5GIs z3_Xi|4a3nkWHEW5-LUSv-#xyuvU8X(r+sk&9@yXSRkHznXGWE-j!#pU%rS%wYJSc3 z6@T43aW7s6_33qxAT_5IWfKHigjjA%+(c`gjALL-Q&j|o(#H{aO|yvBly)g2DB9xQ zCOVcO`{@Eu3=vg`jTF-YwbY~nI`!epu0FhFOL0eK#OpRFK|)V6tz$!enNep{XaOd& zDuxW5|nhM~>yJ>Fv| z*P5!8SA*Qj`h+oF-qtj|y__A{pe|7YmIX`xupoDd#*k%nL%`fT$Pg&VVJwoVdK1q= z27vr9t+B-e;gA!W0ECcMJX=j0vKtr~h!+4pLw8kUI`eq}C)|T+tF>^Y)+pr{*O zJQ?61L;8a-I73{*Pf$e&vK-M~F^iycT7gnE!Ny2-Zhd`jHf@cD?fLokaP*5}F$Eqh z36Ydg3Hs3;x)+_i)9mxuimL4$veXdt;R~SkrH4V;F}Uc;Wr{0#1IPW0 zydx3~hoWeTBQM|X$j<{`U6^nmb2B=%x2>6`<%|xlfA4kRz85&|-27>(X4#*{KE5!p z?OWjbcH6e^MEnxTS==4ZV`22CoP|Si+|%r&h`yM#s$z=P`gujIVF{9qQ~bPxs2s;U%19f5Mz- z)_HdYnY*U%33$NDz`*;azCnN1JJmAYgu(%u_DPaH^!f*Y9-<#O}NGCH3wut&Th zi$u;iguFbP%MK-S0l&aUkUm8X@H;{@h#RQE znA$OVVu4?13VUL_(HA3U`og>m_sVcN;-(UGp&lr>*Gl8M_4M_eI3b}@StrgV(#dmS zSbO3`Uk}+K9RMO11UL?$cnDcTFH87SgCd#+dzUhfJ1@Rt&+mPVw;h7w-qXE)6 zvv4||omk8Xv2mt%%QMfQAD@9}&%|{&xMkf$Fb5L2Hxfj9AOv$JLW&f5W{c8vXbj03 zbI7C=tKpCZC!RM}15}Kn{GttP9J5TOsJNAkml`hP94{dl#QwsRkEJdfH>&Cz2*0Ts zHSV&@9$p8(sUC>~<3?701J^waE*nTHr5;{azEZ2!t}I{oFfPJrSC(D&@MUEywcNPN z=o16!Ca#}%)ZuSkO|?+ts2P}hpeSM6SJ>ed1QUrkFcX|Tjevk~j**KJT=j?>@WSSC zT5HyXm(GE)xY&1v`7@MOT@j?}BDPD32#scdgA7I11qbrv2CGVuqxWtYWu>1g_`Z?n zYsVAZRP;9j%PPRBK5=_3ALAR($dxMj1er{3lXuGBS6CFCa=FYdn;^^5s|DbbF7<K-!j}4CKp$084w|1zSKMPRxLLb1-CP z0|^P2;E7SNIl=OrDUt~B0XP-7fqNmkmHp)&5VLUStgmY>-}O}teT+VieYI-nBo3Cjq;4%G}^0bPvlf+D(p$Du&<5-GZhJQswu7fnt*?+8K|w8OLiO)Zd2A+!-~ zOd(ygecNL|1*(Da(6;ud?p&Fm9VP9-6a6~y1H6l(B^OKG5wvgEU=ODLiz?tMm3$5a zGvz8>Nz1U-@<5=xby!OY8hft9D11qL;eNSa8W+JJXz!GzalrcLC7vJ}5kX%jK@cTG z%%C6IjqMM?-k>dLLwG_y#aZCL2)wNr#WVRm7Ow9&fjRbVnD97eky2lLhz-r2JYTo;_z96;Tlf$M|wn2O-sAnL|t3fBrn4uh9Snd<}1^KsqJ zz;yvZ_HR9_l>Afh+h?T81+PQ{Q4lWT>(a$y>LxD0d&bQX7p!LSsMm|ucL`b$`=|XS z@PhLN7ci&S0HZDuH_>y~Ke`_O2S2Xs9KU}3_|A17*A72(&&Z1034tw~QUyI59QF>@{g{P2iBwR@(%Enomm}-b2j?>p~b$e z!sueq1fUe42bV+&v;0dA0sHKoff75E)9{HQvt|uRHEZl8q|IjF^>A-mPD}74aL*Fl ziRt(RvB5VcfDU*#B7WuRf{q?CcV?fh!Of(|#TZ=7r$o#!tSWp2blXPuda@ZB^YKbns?YJMo*kSw%50^}xO<}koBF;&HLLR#f#t8aNgb(9wxYZg zT`sj}gVyq}j1IzEXr~6f++YFb0=3HpnlFpU9D$-;lH=>q`>HIdY;umqs8q|FA8Xg}8fj+kZ8je}!+_S{Jt zxlf<^{i`8^yhS60m>?+(gPHf&OL(36gEGOsUzFn{&$E57Q$9?$5}!5r>j_kzPJnrg zo%bU&tguPw(HXe&ARRn0hC)P=pAsxJSPEgH>D&(!dBKvPBzc-ru&-m9uDktIvb`Hn zq|#YT-O-d#kLs7l3%|Zvx>p1eW@^v$dfY+gy)%NYDpQ-pRdXm6_h$ib!Hws(5tuGZ zk6NQ4;l<2K+KMJY^!)@NFaiI{=OxaF1@arOEkZhvDHt41t~ch-7fiNuo5J}%FXg!NTGNPtw*J3{bLG+ zZnyjy$Uqxpo{{fX-C)Sd%gZvXjo`msdX>C&+_+Y`O1}$erE{m}RafWj(ktbgckI|K zSK>sC?ACqzZk3UOPrvcT)1)BLf)ng!gni6`QmGnh7&VfbPR*y*;K6x;PdMtoJQHk4 z5!EgdADA`}>rOjB2YVom3zEZ#UIchuI3e*w4;vV}Xd*qVWljtJk23W$=6EbV3Q4cG zl$;hM=PW+P=83h*fAG3+Laz^uT{JP31m~pp@T{2CE5K5V{06#9NTaFK6e%YmN8%Ch zEX95$A-H;jgnba`@e!Cj0v{k4L6MEg3Lv<@5hf6#WFfkAGWbH638aN4N@O(BF;V)J z-ZU0@^Q=LZNkBGaJ!7=cGN0ZrV}qNv%zmhQR?MORG{X$Psi6JC#aDNB&d|e=K!J{% zob6FYLwKlUJ!rXhumZPj4(&)S~YpNC3?pI@|IgTOR^!;J};%aL=Ij zHG2WrQ538UjcGEOn-^`o6<$-ES6t8(*MQz+o$1F1eebfGo0BaiKMUPSijUA6*e;W2 z$rCFJ{n}>J(4_D{j+D&$fSpyu%{jq_SHZ%<}*f(6);A8OBE z7^9&`G!ZW;1m0X6iADV-{X%_z#O!0lxfsXd>5$j#4S9otGzCwy#gUkx+FEQjnv9%- z_>1>R0#PE#@^Yg0V|>+;Xv7JGlhGU{P)r#%y9VGp2T6uGA@2MN`{rI4lxD2nh00UqpUOeS7$GU<76S0&p7wwf?~!|P9*{bsX& zE76%G<;b2pV4zS5g40J_PHUD%?Y3xKE|1IUaUF0vbvEK?#G!e#P;IuF4N8;8<|T!BDN>wVpsL17T6dGqbgCUp4q}Cg~+)V!_v(n{q%B3=yKIC!oYQ0WxHtTt< z+TidUb-6TlXDH-!sJEDvPA4fQUGH>iN<$%sQ{6^1h9RLyAwx5e#Dpg#Pd$6!0AlVR zjhkvVX_nFRK^3SRIUOBC?@pf%@<9HY`RE1o!aP!9&TL$w?>J5C3@VjDqf((VNXuD3 zT0zC;1ua%RZyB5A76Vqlm7JV_5uO5y?L(Aq$ur=G7>)BR7K3){Fu#8o`876Z4dLpr z!Qz!bMy^p<)E0w>1a)e&&Z4$*rYd`Ow!JE{J?zd3@g|K&nH9qITYQXz!4IfwbF zZXbFP-HQweNj$b--vje@&6~Fi!0QHgjvu`J?Wa~OUAp2au(f?|OLghgIvMb^CVrMC zT3Zv`&xuy}Q`BR7-|kkG%v{nu2|X5!jt8y(3g;Q*dbQSQ&kH2NzHF^ZqBI%odEwfs z?AAbCq^Kd-YM8lWX6i|(36I;c;hLf#e39IAo)nBZaRS{ZEA1?8E<=x9qiriJL62>L z{xizbwzg8{dweA1xW50}K}?aWF(2x{^mq_+qr<5Q)KThhcm`*I4ER9}m_|{2Gz1c4 zGRE^-z#KD|km)xP5KllnvC$B5>dyH>MqkLs`FOm_Ma>CdP&3{jo)AMECiKk-T+Qgy zMUCRc`i;1BcwsaPb3G>e6A`i(m^ea$q*sW{;LxORazRK5@u;*nDbG_@JdYbxm&W z%cgtV#BR7U>Utz$MlZTc-!V6S7LTAi!PrE}F=K`ML8+91x-$1Ym8pD-$*Qljcn8(p zTvU!ew;FA_I)Is0v%abJree&O{PnN9Z@dwGSr31jwQil)TO9G0gg376`-+QwUs-A| zyUb$^)TD}e@`1>mWtQtujE1{DXvgw9T&89%NKVQ%FEH^6&2%E zv!*lBu@=i2b66(xI^+2s<8+{LfqN`C?s3IrK8;DvO#>R>OkIlaT8i%q??vALP3qDy zKe1?IYZcwCO8E}^zi`=|%0!_*(r-l)?1M7T@)IKmMS#D{_D0_X@wO9!65uyq$spF?VB+!0C$w906K~nN=NB=uI{Ym=g6n{Ur7DJ+0L}Jgfs!Ns9sMfl{wE(PO58ST;#f z)Aq(8GY6GBD)o$N5D%W0vaJekULLC(#!5r^phJbD)LF2uwR)dHxJZYR`Q=4ygUChj zdO$AnfvQ;{6s_mssiABRo=KpB5Bs?#=h4;61I1a6K-9A`#|7pq7~{SEh!Edi5#!Mu ziJZSgDyQMpzX4Vv_kBx0{I&ZMSp?GDXB8@9<$!*C<9MiB8fy#eNo@&&kB~;>l->+3ySI*Lhd4Ghg(0S zYeZ2LGh1C7^aZ-=yx`ER!YpMDxKg9aDwNAN?Xs0>3wP~;m*j^B*T$rqclonMMypU> zL483%J^gS|WOCP{n#8=B722}Fxdt=)Gd!P5S~V!(lbvvlnf7T#omFL0+dSP_!BA6q zokeZdx~=-f*@0}}TeQ`(z9Ys}yB}h#Nfw{_^4KvXaum)Eet< zMQI&)k=(fueZIJ+cJq>CWges8 zW0|Znz(in52pU_Q_@}C7h#QH_<`Z7L%tX~*VygPGr3BUPdUq!PlvZ0YI%_r)l>+(C z56kV+Q8@54AL$rZ75eNsX=!_@bnSC7a0kwT2hrYFOIqgb+Bxr`tkD%(?aOLuyci{rJXL)lb-f-WySMLF=gEtWUdIPWDFbT}Z1w?zcbMIlobVM8373zQZs0^fC zGipKq+a)|fI-w`l1HbxWjQA=;Q$NuQa~|I^>88#irZ@AVJK+xpsuop&hEc!zq7SEE z4tx%O9=EJ!+JY!bqFV9AH#`HhQ_)`Lp03~e;{6!MY_ea@l^~i!#CM@Eh3Z7Kr(cT$ z4;~sG3CCvq3W@{7m+=9S5chH1#M29;E)LT)Fq}F8dW$$YdO^<7i}dO)(Sd^?a0Ia? zO&O>8FI-+#M(>3EZt8fMuK~ zXgU&I1OhokiI6U|lTc3Hs)5>48L=AtPdX^fx}i%~mA#3+1lrfVBWHJ%YL{y_4Y}r# zC$~3VBa^I<$oqaxM+F>R7-`GJKP47n%7)2Ou}&zCxkDuV54~zr%z*7rWS1mX&wR`oJS9FUG zPK!bi^F->${qDhAf&7-iwS1{WsbCeUn=O`*4ah=O%iA#ZKQYrp*U6xwSgBOWMs|`* zf>Pi(x*Cn^*V_{I^?YPck1}bAO^`tYh&-Qo1Ytuw@rs!i+7o{lG7thrN#l{pAJ37? z|0uV~=ceuo#9lv3)g}XQ!dx+J&PS8_UV^o~sa^?n1pPGWqd7S7k8+`GvKCOU$Aq#% z+MJIkpRN_k_NMj7kRXT5PW$NKsLWnFhzpJzOq7pk+7eylL^UHB-ZVEK9ojN=)w;(g z!gUpWPlvXS1PuD&FKeD#TFy0=R%^1=*1G0db0pNHrkZi7tJh38ygoS!HpI{T*s{Ph z_)qBjNq4-loQ;IMf%-`me$9FE(ENThJprLQB4B8W5SK72#31Q5f|trPV6hAGMxui$ zV#jgj967v#75T}E@r z;>&e8g6*ARrdNpMr_1CQwELYVQ<#+bWfdV8*XeGrC4Ldaf3@x1XQ&~iv0=Q!>)?Z( z@IOY9M5yDiTkIyambcm*POFvIs!ce-A*2c+P}?i!I&5O@1qE$ZyQ#Om8}y>u%&(i) zwvHSYbLLsH+~vU=TmEB29P@&_iY0Wo$4I{Wi|=p(wHkFosZ1fUOh}*hx5QD*SgMOqk_5My5p{+o zA>v)RAGAcY5y5L06xE@L6BH3`TOxqE5-F$817<>IIbH`pcdu(|{PPwh?$`MP0H63He zHJ2*rhZePsE&@uEi`igvn4626=vs--nQd3eCw#Nx_ksA7_VvRrcZ`@jF1+Z`uAZ-^ z)Wr69{b0{+0PL9i+U|+L>S;4BU%Dgy>eTj}$}G1zzhZ8aR(HvMhBoIY?D_2UVk0ot zpSKo_6=e2A_b^nF*}n3bFex1p@kk5;@-1HYOoHMnOWMe66zBd#KXkD$%(>`AaO(Gb z=JSVT3@rA?b-=(+3duc#qU~#;cIpggIARAQE2cJ?%R+;OCr8eFVjj&*dT`;>lMIT= zoF(Iz?%6-5`_clb&y?*?l(yu|-!tbtKL#fssF$k(4yaN9~_rE4NKcOZPz%b zRO86DvE@zI74Dq1Vn}iKQ!~JVCl+5~w=8TQ^5C+$_sm~moKilatTAN28h&!V!2_L^ z@roFtQR;lpyMD5rz+^wR*QU#%ar zzWw)^)qij1(ev&IQ2Npt8shr%9!8k|iHZk45$j6}rj7_I7yiyQL=+;?lCcqrVlp3i zIFp$XK>3O7f#460&<$C53dtfq$`T>6jFNtXQwYx{xTlTc(H}~O2;f>Y0#Bot!#>NA zx*?m79NE0|;X9w!mx09~3uR58Yh>9Yn=7jx)W}U5qfh_fq$5BID$yyl9i1B9REPHI zJujL2?m3K30q*dUnO6#`l^_Wo8~vfE80j$p#e|uML9!|9jQa@s`N;KOjjp*7Bsb6A z`67@Wv7kP4iCWUL?x6+jm$tN)vGxHhwFeA!tokLikxo@7?#|~kG zE+*&-{?lPdB@GUT0VWOLASs-p@F8iPEqesm!5CnFL^jt96a(bHPzjP|r_+p*u7U!1 zN!Z~CJ5m!;cO_%PhQ*TN5l-k{1YT}iURk-k4VBLl)`cr@-}@P_3k3vQfD(ti@a-@U zE#g>3Jp=_xFeC7Yf-H}TA(Amb7z0s>68C|SIDb?Cf#CEL=pa0ouun$(sd|4T;)l=q zfz;fWL&Eem!nWF`=M5?XLhO@vou zU6Igfkycz+Lab5z;zoswNkjzrBoUGvj}s$K4u&MYwCgoY%(nLudifI0jKD=bvUBNPRjf)O=l{r52=007PrgGJ=BHl23_GYizoTUnu)jJK* z+pHC*ZvFc$d+>KEMSoZtP%3j9$Byf8YB`Hm!#EnNvTDZ%Xy!_p)B{JvJMQ(ANLx#l z&WD`2@g<`tJ62aYv+wL^+w{ByN(!z|E^3pnu%_kTNda?+Jyzm8ye-9Jm$s%Cy)quw|EUkM>eecFQ4nKX(jrXWtXRD%RHF8@# zGzI?osQR8v`WsAjgrvtp#R;&`oiEWi;F#2{scT2GR-Gi@<;s`n&5}H@74UG{Sk|Ir z3tYWFQ&4-`XdWMB+FRXuEra0DT?O3T3|T?m3erAr`acTTcET=Ds_y zi6i@eXNy+77h9HP$+9F@xyX`igJs#6Vr;;eX1eL7n@)g$=p;ZwPk=zU5K;&!dY-#w-%u2RwxZHj3`~Bkw*6!@=?Ci|!%$qlF-upaI z6WM{D(kdBY5lRFpuAIJ3MICZ4hPU2> zqe)9idMC+ZL5CD*tn_WHwpgmy`6>+o#JW#NvKahEOVT97-3JWxpei4{=Bq-%w2D){ zs?}SXI?gw3+0w)oG;N`uTZnVP2iWebEH19}wHu9JFb|rnN z>*+0tz6)tIHDfJ8dkV1Q|B{>R3U|Ygc3%Yn_zD~VUjYHIhMskNX(Y7t`0=Go>(b-k zb=n=d2XX%tD5D?hia(CKgQ*jbaS%0vnnX2IbE$>Ya#Nd_@&<}LQI7%0zZFWEY39u77f}@L$ zsA3L)?f?>N3TWIS9@tGzlqZG()`D$nzZ%@7#dm*ivhgqLk|S=g5gxxA z9tX|Z?8sO^pI5!|vO-Ni0$068XTxvRx%88O4QZ^#2)tAQmZ>Y@2rx(-Y2m;~xRpht zWLF5jd+7AhM_3?!%(@?BefAl9_LPWOrjG8u2>*z_XJ&Ne7VvfU2;lr-0|SiWOPmPGhk8#Rf!?e~VsM;Fl=FeOt7ufWi<8O-lb zKe74XTrluGLwzMT>o%AQPmdmT9!xrWXXTg$(bI6{fH7blUDnYXOr`Zp$IVy{gYaXe zzNm7z=`5(7ckhNLW3)j`vHu{tznGHi1TQ~iha?B+{D{r=du>>`lZnSOc%h3J8NoRn zPrO5!{3d?d!S$=poc?0Zo-a1sZKkT{p)2EIsT=o8v_m7=;hh5$wE*-mP&)8D-+L~FjIvy&mWTJz&Zyy|C za&jGW=A<)Q*?SIFMTU8crqAXCKKdA%o5yzATa5dk%b{<&?gCg%Kw2TR#R|A9R{eOr zl^o!gR{b;_MhAH1)?seTcMo-BJoMe_nbO}Zm_9fUWWTyMvRk?N#4-94gVkz?I&eZ- zhmX-+lMc;x~%Y-3xxx=lMVHj_j=}v42cqZAt1zP$byS z2!7fO#8aD{_-f0e3Mn5|N|jTUR9~tF(dD6tGLNRlBkDYZnoZ587E#Nnm54%bL=<{E zqS1S){nRn)A{r4`^y4H)pWT41*GxTs0TZA2!!C&ue*oix{mKvD_ZkBKt&9Q|&Kog)MWkAKq7!fTs<;DFA zEJEXNJHdO%?y-iwm2qCojVxv~Cf?t6_;4Eo54YWae;a74$h&qauc9IkJeeD!e+uP- zC-W-67JTn8PS~>GFk908N^V6(E?13@zxfS1#`w@oM87Vh^B6?ExH#Mq-?cwa1kD&9 zkQKZ{P>B#pG0g#=u*nfuWfvasbNc|h=Yx+9k2tVmVe^cI%kLd_;J4@RpL%HoXS0Zv zhThZQ&ucb*z8R#PTYmBI&W)RnjhVi2?L_MgjXq8D$NS4>mluguhU8vPO*jSFQs%|? z-q>~M{lK{88#XQ<7kGaEp_gjQ*;JiDndEDnv-rbJXMuXu)`uV2I%?&#iD9QzuN|zv z|GYETX;A4>`qXs1=1f(^cvP}zj}RwyK@ec#G8HR}m*FgS(2J!O#D^~lM86hv$OTpMcWucX-vORWV(!IBB9z%> zbkZl^6T~L!WR;BN0ejNyV!G#o1JOjqa;6nhNls=3pPD397hsG&v(j75G657+Xw!^N z-qnR`kLxYy;|~*hn<}nGPduQRfUzh5{?j^hl&e^`8@+ZnVls7r!qC`MboYN;Yuzs3 z#5dr_yL2e$8@6t>KXXAg{1 zU@y8r&xaSlRWLr-6#W;1BeCFb1~4b}$-*m9#n%(w1o>AvLW8 zVXd7F+Zif4gWeyBFf8%65&4GRPXZu39a7qSO@z|xSxS?yr73L3i7Lr|kLIEp>K?@D zQydn{^KJq~{p*K-U>y5T56;9y8U}BhYrNRar~yNOVjm5RrYrTodL=M8IUk;8cpdu4 z;W5L8Y5m$^!%+C29&n;xyFaWwFCkUv1C8E#GAwKZg-=@bnh$h|IsNMEKnP$HABg&k zkfH9M{eI={ZTN0OgHG2F0!~n7E|->p9Bdp8FP2Hm&G1e5u@>EI_|;5UvjDjnAAelj zmrEaNDMi_Js3mnO0Afxc(__9M1vico?0_0;XE7)s77U|1#~u@KdoiIEh%LrvF%}V! z7C?Ypjl7q)GIXe^2{%Nz2~adG9ocUZZ{a8P8!07vx-#^~$T@{fqctfqJUXdDCYLFs zI!}heq}9k2oSc!7RN#SKw?+2dwo8)g8R{GJp^<+515MuyTds9Z?>W|7TSi~a2e0!f zA2w8s&Q^oga0r`7g~D_ZON(_htrOF%R>JT+YZsfvdS1@5$&U2ojLjN+=}PXO@&^2X|yUgF$EZj$n3aN#@WYpWD|QxjVLR5Jj}C z4son4*xE%&W2*`m*(f0*P)CB`+tq0kZlz6jFP4M`$X+|{?lGYRV%1G}uL*Im0lVNL zorv2rf&V5MyErPZUib2h-+Zr@4;j+GX`VCX2GzGy3|?24wDMVE4i+A~X-aM?O)VPn zsnx}?uB514-*2HVWg5QuUyIi7xci-J7ZyEbf^RzXTFvhK+zqe1!i9nOmF_Zk@b?*~ zw$$;mFOSTBtN-l!FW05GcXjYlM5K2$}DXvGpBKE zuDSp6#Z@ruGKT~cC)9eiJ`ncRHW6P}71PSo(#oe*6b|t_`~(b3w;g@| z6d?F=(V2_@&3PD@R>aHDjDU9&>@kc;+7x840G$GboRnpvJGI5y=nhT|78o5|zt=?R zMnk%2SBaK(&wzK&7dv!$vbDbxIdapv#c=ct*cMznzdj?Qe*W5E8>A_bgkhtPXtneh zTAN}3$P|sjC*H2c18CxXmepq9y(08u!|?Luwl2^ZA-L~vYvr=7pKm-4 zvY&`hLXX3HKTPW<@I};@5|Rq)M6CJ=pgp+h>s>0{F8F7yu$zOQO56vwYW5ra1 zP!e7gFEkU}c@j0MfY?A@D+DjY%O`gps}SileGTH=*6&(##i`{Qov0%EU{@vB-wl9& zc^J3yhJ;5+a6=O4|H;F^FrewAIz>Ng-MU%&6!poDD+yI1{ejFiRn$Pd=Nwabk5>bO z$Nh`?;V$B*FcEO#@g1)eOJSS&_}5r{tNQKz+d8=#*xp@wrIEU^NvVx)PWU#cv!Jg- zy3D2Xx21RXp(e`)Jzd!NL*y%1sW`q(|{rrM)N0OOGHq<_HX+VC<&8gBCf@Y?Nj$kQ1X zEi&lfAENK92Xof1hkM{JrN_Q#d$?3+a>S6csv$#EFalzU4JMVRrAFrr3Z2#e`8Y1%Xp}t**kD27h|~19-I0lJmRk#gaR}*u3=P(WL(*rt6jd+%6IcDfWSn&|f6{ z=`jW<-}Qa688sx+iW(3_z@JbA+mzVXCjJn94o1wWADt4-IQr?b&41pj62@RCG1b6{ zl0_&E9?`p!+aD%}Mj$91xqKJA9^nxegkmgdAHdTn2DPCmwy!Y|wc$9b`B&Ny z^_hQ*FcEhnLQ|5yM_9dpOO1P9XP;A}E*I|6gf{q(XFq#s$<~|3?7{1|o05UzrM8!L zJ@IyIR8nCK6@aREIJW{E3UdKCgbbO=?C7CEJH|pI--`5aLf<{3r7)eS;s_^BRwcm~KY1Abd6!PL>+4Mif%XZt@Y#-y6P|fnr+Zt-XxuS!qa)mX9zrWR zKFqF;*M*><3#CpVmm&)5@d@0P(d6~TH$m-jFsk^s;pggf@FPizBu^@R5q=b-@&BZZ z!1bb3nuij1gu1Fk&qWo69|<>J6sRDYhn@i0o$Vt;z9_sU^8HQoD)}~8J|ysvoj`CD zUJ)Rcx04OP>>?=%dO_^tNBM--B@ANpKB5yo70*<$UJ`w`$2$>$4YL?e7=yRRm{F>; zJ7X;`3SRHzBR6;TR&)Xhb0+QUibp3Z0f#Lk!Pln78^DUM-T+Z0!~nxyO($^NV~(OC z2fXbq>sR^JD=HRkIeO+y)Q;o0aFL_^xTA<3_U)dM67YM;kzJ2{8+{zz80jdYV(;QG zeXGMeVR&7@8i~`;CXNl010GkWDwjQQ-!-+R%90uy+u7;&2 zW>jxVm1fAS#_S@eQliQk!`qtc%c~p5gaQ*P3R4sxKXnHFJvlYmYNS=(Avs3ou{o#i zYA)Ugk2Jk-eC?o6iFl$?f|B2IcJZQNI2jJ2|P*sh_$s`g;Tu%eO8OJ?Rjei}yK z%55mfkyyqss)pHf<8tX0sO>hP^+XUOmQVsR3DG?#>+FEwj?7535doEh46RpbqecJ z<6oG7(%egKu(o)J7E(rSSYSv~UB}LSM}ozjgDqz$n@f#x1wo93P0%8V&ja?j_6Tus zZiow$IB$FfgEdmIXS|8<_0KUnKOF*13Y|^?kLVPw3LQLxFF+Hyh}!Ck0aZN%i-vfE z&EIcYxlTXio~Q2_qStL0@mX;l9gYF~!~1W3TF5urT3q)-(Ve&XrY)H|u}`L^9R1TY z)fLBeqWOQ2`gy653H8H0Q3V9F3;_$!S6o4c7)DzqG97%x{gvYh+(KeSjW$wE!hChr z^V#bX$rg!1DY<@KqEw(D4)lnL8lH7JhZ#)WDtrJ8JfPQEQY~g@XMLle{qsz^VxD#S zea>M_SLIi%(1=nzcE2-0FIG#L3H>6hlAxy_`-JhXXYbUc0h9>M?>DG+M97H{hz{+$ zuy5Z5Zsh0pM?>fmBcX)=Ci4XA3>xv>eWCk5N8xZ6mM*4aMxy1ycnx;mZm>&mUw7Mm zUWTZ==+Laz+6sRNfEqXr9z_4AftmpPp|urIpbuC9`ao*VB@qQft>M;4D}zs}WHp)fb=XKz!Mc z#EBEi8PWQeH%7wiUf|wQWoD}0;a*tBgg3t2-b#Enf%6#NsS|H5;oUicG~(9prxV^! z{mZg^A^0o}McWuCxHJu6E0kLnOK|lHUdP3XCSJt%YVJgIXesf(Vj-9}8Ztq|+<9Xm ziP0pXu@8B-6VKHWAVkt5l9M!Qm~Tkc>y%b-g9*{b=%3lymI4#(PbWujj z`092|PfYc8st1xfdtA_dOQMF~5Q!h;Zp7@A^QmfT5ETI;pam(wiRgT9&>sv16Tlp> z4Ez^(9b5)i0i+e^^I@bk7r{w0a#-4pJu$moq5ugKr)DA{4OT$#8-X{SkAdsBW80a< zF0|C*gR~U@BjTNnLXNDHIH|_i?Raq!I~EJ;Tazy~?cu#p#Kz&NE(oyr$6Xxo#GXT| zKE0JOVSptUPcW7|tUCk4ECswl23vQT1d%G>4Oj~ml^7@T27#5_AtGWz7+KJz1SaA05QSa*6k-yL1a8WK%4A}Ri+T}x#$hOO;%f1Jp8%JK zeL$kDIKO}ms~3t1J{7yP$vzr1q@YR_^DbSo575I>jK)&MsPw#nn+r1Y+ZQTE3PBJ3 zHpp_Mr2AdP7OrJTeM?K*l)tS?nScAzq4ZB;9S_Ea{RNH2=+NlzOrr`%z6@wiCl)0u zQ+SEYl4@0$EDp0)FXMfUGKoYrm`-a(9$faN@c1B!37qZL975qK)JsjXewhE zn&r8a!h)jA75U}Uciy4TF182d^f2I?+GTk#L@aOgNqL~xnjIFC(r!+XNyQe03H~f;u(Bx@y=|}~S<%O;;FuDxYM@n_ zEi)L^*6XiX8zgp}B_%VpT9NExUUgQfO3N@(uJ7xNa|19vbOIO-+8ID=s#N9@ zZyLw)Qd%V8vfWY?4w37?mnpDM_Q%^7sDhO}dF| zT%PUft6`)gz5aDu)lOcLtTR?|tk;kbZcM3^C>(arT#g%&o)BiMRN}l8M^TPRH*n_6 zJu^R=o7bmzjVN<&`xRN5NmH_*A5G_HCnskW(9FSMMs1o*Dlw*}N~B7?GF2?Mpiic% zp{0F&uAHD<yL>9Tk zqSh)TQj66fW}Zw`SmwNg{LYCenFa`bG*?b@!>@?!n^-ZZ`b*y1I}jxAXXU8p0bEJcG##ti8565H5_ znq5DE2f=N*0tCZ<)kOfQZ)WOfrRRSfBK> z2E*<`hmm0nmfm5I@2_&%!JsbgbM)%N@x{Lm!w=p?SN_vl)0 zrb)?3O}6}!0Yj(FsXR2syLjUCq4mAJX=;X6TZ_E|dkqf^jq4o5{BorcRM1*#2KMGc zb@x<+5goh1H0z2GD}wlTG|zikvRLFh#R*vXhPJWVxXrW9An4o)AlHcNk6*cLqMlfY zY!-Y1zW3RN4WEHx&;W{YC_49Mr00cdwN0%CD`(X@QpplO)iG4CY>t~se?X$wzqFp5 z&%rC_m?oDw5{?6^bFCXbgYWft+wX3H3mqM-hWK4=>QJrEQKngl9^e7@K4n?=t`g#;0+SI*_!1jMp9tJIK z|9>hEjX2W(v+~fLgOybeR74!UV zV&@X~AM4(h>XS|;7syV*Gdi*&RNw&8I;}O)&|Z{OAr7g00~&2!%rM$CeiOV<-ed;V^7P zXLU;pP=~m18*B<(&q8E{zVq6%ah@`!HEh&G+I$9i9g+#!8$$@`*njDjaV4&pdfZ`8|Em0v3jvcMTCAG!Wp92 z2uj6-v2)ZY>cKZqdh82Wc#5S!+&^wR7W$(I!RG@GMJdvQ!Zhwh_yJ15&OsGJbxP}$ z5qV=iEJk&&Rrk7S9Pt{0#9BHGUZ=gQs@Qw59sN*0^Vwrrq1CugLh6cZg8qb}Ggx$l zHJ(tdqg1#ZMRMrZfo`BG2!1JWMEntkz!(e9;vY@UFyM}FU5HF}+-rH3iZo#W6fTrmLR=Js+f_v`6g2=FY!YHiG9yhT0~%1I zib}M#5fQ)26m|kv0sPLm^aImw>~OK0rO@(gsqz=)@F!sFKpndToXNDjU}?&XQ1Mp- z>Y5a#IK-e10c@Ei%n@|22_?#m6$1BDQ38He68ff<)NpDlvAXO8B=mQNjb0;1oTZ>K zX~5tRHm48ceHWAUB6fG>B9_bnV!GxNJZ@t@q#FCprcV6*X(q9B|9+|1q_CP8`PQwB z4467*ep%ON&TYOeS=nF!{mztWb5^XFGi^#iv&FLJ`N_Gtlb>HRjj0(~RT^rjLhK|g z1%DYhu{%Ujaj}!5x6#~_Md>V93)nVL4BsoO>D8iA17KfJ%!?<#G+E4hTjVO57G>5q zEpDpM6tQ>t`*Mu9k0(&Ypmlc*>j2_2-A0 z9)KUd^cej3__RmAV?^C?u$XSV8saUv9<==?{Ah!t%Ye;DaQnKjslqx%M=O?YvLS^o zJfW(Cka`wP2WafX?;SZ3k8HxpV$tlNuEY~S@W_$)op3BJ=I>REX*bqo^-<;22x=~t z#b7BN#*x=_%6~hhzG(T~c|lOd<4M@KOiS2tA&Q0mB9oQndPay^5$&X|V+u-vXO$J1 zG~vS9$?QfqWmYJmfy`ikF-%@H*#Q1Rwht?+^7E_m*&XBW+Pz`-UE}*LoZ8H4>$Gh1 z)P?;zs9VLdA?$r28e+mI%l4nU;E6aHdMOE&_U~Ux0_uF6ePmM2;wrnnYH^Kh+xySG z#M|xsOV7Q(O?J!JL>XruH3;=uHO(8fag~QI7hGy>z(s2kHu1@A5M+FIG^R~fY;mV# z40hDD-5!*L3tv2PVev5Vt(wR&;e8tAExG?O1^JmS1 z^I=By3lO3B* z({2Z<-@mL@TZED@KS-(;8IjO;T`r8v-s?Xr zJA-<=1C4`!r|2V?kt0g|&(HXJ#`FGvzvSnhembJu{&sfu+uOVMr~d!D{v_h^*&Mi4 z9M+YIKa`+5L7`cE7Wyt^w>RceUE>x4sMIFBPef=uDtbWYj{%MeY2ArIcMcg`MaGG?PAv8eV8gY(@c4p0RUSCZdIF!@@*VJ!y87;8^o;sgl!5xb9h{p zt!iA=0awUZi&b$$^i%16zK*LB;%(1tS(K(TP1!#49&w%W_My@G-g7fx*t>7m;G*qQ zOu95KT;++j&}wWR8vXGGb=F(!%SnfnH#Z&ZwWWZch~4Oq@dWe^&+Glm+3iy_qHQyw zGBXFx8PXicr>W|Zv-YKfr>AUZ%j5e%f)20?&7uRT$=HuEhu2qvm?dBrRK`1zrn#89 z63>Yk%zp~-MR-GobQzu_7`-?u2pDG^mYOrfFh>G-dy*k{1si`p=DVUCc!_Bw7W8mz z;mM;FreF;RJ7(?MH)}!ez_I&gdGhGRXaMhN?(Ty}tr=AwvmP`QR)7!=!A~vP z9JRWlNUsG=){JkXOOuSg+B_$%jFJ^8ZMy22Kc}Gv49oGOCFpxwGH|<>7WehI;5*^% zg+9)@q_0c5@4`NfWqtjueVV`Sn-!hfxYaPiM8DO4pfX_hR7np=>x*tsD6l~xHXEGA zqLAc>GQeoAiEDkCRmwA=+F7-;-mJ)(9-(w2WPNk#`+T*l?S=4?C)m$({(Qe&@lap( z0L}K!zDL%B83Z2>^(4^g#IGDUJDC;y5!^x;Xo^wSA}klin8o0R273%O$!jNC6|q$T z9@emk55x5>@QdiD^(~Js0}p0L8>a3SSGLrPTE|C!>kdUK z%`Qf*k$TgZP^1-w#RKx_@Yu`}E+j2VgMF(eps`%2R)F%PRIF5Pc8REx!pPt5KLZb8 zk1r?hZmG8|do;Xx%8(hh`j+dhV9KF2jH1|OwmCfdG?&d~&Q<1?m1L?^t*OolRW`GW zKdkViyg>w50wx~j?TV5oA!MlTQ(@j%wi}_XKHS0$WTc;m3L%(j==#9#8 z%lVbkfUzLGFnQ*_(jv%Jk0^ANOCDUaQ&R3K2r(PXQzSuGeigHrXT?*+#di9+>~zpk zQd^9M>e$8V92m@{K2d=Q)%I%Cl&>7C<~ z9FXF3)K-~n&&*(p3vTd=!UeAANP3K`pekRbh<*a@b$Y8jN;yooEVjb=wk$JPnbW7Z z#{Bi4SReoVa)XcGC#M*2d`6S^NH~**B|xy+wlvRf?hSl9%iO<-q=d zqIyJ|s-84D4Q8=ogS5(nqK`;I9hKs1({n1`L{zCZbVgZ~>8oWexqW3LblWupvVB9v zx&6+c_w);T;H5(Q>RKOjo2laH$qD1&<0I$nL%b5bIL|X{-`Ih<3os#u9b8Qy!+P{! zMImU=n>|&V)#@Cr1%8Ud8CKAw)fZKO8OEgO(!TROS7{TbyU{SMbmrBz|HYpJhSfBT zh3~jLeTz%+te3F`zUQm$#DU?TVJRw^@Q;RDYwi>oIh~Owv2Gd0^-4!4;@HRS^63QN zP#xKn)(My}qjd`Sp;ob3p@V-^=(I{ES)pTC)WInq`TjE-Fmg(I)!HBTWOK4YZwxpV3F?Bhe;w4cegX zG_W_pFx`fQocIPwhNIJPqF6Hg*yl|kOm&kR;diTXfV=ddwK<0+H`KNv=jRDn0q zqyLSvJB6}C4>p49x9F5uR((Z6aT%zbI?59Bve}m!hI(kYyH|ktt|}K(FY^;8!o*h! zNrkC?Ml9qN)a;dj0I&fJ%~fQj4aGq^uF0#jD~WnKmIh*t4zx5U@Wr%`sLj}k^K*J@ zz~v4E+^zt-E-*L{7#wjgII;l!v1=F94_Ub2NTl!4MT?I<`1MhC-OJ;k5(vB*9!TcQ3f_i#Bj4og%zGK;yUjC*XH3SO7>FTFHx#0`&X(D9i+_foj#o z_KT}n+5CB94_sKX=>2;qM0p&IJ_C9!%X-&%?|JDycx`{nl#-Rk+niGt><8leUb+Xx zPhHT0`ponj6nlWsMIF``CSZ-|V9<9d=Kw3f9?5xAO!*zHK4Z$|0jzc8VFW!SD~o6; zRxGjtrZ?OIe*sdk97y557uK(TVLixIu!_t)_o6d3KxVbd(?+KCIRk%A8;OExKsMmr zh3>pelth|Q5VCXnssSyfV;^$5?4g1TdI^xe{0hqHmsef}2iK1uw|@P&@zIA<@-njQ z$u))nBo~F%T73ro-HHMuaejuHWP4UdUW(qT)S6kP!)){>C!4iOYXW{4Px+}J(N>M` z+IxVASJLUOd=kQ%M<%Q!gq>ue85LckqrW(x#{4g>cG*N~qwOZ~@%`gBj32)Nc%>P= z(xk3c>z1aZr1i>>8Z-M0yW4wLq0uNYmK#qk9E6S%qw!Sn_Thap`@aVN{@QCmPOnIW zI%OcvX?*k-eG-=}PRh*CYLmGneO|9zpR)L_f>;KN>Vzy`D^~h)djTzwzlL)I-*(40 z6=V=Epn7Wszjb(#Lo}fgIfywg@8rlOppz99rB;sF@)bP&l!G3+Vptp~Y%5xIHiJBctxaRM$}&^zLJ@ z&#}#`NUEL)LKk=If(z{z6<_h-MP>h9X7C;WTZ7S`>@(=+3!^tS0su}k`ge*JjpSV7 zBHB{s=oQ&9wHzGGc7rc{ed!{QPkTK5{#yOv-asMEXNUkOq=QAUpFIjS%yn0x5+JIQ z%Wm%o)h6I+OQ|GkA>wLxB~U!P@>H@s2(nH+kFl{)`=eTtRY4lrZpDB&1Tq`ZE3#fv zVLm^AF$vK{KJn~_Io*7+E)Ws-ZC30L7!BnLG%y7XkHi_f+ibu*Yfm=2(u+{G6C_JE zZJo%#qx|v>+a}O=HZzuFR?%zVC+pRSArJxefPrs44w7^VG)U+Lhtv8>Wn8s#E^SX? z70G)2ptcPvT7lB3`d7U7q+2d?&flL_B9*bF$`NZmgqPq;@Y08C)_e#uK|hfB;b*s) zVCeN`7cP!{7~NMqch$PFqUbC9yp`+6_I~>~tyL+c=`DwBeNdLws+qLY$|_PbncB}c zs2DkZ?SMY#9tTFXT%?oBTMk%JI<87Fw?v`{)qc88PU9*l27E(az9z9i^xA*MM}gSf zYNXOJIu5`)YfcyXT>cCRFtP#0g=P}9)2O8p#c%>Y?asjXB#5vuxBvKuZtM|lAPek+r{E{iVH=h7{Pmz>spuqr2#+fo_b={kvYTL|+%6g| zteGGdQ3UW9Vu;Qs&70gJD>ekeSQ|vy{$AD*?-FhF`(HbIP>+ z?wui%EmUNGzu3Q?Pp>J19yU0V-^gT5eVJp4w+mA zxGX1z;~xEQ@`6)mQKU|pLVc6MT=(_@qid%F{lV9d-3HG-nyP#f{_e|7xNkhiJOT>Ag9o-WFTG>wfw$f~ux#_P*_-d- zEc14)8Q;D=dwcu%HM{1`Sq{W|egM@cpTj)~EQ?%gg^#VS7+wMKxBSc z!4=raq81Uwjrz!^N51l zY5ismpR?<>cl&y;zd32-qI*_6@0kp)(U-VOcklQkJ*uQ&*Bj%9-~acG!xjU6(UIPd zg63a_!0*w7GZ8E?2PRi7KK>kdYS`p{`H#-u+_7rp_+bM+-E@{7c-L#M#pP^aUhp%5 zaRF|*t7*7tztESsF-_?d*U65hNZ8Gc+5p*zh>(p4&=j@d4NFm|Y67q^Bw+;aXEJ9a zg8oZwF$1T(Wr8| z?tG(PNrp$sBx!Xl?X{Lpgg+KkSF_)OVst8a`hptf(E98_ft7W(?DBMnL8{e{=$$vH z)a%fI3)NgWG@@kb#@UA^j@C(j82earbpe-zA8h}&p!x$aWm?|AeuZ*#RZ8`1M~|Kv z?8*u$67u!unQugW_%@@{)ekW7HdHR^3k<$~1;&hUU&q4Arc{MSMD?ybVMW%r`?6KgBNfSeF6E4vj61P_DGwQMB zTMQ=#mw_?rJBx}_6U}xq5K)a5>^gAt*u8t^F9>GK*ij%6;v{qbIrM7AnBEGUxYfS-fdGdzVfB4gf^$j^HASo`AI(q|V z%FI2x&%eK`%x_Vt(Q3~nYu+)SfAj4Ap?Mpcp59cmecM}Sw)v81vD9ufq!~2KT&p#5 z5oE6N%w2KYhxJ4AJZTb{%&d^`v!;djY+Re7MWj!$?$HPDy+bBi5DbMXT3U9^7-?Bht`i9SKrWV z=TkIl%am#`jNZ~Tc z3kY8x4HPFaK(sOjpeM!%{&JvXL@Je0r3kLw|Jl-IKRk16YPy&eNflh{9Iz1_cn#bu z)9BN^8m+{Tui*@KbFMB2h?HUpC&K!_qFF_rRd7R!)1_4WDRZz+CsVqXZP~HDIatzo z`|@p5iVW$aM26nQy|wV8+%c<9PM`X~q{`%IQ@^U3;Z|j@=DC%Px+V{k+WF|ia* zHxeB%C4|{!nPZhpptDzWhB%Vea z{eY!fZ>qBp9(?PDs_Wh-+=z1_eZtuVapodaxzqPh%nsdT)c>Eg!zgTJ{>m$Yjrpsu z3RdUw>sMZpL~Q?A)7*3G>^iSu+yAb;^k^NGNtIx%Scw3d6lZ)%K=05UblPYKcq&}w$kNg7l9 z=rUg?dh#O5WsYnFk1JhfD4aTkcytuximb5qAznwQqClsdJPv-~Bs(RYA|pR|Z9|Zl zeGUhYfLwS1Ho^-ug)6h`oYta!6tt?M3-BxGyV*kFHpm5!)S-LlcHv~p9u;JoPV}8W zCUcaN=-?0$RF}A=>tkW0rg*WssA&wi0ke??(fd;Ac1vbEu{Whdf>kP&X^Ff71QS(; z;H0&;W?HtBlr(Bv_K)bRZ?|ATNP-0BGKVZ3SBQ?knQ0XO!ccOYrnOa&w~HyRgXk6G zu}lej$vhCbom^aF+8;pN7w7bI8cyRx{{cGlUs{aXXgDb;dT;bzsZyswmo&Pho9Sj- zM-muvlEN+$c|7fz>DTNpiVo>z_Luf3`^)7H zX`*acgG%L#&o_9Zmb4@)kNp-g@r`gitZ=buN}e>;L&HxnP5YHapud(rXm}C1I6NMFGdw5id zp9Sqsw}=xFQ_Mh+4`3w;tm;V%j#I$9-A_Nlsehk0?Qz&%oG#ZhY!c^G+Er$yire+@ zkKjJ=Ex3=aO@Q?j{(uKQ2roaTeY`}<0HsW2~THYO4)HHTz#T=JNy!AVv{SIz@0yT#C$v#RkqBE?TRUx)e>@$^k24s!~ zqJ8VWKQV3EiSNmGl&}={57Yxil$26nDy>0(AQ_M|HsgipKTUpUz>Nm(=t+2qSr$DB zGTFm8Ob>yVaV(J=Hr!|xJ918d&pbCiUCL8X_ zyi+V$yA^&u^7?OnGh(Y5+#wTpu46?4E`yXHYuf>%v!f0yqS`68{F6_jn?Csjl%t7( z0>|iOAPfF6dIvlo@7M8XwNxcFBKAB_Ft-ElfEzp7=FmzvfYp>^pdi==3$39Hb{|@G zVvQYdz>$tQ>Ea*_d_+mlr?I1zTr3?f2eVCHo0dF#c5+&+e4@|hgZpgB;0Z_7fWnO% zn(FjYMGa`(E8=JXPPx7ju`DA`p_lr3j)vcxhMDBbez^E-t9{tQ8F)OCd%sqQ%pUydK`Al+coq zLfxkl8ie1L4o zaoLDri`yRF%pFF9oVM)ckQd*)=GeezuD3?*efiP2YPx%t~4S7i;Y?4`JQfYQ(X0}u+ zO_SvmNhC$r@XJQ6B7M5=4O;XvYL@~meF!pm8wzVW*sToe)Ebc-v3?koD4+zq-S1)Z z(F&?BP>w-4zlRTOfAwdY`SK41z18$eu`M{Hq1tHN zeErP>^jE9Dd3W!~KfL+!jaTL$ZLpd9c;V*2K-ymentt~a7(Ti8`U!(p4=ORM0N{qK zyC>dXiEh1sMxR1asHeqP3fv*F5lJVr~ojb1Wn)lYu5x32`{n6Id7vM*TdY~*mr2D}mQTS08t%N^c zg^P~>VorkE$%g9D7Q@qx;SmJvz^wskh|bY=!0nD67{`oifA$6Te*Ny~cVHZpM;--J znOYQe`N>8rB@1T2BwDhGC> z$;uJFJ`VCGtRzuCy-sS}9lT( zC%4Qt+b}tZD;=C{n60s)d^Bp0lO1DI(;tgn;#Q88YQtr-of$z}hPo-9xmMYvPw~6z z+*!WTn)Kmw_FdRFXLx!|sV~c2=kllMOZ%g*(!W%lVGCwBXP1SwdRcef03MBEJK;%) z@(ZQLHb7ny>Y>!KdPqq$S_0_j*TW&tMAy-qZ>6mgY#9s`@E?GEArb}(F!L6hCzys@ zM&HGaxZyHt5H*STAa;x5_)T~pOORC?O_ohuCjK0(amf7rZ{OAN=SP1$ zvo{EWzx@jsYg)X&eUd3FNoSU8`}fz%iz~E~0JX`KWzv}y+BtKy3bQ$=1<&=GXvoV? zvM|z8YySZ&-(RuoHp^gBDA!oK_rl)!gYP=?*GKn%X?)>J_}g!iU%u_h9d?DL!rTn# zW^*t@VZN&xCcTxe&<4#9zW&<>%oQ4~JO%L-88;~I3fYIBhuBCm>*28~;4)$l2pl$l z!Gbibo|^`UPg2&6x8Hqn5gWnya%2M!ODw*KS5qrvvWmGYtDjl3=9$%37ag?kx;poT zm6QDrxx|t;Y*s^Vir8eCPuWEEUtEXg3UDc~c)!jb6rXXD>r4^&stQkFK&6-oHCzlQk4bJW}a(IJRsmrhQ zW;pVDxs~bpDOMUxZ!qWOx{C7B6?|aK!aF7m-m!jCX>r4>nO;v#PO4O@b@@m6)j9xz zgPln(e?hO*8~=(u8s5~B-CUT55_15pzt&bawGY#y zeg0|d1QKmE|5a#EQHpb2{FM>(l-#B1n?K{J6@2Z(_uTHJyXeCN5yh=oIfCp^+d zLfCIJiav2LI$i4ZaH>wnI7H(|ULQV^$w&qiSv27Tm7D?ByNX?iMx!H!;|jyKEJlOD zXaS{6|HyTQPqHU^+_eAZ1||5Oz!WMTzW?*jV|I4_2BzcCLO zXzp?|9>ft5HEUIMa_wI$u4@Eac|-^CZ3Tn8V2hM0yO@K zwIv#)1Z9({*|T@=p7r27JO_$k!Hw}C1Y5^bH|XDo<{v-(%jx6uL-7Fk)1JM|w!M2I zlfZdUg#Mq89-?lHho|5v^Z;l|<+7!F<9!^)skmPkREe`D0s@JxoPHxs~IdpnC7ERM1wbJtPyQl+-9AV_Ar70GnWV^lS|vXXoTK-^=b}Hp35(to z7jXsCc%?RSACp8b#Y`|Fp_eLh44^n75si)BM^80HH^TP}Ig03=%s?FXJL&|G@t2-CND>*niCpz+$CwJ?)l z8-%BfhS3*RoGa7S>B`QncmYO7Px%oX0$+neKhmvj(F@};XfUz1seTdwx3{&vd~Euf zL!ZuU1fX%|r-#-|Klbwb!ekJ~ZivfIgmspV%0&EtVDoKo_;kb*nZ4^rME$_c6XTQE z6o*!39Qx~_w?{LPNQC(bJ_bf$wcKbETrOrWiP4hnML3Jz`UyIG zF*4YZ85}t>$X*JLq!)z4)QvT3AVxo+gmC0R{KO6FvB%Ju6nA8zJlF~Q_U+SmJvOqN z&Pp1dl|XF6UX%u~wvNfl;(b#bLjw;-yKQn5kHOgtzyXxBhi1afC0oy@XN;D*-N9*% zzFY~LTfcbG?%MqT6!|QJ-h&Nw3x@S7^VGW0FgguOqM8f)ndOUTjLk2 zbCr^0qf}xsr_gg>H^b+NfRo-j|5fzl7qH{i`SV`|9IyiJRagtpz%S3OSaA+mKnbvr z(3xAUe?}Cih=M^;N^zdZBR~A<=>CS}0x6rN-@1JHR(%#LEl4)>AN}cJxkq%Ah*KBz zcoPoIS#b`2+2e(<;8tpAsMl8``u%dOjR&9@BQb{|s~;VKwRgufI8l3|ZZGlxqLYge z8qwtDqy?pEJtzv0RRy*!#Cn28ZdEmx%a&(}nA}pvad%+P9b?b#+%)};KN zWt{D==4vbWHbbt-ISUqL?P+e_Gc)qhtT9`6y}GAk*W#_c&(gp2%a2~pE&)uRT=2Mf z!J13=-7#&`&U54LT$loKNBzdiRW+twH1S&al_9@R(YJc=Xfw{H{k8I~i+8o}d1cSm z#<@GsQayeA4ko_fdieOoC;_~Z7B;&{bddRf)qM$k8^zi8&g`Z8T4`n7vQEo~WJ|K- z+luWti5(}7bH|C}-1iANNr)lj;D!WJAmnO*aJD7Ta1|P$C6pFOxf@!V1m3ok5-60m zkZAMG%*u}Kgwnq6_x^t0msmSHv$M0av(L;t&&=~Y|1|MyL12rBHcM1iGJ#$lG`OL+ z4kDJbKYvRv&p{OL$8LGtwM8MX%SvJvN5bPOFP@mJ2)hzWgIcjz#qjGtyz2ck(z#C` znmhNQPXR+haO+^ExV^VT6F41juX0;VW~ZL)<2CuK1Ac?n7Vs2SJIwVOu7kI$jy?t& zQE~l?m7W;HN~87&pQqW$L_VxTTuV2$k?md0K`ju%2w|vid4NC@T@4})JFs>S>2pX( zqy^b0rw8!Z2criQ1SXHLAN%qlfO=S^1Bh5Ps2u#DXX@0RPH;m_qfWY&*D*A&UJnj5 z+Vt9Zxywew7uoTCMrAVdyx=jandqC=DXm^`KhGm(N?KCXnU@#f)G>cu0rs`Ff!^t% zm1;A$Qu-yWplLPpi_RgL&d$t`tUvA-t>B1;hqOX_y|hcpbuJ@(3Z>UwNVoN-AIasf7?=*A8z}FaxKP@# z61PV39-vIg`@r2@c!eWKTl}GF(mqY565$tQ=$q#4edL7X#g07oGs+KYdq*qUh;4 zJzV-crO4*=Eap)^BK&;L@||$IDeQqOMyzXc;EH(m(Gk;cJ}#@o;ueh)&3rW9g~CA@ z>JOu23Mo@M<;JE-d@6^Dht7z{{2+16M{}|^J6;7(_kJsKF7t?WM9m=W>${N1C09ey z%HlzpQB>QEb;0u1fXY`ItTWo+WxZ$Bxhv8H<4Awq@I)!CrKj#GFggMzi^UXh7z_4H zW8(%ldUOjZ25j`8#Q&pmhn_4$WM{y46tKHIPvqis0&H+jT zeK`W(QuY9wV}WWyJnU4w-%YfmLf$?-Da4!-Yzh)1JrRj^xqiwK^?$ja(s+*qaq+!& zcNlMn4u!F*8{@?tMEdP(D7fayYv$uFgbAKNn*_oIzCgmdYayoLeW&yxm&YGST03`V zUpSq8R^!v$uhDQBbokgltl_H8*R?))G)L|`a^w#_#Be+~BKMQ@jAS%iI(|mwLb9y6 zFVavK@<(EmW>ur!lf3~Ki%RurI1U}PAKQlAxuElPP5(7~Gc}2zE@21{+0S@xj|Xq@ z=U9O-X5}$U0Ez9stcC9P;k^ztKjI#hb9z!oe2M22#uFENN26zI5krW$LbJLm+1%u` zI*s5DqqG)n=Qc=}eUVq(b$iQ!oi@OTy4I3Hi_0zYc|$$^O541N9XlplIDw_rtCy6H z1~jXDa)5DO*3lS$Ij*JwoRyjMa7dRgRqC!_6>U&FJ>+A~cUnNsAZmXcs4o8m`6!lu$p=Ob>CXLBvCyV9!%F#HUikUmcQYAO>bZ4TP<9 zOfvdvSiVA9k@oxgVA9Q)fN;~$X+&&=vPu_0(M))aX2{E~f!qN8iP5^O;qZdR#=y`R z~Cl}lmm+I+Zs+rIF`ROlX%AB}qRy(R7CMIy_qR4VY{ zH$$&@c4;yNR*z)qIR__*9$`K6dY;Rpw^m92xVCugs2BjOM%4z&+d8v{crBm}%4rHA zaJ{GV(L1^hZ7=Ux(C7r#aC~?uzo35F>h3}%q`_CG7oUFNMnNgvF;n_}fUd05@;^m1 z1kn7qi9JizQXPnop)hJHUPi!DFe*7mNZ4l!_E1s++*?&ah99J1sfm70fP$|cy{G1LP{S9D%Rd0UUud_KUPoH1| zX8;ZI)Lu`E<0i-fuZg}_&*)1v>4h+|qdfD0uP_n(#HRD*x8(tq^o_+5^tYP-x?OMa z1xFd5pQCW+0S&B(ge&OjrrQcCAB@&Wv%E!2g}0(0m}0#(k#G`Z*i6Jv<3tiByJigOz~oF zBt@Ss7`B4ZkeP6ArG;TsypA)$CxK?E@p6qxwPEUPpaQS&G@Come-9<81=WU()Wlas z=zpG3YO5=0sUlpI2R5j6*D?!F7W<%={}G)m1I9-mmp*PB-X$${nkTGx7B~-IX$Boi z{&86Oqp9w&(rhqmM1_?;yYeNipvoBjOOQVOlV_yorr&2?(wdbhVGW(+^Q^3tl7`br z=H=-T&Vr(BBcm$jeh&7Om(#@>=_%FR&Sk&^EXy+wOkMaatS)e_pI~-6%~u{aGJLNd z+4mTUU4Xd!7{SZMqp7T3N(KQd$LG{>y;yQerNyur>VYqeVV=Tb*b)l6kzj=v-LP7b zJpAH;R0dXJ>^pD!!=HBS-2TPR?g?JLq3zIzr$EO^Z$o9|SNrzqT=`=+4KLBt>GX&# zla^%1ww)L*z`_?7`F-~2vg$5JOP+TH_`$pT4jkC`?#_Sg@YH3Tf4~31Pd|Nda+@|V zv-PO-+HAmjZ@mAFA9fD)?f*V}=XCXX>8aMWn}R~ut+rHkaGbr^Z5Us*;I<{TZHs#S zW0ASTPDQ9Fnoq|O4<1B)jLW$Tz&IHMCE1&z3E&kkR)drg&lX{kO%ja*0& zN)IPvdExaS?3oG@g&!Oc-6}G54&3fNFE-9~@!?oFXx0>{83k($Y#o1Wq>*J*ngW%@ zkFM~Ut>U#%p*Ls}I)A2kSfprpQO2)JXbn0AycU4Lt6|rOtbS5P;Pj%#B?>kJoGy&^ zkD7R|f3z?i>hsJNmqyfc!gVfIjEZcbpmh7)=ucrTU`23t@H!Zv^r#(HpmxBmkdkr0 zWJM-|J4hUGS#$7UP}Xb8*)z$_BsZH(>R5vU%8n)y@f>(L-M;nhN{3RXGc}l8sruG> zO>pyQXVUpTuP|H9+qP}nwkDp~wrx8T+sP9@v8|nV zYv1>++O68%`{DGdb8mm?TXpa0?thK(sW3*xydMYL%wnEf8l88wnXm4nLs1$VF1F5C=m< z^0OsOTsTCI{6`A{st_D%kTm&^5=GJIW^Y9UkVbiu{i@sYG83~Ws2;<>qZe*P#G8E- znL~<9SX5X;dKeQTtz6N(br))Mh6VdCMgMcO#W zmlgCpAM%=GCZR~HrO(EF7dpp1UIy|O*d`jiF?{_kL z1iLIm-L>4YyV1XBb&_g~0#eCdAnMD8i*VTrp|`PkKI|1gfG%-7F4~ly&yMp6J@*j^ zgf%n|udr@K609@35ia==-(d&*d}L_dE}ZIJ4*uIfC2j>*fw}99)|254Hj4T&b3Rv# z0$21kaI*T-bA#ZnQ`R-QX|8A3&U@YXWKfAy0>@^B*~B#zv2wIgjsurBM#+4jTPdC_ z2>zH!lg84RpfJejhbqpwUihLt$mrnM#k!Zwb9I)v9bL!X8q?eJcfyu>K&S8F+K3wz z&9wRHP<(CyMfQ7L{*N7ws%>_QU${8E9;Y1_51SC~FOwW|5AY0mFUQdvx0B*=RFe@5 z8`tuwWr;T)>lFQ%7KD;nSlchSy0N`u<@yHKTzdR0DGDiyDVD6d(lsUa1z(;68z8@> z3bLPtSQquUnQ!nMxj5FXSXI-#d;V&v^wf&W8PO&0s}Oh?TMy`5Ow!K#9=gNsf>B1mqqc`#*k+b^Ux~g)Sd(nm z$5~c5?)IWe*|rJdwI;g^4V#6z`I*J)kXp@d*1Ee)XS0j_>tP_1(oAz4)XHck^{Fg{ zie54eQLKMM6jii_f()4k++#RJ8v)%kOA4IUmLeUDx@D=_6YtP)UE4eUGU}LmBMu!& zT7r>6(6m8f?%+oSHAYpGAB%lSSNV9)f}ZZhSDM95%IDZIpR4m_F|>g1^ZSC13-!Ta z-q;F6=$JOw-XwGt$9C(v$8^b!qwfRI)A+&i)b!aeI;-lLE~8HoK%MCBvKUR1CY8r( z`m{Fiw=l*xz{E<02Z?w4-{XIyUQC*D)}wPoQ$Go1EL*$TMoB6D5=ANd~KUtR;v!IxSJN+jziV| zmS!+_d%q7SKA*o(Wc3?OsotPuLo|Q3lkd7rk56#)xw<@NuWR=0$Fj*tjV_0DfbnvG zyBwIM=Pwyqi-q7hJm3~_Q3PQPi0d=`%7TrQ<*K}ZdX7op#|xOXc|VtU!aK#*`rgWE zGC$RqZIx3tuxO3II@?ky=`?k#cmQ)xwDVH2P*AW~bkDdjC6o@PHM(I8eC5 z8I&o#Ev{7R3FC&q{x{q#q1_uPteoE)z%kk|3)1)+%QR81$CeQ#vJyHUzr9c(yH*S; zXHLZdSwyZ2FY-5u!p3V)G=fi)m>%RoZb#D%+YQ&%(PgdS4gXT#p({qULZMb`r%^z-PN@ZHb(2E7iv4!K0)6>CNc(zsDhH6!AvTZT6rmJPP_DWbA z<{-5uZf0^$XDPj8qJcJ-r1G=wU7Mmj%QoY9+Cm zchaL}2pl7Ue5Miam&AHWELLunG}Nr4fjwI+!$>&!F36<1!w`^^vBS#M7O*wtpkhb~ zEvWUsQ{$fY?5Z6jlTxrWIZ*40yeg~qvSdZlw3RHZ?DYe#mEFCqeAIk=soNfQ9;c^M zxx={MY5G0Nt;8gaG`^j$24K&1CQYUVIAFsI4tYsRF@FEPdGmIC~zQRn?X4RF=L} zl@4f-N7CE;^LI?Jm*dDB6YfEailXZa(=H}RB7Oo(tBBQu5Q|j`4MiDnWA=4TtMFR} zMt*{0eRU)3hU&l-s(TSv=c|cD)S3>473l@#AB`e`g_X_5Y#im(eBKSc#gnwTp&~ zlF!RU3z|d$#`ZKws~>EdQ0&?#A_%mdDaM355}(EG)PU;IQD=d;9m%u2vb%`y+?bO5_m`8 zIV$y4{W($SWX(qM%LY!3X6gqGKBN#%7!zxm^O`try(?0&7mbvBgjZq2pOqoTcsVT- z&7z#6kAgeLNQ7mu3sVjL(hw&a8f|c6pk0G8A+D9}WR#wrp%BJ4oVNaL50q?waq3Ru zjIZV!x-p53+rR10fh#AXu=$cFzYbzK`KgI{?H3}W4@@;m@x+7P@!|~z!W~E_Aq(sf z+EkvGKl!ZWHH+dca#Faj9VQk6x}J_9hib5d7S58hx&31bZCBjU==_BZ-a9(jqxo?e zp63aJgUoMKgC5w{Uik1&YM(d!xravA`p>3$!Mft4X}qm>=9kA`7KHEje0f9Y41r|` zxjx4SSs1bwYiue4z*ovXTXY$Lp+*zL`iDGXa0ABvah3sSy!4qSvL zi4oE93d9LC*i5>_a_+(tc$zzf@x10>&N0em3BhB#c6tT=^LWnn*6%L>WKwNc)t+rQ zkvX0nkc1p}+fPDKlgnqO9))~2p-lM*`z|BV$i-YEE}aSNO5b-3KN@q}DT4K_e8v@J zcLrrGHc51`i^5~-k|M!FRatDw)EcxQZ_+9#A36He4}Vxf4U7Y~&V>G!-fxDO-rHqT z49hO&!@6W1nW-*_a65r-gHijG7F%WJ&PnDs4N6qIG_BK1dj2Ij$ls2GK=nD86DlE} z)ch#Ma*jpZxhi_$I$FNdDtsm{(_*Kc?$L#rFgvNyqE_m8fvOEKtffn6<|f~ZUFvqm z)b^(V^&w#d3JKzS(pSqET;bRPbt9iW%8Mcp$(^51!Dc4_W$#ZX+`eD*3W!IIiy+2l zD?Td@N0H288#Eot5>7@&Mh!*DRkrcz+R6#ivDOeX$ z)r)yslFRGsKoOETT0CzL#$Jp0YU$Am4w@A6o}`NGmU0W;>aj3~KVNevfj`oz9VcEu zmN1ni_8b=S$d9fU$xOiXxBPV?NrQfa>+JujpvU(BTkFc>9Ve7{^%xEVZFYmkgiY&j zF)B|@7A?`Hw_iK|4j~sqdvFsUeY?8O0~PTv$~ZcgHMsBHX89__fSgS@o_2p`JIv@^ z`K)BP)XgRa|6S1?fC@WRh3PH4+TVd?V~LjU6~amUI6>4ADv_EatsJgD8`DD_XAqUO z%F6$^p%QDu9t|r5+m6z#o3+RuUS|I$>;3Wj7Z@63K<~Sn$mCiBUATtF_1hleo)I?u z2b!c*o0P!UInl@<>?5-xXl44EbtHN8Yj7r+J6whffhCiU9Q1rvT!eE6qqxD&WC{NmYTtXg0En8yr=}tO&trS7RpmF} zm4iOSkheF&p*0^;{Kzkz%|K8Q{Z5Ub0pn818f8dO2Z(;g6L=R>%s*bN?Ecy!x04*X zJ~yLj(YU3t@v#Ih+f8G6|K>o6oThpgg;KcB7u{-|Z!0-I?DD~R=h7DTUM}}~*L?x2 z#~f`_w99r|T!csB9MikdVOx{FE@#Ibd7vzPR;Uc0M@=0Z&#zhLW&yD5f8!s$-yg}D z`15IuLN;VTcpeL^5P&cy)Em1tby%qDy_X$!o4H_6GX?W0sU5{Gp(~6Tgd-2JlHS6z zq0oHM78NAiE$jba(d6!?1zqlIe{F6@c)m?u52=}_ihpo4lLROP&QO;Sy^|q?rb-fC3u?Hum6}s)Tmt{n3h{6Sd{7)xQHHS!S%gy8ZU&)D*t)a|wNOZ$`f=!i|Ni>o z!3?37a%L9klEJSXt3OyDo8)`&^$AeAA6X_>bdmEw?6{i}Yo5Di2$~{3=t~y}yxZp4 zxoj2h!xhm=u&n(4v;?VJRf(n+^c1LimCvDbfEe!M*<4ZLuIQS(aD_^ClPjaT0y2u{p+(<*hh?%h%(_ zK#dOnhyax5Z8}}xp2j=G*;58Nz;x)LbTgGUW>?McY-p>E25LQQBjC%U> zM%^=QTm=pXCbK=zY1vHA*;G3|)tJCu9-V8Dr{89Jn`!D*yp+F`t|$BthDSB>Rs2s+ zZPgOX!V$mKC-+a(zw>0(LJ;D=ruj%HIB|Rsy+T_+hf_6Qjdn-4M(g+BX!QLU&dYob zTY(fG%8A@n(HO;B4(^NR6WB5S^L;1hZ~gO@f7(dGGtW<2Ykj(DLA1sfQ%L&WP`<%{ z0Yc0O)&&#mvRFbG95)zsGQIadoZmYjTYgj_KWb;&l2R{7DSjeQr!0QTl*B?8;c7BP z720x2N={`-XZ_B*VPy(!#u6j8@Cpe)il?1c<5QdFlVbxmm!4whdzVV6-<=bm@JUPv z*na4&(xb8K}*;B3G0 z%6Yo^-@om)2Obx`rMD+hQ@DkCi#iSk>NwusJ*@e>N22Dx zonqnruw*?;pna+wO2w5>%jvD@TavZq^rY-c>HB6k+N8O+$ApOAu5)oZd-O*-2pwt^oc0$s$ehCgF^23VTTP8AltR8*&y@ zX{3Sf@nyAAuLnCzB98C!h)-v0ObGJrxV|e`eXmX}?F@SmP`Pkq)tk}a4{#7otu~VQ+i4YY*KcJ@` zf=7@mnTkFSK1|$ss=)5_=PlK_x8`Huw8yDd!aYt?fK&#)0<(F|iDfE1n>?v01h44d z2Wq#&*Oc4T9$$*Q3xl2jJBJW?`AoP)+xs`TvEV5j`ClET-h+hXJDtW*g>m$_rKTtyg+W9LQRHvN%fB< zwg}ZRZ_z`aN8%2ugfmIWXlrk?}X-m{v@I0SmU z?iT@oLMxczO-(N~wV}#1bz81VH8upLTQ6Ex%2I~l2R1@ozexcHh$M1aACKc?DwbV6 z?puFBKYF`#L7U_f@;ZH~c+gu4LMXE5s+W=Y52u5qh4Uh-5;6tsMM^f=?L6NdpqBO*+v+=?4;;Qq< zO5d?>(xm&yk4(g$neRl&W~{Q=V!I+cu?a`!Z~|M~2Ku1RTp*it${|M_{{1}^6aP|l zqsXiKYe5wp))f_G!x%wU?|-rYF0@+M<qQ{w`ezR;XuXcRGlEj- zJrJhYv9mija`6^MNF&d{{o`tFl^$KT>>nNyfjEyKRK%14g@VrweM}>od3JkU`wdw154l}2Th+A32y-zT&N$i4k5(th4d*~>pKcBZ#rz!x)e$@xayog3zro17Sh z4_m2sCTc}db1WZ}+>C^~bgj^j@#$yP3Z~^!XR%ObVf`HpgoE0R&nHeFd-44E0C)B< zjVM_AP8$n)6f>P&1`?WA(BeGpbf2V74}Y!Uf?|PUQ4lD?oU0NcUpT*pv2jcr5rgVW7ji>ZjPw{= z09}|c@xBHM&xf|1h__r<;lbOq+6kp6z!Rh zak@|q(|V<7k>YuHHcGvBDwHp&CV!jj&QYy!+`+-0x3f`5kH5Jm@?lXu)|*E87xMO% z>FoZr@B^JP8~GuGhZte780f!AgQHB6E|7KC&ecmY$HJ=?OPON5Sa@+OxDNJpI!mhe8s!VE8o>vVW zDLkZzK&(EdtJ0jn5oAfUS{utL;JK0sQ9pnt@r9g)paR(*m;RNw3oHo>scyh;qdi&Ueddl z6GS9FX$2Zt9Q#Ft!&^9nF`~z6N&}1Y7ll7eF@OLJAM;m#1#b5V5wHn!P~I~ zp&O_>{Rt=6$rYknGe4aEnVE3~wisT{wlYUs4@%kAf}h6UL2F>AF>eSn7yL2`k>lP~ z%H?`FodpY9Am%XZ!pTal5IgAe9$SakZJWAS=1>70+bL@;zRTdLKh!h!728;-pHM)K z60cIB$O#o2j?VvrHYY?L*fGV;J-r?TNu-{{A;NM?EXr;Qf(tPM`~g)%tT~3{>%}b= z)?h%!QB*V!WnrT?M6PO=WwHSLR98s(rD%XQ#bUEeT~G4*VNlFa?7$!3O91;&iIkN7 z4S@yKIgtF1iZ#i!8Q}au@sDxy#CzfiWoQ1VQ6D%sT)gYUK2RL1}Qe!8lCUuDg@ z(Dkhz*?kX6*3Sk=%0&W8qjfiitY7# zS|aE%cYJtU`_jp(igde#%Q0SLQgHV6Kgo4@x4)PiBZc>|)gs{YO~G9@{A!&?KkZR!982U0^cF{&Z~jzY+)mifl<-j` z3We66@JaEvr^H1E^Q}NE;&IrVrn;#A(Hev$iT;;B456MqC0l;q(JnHxKqV!o2im)A z2@3>zB-7iKj^xjBf{+1#SYN=i?KcPZ2Ns6FMfH!ee44xf3CeS%(YX(HNWUx{#yYCa zz0rDBbeKho@BIyFSo(sxqv}@??{kUsl5f^7tzPz_U z?(cqu9~GEdb`U4#LBWre^vx_IMB6MX=p1m@ti1h`5b0?Fe^C8^dxa@-eZlGi!!%Wh z>TnMHLOBBY%y-6fA3afIUZ4SAWIm!+-54175ZeevSF_&xQWQo9AMubGn@NY^3m#m$ zM_7UIEgLIF;teZh$-lEdt;wfG-snS0F_*K%JaU=W48o|g5E37Fl zexM%cm+P?W*e@%rt&(-egFq1_9CjEq)o>TL6j#~txmn$UL`Zl#-5UR z*Z~btbX}lpktV87Kn2416yyrcm7^=zmeiI+mQerEZL5}imL!(2AL7;^%Me1%B#m%% z_Vc}PqOqDUu3@tHTtq{Ol!MihHOQ1rnFetv?)h@vlw&9v43&Ix8ndQrASFZYsLvQa=k&x5{9vkjk<6^pWHP87tNU<<#jYv znbf(9aSU~ix?wq%gfg$xG5)z_n3hZzD7^msX3Hfi57UBWBt(qgCYjsFr~$B(UaklT zGvK;~>r*jyCsP=hU>vuZo*4}lZ2tB?E#}T`S?wGLf8*?6&X>;<+dwZBNo|=5OQa&R zqKgRQM7WHziA-WDXc_lfJJdiHfY^0~_ymDBepGuYnQZ$AU;_cmAMqMRnoqn|IN za~5cmttM`bMh{(>n++McGkmb4wQi_r&0YN68-%W1mvG?TRPjH;nShV&IOWU&^E6^i zN9yQlA(pw=hwCN^d^ovaLCC^_V3`F4scH>)@R}j$Krd1guI5t9g8NbUw!nfWY|Giz zU^SSQxYY<*gGv!08%d{c{u0CEmC zqok%mO-#iVmW;4C=~~2oe2uyG*T##|jMb)Jk@DM7S%|93wgz14Twi~sZ8ioGGkWbp z3yORQbnWRE3);vfRE5%n84FjZFsWX_(j~acSh&Lb9Um+ zT(o7eA1e2gH68;%RAKj8K|nw}vrP<54Gj&Ac=`5x#Y}norZph#-64_MjeS>sihqB9 z=LIGGfge6HG&BY|0|7Dp1-ts6eN0|v`}_MRZU}#JVq*uAj0alLfcU^b%>26_t1e@M zCWKV$^}rjGMH`OJ2Cgn8n@k&34ir1CC+LYJfQuyA7b6L#aIyZt{z4om>XYuSQDaf# z+igy&mf^4L>g?QEPMTV@*f)4fqu{ah)-Rb*R5{YA;H^=x4L}?7bWTJM#gafp<|CtL8URQHJHfb(q8bfIkzRjPi8E zbMR8VCO%i53l-dWqL7W)!85X@iGZepxh#AXr{ft}G->vWSuNRN5^Sw(N`&AoGqn9r zW?ij-z1>BhXKWad5}>P%oBA zee$ustjIrTy}3#J#9{C~Y)5W=Y{|Lsq2}=SZQL~v=p;qh+u$8)mV&;8?DObZjaP?d zlSB6~;@#)mi!BFgbrwVU_U8reVvKW{6N?`>pSwu^2S(U{NFC~>B%(N9H}Y74d)g)3 zZJyx0)xE9r9{sy>F>AL-$z3zT{X(7kOKIbUt*QE8b(Ac`mrjq_)4BW?`0gpA#!?^R zkwYi?Y|@*RgA1-ktcN#ujrZ5qnNnSaRw&rL)@L3|>%ge;r`OcE3{eEXz}`L0uWR9$ zs+ecrFX_+T8gJ`TsFpW^kRx`87d^oqHBq`g#R&IletSSyj9WiXNXv@G^Ckpvi9n&I z4$vcKCa%>x*Oa_^sk>$?m=jV1}dKxp*&ViPG*)QjrQ0uzjuF1Jv zXGJC_;B;)tT=x;mtF7=;xK9G%(raUopur&}_j*-Cr>VT}>l7Yvy|L{Je$yw0GAkws z({puNd#LNzjcUrfjpn^`&F~20d+V89lIo*6Yk@bmJ9{8c-w}?4V>K=O$21DbnD_uG zx`U<3DoZZ>w^kZ?h1vH@zsRmWeMk51_3XW$ z{6b#f#CIbAjt z6P>vW21pQAs1%~f%33&g=J&z!b^+caq?CVV3j*9fQAU+`x8@}IG0l)>+R6Fti~k1A0lx}g3RIM5(;_7glACnP7_}~@6adqq0^mZA6_}&IxmpA;=6qmVEhr4nnmS-`F-5tm1q#+j|T$?PMrAf4f?AwxMiXNosq8}vUMXb zO`+a0>pD>$lj&N#?|pz-XI2J@AsF-4AGtIctJG(tjw|X1J|rzDx6bg_HqON@584r< zZc|Lq_EOpBkDkrB*Ct?F95?v3fxF_~cBU9v>67Lk8?xJUOB=z2I$RMtdpWW@?E7s4 zRz7b!7l9HmnI44>nA{#J4u~vU5rpqI)&d{OrzugpP&YRq+=%-DI2Ppa{1HI6NbZOV z7w~^1K$(ciykWeO6D3!?kO0V*xT0^)d!C>bR9=OJ1JZMfd0!X>`KADzz8Szf_T3C~ znXIct;U1pN3BZlOVRmTmN3U+a1V(og!1vEuG_X4~b@D>*III1~NmaGMP};d=`%K4p z_yPRB1M`8-@OGgG!g<>(#&uv95$5idQ|kA=?2g4XXfLnm;xA{ydwjlu2#OnDX@CBm z6P0spi+!#h{kf(v3&y2fMW^`Xc_EpyySuzem+avva!P373*kzO% zl_qADVt-W;Q=It8RE7v|s-@)V&Q^_Q!@4(ySBYEcx6a~{oy=xa2p%K;wjYhRLrr=r z77@>iBZKV3){V2?f=e;$Lo@GGbC8v0RKa-^SP_sOL=)`tW?($rhr}C{%F=MY@l1lx zHMwQV;v%(cmeSo`3ck-X3-R*wmleSZnow{;6?L)nx(bQ>1kkf=1LpV?$&=d&9N#JN zkT#PDdb&ZFdgd2!uipR;g!@BtTbKl&Yq0T2rwVmnRLo$2S7@2RsvD@tE+Kwr2f|e81 zE+oC^^0xGLvMDEMoV3PPxY<;up%>MRqbW0p9*sgXbiaTc%6nWs6u>0DDT?#%zDM^< zh)WBOgN6$R%B>l^?#f*+M$b90FYcN2Lvr5_mcU-jgn7qtHvRI#VQd#aI|3gl6Qly; z=ds|hid)~BrR{SQz<~EW=pexLp5a05jgbFJ^ock~2EP;0Z}f&|#DG67vF97}hW)@h zW2^9wR74!uvp97M*E8dsI;kB;w{2;6uscO&$Bo==Vl=lyuYwL=8lCv-==e5ZFR zy!huiUgZs5Qt=-RU1QtKdIbboKn$bhhxrV3AJTRgj%B^?yMef*`D&QH_A62X}V0M)&MAU{=7&Be%INeD`-&=u28+3{x3agKlm6|5oa`0x?IBu!8}8&wv||)m$zgk@UH3RJ<@01ORv*&UQkbKZ zZfy{tOt4F&Jx3=#pY~UA&gvR}OT30%#Xtzm^tUHcX(ijzM!xP7WCy{w+cyKNn2&qT zcNFx8dVwhWAp8I`>&bKdul$mGigY4>2IPmV;MC7hI5-4DelQSxN>I6fxnfGvt~II< z+GyW)v7Ak@;kwz^R<2@y`;CGj<-SRPrt(_rwGn1Hl`JVH!fg zZp`inHE_ZK2MQC^24OkLV-AbskJp)Xi26(3u#nfWG2BUnzb~fiV$i#^n2v}7beKx+ z1lsxor7CUR((g;o&WoEq=slB!NlQ#ikGxR3$aC@ytiRrm4@;Gf`0*F6 z2Rn6_6BSmEXX&E2NVFqL?KGOhnypc<6EAf|rP`0X;wmy!tPo7orDiHVlDfB8)wZs14g`Y`>YFE8D+t!j+#PKjUg{YS{_IVdIx7*Li&5~fuqR0}m zzAGQmTp66he@C8Tn*nY3D&PF|^*Q6OM^3**Z@4PFG*A}3z6qH=LB+^39&TZ0qt}o< zv;8z6To1+@-PAISDX=w5+oqD&QnP6l3^Ou%8n;{7Qt4ue7$>LxUGW)DOnrV+Q}yu~ zmBml8#~&{K@(ZNfz1w~c8dOxWpM3%^IG728XeIX2dU>7nZYF1`OEnd^%55d~kl?|r zrbMt@<3mVj`9Fske-zcjr4GSpLgNmM)xpM!UhllAr@tXx~~U`uE&^(fCUJ*|D+F>0Vub_ z(MQk#q}yR?!)*ZC?Fh9IxB&5XX!~#-fOaQlMw zLhlAU40!;$ZunmKKS2C{3Ir1lDFDiDSYEh3e)vQ81se=G0NQRKKM?#80|EsG^8m9q zm@hOR@LveufdPYkfZZFy7lu+Kq(6+Y*i*&`_Z9e#KVdb8jqnDPbi*f|AZmwW9Zj~t zIYy=(UABI-4c9o@Y(egZZtlCc^IZkaTm^US+qd&v1^Mjjw{u*DyzgVhnLtl! z3W3R0?}N+l`?m`a1VZf#c`_0NS2@CzIYC<7D)Pc1j{Ulkb9hyV;bA#OM^}k_s)b)6cL5H!@E`bJ1pi*tu)tp4EyIh(2ksaCchL86z+T_2z>9%2G7^eXCUbHL-jP)# zjB2qFPJxp4zZG|gn&MbXlZ{aJl4(nqjo{Ye8cUmv@Ey_31@~sYOF^Cm`DT_&;jRVy zW}ZtSp9TG9j!TjE1*}+=-+xt!Lu4x#z~vVFn+5O%p%#Q(8S#ayETc-T!p%<=xnmH@ zegP%9qvA?UfSTNKab>7LQSRUJr7A#G?pXOU7N9J5^h~J>P`7g4%Ty@`XNgpd&RQkH z_Marcxm?1}d7_BzP(_efj8)>kSunaeb*2m!DBKxIUn&Ds?u?-?qX9~HM%9+u0JS^g zYRhne;+?4oAQcgO!-c<^e;jOAp@-*WH(wHowq-r4&E}|dwA5}^t$+IJb}32PSEayTxbHfb z@3pcNI6&mMj$Kyp&X!uIqLzwul`Ztzutj8D`R?w8!<|6o*d9uyG`zcc6acwajBAYE z;U$>L%BmSps#5EM<@Hlh6oBoq_MJzXmp>dzPu;e9VPITpQ6E)fS5=neh_Mzf|DBY) z#kE&CI#btGv20oVz$`wm-JF)0Z~Cwwy}$HNx6|Z1(m74tM11X7oZ2WjT8lL<#~9R> zSih9ljNH6;XSqOo(dsgAQKi9?&xBt_Ofit%fO6p*q$JkM887nJ=fm-`sDDg`61e8k{}G z`>9v^#``})6gz_nC!#`fF-pL7zinD_@~BO&Hr&-;HY6hwgPf=E>z}Dv{lVdNssh0F zy~uE~+JE(Y7O0nMzVfYJdwB@!iqcsR)DDx}4^K}Te(nE4A-r||;ZsxDLNbQEa+zmm924D!y}qE`j0(cw%8g>VjGXG;^1eHX19qvnK|DWGdK8c;mYF~m^km2)N0G# z+acU}PYg(|{q}wgT&0F;lYKVrSRjl7lNxi@9^vdHWg?@vcaFqzy6{h%&cHL9i4I0^ zunBdDzvHr9I&{JlzVJ_-=$SEYuwxP7yA?vg4<$dSM|^QS>cupPrVuR(napy9y@iF& z*m3l)U$td+VLy|BqiP&^Sr`Z9m_Yn-#`>yUkNa}-cG~HjZ7dSkG6IELDI8(8bQPDi z->SP6)om(@U@EphzTquVyJbk4Yq$<6@~4ehvUCsYYDLX`=Y(f>B2;}2z7bE!i$%n3 zSG^`2y*!wcqk|%&^;%qCdxm+4;CJSFXCtSu;x8C2>3D^aJLB&)eeU{WRiT+Ob&DeR zb*I`{|G{yg)xF5QO+9pX&p~$!%Ki4k`{t-sMGw{RX&VmCDT&xCq{;E~y>p(jCZx9f;keo|<~ zil$7BWv7x}^->yY{Ab&MC zA-*>H_b7*h`X`Tzw!zGC_{SwFmVX8BH?Qx_6Fpe6KXXQc5g>dSC)2|FIpOG_Llzjy zAr$P53h7~iWY=cF1Pr8$`&G+jxo3wPc;~!T87GXG?<5SnD0jz}TahBLT^$)GEXNmS zTvo5fSW%e6bzGAxBRu$loav+!B)xs7kP;2VL6V&p()C6fr8XsJrcP4kRFKHKlD)mH zW36##Qqcxkl!!j_8!gW6t=5$C`OF1)2f#OTy04qFwZB$z2qO;t&twuT~;5c*ENEE=ZfA)zq*8CZ8#0$}| zor^Y6snM;KG=gJrW{*Ad{?(bJZ6$y=Y{*8|KT-!_@pPpp&x8KY|ZxgYgGfzq(Ts9l~Usv*3=Q|~qX4|Ok4XkqnWEbrn~>>AO|v9ZsgUe*QZ5OCj3PM> z-8;ci^6--vmFzz01Gd}o;Wf#`_5Gks8WA$8zsiy7sNra(XlhjC#pzRGe(!U)Y9_ub zE1dDNFqVz9dZ2PJmdb)jKQhtg4oy4Nv7?dQtWt_8Wt61MvvAVlsKnHwpsB!F`N_k0 z@iFJx14n6;v6O!r>mnTlW3Ad`5iGU7pG)U0YM`u37CmX*QjNW-B- z!1H4e7ZZ^~5SNzA!WcIu+NT&}ucK{65&jgGHL9m-$4VtL|5vc?zk|>Q;#x>%Ldg)s1dM-!%YPPQiF<5k9X{l5jPOl+jaRu*E8bLP8QGBqUD665Mi zu%~&7yewF+|5wyQ{C>uAM{Am=%FBZ7y81Y0xw|RTL;ZdxN`;*5w3<9;xwt9QRXu6O SdSQM28?+M|D(2r_;{O0|uQ74} diff --git a/demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.woff2 b/demos/streaming_asr_server/web/static/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60404b91e398a37200c4a77b645cfd9586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77160 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 diff --git a/demos/streaming_asr_server/web/static/image/PaddleSpeech_logo.png b/demos/streaming_asr_server/web/static/image/PaddleSpeech_logo.png deleted file mode 100644 index fb25277540c9023c8a7d010e22e7e033ad0d74d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73215 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�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 diff --git a/demos/streaming_asr_server/web/static/image/voice-dictation.svg b/demos/streaming_asr_server/web/static/image/voice-dictation.svg deleted file mode 100644 index d3597149..00000000 --- a/demos/streaming_asr_server/web/static/image/voice-dictation.svg +++ /dev/null @@ -1,94 +0,0 @@ - - - - 背景 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/demos/streaming_asr_server/web/static/js/SoundRecognizer.js b/demos/streaming_asr_server/web/static/js/SoundRecognizer.js deleted file mode 100644 index 5ef3d2e8..00000000 --- a/demos/streaming_asr_server/web/static/js/SoundRecognizer.js +++ /dev/null @@ -1,133 +0,0 @@ -SoundRecognizer = { - rec: null, - wave: null, - SampleRate: 16000, - testBitRate: 16, - isCloseRecorder: false, - SendInterval: 300, - realTimeSendTryType: 'pcm', - realTimeSendTryEncBusy: 0, - realTimeSendTryTime: 0, - realTimeSendTryNumber: 0, - transferUploadNumberMax: 0, - realTimeSendTryChunk: null, - soundType: "pcm", - init: function (config) { - this.soundType = config.soundType || 'pcm'; - this.SampleRate = config.sampleRate || 16000; - this.recwaveElm = config.recwaveElm || ''; - this.TransferUpload = config.translerCallBack || this.TransferProcess; - this.initRecorder(); - }, - RealTimeSendTryReset: function (type) { - this.realTimeSendTryType = type; - this.realTimeSendTryTime = 0; - }, - RealTimeSendTry: function (rec, isClose) { - var that = this; - var t1 = Date.now(), endT = 0, recImpl = Recorder.prototype; - if (this.realTimeSendTryTime == 0) { - this.realTimeSendTryTime = t1; - this.realTimeSendTryEncBusy = 0; - this.realTimeSendTryNumber = 0; - this.transferUploadNumberMax = 0; - this.realTimeSendTryChunk = null; - } - if (!isClose && t1 - this.realTimeSendTryTime < this.SendInterval) { - return;//控制缓冲达到指定间隔才进行传输 - } - this.realTimeSendTryTime = t1; - var number = ++this.realTimeSendTryNumber; - - //借用SampleData函数进行数据的连续处理,采样率转换是顺带的 - var chunk = Recorder.SampleData(rec.buffers, rec.srcSampleRate, this.SampleRate, this.realTimeSendTryChunk, { frameType: isClose ? "" : this.realTimeSendTryType }); - - //清理已处理完的缓冲数据,释放内存以支持长时间录音,最后完成录音时不能调用stop,因为数据已经被清掉了 - for (var i = this.realTimeSendTryChunk ? this.realTimeSendTryChunk.index : 0; i < chunk.index; i++) { - rec.buffers[i] = null; - } - this.realTimeSendTryChunk = chunk; - - //没有新数据,或结束时的数据量太小,不能进行mock转码 - if (chunk.data.length == 0 || isClose && chunk.data.length < 2000) { - this.TransferUpload(number, null, 0, null, isClose); - return; - } - //实时编码队列阻塞处理 - if (!isClose) { - if (this.realTimeSendTryEncBusy >= 2) { - console.log("编码队列阻塞,已丢弃一帧", 1); - return; - } - } - this.realTimeSendTryEncBusy++; - - //通过mock方法实时转码成mp3、wav - var encStartTime = Date.now(); - var recMock = Recorder({ - type: this.realTimeSendTryType - , sampleRate: this.SampleRate //采样率 - , bitRate: this.testBitRate //比特率 - }); - recMock.mock(chunk.data, chunk.sampleRate); - recMock.stop(function (blob, duration) { - that.realTimeSendTryEncBusy && (that.realTimeSendTryEncBusy--); - blob.encTime = Date.now() - encStartTime; - - //转码好就推入传输 - that.TransferUpload(number, blob, duration, recMock, isClose); - }, function (msg) { - that.realTimeSendTryEncBusy && (that.realTimeSendTryEncBusy--); - //转码错误?没想到什么时候会产生错误! - console.log("不应该出现的错误:" + msg, 1); - }); - }, - recordClose: function () { - try { - this.rec.close(function () { - this.isCloseRecorder = true; - }); - this.RealTimeSendTry(this.rec, true);//最后一次发送 - } catch (ex) { - // recordClose(); - } - }, - recordEnd: function () { - try { - this.rec.stop(function (blob, time) { - this.recordClose(); - }, function (s) { - this.recordClose(); - }); - } catch (ex) { - } - }, - initRecorder: function () { - var that = this; - var rec = Recorder({ - type: that.soundType - , bitRate: that.testBitRate - , sampleRate: that.SampleRate - , onProcess: function (buffers, level, time, sampleRate) { - that.wave.input(buffers[buffers.length - 1], level, sampleRate); - that.RealTimeSendTry(rec, false);//推入实时处理,因为是unknown格式,这里简化函数调用,没有用到buffers和bufferSampleRate,因为这些数据和rec.buffers是完全相同的。 - } - }); - - rec.open(function () { - that.wave = Recorder.FrequencyHistogramView({ - elem: that.recwaveElm, lineCount: 90 - , position: 0 - , minHeight: 1 - , stripeEnable: false - }); - rec.start(); - that.isCloseRecorder = false; - that.RealTimeSendTryReset(that.soundType);//重置 - }); - this.rec = rec; - }, - TransferProcess: function (number, blobOrNull, duration, blobRec, isClose) { - - } -} \ No newline at end of file diff --git a/demos/streaming_asr_server/web/static/js/jquery-3.2.1.min.js b/demos/streaming_asr_server/web/static/js/jquery-3.2.1.min.js deleted file mode 100644 index 644d35e2..00000000 --- a/demos/streaming_asr_server/web/static/js/jquery-3.2.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" - - - - - - - - - - -

-
-
-
-

PaddleSpeech Serving简介

-

- PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发。PaddleSpeech Serving是基于python + fastapi 的语音算法模型的C/S类型后端服务,旨在统一paddle speech下的各语音算子来对外提供后端服务。 -

-
-
- -
-
-
-
-
-

产品体验

-
-
-
-
-
-
-
-
- WebSocket URL: - -
- - -
- 识别中, 秒后自动停止识别 -
-
-
-
-
此处显示识别结果
-
-
-
-
-
- - - - From 7fc81fe9d9d7e3848b0af0e3cb7e7e5537a59b7e Mon Sep 17 00:00:00 2001 From: Jackwaterveg <87408988+Jackwaterveg@users.noreply.github.com> Date: Thu, 30 Jun 2022 16:50:32 +0800 Subject: [PATCH 14/27] test=doc --- examples/aishell/asr1/conf/conformer.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/aishell/asr1/conf/conformer.yaml b/examples/aishell/asr1/conf/conformer.yaml index f5e7070f..0d12a9ef 100644 --- a/examples/aishell/asr1/conf/conformer.yaml +++ b/examples/aishell/asr1/conf/conformer.yaml @@ -76,7 +76,7 @@ num_encs: 1 n_epoch: 150 accum_grad: 8 global_grad_clip: 5.0 -dist_sampler: True +dist_sampler: False optim: adam optim_conf: lr: 0.002 From cf846f9ebce0ca2bb0c6bf29d4b7740c5e845b46 Mon Sep 17 00:00:00 2001 From: TianYuan Date: Thu, 30 Jun 2022 12:12:59 +0000 Subject: [PATCH 15/27] rm extra log --- paddlespeech/cli/executor.py | 2 +- paddlespeech/cli/tts/infer.py | 6 ------ paddlespeech/t2s/models/fastspeech2/fastspeech2.py | 4 ---- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/paddlespeech/cli/executor.py b/paddlespeech/cli/executor.py index d390f947..d4187a51 100644 --- a/paddlespeech/cli/executor.py +++ b/paddlespeech/cli/executor.py @@ -217,7 +217,7 @@ class BaseExecutor(ABC): logging.getLogger(name) for name in logging.root.manager.loggerDict ] for l in loggers: - l.disabled = True + l.setLevel(logging.ERROR) def show_rtf(self, info: Dict[str, List[float]]): """ diff --git a/paddlespeech/cli/tts/infer.py b/paddlespeech/cli/tts/infer.py index 5468f257..7c837761 100644 --- a/paddlespeech/cli/tts/infer.py +++ b/paddlespeech/cli/tts/infer.py @@ -267,21 +267,18 @@ class TTSExecutor(BaseExecutor): with open(self.phones_dict, "r") as f: phn_id = [line.strip().split() for line in f.readlines()] vocab_size = len(phn_id) - print("vocab_size:", vocab_size) tone_size = None if self.tones_dict: with open(self.tones_dict, "r") as f: tone_id = [line.strip().split() for line in f.readlines()] tone_size = len(tone_id) - print("tone_size:", tone_size) spk_num = None if self.speaker_dict: with open(self.speaker_dict, 'rt') as f: spk_id = [line.strip().split() for line in f.readlines()] spk_num = len(spk_id) - print("spk_num:", spk_num) # frontend if lang == 'zh': @@ -291,7 +288,6 @@ class TTSExecutor(BaseExecutor): elif lang == 'en': self.frontend = English(phone_vocab_path=self.phones_dict) - print("frontend done!") # acoustic model odim = self.am_config.n_mels @@ -324,7 +320,6 @@ class TTSExecutor(BaseExecutor): am_normalizer = ZScore(am_mu, am_std) self.am_inference = am_inference_class(am_normalizer, am) self.am_inference.eval() - print("acoustic model done!") # vocoder # model: {model_name}_{dataset} @@ -347,7 +342,6 @@ class TTSExecutor(BaseExecutor): voc_normalizer = ZScore(voc_mu, voc_std) self.voc_inference = voc_inference_class(voc_normalizer, voc) self.voc_inference.eval() - print("voc done!") def preprocess(self, input: Any, *args, **kwargs): """ diff --git a/paddlespeech/t2s/models/fastspeech2/fastspeech2.py b/paddlespeech/t2s/models/fastspeech2/fastspeech2.py index 48595bb2..ec5ed984 100644 --- a/paddlespeech/t2s/models/fastspeech2/fastspeech2.py +++ b/paddlespeech/t2s/models/fastspeech2/fastspeech2.py @@ -258,7 +258,6 @@ class FastSpeech2(nn.Layer): padding_idx=self.padding_idx) if encoder_type == "transformer": - print("encoder_type is transformer") self.encoder = TransformerEncoder( idim=idim, attention_dim=adim, @@ -275,7 +274,6 @@ class FastSpeech2(nn.Layer): positionwise_layer_type=positionwise_layer_type, positionwise_conv_kernel_size=positionwise_conv_kernel_size, ) elif encoder_type == "conformer": - print("encoder_type is conformer") self.encoder = ConformerEncoder( idim=idim, attention_dim=adim, @@ -362,7 +360,6 @@ class FastSpeech2(nn.Layer): # NOTE: we use encoder as decoder # because fastspeech's decoder is the same as encoder if decoder_type == "transformer": - print("decoder_type is transformer") self.decoder = TransformerEncoder( idim=0, attention_dim=adim, @@ -380,7 +377,6 @@ class FastSpeech2(nn.Layer): positionwise_layer_type=positionwise_layer_type, positionwise_conv_kernel_size=positionwise_conv_kernel_size, ) elif decoder_type == "conformer": - print("decoder_type is conformer") self.decoder = ConformerEncoder( idim=0, attention_dim=adim, From 20a9a6792562f2ea21a84e888cecbc26af0c785e Mon Sep 17 00:00:00 2001 From: huguanghui <15286669@qq.com> Date: Fri, 1 Jul 2022 00:52:23 +0800 Subject: [PATCH 16/27] fix log issue #2070 --- paddlespeech/server/engine/engine_factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddlespeech/server/engine/engine_factory.py b/paddlespeech/server/engine/engine_factory.py index 6a66a002..c4f3f980 100644 --- a/paddlespeech/server/engine/engine_factory.py +++ b/paddlespeech/server/engine/engine_factory.py @@ -13,7 +13,7 @@ # limitations under the License. from typing import Text -from ..utils.log import logger +from paddlespeech.cli.log import logger __all__ = ['EngineFactory'] From ddf14662ca1b76fdf2843d447d2972aced2e927c Mon Sep 17 00:00:00 2001 From: huguanghui <15286669@qq.com> Date: Fri, 1 Jul 2022 00:56:03 +0800 Subject: [PATCH 17/27] fix log issue #2070 --- paddlespeech/server/utils/log.py | 59 ------------------------- paddlespeech/server/utils/onnx_infer.py | 2 +- 2 files changed, 1 insertion(+), 60 deletions(-) delete mode 100644 paddlespeech/server/utils/log.py diff --git a/paddlespeech/server/utils/log.py b/paddlespeech/server/utils/log.py deleted file mode 100644 index 8644064c..00000000 --- a/paddlespeech/server/utils/log.py +++ /dev/null @@ -1,59 +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. -import functools -import logging - -__all__ = [ - 'logger', -] - - -class Logger(object): - def __init__(self, name: str=None): - name = 'PaddleSpeech' if not name else name - self.logger = logging.getLogger(name) - - log_config = { - 'DEBUG': 10, - 'INFO': 20, - 'TRAIN': 21, - 'EVAL': 22, - 'WARNING': 30, - 'ERROR': 40, - 'CRITICAL': 50, - 'EXCEPTION': 100, - } - for key, level in log_config.items(): - logging.addLevelName(level, key) - if key == 'EXCEPTION': - self.__dict__[key.lower()] = self.logger.exception - else: - self.__dict__[key.lower()] = functools.partial(self.__call__, - level) - - self.format = logging.Formatter( - fmt='[%(asctime)-15s] [%(levelname)8s] - %(message)s') - - self.handler = logging.StreamHandler() - self.handler.setFormatter(self.format) - - self.logger.addHandler(self.handler) - self.logger.setLevel(logging.DEBUG) - self.logger.propagate = False - - def __call__(self, log_level: str, msg: str): - self.logger.log(log_level, msg) - - -logger = Logger() diff --git a/paddlespeech/server/utils/onnx_infer.py b/paddlespeech/server/utils/onnx_infer.py index 1c9d878f..087eb9c0 100644 --- a/paddlespeech/server/utils/onnx_infer.py +++ b/paddlespeech/server/utils/onnx_infer.py @@ -16,7 +16,7 @@ from typing import Optional import onnxruntime as ort -from .log import logger +from paddlespeech.cli.log import logger def get_sess(model_path: Optional[os.PathLike]=None, sess_conf: dict=None): From 98cfdc4c0531406b4787b4aafecb45f371548a8f Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Fri, 1 Jul 2022 02:42:56 +0000 Subject: [PATCH 18/27] fix nxpu --- paddlespeech/s2t/exps/deepspeech2/bin/export.py | 6 ------ paddlespeech/s2t/exps/deepspeech2/bin/test.py | 6 ------ paddlespeech/s2t/exps/deepspeech2/bin/test_export.py | 6 ------ 3 files changed, 18 deletions(-) diff --git a/paddlespeech/s2t/exps/deepspeech2/bin/export.py b/paddlespeech/s2t/exps/deepspeech2/bin/export.py index 049e7b68..8acd46df 100644 --- a/paddlespeech/s2t/exps/deepspeech2/bin/export.py +++ b/paddlespeech/s2t/exps/deepspeech2/bin/export.py @@ -35,12 +35,6 @@ if __name__ == "__main__": # save jit model to parser.add_argument( "--export_path", type=str, help="path of the jit model to save") - parser.add_argument( - '--nxpu', - type=int, - default=0, - choices=[0, 1], - help="if nxpu == 0 and ngpu == 0, use cpu.") args = parser.parse_args() print_arguments(args) diff --git a/paddlespeech/s2t/exps/deepspeech2/bin/test.py b/paddlespeech/s2t/exps/deepspeech2/bin/test.py index a9828f6e..030168a9 100644 --- a/paddlespeech/s2t/exps/deepspeech2/bin/test.py +++ b/paddlespeech/s2t/exps/deepspeech2/bin/test.py @@ -35,12 +35,6 @@ if __name__ == "__main__": # save asr result to parser.add_argument( "--result_file", type=str, help="path of save the asr result") - parser.add_argument( - '--nxpu', - type=int, - default=0, - choices=[0, 1], - help="if nxpu == 0 and ngpu == 0, use cpu.") args = parser.parse_args() print_arguments(args, globals()) diff --git a/paddlespeech/s2t/exps/deepspeech2/bin/test_export.py b/paddlespeech/s2t/exps/deepspeech2/bin/test_export.py index 8db081e7..d7a9402b 100644 --- a/paddlespeech/s2t/exps/deepspeech2/bin/test_export.py +++ b/paddlespeech/s2t/exps/deepspeech2/bin/test_export.py @@ -38,12 +38,6 @@ if __name__ == "__main__": #load jit model from parser.add_argument( "--export_path", type=str, help="path of the jit model to save") - parser.add_argument( - '--nxpu', - type=int, - default=0, - choices=[0, 1], - help="if nxpu == 0 and ngpu == 0, use cpu.") parser.add_argument( "--enable-auto-log", action="store_true", help="use auto log") args = parser.parse_args() From bc93bffbb423eb5d803c2997d540b1d0731089bb Mon Sep 17 00:00:00 2001 From: TianYuan Date: Fri, 1 Jul 2022 08:27:16 +0000 Subject: [PATCH 19/27] replace logger.info with logger.debug in cli, change default log level to INFO --- paddlespeech/cli/asr/infer.py | 40 ++++++------ paddlespeech/cli/cls/infer.py | 6 +- paddlespeech/cli/download.py | 16 ++--- paddlespeech/cli/kws/infer.py | 4 +- paddlespeech/cli/log.py | 2 +- paddlespeech/cli/st/infer.py | 10 +-- paddlespeech/cli/text/infer.py | 2 +- paddlespeech/cli/tts/infer.py | 14 ++--- paddlespeech/cli/vector/infer.py | 61 ++++++++++--------- .../s2t/frontend/augmentor/spec_augment.py | 6 +- .../frontend/featurizer/text_featurizer.py | 12 ++-- paddlespeech/s2t/models/u2/u2.py | 4 +- paddlespeech/s2t/modules/loss.py | 7 ++- paddlespeech/s2t/transform/spec_augment.py | 7 ++- paddlespeech/s2t/utils/tensor_utils.py | 2 +- 15 files changed, 98 insertions(+), 95 deletions(-) diff --git a/paddlespeech/cli/asr/infer.py b/paddlespeech/cli/asr/infer.py index 24839a89..52cb7cc8 100644 --- a/paddlespeech/cli/asr/infer.py +++ b/paddlespeech/cli/asr/infer.py @@ -133,11 +133,11 @@ class ASRExecutor(BaseExecutor): """ Init model and other resources from a specific path. """ - logger.info("start to init the model") + logger.debug("start to init the model") # default max_len: unit:second self.max_len = 50 if hasattr(self, 'model'): - logger.info('Model had been initialized.') + logger.debug('Model had been initialized.') return if cfg_path is None or ckpt_path is None: @@ -151,15 +151,15 @@ class ASRExecutor(BaseExecutor): self.ckpt_path = os.path.join( self.res_path, self.task_resource.res_dict['ckpt_path'] + ".pdparams") - logger.info(self.res_path) + logger.debug(self.res_path) else: self.cfg_path = os.path.abspath(cfg_path) self.ckpt_path = os.path.abspath(ckpt_path + ".pdparams") self.res_path = os.path.dirname( os.path.dirname(os.path.abspath(self.cfg_path))) - logger.info(self.cfg_path) - logger.info(self.ckpt_path) + logger.debug(self.cfg_path) + logger.debug(self.ckpt_path) #Init body. self.config = CfgNode(new_allowed=True) @@ -216,7 +216,7 @@ class ASRExecutor(BaseExecutor): max_len = self.config.encoder_conf.max_len self.max_len = frame_shift_ms * max_len * subsample_rate - logger.info( + logger.debug( f"The asr server limit max duration len: {self.max_len}") def preprocess(self, model_type: str, input: Union[str, os.PathLike]): @@ -227,15 +227,15 @@ class ASRExecutor(BaseExecutor): audio_file = input if isinstance(audio_file, (str, os.PathLike)): - logger.info("Preprocess audio_file:" + audio_file) + logger.debug("Preprocess audio_file:" + audio_file) # Get the object for feature extraction if "deepspeech2" in model_type or "conformer" in model_type or "transformer" in model_type: - logger.info("get the preprocess conf") + logger.debug("get the preprocess conf") preprocess_conf = self.config.preprocess_config preprocess_args = {"train": False} preprocessing = Transformation(preprocess_conf) - logger.info("read the audio file") + logger.debug("read the audio file") audio, audio_sample_rate = soundfile.read( audio_file, dtype="int16", always_2d=True) if self.change_format: @@ -255,7 +255,7 @@ class ASRExecutor(BaseExecutor): else: audio = audio[:, 0] - logger.info(f"audio shape: {audio.shape}") + logger.debug(f"audio shape: {audio.shape}") # fbank audio = preprocessing(audio, **preprocess_args) @@ -264,19 +264,19 @@ class ASRExecutor(BaseExecutor): self._inputs["audio"] = audio self._inputs["audio_len"] = audio_len - logger.info(f"audio feat shape: {audio.shape}") + logger.debug(f"audio feat shape: {audio.shape}") else: raise Exception("wrong type") - logger.info("audio feat process success") + logger.debug("audio feat process success") @paddle.no_grad() def infer(self, model_type: str): """ Model inference and result stored in self.output. """ - logger.info("start to infer the model to get the output") + logger.debug("start to infer the model to get the output") cfg = self.config.decode audio = self._inputs["audio"] audio_len = self._inputs["audio_len"] @@ -293,7 +293,7 @@ class ASRExecutor(BaseExecutor): self._outputs["result"] = result_transcripts[0] elif "conformer" in model_type or "transformer" in model_type: - logger.info( + logger.debug( f"we will use the transformer like model : {model_type}") try: result_transcripts = self.model.decode( @@ -352,7 +352,7 @@ class ASRExecutor(BaseExecutor): logger.error("Please input the right audio file path") return False - logger.info("checking the audio file format......") + logger.debug("checking the audio file format......") try: audio, audio_sample_rate = soundfile.read( audio_file, dtype="int16", always_2d=True) @@ -374,7 +374,7 @@ class ASRExecutor(BaseExecutor): sox input_audio.xx --rate 8k --bits 16 --channels 1 output_audio.wav \n \ ") return False - logger.info("The sample rate is %d" % audio_sample_rate) + logger.debug("The sample rate is %d" % audio_sample_rate) if audio_sample_rate != self.sample_rate: logger.warning("The sample rate of the input file is not {}.\n \ The program will resample the wav file to {}.\n \ @@ -383,28 +383,28 @@ class ASRExecutor(BaseExecutor): ".format(self.sample_rate, self.sample_rate)) if force_yes is False: while (True): - logger.info( + logger.debug( "Whether to change the sample rate and the channel. Y: change the sample. N: exit the prgream." ) content = input("Input(Y/N):") if content.strip() == "Y" or content.strip( ) == "y" or content.strip() == "yes" or content.strip( ) == "Yes": - logger.info( + logger.debug( "change the sampele rate, channel to 16k and 1 channel" ) break elif content.strip() == "N" or content.strip( ) == "n" or content.strip() == "no" or content.strip( ) == "No": - logger.info("Exit the program") + logger.debug("Exit the program") return False else: logger.warning("Not regular input, please input again") self.change_format = True else: - logger.info("The audio file format is right") + logger.debug("The audio file format is right") self.change_format = False return True diff --git a/paddlespeech/cli/cls/infer.py b/paddlespeech/cli/cls/infer.py index 942dc3b9..c869e28b 100644 --- a/paddlespeech/cli/cls/infer.py +++ b/paddlespeech/cli/cls/infer.py @@ -92,7 +92,7 @@ class CLSExecutor(BaseExecutor): Init model and other resources from a specific path. """ if hasattr(self, 'model'): - logger.info('Model had been initialized.') + logger.debug('Model had been initialized.') return if label_file is None or ckpt_path is None: @@ -135,14 +135,14 @@ class CLSExecutor(BaseExecutor): Input content can be a text(tts), a file(asr, cls) or a streaming(not supported yet). """ feat_conf = self._conf['feature'] - logger.info(feat_conf) + logger.debug(feat_conf) waveform, _ = load( file=audio_file, sr=feat_conf['sample_rate'], mono=True, dtype='float32') if isinstance(audio_file, (str, os.PathLike)): - logger.info("Preprocessing audio_file:" + audio_file) + logger.debug("Preprocessing audio_file:" + audio_file) # Feature extraction feature_extractor = LogMelSpectrogram( diff --git a/paddlespeech/cli/download.py b/paddlespeech/cli/download.py index ec725874..5661f18f 100644 --- a/paddlespeech/cli/download.py +++ b/paddlespeech/cli/download.py @@ -61,7 +61,7 @@ def _get_unique_endpoints(trainer_endpoints): continue ips.add(ip) unique_endpoints.add(endpoint) - logger.info("unique_endpoints {}".format(unique_endpoints)) + logger.debug("unique_endpoints {}".format(unique_endpoints)) return unique_endpoints @@ -96,7 +96,7 @@ def get_path_from_url(url, # data, and the same ip will only download data once. unique_endpoints = _get_unique_endpoints(ParallelEnv().trainer_endpoints[:]) if osp.exists(fullpath) and check_exist and _md5check(fullpath, md5sum): - logger.info("Found {}".format(fullpath)) + logger.debug("Found {}".format(fullpath)) else: if ParallelEnv().current_endpoint in unique_endpoints: fullpath = _download(url, root_dir, md5sum, method=method) @@ -118,7 +118,7 @@ def _get_download(url, fullname): try: req = requests.get(url, stream=True) except Exception as e: # requests.exceptions.ConnectionError - logger.info("Downloading {} from {} failed with exception {}".format( + logger.debug("Downloading {} from {} failed with exception {}".format( fname, url, str(e))) return False @@ -190,7 +190,7 @@ def _download(url, path, md5sum=None, method='get'): fullname = osp.join(path, fname) retry_cnt = 0 - logger.info("Downloading {} from {}".format(fname, url)) + logger.debug("Downloading {} from {}".format(fname, url)) while not (osp.exists(fullname) and _md5check(fullname, md5sum)): if retry_cnt < DOWNLOAD_RETRY_LIMIT: retry_cnt += 1 @@ -209,7 +209,7 @@ def _md5check(fullname, md5sum=None): if md5sum is None: return True - logger.info("File {} md5 checking...".format(fullname)) + logger.debug("File {} md5 checking...".format(fullname)) md5 = hashlib.md5() with open(fullname, 'rb') as f: for chunk in iter(lambda: f.read(4096), b""): @@ -217,8 +217,8 @@ def _md5check(fullname, md5sum=None): calc_md5sum = md5.hexdigest() if calc_md5sum != md5sum: - logger.info("File {} md5 check failed, {}(calc) != " - "{}(base)".format(fullname, calc_md5sum, md5sum)) + logger.debug("File {} md5 check failed, {}(calc) != " + "{}(base)".format(fullname, calc_md5sum, md5sum)) return False return True @@ -227,7 +227,7 @@ def _decompress(fname): """ Decompress for zip and tar file """ - logger.info("Decompressing {}...".format(fname)) + logger.debug("Decompressing {}...".format(fname)) # For protecting decompressing interupted, # decompress to fpath_tmp directory firstly, if decompress diff --git a/paddlespeech/cli/kws/infer.py b/paddlespeech/cli/kws/infer.py index e3f426f5..111cfd75 100644 --- a/paddlespeech/cli/kws/infer.py +++ b/paddlespeech/cli/kws/infer.py @@ -88,7 +88,7 @@ class KWSExecutor(BaseExecutor): Init model and other resources from a specific path. """ if hasattr(self, 'model'): - logger.info('Model had been initialized.') + logger.debug('Model had been initialized.') return if ckpt_path is None: @@ -141,7 +141,7 @@ class KWSExecutor(BaseExecutor): assert os.path.isfile(audio_file) waveform, _ = load(audio_file) if isinstance(audio_file, (str, os.PathLike)): - logger.info("Preprocessing audio_file:" + audio_file) + logger.debug("Preprocessing audio_file:" + audio_file) # Feature extraction waveform = paddle.to_tensor(waveform).unsqueeze(0) diff --git a/paddlespeech/cli/log.py b/paddlespeech/cli/log.py index 8644064c..8b33e71e 100644 --- a/paddlespeech/cli/log.py +++ b/paddlespeech/cli/log.py @@ -49,7 +49,7 @@ class Logger(object): self.handler.setFormatter(self.format) self.logger.addHandler(self.handler) - self.logger.setLevel(logging.DEBUG) + self.logger.setLevel(logging.INFO) self.logger.propagate = False def __call__(self, log_level: str, msg: str): diff --git a/paddlespeech/cli/st/infer.py b/paddlespeech/cli/st/infer.py index 4e099c40..bc2bdd1a 100644 --- a/paddlespeech/cli/st/infer.py +++ b/paddlespeech/cli/st/infer.py @@ -110,7 +110,7 @@ class STExecutor(BaseExecutor): """ decompressed_path = download_and_decompress(self.kaldi_bins, MODEL_HOME) decompressed_path = os.path.abspath(decompressed_path) - logger.info("Kaldi_bins stored in: {}".format(decompressed_path)) + logger.debug("Kaldi_bins stored in: {}".format(decompressed_path)) if "LD_LIBRARY_PATH" in os.environ: os.environ["LD_LIBRARY_PATH"] += f":{decompressed_path}" else: @@ -128,7 +128,7 @@ class STExecutor(BaseExecutor): Init model and other resources from a specific path. """ if hasattr(self, 'model'): - logger.info('Model had been initialized.') + logger.debug('Model had been initialized.') return if cfg_path is None or ckpt_path is None: @@ -140,8 +140,8 @@ class STExecutor(BaseExecutor): self.ckpt_path = os.path.join( self.task_resource.res_dir, self.task_resource.res_dict['ckpt_path']) - logger.info(self.cfg_path) - logger.info(self.ckpt_path) + logger.debug(self.cfg_path) + logger.debug(self.ckpt_path) res_path = self.task_resource.res_dir else: self.cfg_path = os.path.abspath(cfg_path) @@ -192,7 +192,7 @@ class STExecutor(BaseExecutor): Input content can be a file(wav). """ audio_file = os.path.abspath(wav_file) - logger.info("Preprocess audio_file:" + audio_file) + logger.debug("Preprocess audio_file:" + audio_file) if "fat_st" in model_type: cmvn = self.config.cmvn_path diff --git a/paddlespeech/cli/text/infer.py b/paddlespeech/cli/text/infer.py index 7b8faf99..24b8c9c2 100644 --- a/paddlespeech/cli/text/infer.py +++ b/paddlespeech/cli/text/infer.py @@ -98,7 +98,7 @@ class TextExecutor(BaseExecutor): Init model and other resources from a specific path. """ if hasattr(self, 'model'): - logger.info('Model had been initialized.') + logger.debug('Model had been initialized.') return self.task = task diff --git a/paddlespeech/cli/tts/infer.py b/paddlespeech/cli/tts/infer.py index 7c837761..07c676e5 100644 --- a/paddlespeech/cli/tts/infer.py +++ b/paddlespeech/cli/tts/infer.py @@ -173,7 +173,7 @@ class TTSExecutor(BaseExecutor): Init model and other resources from a specific path. """ if hasattr(self, 'am_inference') and hasattr(self, 'voc_inference'): - logger.info('Models had been initialized.') + logger.debug('Models had been initialized.') return # am @@ -200,9 +200,9 @@ class TTSExecutor(BaseExecutor): # must have phones_dict in acoustic self.phones_dict = os.path.join( self.am_res_path, self.task_resource.res_dict['phones_dict']) - logger.info(self.am_res_path) - logger.info(self.am_config) - logger.info(self.am_ckpt) + logger.debug(self.am_res_path) + logger.debug(self.am_config) + logger.debug(self.am_ckpt) else: self.am_config = os.path.abspath(am_config) self.am_ckpt = os.path.abspath(am_ckpt) @@ -248,9 +248,9 @@ class TTSExecutor(BaseExecutor): self.voc_stat = os.path.join( self.voc_res_path, self.task_resource.voc_res_dict['speech_stats']) - logger.info(self.voc_res_path) - logger.info(self.voc_config) - logger.info(self.voc_ckpt) + logger.debug(self.voc_res_path) + logger.debug(self.voc_config) + logger.debug(self.voc_ckpt) else: self.voc_config = os.path.abspath(voc_config) self.voc_ckpt = os.path.abspath(voc_ckpt) diff --git a/paddlespeech/cli/vector/infer.py b/paddlespeech/cli/vector/infer.py index 4bc8e135..48ca1f98 100644 --- a/paddlespeech/cli/vector/infer.py +++ b/paddlespeech/cli/vector/infer.py @@ -117,7 +117,7 @@ class VectorExecutor(BaseExecutor): # stage 2: read the input data and store them as a list task_source = self.get_input_source(parser_args.input) - logger.info(f"task source: {task_source}") + logger.debug(f"task source: {task_source}") # stage 3: process the audio one by one # we do action according the task type @@ -127,13 +127,13 @@ class VectorExecutor(BaseExecutor): try: # extract the speaker audio embedding if parser_args.task == "spk": - logger.info("do vector spk task") + logger.debug("do vector spk task") res = self(input_, model, sample_rate, config, ckpt_path, device) task_result[id_] = res elif parser_args.task == "score": - logger.info("do vector score task") - logger.info(f"input content {input_}") + logger.debug("do vector score task") + logger.debug(f"input content {input_}") if len(input_.split()) != 2: logger.error( f"vector score task input {input_} wav num is not two," @@ -142,7 +142,7 @@ class VectorExecutor(BaseExecutor): # get the enroll and test embedding enroll_audio, test_audio = input_.split() - logger.info( + logger.debug( f"score task, enroll audio: {enroll_audio}, test audio: {test_audio}" ) enroll_embedding = self(enroll_audio, model, sample_rate, @@ -158,8 +158,8 @@ class VectorExecutor(BaseExecutor): has_exceptions = True task_result[id_] = f'{e.__class__.__name__}: {e}' - logger.info("task result as follows: ") - logger.info(f"{task_result}") + logger.debug("task result as follows: ") + logger.debug(f"{task_result}") # stage 4: process the all the task results self.process_task_results(parser_args.input, task_result, @@ -207,7 +207,7 @@ class VectorExecutor(BaseExecutor): """ if not hasattr(self, "score_func"): self.score_func = paddle.nn.CosineSimilarity(axis=0) - logger.info("create the cosine score function ") + logger.debug("create the cosine score function ") score = self.score_func( paddle.to_tensor(enroll_embedding), @@ -244,7 +244,7 @@ class VectorExecutor(BaseExecutor): sys.exit(-1) # stage 1: set the paddle runtime host device - logger.info(f"device type: {device}") + logger.debug(f"device type: {device}") paddle.device.set_device(device) # stage 2: read the specific pretrained model @@ -283,7 +283,7 @@ class VectorExecutor(BaseExecutor): # stage 0: avoid to init the mode again self.task = task if hasattr(self, "model"): - logger.info("Model has been initialized") + logger.debug("Model has been initialized") return # stage 1: get the model and config path @@ -294,7 +294,7 @@ class VectorExecutor(BaseExecutor): sample_rate_str = "16k" if sample_rate == 16000 else "8k" tag = model_type + "-" + sample_rate_str self.task_resource.set_task_model(tag, version=None) - logger.info(f"load the pretrained model: {tag}") + logger.debug(f"load the pretrained model: {tag}") # get the model from the pretrained list # we download the pretrained model and store it in the res_path self.res_path = self.task_resource.res_dir @@ -312,19 +312,19 @@ class VectorExecutor(BaseExecutor): self.res_path = os.path.dirname( os.path.dirname(os.path.abspath(self.cfg_path))) - logger.info(f"start to read the ckpt from {self.ckpt_path}") - logger.info(f"read the config from {self.cfg_path}") - logger.info(f"get the res path {self.res_path}") + logger.debug(f"start to read the ckpt from {self.ckpt_path}") + logger.debug(f"read the config from {self.cfg_path}") + logger.debug(f"get the res path {self.res_path}") # stage 2: read and config and init the model body self.config = CfgNode(new_allowed=True) self.config.merge_from_file(self.cfg_path) # stage 3: get the model name to instance the model network with dynamic_import - logger.info("start to dynamic import the model class") + logger.debug("start to dynamic import the model class") model_name = model_type[:model_type.rindex('_')] model_class = self.task_resource.get_model_class(model_name) - logger.info(f"model name {model_name}") + logger.debug(f"model name {model_name}") model_conf = self.config.model backbone = model_class(**model_conf) model = SpeakerIdetification( @@ -333,11 +333,11 @@ class VectorExecutor(BaseExecutor): self.model.eval() # stage 4: load the model parameters - logger.info("start to set the model parameters to model") + logger.debug("start to set the model parameters to model") model_dict = paddle.load(self.ckpt_path) self.model.set_state_dict(model_dict) - logger.info("create the model instance success") + logger.debug("create the model instance success") @paddle.no_grad() def infer(self, model_type: str): @@ -349,14 +349,14 @@ class VectorExecutor(BaseExecutor): # stage 0: get the feat and length from _inputs feats = self._inputs["feats"] lengths = self._inputs["lengths"] - logger.info("start to do backbone network model forward") - logger.info( + logger.debug("start to do backbone network model forward") + logger.debug( f"feats shape:{feats.shape}, lengths shape: {lengths.shape}") # stage 1: get the audio embedding # embedding from (1, emb_size, 1) -> (emb_size) embedding = self.model.backbone(feats, lengths).squeeze().numpy() - logger.info(f"embedding size: {embedding.shape}") + logger.debug(f"embedding size: {embedding.shape}") # stage 2: put the embedding and dim info to _outputs property # the embedding type is numpy.array @@ -380,12 +380,13 @@ class VectorExecutor(BaseExecutor): """ audio_file = input_file if isinstance(audio_file, (str, os.PathLike)): - logger.info(f"Preprocess audio file: {audio_file}") + logger.debug(f"Preprocess audio file: {audio_file}") # stage 1: load the audio sample points # Note: this process must match the training process waveform, sr = load_audio(audio_file) - logger.info(f"load the audio sample points, shape is: {waveform.shape}") + logger.debug( + f"load the audio sample points, shape is: {waveform.shape}") # stage 2: get the audio feat # Note: Now we only support fbank feature @@ -396,9 +397,9 @@ class VectorExecutor(BaseExecutor): n_mels=self.config.n_mels, window_size=self.config.window_size, hop_length=self.config.hop_size) - logger.info(f"extract the audio feat, shape is: {feat.shape}") + logger.debug(f"extract the audio feat, shape is: {feat.shape}") except Exception as e: - logger.info(f"feat occurs exception {e}") + logger.debug(f"feat occurs exception {e}") sys.exit(-1) feat = paddle.to_tensor(feat).unsqueeze(0) @@ -411,11 +412,11 @@ class VectorExecutor(BaseExecutor): # stage 4: store the feat and length in the _inputs, # which will be used in other function - logger.info(f"feats shape: {feat.shape}") + logger.debug(f"feats shape: {feat.shape}") self._inputs["feats"] = feat self._inputs["lengths"] = lengths - logger.info("audio extract the feat success") + logger.debug("audio extract the feat success") def _check(self, audio_file: str, sample_rate: int): """Check if the model sample match the audio sample rate @@ -441,7 +442,7 @@ class VectorExecutor(BaseExecutor): logger.error("Please input the right audio file path") return False - logger.info("checking the aduio file format......") + logger.debug("checking the aduio file format......") try: audio, audio_sample_rate = soundfile.read( audio_file, dtype="float32", always_2d=True) @@ -458,7 +459,7 @@ class VectorExecutor(BaseExecutor): ") return False - logger.info(f"The sample rate is {audio_sample_rate}") + logger.debug(f"The sample rate is {audio_sample_rate}") if audio_sample_rate != self.sample_rate: logger.error("The sample rate of the input file is not {}.\n \ @@ -468,6 +469,6 @@ class VectorExecutor(BaseExecutor): ".format(self.sample_rate, self.sample_rate)) sys.exit(-1) else: - logger.info("The audio file format is right") + logger.debug("The audio file format is right") return True diff --git a/paddlespeech/s2t/frontend/augmentor/spec_augment.py b/paddlespeech/s2t/frontend/augmentor/spec_augment.py index e91cfdce..296129a9 100644 --- a/paddlespeech/s2t/frontend/augmentor/spec_augment.py +++ b/paddlespeech/s2t/frontend/augmentor/spec_augment.py @@ -16,7 +16,7 @@ import random import numpy as np from PIL import Image -from PIL.Image import BICUBIC +from PIL.Image import Resampling from paddlespeech.s2t.frontend.augmentor.base import AugmentorBase from paddlespeech.s2t.utils.log import Log @@ -164,9 +164,9 @@ class SpecAugmentor(AugmentorBase): window) + 1 # 1 ... t - 1 left = Image.fromarray(x[:center]).resize((x.shape[1], warped), - BICUBIC) + Resampling.BICUBIC) right = Image.fromarray(x[center:]).resize((x.shape[1], t - warped), - BICUBIC) + Resampling.BICUBIC) if self.inplace: x[:warped] = left x[warped:] = right diff --git a/paddlespeech/s2t/frontend/featurizer/text_featurizer.py b/paddlespeech/s2t/frontend/featurizer/text_featurizer.py index 0c0fa5e2..982c6b8f 100644 --- a/paddlespeech/s2t/frontend/featurizer/text_featurizer.py +++ b/paddlespeech/s2t/frontend/featurizer/text_featurizer.py @@ -226,10 +226,10 @@ class TextFeaturizer(): sos_id = vocab_list.index(SOS) if SOS in vocab_list else -1 space_id = vocab_list.index(SPACE) if SPACE in vocab_list else -1 - logger.info(f"BLANK id: {blank_id}") - logger.info(f"UNK id: {unk_id}") - logger.info(f"EOS id: {eos_id}") - logger.info(f"SOS id: {sos_id}") - logger.info(f"SPACE id: {space_id}") - logger.info(f"MASKCTC id: {maskctc_id}") + logger.debug(f"BLANK id: {blank_id}") + logger.debug(f"UNK id: {unk_id}") + logger.debug(f"EOS id: {eos_id}") + logger.debug(f"SOS id: {sos_id}") + logger.debug(f"SPACE id: {space_id}") + logger.debug(f"MASKCTC id: {maskctc_id}") return token2id, id2token, vocab_list, unk_id, eos_id, blank_id diff --git a/paddlespeech/s2t/models/u2/u2.py b/paddlespeech/s2t/models/u2/u2.py index b4b61666..c9b6e2fb 100644 --- a/paddlespeech/s2t/models/u2/u2.py +++ b/paddlespeech/s2t/models/u2/u2.py @@ -827,7 +827,7 @@ class U2Model(U2DecodeModel): # encoder encoder_type = configs.get('encoder', 'transformer') - logger.info(f"U2 Encoder type: {encoder_type}") + logger.debug(f"U2 Encoder type: {encoder_type}") if encoder_type == 'transformer': encoder = TransformerEncoder( input_dim, global_cmvn=global_cmvn, **configs['encoder_conf']) @@ -894,7 +894,7 @@ class U2Model(U2DecodeModel): if checkpoint_path: infos = checkpoint.Checkpoint().load_parameters( model, checkpoint_path=checkpoint_path) - logger.info(f"checkpoint info: {infos}") + logger.debug(f"checkpoint info: {infos}") layer_tools.summary(model) return model diff --git a/paddlespeech/s2t/modules/loss.py b/paddlespeech/s2t/modules/loss.py index c7d9bd45..884fb70c 100644 --- a/paddlespeech/s2t/modules/loss.py +++ b/paddlespeech/s2t/modules/loss.py @@ -37,9 +37,9 @@ class CTCLoss(nn.Layer): self.loss = nn.CTCLoss(blank=blank, reduction=reduction) self.batch_average = batch_average - logger.info( + logger.debug( f"CTCLoss Loss reduction: {reduction}, div-bs: {batch_average}") - logger.info(f"CTCLoss Grad Norm Type: {grad_norm_type}") + logger.debug(f"CTCLoss Grad Norm Type: {grad_norm_type}") assert grad_norm_type in ('instance', 'batch', 'frame', None) self.norm_by_times = False @@ -70,7 +70,8 @@ class CTCLoss(nn.Layer): param = {} self._kwargs = {k: v for k, v in kwargs.items() if k in param} _notin = {k: v for k, v in kwargs.items() if k not in param} - logger.info(f"{self.loss} kwargs:{self._kwargs}, not support: {_notin}") + logger.debug( + f"{self.loss} kwargs:{self._kwargs}, not support: {_notin}") def forward(self, logits, ys_pad, hlens, ys_lens): """Compute CTC loss. diff --git a/paddlespeech/s2t/transform/spec_augment.py b/paddlespeech/s2t/transform/spec_augment.py index 5ce95085..fe24a416 100644 --- a/paddlespeech/s2t/transform/spec_augment.py +++ b/paddlespeech/s2t/transform/spec_augment.py @@ -17,7 +17,7 @@ import random import numpy from PIL import Image -from PIL.Image import BICUBIC +from PIL.Image import Resampling from paddlespeech.s2t.transform.functional import FuncTrans @@ -46,9 +46,10 @@ def time_warp(x, max_time_warp=80, inplace=False, mode="PIL"): warped = random.randrange(center - window, center + window) + 1 # 1 ... t - 1 - left = Image.fromarray(x[:center]).resize((x.shape[1], warped), BICUBIC) + left = Image.fromarray(x[:center]).resize((x.shape[1], warped), + Resampling.BICUBIC) right = Image.fromarray(x[center:]).resize((x.shape[1], t - warped), - BICUBIC) + Resampling.BICUBIC) if inplace: x[:warped] = left x[warped:] = right diff --git a/paddlespeech/s2t/utils/tensor_utils.py b/paddlespeech/s2t/utils/tensor_utils.py index f9a843ea..422d4f82 100644 --- a/paddlespeech/s2t/utils/tensor_utils.py +++ b/paddlespeech/s2t/utils/tensor_utils.py @@ -94,7 +94,7 @@ def pad_sequence(sequences: List[paddle.Tensor], for i, tensor in enumerate(sequences): length = tensor.shape[0] # use index notation to prevent duplicate references to the tensor - logger.info( + logger.debug( f"length {length}, out_tensor {out_tensor.shape}, tensor {tensor.shape}" ) if batch_first: From 496e2dd14b56be3ce6a14854c970fd3bdcf0ef2d Mon Sep 17 00:00:00 2001 From: TianYuan Date: Fri, 1 Jul 2022 09:14:22 +0000 Subject: [PATCH 20/27] fix Pillow's version --- docs/requirements.txt | 1 + paddlespeech/s2t/frontend/augmentor/spec_augment.py | 5 ++--- paddlespeech/s2t/transform/spec_augment.py | 6 ++---- setup.py | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index a5409a54..08a049c1 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -22,6 +22,7 @@ onnxruntime pandas paddlenlp paddlespeech_feat +Pillow>=9.0.0 praatio==5.0.0 pypinyin pypinyin-dict diff --git a/paddlespeech/s2t/frontend/augmentor/spec_augment.py b/paddlespeech/s2t/frontend/augmentor/spec_augment.py index 296129a9..38071285 100644 --- a/paddlespeech/s2t/frontend/augmentor/spec_augment.py +++ b/paddlespeech/s2t/frontend/augmentor/spec_augment.py @@ -16,7 +16,6 @@ import random import numpy as np from PIL import Image -from PIL.Image import Resampling from paddlespeech.s2t.frontend.augmentor.base import AugmentorBase from paddlespeech.s2t.utils.log import Log @@ -164,9 +163,9 @@ class SpecAugmentor(AugmentorBase): window) + 1 # 1 ... t - 1 left = Image.fromarray(x[:center]).resize((x.shape[1], warped), - Resampling.BICUBIC) + Image.BICUBIC) right = Image.fromarray(x[center:]).resize((x.shape[1], t - warped), - Resampling.BICUBIC) + Image.BICUBIC) if self.inplace: x[:warped] = left x[warped:] = right diff --git a/paddlespeech/s2t/transform/spec_augment.py b/paddlespeech/s2t/transform/spec_augment.py index fe24a416..7b3485b1 100644 --- a/paddlespeech/s2t/transform/spec_augment.py +++ b/paddlespeech/s2t/transform/spec_augment.py @@ -14,10 +14,8 @@ # Modified from espnet(https://github.com/espnet/espnet) """Spec Augment module for preprocessing i.e., data augmentation""" import random - import numpy from PIL import Image -from PIL.Image import Resampling from paddlespeech.s2t.transform.functional import FuncTrans @@ -47,9 +45,9 @@ def time_warp(x, max_time_warp=80, inplace=False, mode="PIL"): window) + 1 # 1 ... t - 1 left = Image.fromarray(x[:center]).resize((x.shape[1], warped), - Resampling.BICUBIC) + Image.BICUBIC) right = Image.fromarray(x[center:]).resize((x.shape[1], t - warped), - Resampling.BICUBIC) + Image.BICUBIC) if inplace: x[:warped] = left x[warped:] = right diff --git a/setup.py b/setup.py index 716c03bc..d00b469b 100644 --- a/setup.py +++ b/setup.py @@ -48,6 +48,7 @@ base = [ "pandas", "paddlenlp", "paddlespeech_feat", + "Pillow>=9.0.0" "praatio==5.0.0", "pypinyin", "pypinyin-dict", @@ -87,7 +88,6 @@ requirements = { "gpustat", "paddlespeech_ctcdecoders", "phkit", - "Pillow", "pybind11", "pypi-kenlm", "snakeviz", From 4b1f82d312bd2ebbda26a8818b16efe65183ca01 Mon Sep 17 00:00:00 2001 From: TianYuan Date: Mon, 4 Jul 2022 05:54:02 +0000 Subject: [PATCH 21/27] log redundancy in server --- paddlespeech/cli/tts/infer.py | 2 +- .../server/bin/paddlespeech_client.py | 2 - .../server/engine/acs/python/acs_engine.py | 20 +++-- .../engine/asr/online/onnx/asr_engine.py | 44 +++++----- .../asr/online/paddleinference/asr_engine.py | 48 ++++++----- .../engine/asr/online/python/asr_engine.py | 86 ++++++++++--------- .../engine/asr/paddleinference/asr_engine.py | 14 +-- .../server/engine/asr/python/asr_engine.py | 4 +- .../engine/cls/paddleinference/cls_engine.py | 21 ++--- .../server/engine/cls/python/cls_engine.py | 4 +- paddlespeech/server/engine/engine_warmup.py | 6 +- .../server/engine/text/python/text_engine.py | 11 +-- .../engine/tts/online/onnx/tts_engine.py | 26 +++--- .../engine/tts/online/python/tts_engine.py | 24 ++---- .../engine/tts/paddleinference/tts_engine.py | 57 ++++++------ .../server/engine/tts/python/tts_engine.py | 26 +++--- .../engine/vector/python/vector_engine.py | 31 ++++--- paddlespeech/server/utils/audio_handler.py | 11 ++- paddlespeech/server/utils/audio_process.py | 2 +- paddlespeech/server/utils/onnx_infer.py | 4 +- paddlespeech/server/utils/util.py | 6 +- 21 files changed, 226 insertions(+), 223 deletions(-) diff --git a/paddlespeech/cli/tts/infer.py b/paddlespeech/cli/tts/infer.py index 07c676e5..ade8cdd6 100644 --- a/paddlespeech/cli/tts/infer.py +++ b/paddlespeech/cli/tts/infer.py @@ -382,7 +382,7 @@ class TTSExecutor(BaseExecutor): text, merge_sentences=merge_sentences) phone_ids = input_ids["phone_ids"] else: - print("lang should in {'zh', 'en'}!") + logger.error("lang should in {'zh', 'en'}!") self.frontend_time = time.time() - frontend_st self.am_time = 0 diff --git a/paddlespeech/server/bin/paddlespeech_client.py b/paddlespeech/server/bin/paddlespeech_client.py index fb521b30..bd1186df 100644 --- a/paddlespeech/server/bin/paddlespeech_client.py +++ b/paddlespeech/server/bin/paddlespeech_client.py @@ -123,7 +123,6 @@ class TTSClientExecutor(BaseExecutor): time_end = time.time() time_consume = time_end - time_start response_dict = res.json() - logger.info(response_dict["message"]) logger.info("Save synthesized audio successfully on %s." % (output)) logger.info("Audio duration: %f s." % (response_dict['result']['duration'])) @@ -702,7 +701,6 @@ class VectorClientExecutor(BaseExecutor): test_audio=args.test, task=task) time_end = time.time() - logger.info(f"The vector: {res}") logger.info("Response time %f s." % (time_end - time_start)) return True except Exception as e: diff --git a/paddlespeech/server/engine/acs/python/acs_engine.py b/paddlespeech/server/engine/acs/python/acs_engine.py index 930101ac..63964a82 100644 --- a/paddlespeech/server/engine/acs/python/acs_engine.py +++ b/paddlespeech/server/engine/acs/python/acs_engine.py @@ -30,7 +30,7 @@ class ACSEngine(BaseEngine): """The ACSEngine Engine """ super(ACSEngine, self).__init__() - logger.info("Create the ACSEngine Instance") + logger.debug("Create the ACSEngine Instance") self.word_list = [] def init(self, config: dict): @@ -42,7 +42,7 @@ class ACSEngine(BaseEngine): Returns: bool: The engine instance flag """ - logger.info("Init the acs engine") + logger.debug("Init the acs engine") try: self.config = config self.device = self.config.get("device", paddle.get_device()) @@ -50,7 +50,7 @@ class ACSEngine(BaseEngine): # websocket default ping timeout is 20 seconds self.ping_timeout = self.config.get("ping_timeout", 20) paddle.set_device(self.device) - logger.info(f"ACS Engine set the device: {self.device}") + logger.debug(f"ACS Engine set the device: {self.device}") except BaseException as e: logger.error( @@ -66,7 +66,9 @@ class ACSEngine(BaseEngine): self.url = "ws://" + self.config.asr_server_ip + ":" + str( self.config.asr_server_port) + "/paddlespeech/asr/streaming" - logger.info("Init the acs engine successfully") + logger.info("Initialize acs server engine successfully on device: %s." % + (self.device)) + return True def read_search_words(self): @@ -95,12 +97,12 @@ class ACSEngine(BaseEngine): Returns: _type_: _description_ """ - logger.info("send a message to the server") + logger.debug("send a message to the server") if self.url is None: logger.error("No asr server, please input valid ip and port") return "" ws = websocket.WebSocket() - logger.info(f"set the ping timeout: {self.ping_timeout} seconds") + logger.debug(f"set the ping timeout: {self.ping_timeout} seconds") ws.connect(self.url, ping_timeout=self.ping_timeout) audio_info = json.dumps( { @@ -123,7 +125,7 @@ class ACSEngine(BaseEngine): logger.info(f"audio result: {msg}") # 3. send chunk audio data to engine - logger.info("send the end signal") + logger.debug("send the end signal") audio_info = json.dumps( { "name": "test.wav", @@ -197,7 +199,7 @@ class ACSEngine(BaseEngine): start = max(time_stamp[m.start(0)]['bg'] - offset, 0) end = min(time_stamp[m.end(0) - 1]['ed'] + offset, max_ed) - logger.info(f'start: {start}, end: {end}') + logger.debug(f'start: {start}, end: {end}') acs_result.append({'w': w, 'bg': start, 'ed': end}) return acs_result, asr_result @@ -212,7 +214,7 @@ class ACSEngine(BaseEngine): Returns: acs_result, asr_result: the acs result and the asr result """ - logger.info("start to process the audio content search") + logger.debug("start to process the audio content search") msg = self.get_asr_content(io.BytesIO(audio_data)) acs_result, asr_result = self.get_macthed_word(msg) diff --git a/paddlespeech/server/engine/asr/online/onnx/asr_engine.py b/paddlespeech/server/engine/asr/online/onnx/asr_engine.py index 06793164..9ec7bb5a 100644 --- a/paddlespeech/server/engine/asr/online/onnx/asr_engine.py +++ b/paddlespeech/server/engine/asr/online/onnx/asr_engine.py @@ -44,7 +44,7 @@ class PaddleASRConnectionHanddler: asr_engine (ASREngine): the global asr engine """ super().__init__() - logger.info( + logger.debug( "create an paddle asr connection handler to process the websocket connection" ) self.config = asr_engine.config # server config @@ -152,12 +152,12 @@ class PaddleASRConnectionHanddler: self.output_reset() def extract_feat(self, samples: ByteString): - logger.info("Online ASR extract the feat") + logger.debug("Online ASR extract the feat") samples = np.frombuffer(samples, dtype=np.int16) assert samples.ndim == 1 self.num_samples += samples.shape[0] - logger.info( + logger.debug( f"This package receive {samples.shape[0]} pcm data. Global samples:{self.num_samples}" ) @@ -168,7 +168,7 @@ class PaddleASRConnectionHanddler: else: assert self.remained_wav.ndim == 1 # (T,) self.remained_wav = np.concatenate([self.remained_wav, samples]) - logger.info( + logger.debug( f"The concatenation of remain and now audio samples length is: {self.remained_wav.shape}" ) @@ -202,14 +202,14 @@ class PaddleASRConnectionHanddler: # update remained wav self.remained_wav = self.remained_wav[self.n_shift * num_frames:] - logger.info( + logger.debug( f"process the audio feature success, the cached feat shape: {self.cached_feat.shape}" ) - logger.info( + logger.debug( f"After extract feat, the cached remain the audio samples: {self.remained_wav.shape}" ) - logger.info(f"global samples: {self.num_samples}") - logger.info(f"global frames: {self.num_frames}") + logger.debug(f"global samples: {self.num_samples}") + logger.debug(f"global frames: {self.num_frames}") def decode(self, is_finished=False): """advance decoding @@ -237,7 +237,7 @@ class PaddleASRConnectionHanddler: return num_frames = self.cached_feat.shape[1] - logger.info( + logger.debug( f"Required decoding window {decoding_window} frames, and the connection has {num_frames} frames" ) @@ -355,7 +355,7 @@ class ASRServerExecutor(ASRExecutor): lm_url = self.task_resource.res_dict['lm_url'] lm_md5 = self.task_resource.res_dict['lm_md5'] - logger.info(f"Start to load language model {lm_url}") + logger.debug(f"Start to load language model {lm_url}") self.download_lm( lm_url, os.path.dirname(self.config.decode.lang_model_path), lm_md5) @@ -367,7 +367,7 @@ class ASRServerExecutor(ASRExecutor): if "deepspeech2" in self.model_type: # AM predictor - logger.info("ASR engine start to init the am predictor") + logger.debug("ASR engine start to init the am predictor") self.am_predictor = onnx_infer.get_sess( model_path=self.am_model, sess_conf=self.am_predictor_conf) else: @@ -400,7 +400,7 @@ class ASRServerExecutor(ASRExecutor): self.num_decoding_left_chunks = num_decoding_left_chunks # conf for paddleinference predictor or onnx self.am_predictor_conf = am_predictor_conf - logger.info(f"model_type: {self.model_type}") + logger.debug(f"model_type: {self.model_type}") sample_rate_str = '16k' if sample_rate == 16000 else '8k' tag = model_type + '-' + lang + '-' + sample_rate_str @@ -422,12 +422,11 @@ class ASRServerExecutor(ASRExecutor): # self.res_path, self.task_resource.res_dict[ # 'params']) if am_params is None else os.path.abspath(am_params) - logger.info("Load the pretrained model:") - logger.info(f" tag = {tag}") - logger.info(f" res_path: {self.res_path}") - logger.info(f" cfg path: {self.cfg_path}") - logger.info(f" am_model path: {self.am_model}") - # logger.info(f" am_params path: {self.am_params}") + logger.debug("Load the pretrained model:") + logger.debug(f" tag = {tag}") + logger.debug(f" res_path: {self.res_path}") + logger.debug(f" cfg path: {self.cfg_path}") + logger.debug(f" am_model path: {self.am_model}") #Init body. self.config = CfgNode(new_allowed=True) @@ -436,7 +435,7 @@ class ASRServerExecutor(ASRExecutor): if self.config.spm_model_prefix: self.config.spm_model_prefix = os.path.join( self.res_path, self.config.spm_model_prefix) - logger.info(f"spm model path: {self.config.spm_model_prefix}") + logger.debug(f"spm model path: {self.config.spm_model_prefix}") self.vocab = self.config.vocab_filepath @@ -450,7 +449,7 @@ class ASRServerExecutor(ASRExecutor): # AM predictor self.init_model() - logger.info(f"create the {model_type} model success") + logger.debug(f"create the {model_type} model success") return True @@ -501,7 +500,7 @@ class ASREngine(BaseEngine): "If all GPU or XPU is used, you can set the server to 'cpu'") sys.exit(-1) - logger.info(f"paddlespeech_server set the device: {self.device}") + logger.debug(f"paddlespeech_server set the device: {self.device}") if not self.init_model(): logger.error( @@ -509,7 +508,8 @@ class ASREngine(BaseEngine): ) return False - logger.info("Initialize ASR server engine successfully.") + logger.info("Initialize ASR server engine successfully on device: %s." % + (self.device)) return True def new_handler(self): diff --git a/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py b/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py index efb726aa..1f0a8b80 100644 --- a/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py +++ b/paddlespeech/server/engine/asr/online/paddleinference/asr_engine.py @@ -44,7 +44,7 @@ class PaddleASRConnectionHanddler: asr_engine (ASREngine): the global asr engine """ super().__init__() - logger.info( + logger.debug( "create an paddle asr connection handler to process the websocket connection" ) self.config = asr_engine.config # server config @@ -157,7 +157,7 @@ class PaddleASRConnectionHanddler: assert samples.ndim == 1 self.num_samples += samples.shape[0] - logger.info( + logger.debug( f"This package receive {samples.shape[0]} pcm data. Global samples:{self.num_samples}" ) @@ -168,7 +168,7 @@ class PaddleASRConnectionHanddler: else: assert self.remained_wav.ndim == 1 # (T,) self.remained_wav = np.concatenate([self.remained_wav, samples]) - logger.info( + logger.debug( f"The concatenation of remain and now audio samples length is: {self.remained_wav.shape}" ) @@ -202,14 +202,14 @@ class PaddleASRConnectionHanddler: # update remained wav self.remained_wav = self.remained_wav[self.n_shift * num_frames:] - logger.info( + logger.debug( f"process the audio feature success, the cached feat shape: {self.cached_feat.shape}" ) - logger.info( + logger.debug( f"After extract feat, the cached remain the audio samples: {self.remained_wav.shape}" ) - logger.info(f"global samples: {self.num_samples}") - logger.info(f"global frames: {self.num_frames}") + logger.debug(f"global samples: {self.num_samples}") + logger.debug(f"global frames: {self.num_frames}") def decode(self, is_finished=False): """advance decoding @@ -237,13 +237,13 @@ class PaddleASRConnectionHanddler: return num_frames = self.cached_feat.shape[1] - logger.info( + logger.debug( f"Required decoding window {decoding_window} frames, and the connection has {num_frames} frames" ) # the cached feat must be larger decoding_window if num_frames < decoding_window and not is_finished: - logger.info( + logger.debug( f"frame feat num is less than {decoding_window}, please input more pcm data" ) return None, None @@ -294,7 +294,7 @@ class PaddleASRConnectionHanddler: Returns: logprob: poster probability. """ - logger.info("start to decoce one chunk for deepspeech2") + logger.debug("start to decoce one chunk for deepspeech2") input_names = self.am_predictor.get_input_names() audio_handle = self.am_predictor.get_input_handle(input_names[0]) audio_len_handle = self.am_predictor.get_input_handle(input_names[1]) @@ -369,7 +369,7 @@ class ASRServerExecutor(ASRExecutor): lm_url = self.task_resource.res_dict['lm_url'] lm_md5 = self.task_resource.res_dict['lm_md5'] - logger.info(f"Start to load language model {lm_url}") + logger.debug(f"Start to load language model {lm_url}") self.download_lm( lm_url, os.path.dirname(self.config.decode.lang_model_path), lm_md5) @@ -381,7 +381,7 @@ class ASRServerExecutor(ASRExecutor): if "deepspeech2" in self.model_type: # AM predictor - logger.info("ASR engine start to init the am predictor") + logger.debug("ASR engine start to init the am predictor") self.am_predictor = init_predictor( model_file=self.am_model, params_file=self.am_params, @@ -415,7 +415,7 @@ class ASRServerExecutor(ASRExecutor): self.num_decoding_left_chunks = num_decoding_left_chunks # conf for paddleinference predictor or onnx self.am_predictor_conf = am_predictor_conf - logger.info(f"model_type: {self.model_type}") + logger.debug(f"model_type: {self.model_type}") sample_rate_str = '16k' if sample_rate == 16000 else '8k' tag = model_type + '-' + lang + '-' + sample_rate_str @@ -437,12 +437,12 @@ class ASRServerExecutor(ASRExecutor): self.res_path = os.path.dirname( os.path.dirname(os.path.abspath(self.cfg_path))) - logger.info("Load the pretrained model:") - logger.info(f" tag = {tag}") - logger.info(f" res_path: {self.res_path}") - logger.info(f" cfg path: {self.cfg_path}") - logger.info(f" am_model path: {self.am_model}") - logger.info(f" am_params path: {self.am_params}") + logger.debug("Load the pretrained model:") + logger.debug(f" tag = {tag}") + logger.debug(f" res_path: {self.res_path}") + logger.debug(f" cfg path: {self.cfg_path}") + logger.debug(f" am_model path: {self.am_model}") + logger.debug(f" am_params path: {self.am_params}") #Init body. self.config = CfgNode(new_allowed=True) @@ -451,7 +451,7 @@ class ASRServerExecutor(ASRExecutor): if self.config.spm_model_prefix: self.config.spm_model_prefix = os.path.join( self.res_path, self.config.spm_model_prefix) - logger.info(f"spm model path: {self.config.spm_model_prefix}") + logger.debug(f"spm model path: {self.config.spm_model_prefix}") self.vocab = self.config.vocab_filepath @@ -465,7 +465,7 @@ class ASRServerExecutor(ASRExecutor): # AM predictor self.init_model() - logger.info(f"create the {model_type} model success") + logger.debug(f"create the {model_type} model success") return True @@ -516,7 +516,7 @@ class ASREngine(BaseEngine): "If all GPU or XPU is used, you can set the server to 'cpu'") sys.exit(-1) - logger.info(f"paddlespeech_server set the device: {self.device}") + logger.debug(f"paddlespeech_server set the device: {self.device}") if not self.init_model(): logger.error( @@ -524,7 +524,9 @@ class ASREngine(BaseEngine): ) return False - logger.info("Initialize ASR server engine successfully.") + logger.info("Initialize ASR server engine successfully on device: %s." % + (self.device)) + return True def new_handler(self): diff --git a/paddlespeech/server/engine/asr/online/python/asr_engine.py b/paddlespeech/server/engine/asr/online/python/asr_engine.py index daa9fc50..b3472a83 100644 --- a/paddlespeech/server/engine/asr/online/python/asr_engine.py +++ b/paddlespeech/server/engine/asr/online/python/asr_engine.py @@ -49,7 +49,7 @@ class PaddleASRConnectionHanddler: asr_engine (ASREngine): the global asr engine """ super().__init__() - logger.info( + logger.debug( "create an paddle asr connection handler to process the websocket connection" ) self.config = asr_engine.config # server config @@ -107,7 +107,7 @@ class PaddleASRConnectionHanddler: # acoustic model self.model = self.asr_engine.executor.model self.continuous_decoding = self.config.continuous_decoding - logger.info(f"continue decoding: {self.continuous_decoding}") + logger.debug(f"continue decoding: {self.continuous_decoding}") # ctc decoding config self.ctc_decode_config = self.asr_engine.executor.config.decode @@ -207,7 +207,7 @@ class PaddleASRConnectionHanddler: assert samples.ndim == 1 self.num_samples += samples.shape[0] - logger.info( + logger.debug( f"This package receive {samples.shape[0]} pcm data. Global samples:{self.num_samples}" ) @@ -218,7 +218,7 @@ class PaddleASRConnectionHanddler: else: assert self.remained_wav.ndim == 1 # (T,) self.remained_wav = np.concatenate([self.remained_wav, samples]) - logger.info( + logger.debug( f"The concatenation of remain and now audio samples length is: {self.remained_wav.shape}" ) @@ -252,14 +252,14 @@ class PaddleASRConnectionHanddler: # update remained wav self.remained_wav = self.remained_wav[self.n_shift * num_frames:] - logger.info( + logger.debug( f"process the audio feature success, the cached feat shape: {self.cached_feat.shape}" ) - logger.info( + logger.debug( f"After extract feat, the cached remain the audio samples: {self.remained_wav.shape}" ) - logger.info(f"global samples: {self.num_samples}") - logger.info(f"global frames: {self.num_frames}") + logger.debug(f"global samples: {self.num_samples}") + logger.debug(f"global frames: {self.num_frames}") def decode(self, is_finished=False): """advance decoding @@ -283,24 +283,24 @@ class PaddleASRConnectionHanddler: stride = subsampling * decoding_chunk_size if self.cached_feat is None: - logger.info("no audio feat, please input more pcm data") + logger.debug("no audio feat, please input more pcm data") return num_frames = self.cached_feat.shape[1] - logger.info( + logger.debug( f"Required decoding window {decoding_window} frames, and the connection has {num_frames} frames" ) # the cached feat must be larger decoding_window if num_frames < decoding_window and not is_finished: - logger.info( + logger.debug( f"frame feat num is less than {decoding_window}, please input more pcm data" ) return None, None # if is_finished=True, we need at least context frames if num_frames < context: - logger.info( + logger.debug( "flast {num_frames} is less than context {context} frames, and we cannot do model forward" ) return None, None @@ -354,7 +354,7 @@ class PaddleASRConnectionHanddler: Returns: logprob: poster probability. """ - logger.info("start to decoce one chunk for deepspeech2") + logger.debug("start to decoce one chunk for deepspeech2") input_names = self.am_predictor.get_input_names() audio_handle = self.am_predictor.get_input_handle(input_names[0]) audio_len_handle = self.am_predictor.get_input_handle(input_names[1]) @@ -391,7 +391,7 @@ class PaddleASRConnectionHanddler: self.decoder.next(output_chunk_probs, output_chunk_lens) trans_best, trans_beam = self.decoder.decode() - logger.info(f"decode one best result for deepspeech2: {trans_best[0]}") + logger.debug(f"decode one best result for deepspeech2: {trans_best[0]}") return trans_best[0] @paddle.no_grad() @@ -402,7 +402,7 @@ class PaddleASRConnectionHanddler: # reset endpiont state self.endpoint_state = False - logger.info( + logger.debug( "Conformer/Transformer: start to decode with advanced_decoding method" ) cfg = self.ctc_decode_config @@ -427,25 +427,25 @@ class PaddleASRConnectionHanddler: stride = subsampling * decoding_chunk_size if self.cached_feat is None: - logger.info("no audio feat, please input more pcm data") + logger.debug("no audio feat, please input more pcm data") return # (B=1,T,D) num_frames = self.cached_feat.shape[1] - logger.info( + logger.debug( f"Required decoding window {decoding_window} frames, and the connection has {num_frames} frames" ) # the cached feat must be larger decoding_window if num_frames < decoding_window and not is_finished: - logger.info( + logger.debug( f"frame feat num is less than {decoding_window}, please input more pcm data" ) return None, None # if is_finished=True, we need at least context frames if num_frames < context: - logger.info( + logger.debug( "flast {num_frames} is less than context {context} frames, and we cannot do model forward" ) return None, None @@ -489,7 +489,7 @@ class PaddleASRConnectionHanddler: self.encoder_out = ys else: self.encoder_out = paddle.concat([self.encoder_out, ys], axis=1) - logger.info( + logger.debug( f"This connection handler encoder out shape: {self.encoder_out.shape}" ) @@ -513,7 +513,8 @@ class PaddleASRConnectionHanddler: if self.endpointer.endpoint_detected(ctc_probs.numpy(), decoding_something): self.endpoint_state = True - logger.info(f"Endpoint is detected at {self.num_frames} frame.") + logger.debug( + f"Endpoint is detected at {self.num_frames} frame.") # advance cache of feat assert self.cached_feat.shape[0] == 1 #(B=1,T,D) @@ -526,7 +527,7 @@ class PaddleASRConnectionHanddler: def update_result(self): """Conformer/Transformer hyps to result. """ - logger.info("update the final result") + logger.debug("update the final result") hyps = self.hyps # output results and tokenids @@ -560,16 +561,16 @@ class PaddleASRConnectionHanddler: only for conformer and transformer model. """ if "deepspeech2" in self.model_type: - logger.info("deepspeech2 not support rescoring decoding.") + logger.debug("deepspeech2 not support rescoring decoding.") return if "attention_rescoring" != self.ctc_decode_config.decoding_method: - logger.info( + logger.debug( f"decoding method not match: {self.ctc_decode_config.decoding_method}, need attention_rescoring" ) return - logger.info("rescoring the final result") + logger.debug("rescoring the final result") # last decoding for last audio self.searcher.finalize_search() @@ -685,7 +686,6 @@ class PaddleASRConnectionHanddler: "bg": global_offset_in_sec + start, "ed": global_offset_in_sec + end }) - # logger.info(f"{word_time_stamp[-1]}") self.word_time_stamp = word_time_stamp logger.info(f"word time stamp: {self.word_time_stamp}") @@ -707,13 +707,13 @@ class ASRServerExecutor(ASRExecutor): lm_url = self.task_resource.res_dict['lm_url'] lm_md5 = self.task_resource.res_dict['lm_md5'] - logger.info(f"Start to load language model {lm_url}") + logger.debug(f"Start to load language model {lm_url}") self.download_lm( lm_url, os.path.dirname(self.config.decode.lang_model_path), lm_md5) elif "conformer" in self.model_type or "transformer" in self.model_type: with UpdateConfig(self.config): - logger.info("start to create the stream conformer asr engine") + logger.debug("start to create the stream conformer asr engine") # update the decoding method if self.decode_method: self.config.decode.decoding_method = self.decode_method @@ -726,7 +726,7 @@ class ASRServerExecutor(ASRExecutor): if self.config.decode.decoding_method not in [ "ctc_prefix_beam_search", "attention_rescoring" ]: - logger.info( + logger.debug( "we set the decoding_method to attention_rescoring") self.config.decode.decoding_method = "attention_rescoring" @@ -739,7 +739,7 @@ class ASRServerExecutor(ASRExecutor): def init_model(self) -> None: if "deepspeech2" in self.model_type: # AM predictor - logger.info("ASR engine start to init the am predictor") + logger.debug("ASR engine start to init the am predictor") self.am_predictor = init_predictor( model_file=self.am_model, params_file=self.am_params, @@ -748,7 +748,7 @@ class ASRServerExecutor(ASRExecutor): # load model # model_type: {model_name}_{dataset} model_name = self.model_type[:self.model_type.rindex('_')] - logger.info(f"model name: {model_name}") + logger.debug(f"model name: {model_name}") model_class = self.task_resource.get_model_class(model_name) model = model_class.from_config(self.config) self.model = model @@ -782,7 +782,7 @@ class ASRServerExecutor(ASRExecutor): self.num_decoding_left_chunks = num_decoding_left_chunks # conf for paddleinference predictor or onnx self.am_predictor_conf = am_predictor_conf - logger.info(f"model_type: {self.model_type}") + logger.debug(f"model_type: {self.model_type}") sample_rate_str = '16k' if sample_rate == 16000 else '8k' tag = model_type + '-' + lang + '-' + sample_rate_str @@ -804,12 +804,12 @@ class ASRServerExecutor(ASRExecutor): self.res_path = os.path.dirname( os.path.dirname(os.path.abspath(self.cfg_path))) - logger.info("Load the pretrained model:") - logger.info(f" tag = {tag}") - logger.info(f" res_path: {self.res_path}") - logger.info(f" cfg path: {self.cfg_path}") - logger.info(f" am_model path: {self.am_model}") - logger.info(f" am_params path: {self.am_params}") + logger.debug("Load the pretrained model:") + logger.debug(f" tag = {tag}") + logger.debug(f" res_path: {self.res_path}") + logger.debug(f" cfg path: {self.cfg_path}") + logger.debug(f" am_model path: {self.am_model}") + logger.debug(f" am_params path: {self.am_params}") #Init body. self.config = CfgNode(new_allowed=True) @@ -818,7 +818,7 @@ class ASRServerExecutor(ASRExecutor): if self.config.spm_model_prefix: self.config.spm_model_prefix = os.path.join( self.res_path, self.config.spm_model_prefix) - logger.info(f"spm model path: {self.config.spm_model_prefix}") + logger.debug(f"spm model path: {self.config.spm_model_prefix}") self.vocab = self.config.vocab_filepath @@ -832,7 +832,7 @@ class ASRServerExecutor(ASRExecutor): # AM predictor self.init_model() - logger.info(f"create the {model_type} model success") + logger.debug(f"create the {model_type} model success") return True @@ -883,7 +883,7 @@ class ASREngine(BaseEngine): "If all GPU or XPU is used, you can set the server to 'cpu'") sys.exit(-1) - logger.info(f"paddlespeech_server set the device: {self.device}") + logger.debug(f"paddlespeech_server set the device: {self.device}") if not self.init_model(): logger.error( @@ -891,7 +891,9 @@ class ASREngine(BaseEngine): ) return False - logger.info("Initialize ASR server engine successfully.") + logger.info("Initialize ASR server engine successfully on device: %s." % + (self.device)) + return True def new_handler(self): diff --git a/paddlespeech/server/engine/asr/paddleinference/asr_engine.py b/paddlespeech/server/engine/asr/paddleinference/asr_engine.py index 572004eb..6df666ce 100644 --- a/paddlespeech/server/engine/asr/paddleinference/asr_engine.py +++ b/paddlespeech/server/engine/asr/paddleinference/asr_engine.py @@ -65,10 +65,10 @@ class ASRServerExecutor(ASRExecutor): self.task_resource.res_dict['model']) self.am_params = os.path.join(self.res_path, self.task_resource.res_dict['params']) - logger.info(self.res_path) - logger.info(self.cfg_path) - logger.info(self.am_model) - logger.info(self.am_params) + logger.debug(self.res_path) + logger.debug(self.cfg_path) + logger.debug(self.am_model) + logger.debug(self.am_params) else: self.cfg_path = os.path.abspath(cfg_path) self.am_model = os.path.abspath(am_model) @@ -236,16 +236,16 @@ class PaddleASRConnectionHandler(ASRServerExecutor): if self._check( io.BytesIO(audio_data), self.asr_engine.config.sample_rate, self.asr_engine.config.force_yes): - logger.info("start running asr engine") + logger.debug("start running asr engine") self.preprocess(self.asr_engine.config.model_type, io.BytesIO(audio_data)) st = time.time() self.infer(self.asr_engine.config.model_type) infer_time = time.time() - st self.output = self.postprocess() # Retrieve result of asr. - logger.info("end inferring asr engine") + logger.debug("end inferring asr engine") else: - logger.info("file check failed!") + logger.error("file check failed!") self.output = None logger.info("inference time: {}".format(infer_time)) diff --git a/paddlespeech/server/engine/asr/python/asr_engine.py b/paddlespeech/server/engine/asr/python/asr_engine.py index f9cc3a66..02c40fd1 100644 --- a/paddlespeech/server/engine/asr/python/asr_engine.py +++ b/paddlespeech/server/engine/asr/python/asr_engine.py @@ -104,7 +104,7 @@ class PaddleASRConnectionHandler(ASRServerExecutor): if self._check( io.BytesIO(audio_data), self.asr_engine.config.sample_rate, self.asr_engine.config.force_yes): - logger.info("start run asr engine") + logger.debug("start run asr engine") self.preprocess(self.asr_engine.config.model, io.BytesIO(audio_data)) st = time.time() @@ -112,7 +112,7 @@ class PaddleASRConnectionHandler(ASRServerExecutor): infer_time = time.time() - st self.output = self.postprocess() # Retrieve result of asr. else: - logger.info("file check failed!") + logger.error("file check failed!") self.output = None logger.info("inference time: {}".format(infer_time)) diff --git a/paddlespeech/server/engine/cls/paddleinference/cls_engine.py b/paddlespeech/server/engine/cls/paddleinference/cls_engine.py index 389d5605..fa62ba67 100644 --- a/paddlespeech/server/engine/cls/paddleinference/cls_engine.py +++ b/paddlespeech/server/engine/cls/paddleinference/cls_engine.py @@ -67,22 +67,22 @@ class CLSServerExecutor(CLSExecutor): self.params_path = os.path.abspath(params_path) self.label_file = os.path.abspath(label_file) - logger.info(self.cfg_path) - logger.info(self.model_path) - logger.info(self.params_path) - logger.info(self.label_file) + logger.debug(self.cfg_path) + logger.debug(self.model_path) + logger.debug(self.params_path) + logger.debug(self.label_file) # config with open(self.cfg_path, 'r') as f: self._conf = yaml.safe_load(f) - logger.info("Read cfg file successfully.") + logger.debug("Read cfg file successfully.") # labels self._label_list = [] with open(self.label_file, 'r') as f: for line in f: self._label_list.append(line.strip()) - logger.info("Read label file successfully.") + logger.debug("Read label file successfully.") # Create predictor self.predictor_conf = predictor_conf @@ -90,7 +90,7 @@ class CLSServerExecutor(CLSExecutor): model_file=self.model_path, params_file=self.params_path, predictor_conf=self.predictor_conf) - logger.info("Create predictor successfully.") + logger.debug("Create predictor successfully.") @paddle.no_grad() def infer(self): @@ -148,7 +148,8 @@ class CLSEngine(BaseEngine): logger.error(e) return False - logger.info("Initialize CLS server engine successfully.") + logger.info("Initialize CLS server engine successfully on device: %s." % + (self.device)) return True @@ -160,7 +161,7 @@ class PaddleCLSConnectionHandler(CLSServerExecutor): cls_engine (CLSEngine): The CLS engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleCLSConnectionHandler to process the cls request") self._inputs = OrderedDict() @@ -183,7 +184,7 @@ class PaddleCLSConnectionHandler(CLSServerExecutor): self.infer() infer_time = time.time() - st - logger.info("inference time: {}".format(infer_time)) + logger.debug("inference time: {}".format(infer_time)) logger.info("cls engine type: inference") def postprocess(self, topk: int): diff --git a/paddlespeech/server/engine/cls/python/cls_engine.py b/paddlespeech/server/engine/cls/python/cls_engine.py index f8d8f20e..210f4cbb 100644 --- a/paddlespeech/server/engine/cls/python/cls_engine.py +++ b/paddlespeech/server/engine/cls/python/cls_engine.py @@ -88,7 +88,7 @@ class PaddleCLSConnectionHandler(CLSServerExecutor): cls_engine (CLSEngine): The CLS engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleCLSConnectionHandler to process the cls request") self._inputs = OrderedDict() @@ -110,7 +110,7 @@ class PaddleCLSConnectionHandler(CLSServerExecutor): self.infer() infer_time = time.time() - st - logger.info("inference time: {}".format(infer_time)) + logger.debug("inference time: {}".format(infer_time)) logger.info("cls engine type: python") def postprocess(self, topk: int): diff --git a/paddlespeech/server/engine/engine_warmup.py b/paddlespeech/server/engine/engine_warmup.py index 5f548f71..12c760c6 100644 --- a/paddlespeech/server/engine/engine_warmup.py +++ b/paddlespeech/server/engine/engine_warmup.py @@ -45,7 +45,7 @@ def warm_up(engine_and_type: str, warm_up_time: int=3) -> bool: logger.error("Please check tte engine type.") try: - logger.info("Start to warm up tts engine.") + logger.debug("Start to warm up tts engine.") for i in range(warm_up_time): connection_handler = PaddleTTSConnectionHandler(tts_engine) if flag_online: @@ -53,7 +53,7 @@ def warm_up(engine_and_type: str, warm_up_time: int=3) -> bool: text=sentence, lang=tts_engine.lang, am=tts_engine.config.am): - logger.info( + logger.debug( f"The first response time of the {i} warm up: {connection_handler.first_response_time} s" ) break @@ -62,7 +62,7 @@ def warm_up(engine_and_type: str, warm_up_time: int=3) -> bool: st = time.time() connection_handler.infer(text=sentence) et = time.time() - logger.info( + logger.debug( f"The response time of the {i} warm up: {et - st} s") except Exception as e: logger.error("Failed to warm up on tts engine.") diff --git a/paddlespeech/server/engine/text/python/text_engine.py b/paddlespeech/server/engine/text/python/text_engine.py index 73cf8737..6167e778 100644 --- a/paddlespeech/server/engine/text/python/text_engine.py +++ b/paddlespeech/server/engine/text/python/text_engine.py @@ -28,7 +28,7 @@ class PaddleTextConnectionHandler: text_engine (TextEngine): The Text engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleTextConnectionHandler to process the text request") self.text_engine = text_engine self.task = self.text_engine.executor.task @@ -130,7 +130,7 @@ class TextEngine(BaseEngine): """The Text Engine """ super(TextEngine, self).__init__() - logger.info("Create the TextEngine Instance") + logger.debug("Create the TextEngine Instance") def init(self, config: dict): """Init the Text Engine @@ -141,7 +141,7 @@ class TextEngine(BaseEngine): Returns: bool: The engine instance flag """ - logger.info("Init the text engine") + logger.debug("Init the text engine") try: self.config = config if self.config.device: @@ -150,7 +150,7 @@ class TextEngine(BaseEngine): self.device = paddle.get_device() paddle.set_device(self.device) - logger.info(f"Text Engine set the device: {self.device}") + logger.debug(f"Text Engine set the device: {self.device}") except BaseException as e: logger.error( "Set device failed, please check if device is already used and the parameter 'device' in the yaml file" @@ -168,5 +168,6 @@ class TextEngine(BaseEngine): ckpt_path=config.ckpt_path, vocab_file=config.vocab_file) - logger.info("Init the text engine successfully") + logger.info("Initialize Text server engine successfully on device: %s." + % (self.device)) return True diff --git a/paddlespeech/server/engine/tts/online/onnx/tts_engine.py b/paddlespeech/server/engine/tts/online/onnx/tts_engine.py index f64287af..7b8e04e8 100644 --- a/paddlespeech/server/engine/tts/online/onnx/tts_engine.py +++ b/paddlespeech/server/engine/tts/online/onnx/tts_engine.py @@ -62,7 +62,7 @@ class TTSServerExecutor(TTSExecutor): (hasattr(self, 'am_encoder_infer_sess') and hasattr(self, 'am_decoder_sess') and hasattr( self, 'am_postnet_sess'))) and hasattr(self, 'voc_inference'): - logger.info('Models had been initialized.') + logger.debug('Models had been initialized.') return # am am_tag = am + '-' + lang @@ -85,8 +85,7 @@ class TTSServerExecutor(TTSExecutor): else: self.am_ckpt = os.path.abspath(am_ckpt[0]) self.phones_dict = os.path.abspath(phones_dict) - self.am_res_path = os.path.dirname( - os.path.abspath(am_ckpt)) + self.am_res_path = os.path.dirname(os.path.abspath(am_ckpt)) # create am sess self.am_sess = get_sess(self.am_ckpt, am_sess_conf) @@ -119,8 +118,7 @@ class TTSServerExecutor(TTSExecutor): self.am_postnet = os.path.abspath(am_ckpt[2]) self.phones_dict = os.path.abspath(phones_dict) self.am_stat = os.path.abspath(am_stat) - self.am_res_path = os.path.dirname( - os.path.abspath(am_ckpt[0])) + self.am_res_path = os.path.dirname(os.path.abspath(am_ckpt[0])) # create am sess self.am_encoder_infer_sess = get_sess(self.am_encoder_infer, @@ -130,13 +128,13 @@ class TTSServerExecutor(TTSExecutor): self.am_mu, self.am_std = np.load(self.am_stat) - logger.info(f"self.phones_dict: {self.phones_dict}") - logger.info(f"am model dir: {self.am_res_path}") - logger.info("Create am sess successfully.") + logger.debug(f"self.phones_dict: {self.phones_dict}") + logger.debug(f"am model dir: {self.am_res_path}") + logger.debug("Create am sess successfully.") # voc model info voc_tag = voc + '-' + lang - + if voc_ckpt is None: self.task_resource.set_task_model( model_tag=voc_tag, @@ -149,16 +147,16 @@ class TTSServerExecutor(TTSExecutor): else: self.voc_ckpt = os.path.abspath(voc_ckpt) self.voc_res_path = os.path.dirname(os.path.abspath(self.voc_ckpt)) - logger.info(self.voc_res_path) + logger.debug(self.voc_res_path) # create voc sess self.voc_sess = get_sess(self.voc_ckpt, voc_sess_conf) - logger.info("Create voc sess successfully.") + logger.debug("Create voc sess successfully.") with open(self.phones_dict, "r") as f: phn_id = [line.strip().split() for line in f.readlines()] self.vocab_size = len(phn_id) - logger.info(f"vocab_size: {self.vocab_size}") + logger.debug(f"vocab_size: {self.vocab_size}") # frontend self.tones_dict = None @@ -169,7 +167,7 @@ class TTSServerExecutor(TTSExecutor): elif lang == 'en': self.frontend = English(phone_vocab_path=self.phones_dict) - logger.info("frontend done!") + logger.debug("frontend done!") class TTSEngine(BaseEngine): @@ -267,7 +265,7 @@ class PaddleTTSConnectionHandler: tts_engine (TTSEngine): The TTS engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleTTSConnectionHandler to process the tts request") self.tts_engine = tts_engine diff --git a/paddlespeech/server/engine/tts/online/python/tts_engine.py b/paddlespeech/server/engine/tts/online/python/tts_engine.py index 74364382..9bd95849 100644 --- a/paddlespeech/server/engine/tts/online/python/tts_engine.py +++ b/paddlespeech/server/engine/tts/online/python/tts_engine.py @@ -102,7 +102,7 @@ class TTSServerExecutor(TTSExecutor): Init model and other resources from a specific path. """ if hasattr(self, 'am_inference') and hasattr(self, 'voc_inference'): - logger.info('Models had been initialized.') + logger.debug('Models had been initialized.') return # am model info if am_ckpt is None or am_config is None or am_stat is None or phones_dict is None: @@ -128,17 +128,15 @@ class TTSServerExecutor(TTSExecutor): # must have phones_dict in acoustic self.phones_dict = os.path.join( self.am_res_path, self.task_resource.res_dict['phones_dict']) - print("self.phones_dict:", self.phones_dict) - logger.info(self.am_res_path) - logger.info(self.am_config) - logger.info(self.am_ckpt) + logger.debug(self.am_res_path) + logger.debug(self.am_config) + logger.debug(self.am_ckpt) else: self.am_config = os.path.abspath(am_config) self.am_ckpt = os.path.abspath(am_ckpt) self.am_stat = os.path.abspath(am_stat) self.phones_dict = os.path.abspath(phones_dict) self.am_res_path = os.path.dirname(os.path.abspath(self.am_config)) - print("self.phones_dict:", self.phones_dict) self.tones_dict = None self.speaker_dict = None @@ -165,9 +163,9 @@ class TTSServerExecutor(TTSExecutor): self.voc_stat = os.path.join( self.voc_res_path, self.task_resource.voc_res_dict['speech_stats']) - logger.info(self.voc_res_path) - logger.info(self.voc_config) - logger.info(self.voc_ckpt) + logger.debug(self.voc_res_path) + logger.debug(self.voc_config) + logger.debug(self.voc_ckpt) else: self.voc_config = os.path.abspath(voc_config) self.voc_ckpt = os.path.abspath(voc_ckpt) @@ -184,7 +182,6 @@ class TTSServerExecutor(TTSExecutor): with open(self.phones_dict, "r") as f: phn_id = [line.strip().split() for line in f.readlines()] self.vocab_size = len(phn_id) - print("vocab_size:", self.vocab_size) # frontend if lang == 'zh': @@ -194,7 +191,6 @@ class TTSServerExecutor(TTSExecutor): elif lang == 'en': self.frontend = English(phone_vocab_path=self.phones_dict) - print("frontend done!") # am infer info self.am_name = am[:am.rindex('_')] @@ -209,7 +205,6 @@ class TTSServerExecutor(TTSExecutor): self.am_name + '_inference') self.am_inference = am_inference_class(am_normalizer, am) self.am_inference.eval() - print("acoustic model done!") # voc infer info self.voc_name = voc[:voc.rindex('_')] @@ -220,7 +215,6 @@ class TTSServerExecutor(TTSExecutor): '_inference') self.voc_inference = voc_inference_class(voc_normalizer, voc) self.voc_inference.eval() - print("voc done!") class TTSEngine(BaseEngine): @@ -309,7 +303,7 @@ class PaddleTTSConnectionHandler: tts_engine (TTSEngine): The TTS engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleTTSConnectionHandler to process the tts request") self.tts_engine = tts_engine @@ -369,7 +363,7 @@ class PaddleTTSConnectionHandler: text, merge_sentences=merge_sentences) phone_ids = input_ids["phone_ids"] else: - print("lang should in {'zh', 'en'}!") + logger.error("lang should in {'zh', 'en'}!") frontend_et = time.time() self.frontend_time = frontend_et - frontend_st diff --git a/paddlespeech/server/engine/tts/paddleinference/tts_engine.py b/paddlespeech/server/engine/tts/paddleinference/tts_engine.py index a5632487..43b0df40 100644 --- a/paddlespeech/server/engine/tts/paddleinference/tts_engine.py +++ b/paddlespeech/server/engine/tts/paddleinference/tts_engine.py @@ -65,7 +65,7 @@ class TTSServerExecutor(TTSExecutor): Init model and other resources from a specific path. """ if hasattr(self, 'am_predictor') and hasattr(self, 'voc_predictor'): - logger.info('Models had been initialized.') + logger.debug('Models had been initialized.') return # am if am_model is None or am_params is None or phones_dict is None: @@ -91,16 +91,16 @@ class TTSServerExecutor(TTSExecutor): self.am_res_path, self.task_resource.res_dict['phones_dict']) self.am_sample_rate = self.task_resource.res_dict['sample_rate'] - logger.info(self.am_res_path) - logger.info(self.am_model) - logger.info(self.am_params) + logger.debug(self.am_res_path) + logger.debug(self.am_model) + logger.debug(self.am_params) else: self.am_model = os.path.abspath(am_model) self.am_params = os.path.abspath(am_params) self.phones_dict = os.path.abspath(phones_dict) self.am_sample_rate = am_sample_rate self.am_res_path = os.path.dirname(os.path.abspath(self.am_model)) - logger.info("self.phones_dict: {}".format(self.phones_dict)) + logger.debug("self.phones_dict: {}".format(self.phones_dict)) # for speedyspeech self.tones_dict = None @@ -139,9 +139,9 @@ class TTSServerExecutor(TTSExecutor): self.voc_res_path, self.task_resource.voc_res_dict['params']) self.voc_sample_rate = self.task_resource.voc_res_dict[ 'sample_rate'] - logger.info(self.voc_res_path) - logger.info(self.voc_model) - logger.info(self.voc_params) + logger.debug(self.voc_res_path) + logger.debug(self.voc_model) + logger.debug(self.voc_params) else: self.voc_model = os.path.abspath(voc_model) self.voc_params = os.path.abspath(voc_params) @@ -156,21 +156,21 @@ class TTSServerExecutor(TTSExecutor): with open(self.phones_dict, "r") as f: phn_id = [line.strip().split() for line in f.readlines()] vocab_size = len(phn_id) - logger.info("vocab_size: {}".format(vocab_size)) + logger.debug("vocab_size: {}".format(vocab_size)) tone_size = None if self.tones_dict: with open(self.tones_dict, "r") as f: tone_id = [line.strip().split() for line in f.readlines()] tone_size = len(tone_id) - logger.info("tone_size: {}".format(tone_size)) + logger.debug("tone_size: {}".format(tone_size)) spk_num = None if self.speaker_dict: with open(self.speaker_dict, 'rt') as f: spk_id = [line.strip().split() for line in f.readlines()] spk_num = len(spk_id) - logger.info("spk_num: {}".format(spk_num)) + logger.debug("spk_num: {}".format(spk_num)) # frontend if lang == 'zh': @@ -180,7 +180,7 @@ class TTSServerExecutor(TTSExecutor): elif lang == 'en': self.frontend = English(phone_vocab_path=self.phones_dict) - logger.info("frontend done!") + logger.debug("frontend done!") # Create am predictor self.am_predictor_conf = am_predictor_conf @@ -188,7 +188,7 @@ class TTSServerExecutor(TTSExecutor): model_file=self.am_model, params_file=self.am_params, predictor_conf=self.am_predictor_conf) - logger.info("Create AM predictor successfully.") + logger.debug("Create AM predictor successfully.") # Create voc predictor self.voc_predictor_conf = voc_predictor_conf @@ -196,7 +196,7 @@ class TTSServerExecutor(TTSExecutor): model_file=self.voc_model, params_file=self.voc_params, predictor_conf=self.voc_predictor_conf) - logger.info("Create Vocoder predictor successfully.") + logger.debug("Create Vocoder predictor successfully.") @paddle.no_grad() def infer(self, @@ -328,7 +328,8 @@ class TTSEngine(BaseEngine): logger.error(e) return False - logger.info("Initialize TTS server engine successfully.") + logger.info("Initialize TTS server engine successfully on device: %s." % + (self.device)) return True @@ -340,7 +341,7 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): tts_engine (TTSEngine): The TTS engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleTTSConnectionHandler to process the tts request") self.tts_engine = tts_engine @@ -378,23 +379,23 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): if target_fs == 0 or target_fs > original_fs: target_fs = original_fs wav_tar_fs = wav - logger.info( + logger.debug( "The sample rate of synthesized audio is the same as model, which is {}Hz". format(original_fs)) else: wav_tar_fs = librosa.resample( np.squeeze(wav), original_fs, target_fs) - logger.info( + logger.debug( "The sample rate of model is {}Hz and the target sample rate is {}Hz. Converting the sample rate of the synthesized audio successfully.". format(original_fs, target_fs)) # transform volume wav_vol = wav_tar_fs * volume - logger.info("Transform the volume of the audio successfully.") + logger.debug("Transform the volume of the audio successfully.") # transform speed try: # windows not support soxbindings wav_speed = change_speed(wav_vol, speed, target_fs) - logger.info("Transform the speed of the audio successfully.") + logger.debug("Transform the speed of the audio successfully.") except ServerBaseException: raise ServerBaseException( ErrorCode.SERVER_INTERNAL_ERR, @@ -411,7 +412,7 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): wavfile.write(buf, target_fs, wav_speed) base64_bytes = base64.b64encode(buf.read()) wav_base64 = base64_bytes.decode('utf-8') - logger.info("Audio to string successfully.") + logger.debug("Audio to string successfully.") # save audio if audio_path is not None: @@ -499,15 +500,15 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): logger.error(e) sys.exit(-1) - logger.info("AM model: {}".format(self.config.am)) - logger.info("Vocoder model: {}".format(self.config.voc)) - logger.info("Language: {}".format(lang)) + logger.debug("AM model: {}".format(self.config.am)) + logger.debug("Vocoder model: {}".format(self.config.voc)) + logger.debug("Language: {}".format(lang)) logger.info("tts engine type: python") logger.info("audio duration: {}".format(duration)) - logger.info("frontend inference time: {}".format(self.frontend_time)) - logger.info("AM inference time: {}".format(self.am_time)) - logger.info("Vocoder inference time: {}".format(self.voc_time)) + logger.debug("frontend inference time: {}".format(self.frontend_time)) + logger.debug("AM inference time: {}".format(self.am_time)) + logger.debug("Vocoder inference time: {}".format(self.voc_time)) logger.info("total inference time: {}".format(infer_time)) logger.info( "postprocess (change speed, volume, target sample rate) time: {}". @@ -515,6 +516,6 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): logger.info("total generate audio time: {}".format(infer_time + postprocess_time)) logger.info("RTF: {}".format(rtf)) - logger.info("device: {}".format(self.tts_engine.device)) + logger.debug("device: {}".format(self.tts_engine.device)) return lang, target_sample_rate, duration, wav_base64 diff --git a/paddlespeech/server/engine/tts/python/tts_engine.py b/paddlespeech/server/engine/tts/python/tts_engine.py index b048b01a..4d180100 100644 --- a/paddlespeech/server/engine/tts/python/tts_engine.py +++ b/paddlespeech/server/engine/tts/python/tts_engine.py @@ -105,7 +105,7 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): tts_engine (TTSEngine): The TTS engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleTTSConnectionHandler to process the tts request") self.tts_engine = tts_engine @@ -143,23 +143,23 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): if target_fs == 0 or target_fs > original_fs: target_fs = original_fs wav_tar_fs = wav - logger.info( + logger.debug( "The sample rate of synthesized audio is the same as model, which is {}Hz". format(original_fs)) else: wav_tar_fs = librosa.resample( np.squeeze(wav), original_fs, target_fs) - logger.info( + logger.debug( "The sample rate of model is {}Hz and the target sample rate is {}Hz. Converting the sample rate of the synthesized audio successfully.". format(original_fs, target_fs)) # transform volume wav_vol = wav_tar_fs * volume - logger.info("Transform the volume of the audio successfully.") + logger.debug("Transform the volume of the audio successfully.") # transform speed try: # windows not support soxbindings wav_speed = change_speed(wav_vol, speed, target_fs) - logger.info("Transform the speed of the audio successfully.") + logger.debug("Transform the speed of the audio successfully.") except ServerBaseException: raise ServerBaseException( ErrorCode.SERVER_INTERNAL_ERR, @@ -176,7 +176,7 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): wavfile.write(buf, target_fs, wav_speed) base64_bytes = base64.b64encode(buf.read()) wav_base64 = base64_bytes.decode('utf-8') - logger.info("Audio to string successfully.") + logger.debug("Audio to string successfully.") # save audio if audio_path is not None: @@ -264,15 +264,15 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): logger.error(e) sys.exit(-1) - logger.info("AM model: {}".format(self.config.am)) - logger.info("Vocoder model: {}".format(self.config.voc)) - logger.info("Language: {}".format(lang)) + logger.debug("AM model: {}".format(self.config.am)) + logger.debug("Vocoder model: {}".format(self.config.voc)) + logger.debug("Language: {}".format(lang)) logger.info("tts engine type: python") logger.info("audio duration: {}".format(duration)) - logger.info("frontend inference time: {}".format(self.frontend_time)) - logger.info("AM inference time: {}".format(self.am_time)) - logger.info("Vocoder inference time: {}".format(self.voc_time)) + logger.debug("frontend inference time: {}".format(self.frontend_time)) + logger.debug("AM inference time: {}".format(self.am_time)) + logger.debug("Vocoder inference time: {}".format(self.voc_time)) logger.info("total inference time: {}".format(infer_time)) logger.info( "postprocess (change speed, volume, target sample rate) time: {}". @@ -280,6 +280,6 @@ class PaddleTTSConnectionHandler(TTSServerExecutor): logger.info("total generate audio time: {}".format(infer_time + postprocess_time)) logger.info("RTF: {}".format(rtf)) - logger.info("device: {}".format(self.tts_engine.device)) + logger.debug("device: {}".format(self.tts_engine.device)) return lang, target_sample_rate, duration, wav_base64 diff --git a/paddlespeech/server/engine/vector/python/vector_engine.py b/paddlespeech/server/engine/vector/python/vector_engine.py index 3c72f55d..f7d60648 100644 --- a/paddlespeech/server/engine/vector/python/vector_engine.py +++ b/paddlespeech/server/engine/vector/python/vector_engine.py @@ -33,7 +33,7 @@ class PaddleVectorConnectionHandler: vector_engine (VectorEngine): The Vector engine """ super().__init__() - logger.info( + logger.debug( "Create PaddleVectorConnectionHandler to process the vector request") self.vector_engine = vector_engine self.executor = self.vector_engine.executor @@ -54,7 +54,7 @@ class PaddleVectorConnectionHandler: Returns: str: the punctuation text """ - logger.info( + logger.debug( f"start to extract the do vector {self.task} from the http request") if self.task == "spk" and task == "spk": embedding = self.extract_audio_embedding(audio_data) @@ -81,17 +81,17 @@ class PaddleVectorConnectionHandler: Returns: float: the score between enroll and test audio """ - logger.info("start to extract the enroll audio embedding") + logger.debug("start to extract the enroll audio embedding") enroll_emb = self.extract_audio_embedding(enroll_audio) - logger.info("start to extract the test audio embedding") + logger.debug("start to extract the test audio embedding") test_emb = self.extract_audio_embedding(test_audio) - logger.info( + logger.debug( "start to get the score between the enroll and test embedding") score = self.executor.get_embeddings_score(enroll_emb, test_emb) - logger.info(f"get the enroll vs test score: {score}") + logger.debug(f"get the enroll vs test score: {score}") return score @paddle.no_grad() @@ -106,11 +106,12 @@ class PaddleVectorConnectionHandler: # because the soundfile will change the io.BytesIO(audio) to the end # thus we should convert the base64 string to io.BytesIO when we need the audio data if not self.executor._check(io.BytesIO(audio), sample_rate): - logger.info("check the audio sample rate occurs error") + logger.debug("check the audio sample rate occurs error") return np.array([0.0]) waveform, sr = load_audio(io.BytesIO(audio)) - logger.info(f"load the audio sample points, shape is: {waveform.shape}") + logger.debug( + f"load the audio sample points, shape is: {waveform.shape}") # stage 2: get the audio feat # Note: Now we only support fbank feature @@ -121,9 +122,9 @@ class PaddleVectorConnectionHandler: n_mels=self.config.n_mels, window_size=self.config.window_size, hop_length=self.config.hop_size) - logger.info(f"extract the audio feats, shape is: {feats.shape}") + logger.debug(f"extract the audio feats, shape is: {feats.shape}") except Exception as e: - logger.info(f"feats occurs exception {e}") + logger.error(f"feats occurs exception {e}") sys.exit(-1) feats = paddle.to_tensor(feats).unsqueeze(0) @@ -159,7 +160,7 @@ class VectorEngine(BaseEngine): """The Vector Engine """ super(VectorEngine, self).__init__() - logger.info("Create the VectorEngine Instance") + logger.debug("Create the VectorEngine Instance") def init(self, config: dict): """Init the Vector Engine @@ -170,7 +171,7 @@ class VectorEngine(BaseEngine): Returns: bool: The engine instance flag """ - logger.info("Init the vector engine") + logger.debug("Init the vector engine") try: self.config = config if self.config.device: @@ -179,7 +180,7 @@ class VectorEngine(BaseEngine): self.device = paddle.get_device() paddle.set_device(self.device) - logger.info(f"Vector Engine set the device: {self.device}") + logger.debug(f"Vector Engine set the device: {self.device}") except BaseException as e: logger.error( "Set device failed, please check if device is already used and the parameter 'device' in the yaml file" @@ -196,5 +197,7 @@ class VectorEngine(BaseEngine): ckpt_path=config.ckpt_path, task=config.task) - logger.info("Init the Vector engine successfully") + logger.info( + "Initialize Vector server engine successfully on device: %s." % + (self.device)) return True diff --git a/paddlespeech/server/utils/audio_handler.py b/paddlespeech/server/utils/audio_handler.py index e3d90d46..d4540781 100644 --- a/paddlespeech/server/utils/audio_handler.py +++ b/paddlespeech/server/utils/audio_handler.py @@ -138,7 +138,7 @@ class ASRWsAudioHandler: Returns: str: the final asr result """ - logging.info("send a message to the server") + logging.debug("send a message to the server") if self.url is None: logger.error("No asr server, please input valid ip and port") @@ -160,7 +160,7 @@ class ASRWsAudioHandler: separators=(',', ': ')) await ws.send(audio_info) msg = await ws.recv() - logger.info("client receive msg={}".format(msg)) + logger.debug("client receive msg={}".format(msg)) # 3. send chunk audio data to engine for chunk_data in self.read_wave(wavfile_path): @@ -170,7 +170,7 @@ class ASRWsAudioHandler: if self.punc_server and len(msg["result"]) > 0: msg["result"] = self.punc_server.run(msg["result"]) - logger.info("client receive msg={}".format(msg)) + logger.debug("client receive msg={}".format(msg)) # 4. we must send finished signal to the server audio_info = json.dumps( @@ -310,7 +310,7 @@ class TTSWsHandler: start_request = json.dumps({"task": "tts", "signal": "start"}) await ws.send(start_request) msg = await ws.recv() - logger.info(f"client receive msg={msg}") + logger.debug(f"client receive msg={msg}") msg = json.loads(msg) session = msg["session"] @@ -319,7 +319,7 @@ class TTSWsHandler: request = json.dumps({"text": text_base64}) st = time.time() await ws.send(request) - logging.info("send a message to the server") + logging.debug("send a message to the server") # 4. Process the received response message = await ws.recv() @@ -543,7 +543,6 @@ class VectorHttpHandler: "sample_rate": sample_rate, } - logger.info(self.url) res = requests.post(url=self.url, data=json.dumps(data)) return res.json() diff --git a/paddlespeech/server/utils/audio_process.py b/paddlespeech/server/utils/audio_process.py index 416d77ac..ae538397 100644 --- a/paddlespeech/server/utils/audio_process.py +++ b/paddlespeech/server/utils/audio_process.py @@ -169,7 +169,7 @@ def save_audio(bytes_data, audio_path, sample_rate: int=24000) -> bool: sample_rate=sample_rate) os.remove("./tmp.pcm") else: - print("Only supports saved audio format is pcm or wav") + logger.error("Only supports saved audio format is pcm or wav") return False return True diff --git a/paddlespeech/server/utils/onnx_infer.py b/paddlespeech/server/utils/onnx_infer.py index 087eb9c0..23d83c73 100644 --- a/paddlespeech/server/utils/onnx_infer.py +++ b/paddlespeech/server/utils/onnx_infer.py @@ -20,7 +20,7 @@ from paddlespeech.cli.log import logger def get_sess(model_path: Optional[os.PathLike]=None, sess_conf: dict=None): - logger.info(f"ort sessconf: {sess_conf}") + logger.debug(f"ort sessconf: {sess_conf}") sess_options = ort.SessionOptions() sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL if sess_conf.get('graph_optimization_level', 99) == 0: @@ -34,7 +34,7 @@ def get_sess(model_path: Optional[os.PathLike]=None, sess_conf: dict=None): # fastspeech2/mb_melgan can't use trt now! if sess_conf.get("use_trt", 0): providers = ['TensorrtExecutionProvider'] - logger.info(f"ort providers: {providers}") + logger.debug(f"ort providers: {providers}") if 'cpu_threads' in sess_conf: sess_options.intra_op_num_threads = sess_conf.get("cpu_threads", 0) diff --git a/paddlespeech/server/utils/util.py b/paddlespeech/server/utils/util.py index 061b213c..826d923e 100644 --- a/paddlespeech/server/utils/util.py +++ b/paddlespeech/server/utils/util.py @@ -13,6 +13,8 @@ import base64 import math +from paddlespeech.cli.log import logger + def wav2base64(wav_file: str): """ @@ -61,7 +63,7 @@ def get_chunks(data, block_size, pad_size, step): elif step == "voc": data_len = data.shape[0] else: - print("Please set correct type to get chunks, am or voc") + logger.error("Please set correct type to get chunks, am or voc") chunks = [] n = math.ceil(data_len / block_size) @@ -73,7 +75,7 @@ def get_chunks(data, block_size, pad_size, step): elif step == "voc": chunks.append(data[start:end, :]) else: - print("Please set correct type to get chunks, am or voc") + logger.error("Please set correct type to get chunks, am or voc") return chunks From f6d1c545ac0a2370f9f5bc4228e7b872bfc59345 Mon Sep 17 00:00:00 2001 From: TianYuan Date: Tue, 5 Jul 2022 06:12:37 +0000 Subject: [PATCH 22/27] fromat doc_string --- .../t2s/models/fastspeech2/fastspeech2.py | 337 ++++++++++++------ paddlespeech/t2s/models/hifigan/hifigan.py | 154 +++++--- paddlespeech/t2s/models/melgan/melgan.py | 133 ++++--- .../t2s/models/melgan/style_melgan.py | 63 ++-- .../parallel_wavegan/parallel_wavegan.py | 157 +++++--- .../t2s/models/speedyspeech/speedyspeech.py | 132 ++++--- .../t2s/models/tacotron2/tacotron2.py | 153 +++++--- .../models/transformer_tts/transformer_tts.py | 178 +++++---- paddlespeech/t2s/models/waveflow.py | 214 +++++++---- paddlespeech/t2s/models/wavernn/wavernn.py | 64 ++-- paddlespeech/t2s/modules/causal_conv.py | 6 +- .../t2s/modules/conformer/convolution.py | 9 +- .../t2s/modules/conformer/encoder_layer.py | 39 +- paddlespeech/t2s/modules/conv.py | 60 ++-- paddlespeech/t2s/modules/geometry.py | 6 +- paddlespeech/t2s/modules/layer_norm.py | 9 +- paddlespeech/t2s/modules/losses.py | 178 +++++---- paddlespeech/t2s/modules/nets_utils.py | 129 ++++--- paddlespeech/t2s/modules/pqmf.py | 27 +- .../modules/predictor/duration_predictor.py | 36 +- .../t2s/modules/predictor/length_regulator.py | 12 +- .../modules/predictor/variance_predictor.py | 24 +- paddlespeech/t2s/modules/residual_block.py | 63 ++-- paddlespeech/t2s/modules/residual_stack.py | 30 +- paddlespeech/t2s/modules/style_encoder.py | 75 ++-- .../t2s/modules/tacotron2/attentions.py | 159 ++++++--- paddlespeech/t2s/modules/tacotron2/decoder.py | 125 ++++--- paddlespeech/t2s/modules/tacotron2/encoder.py | 49 ++- paddlespeech/t2s/modules/tade_res_block.py | 24 +- .../t2s/modules/transformer/attention.py | 96 +++-- .../t2s/modules/transformer/decoder.py | 96 +++-- .../t2s/modules/transformer/decoder_layer.py | 36 +- .../t2s/modules/transformer/embedding.py | 72 ++-- .../t2s/modules/transformer/encoder.py | 258 +++++++++----- .../t2s/modules/transformer/encoder_layer.py | 33 +- .../t2s/modules/transformer/lightconv.py | 30 +- paddlespeech/t2s/modules/transformer/mask.py | 15 +- .../modules/transformer/multi_layer_conv.py | 30 +- .../transformer/positionwise_feed_forward.py | 9 +- .../t2s/modules/transformer/repeat.py | 6 +- .../t2s/modules/transformer/subsampling.py | 24 +- paddlespeech/t2s/modules/upsample.py | 64 ++-- paddlespeech/t2s/training/experiment.py | 6 +- paddlespeech/t2s/utils/checkpoint.py | 35 +- paddlespeech/t2s/utils/error_rate.py | 12 +- paddlespeech/t2s/utils/h5_utils.py | 6 +- paddlespeech/t2s/utils/internals.py | 3 +- 47 files changed, 2299 insertions(+), 1177 deletions(-) diff --git a/paddlespeech/t2s/models/fastspeech2/fastspeech2.py b/paddlespeech/t2s/models/fastspeech2/fastspeech2.py index ec5ed984..347a10e9 100644 --- a/paddlespeech/t2s/models/fastspeech2/fastspeech2.py +++ b/paddlespeech/t2s/models/fastspeech2/fastspeech2.py @@ -141,71 +141,133 @@ class FastSpeech2(nn.Layer): init_dec_alpha: float=1.0, ): """Initialize FastSpeech2 module. Args: - idim (int): Dimension of the inputs. - odim (int): Dimension of the outputs. - adim (int): Attention dimension. - aheads (int): Number of attention heads. - elayers (int): Number of encoder layers. - eunits (int): Number of encoder hidden units. - dlayers (int): Number of decoder layers. - dunits (int): Number of decoder hidden units. - postnet_layers (int): Number of postnet layers. - postnet_chans (int): Number of postnet channels. - postnet_filts (int): Kernel size of postnet. - postnet_dropout_rate (float): Dropout rate in postnet. - use_scaled_pos_enc (bool): Whether to use trainable scaled pos encoding. - use_batch_norm (bool): Whether to use batch normalization in encoder prenet. - encoder_normalize_before (bool): Whether to apply layernorm layer before encoder block. - decoder_normalize_before (bool): Whether to apply layernorm layer before decoder block. - encoder_concat_after (bool): Whether to concatenate attention layer's input and output in encoder. - decoder_concat_after (bool): Whether to concatenate attention layer's input and output in decoder. - reduction_factor (int): Reduction factor. - encoder_type (str): Encoder type ("transformer" or "conformer"). - decoder_type (str): Decoder type ("transformer" or "conformer"). - transformer_enc_dropout_rate (float): Dropout rate in encoder except attention and positional encoding. - transformer_enc_positional_dropout_rate (float): Dropout rate after encoder positional encoding. - transformer_enc_attn_dropout_rate (float): Dropout rate in encoder self-attention module. - transformer_dec_dropout_rate (float): Dropout rate in decoder except attention & positional encoding. - transformer_dec_positional_dropout_rate (float): Dropout rate after decoder positional encoding. - transformer_dec_attn_dropout_rate (float): Dropout rate in decoder self-attention module. - conformer_pos_enc_layer_type (str): Pos encoding layer type in conformer. - conformer_self_attn_layer_type (str): Self-attention layer type in conformer - conformer_activation_type (str): Activation function type in conformer. - use_macaron_style_in_conformer (bool): Whether to use macaron style FFN. - use_cnn_in_conformer (bool): Whether to use CNN in conformer. - zero_triu (bool): Whether to use zero triu in relative self-attention module. - conformer_enc_kernel_size (int): Kernel size of encoder conformer. - conformer_dec_kernel_size (int): Kernel size of decoder conformer. - duration_predictor_layers (int): Number of duration predictor layers. - duration_predictor_chans (int): Number of duration predictor channels. - duration_predictor_kernel_size (int): Kernel size of duration predictor. - duration_predictor_dropout_rate (float): Dropout rate in duration predictor. - pitch_predictor_layers (int): Number of pitch predictor layers. - pitch_predictor_chans (int): Number of pitch predictor channels. - pitch_predictor_kernel_size (int): Kernel size of pitch predictor. - pitch_predictor_dropout_rate (float): Dropout rate in pitch predictor. - pitch_embed_kernel_size (float): Kernel size of pitch embedding. - pitch_embed_dropout_rate (float): Dropout rate for pitch embedding. - stop_gradient_from_pitch_predictor (bool): Whether to stop gradient from pitch predictor to encoder. - energy_predictor_layers (int): Number of energy predictor layers. - energy_predictor_chans (int): Number of energy predictor channels. - energy_predictor_kernel_size (int): Kernel size of energy predictor. - energy_predictor_dropout_rate (float): Dropout rate in energy predictor. - energy_embed_kernel_size (float): Kernel size of energy embedding. - energy_embed_dropout_rate (float): Dropout rate for energy embedding. - stop_gradient_from_energy_predictor(bool): Whether to stop gradient from energy predictor to encoder. - spk_num (Optional[int]): Number of speakers. If not None, assume that the spk_embed_dim is not None, + idim (int): + Dimension of the inputs. + odim (int): + Dimension of the outputs. + adim (int): + Attention dimension. + aheads (int): + Number of attention heads. + elayers (int): + Number of encoder layers. + eunits (int): + Number of encoder hidden units. + dlayers (int): + Number of decoder layers. + dunits (int): + Number of decoder hidden units. + postnet_layers (int): + Number of postnet layers. + postnet_chans (int): + Number of postnet channels. + postnet_filts (int): + Kernel size of postnet. + postnet_dropout_rate (float): + Dropout rate in postnet. + use_scaled_pos_enc (bool): + Whether to use trainable scaled pos encoding. + use_batch_norm (bool): + Whether to use batch normalization in encoder prenet. + encoder_normalize_before (bool): + Whether to apply layernorm layer before encoder block. + decoder_normalize_before (bool): + Whether to apply layernorm layer before decoder block. + encoder_concat_after (bool): + Whether to concatenate attention layer's input and output in encoder. + decoder_concat_after (bool): + Whether to concatenate attention layer's input and output in decoder. + reduction_factor (int): + Reduction factor. + encoder_type (str): + Encoder type ("transformer" or "conformer"). + decoder_type (str): + Decoder type ("transformer" or "conformer"). + transformer_enc_dropout_rate (float): + Dropout rate in encoder except attention and positional encoding. + transformer_enc_positional_dropout_rate (float): + Dropout rate after encoder positional encoding. + transformer_enc_attn_dropout_rate (float): + Dropout rate in encoder self-attention module. + transformer_dec_dropout_rate (float): + Dropout rate in decoder except attention & positional encoding. + transformer_dec_positional_dropout_rate (float): + Dropout rate after decoder positional encoding. + transformer_dec_attn_dropout_rate (float): + Dropout rate in decoder self-attention module. + conformer_pos_enc_layer_type (str): + Pos encoding layer type in conformer. + conformer_self_attn_layer_type (str): + Self-attention layer type in conformer + conformer_activation_type (str): + Activation function type in conformer. + use_macaron_style_in_conformer (bool): + Whether to use macaron style FFN. + use_cnn_in_conformer (bool): + Whether to use CNN in conformer. + zero_triu (bool): + Whether to use zero triu in relative self-attention module. + conformer_enc_kernel_size (int): + Kernel size of encoder conformer. + conformer_dec_kernel_size (int): + Kernel size of decoder conformer. + duration_predictor_layers (int): + Number of duration predictor layers. + duration_predictor_chans (int): + Number of duration predictor channels. + duration_predictor_kernel_size (int): + Kernel size of duration predictor. + duration_predictor_dropout_rate (float): + Dropout rate in duration predictor. + pitch_predictor_layers (int): + Number of pitch predictor layers. + pitch_predictor_chans (int): + Number of pitch predictor channels. + pitch_predictor_kernel_size (int): + Kernel size of pitch predictor. + pitch_predictor_dropout_rate (float): + Dropout rate in pitch predictor. + pitch_embed_kernel_size (float): + Kernel size of pitch embedding. + pitch_embed_dropout_rate (float): + Dropout rate for pitch embedding. + stop_gradient_from_pitch_predictor (bool): + Whether to stop gradient from pitch predictor to encoder. + energy_predictor_layers (int): + Number of energy predictor layers. + energy_predictor_chans (int): + Number of energy predictor channels. + energy_predictor_kernel_size (int): + Kernel size of energy predictor. + energy_predictor_dropout_rate (float): + Dropout rate in energy predictor. + energy_embed_kernel_size (float): + Kernel size of energy embedding. + energy_embed_dropout_rate (float): + Dropout rate for energy embedding. + stop_gradient_from_energy_predictor(bool): + Whether to stop gradient from energy predictor to encoder. + spk_num (Optional[int]): + Number of speakers. If not None, assume that the spk_embed_dim is not None, spk_ids will be provided as the input and use spk_embedding_table. - spk_embed_dim (Optional[int]): Speaker embedding dimension. If not None, + spk_embed_dim (Optional[int]): + Speaker embedding dimension. If not None, assume that spk_emb will be provided as the input or spk_num is not None. - spk_embed_integration_type (str): How to integrate speaker embedding. - tone_num (Optional[int]): Number of tones. If not None, assume that the + spk_embed_integration_type (str): + How to integrate speaker embedding. + tone_num (Optional[int]): + Number of tones. If not None, assume that the tone_ids will be provided as the input and use tone_embedding_table. - tone_embed_dim (Optional[int]): Tone embedding dimension. If not None, assume that tone_num is not None. - tone_embed_integration_type (str): How to integrate tone embedding. - init_type (str): How to initialize transformer parameters. - init_enc_alpha (float): Initial value of alpha in scaled pos encoding of the encoder. - init_dec_alpha (float): Initial value of alpha in scaled pos encoding of the decoder. + tone_embed_dim (Optional[int]): + Tone embedding dimension. If not None, assume that tone_num is not None. + tone_embed_integration_type (str): + How to integrate tone embedding. + init_type (str): + How to initialize transformer parameters. + init_enc_alpha (float): + Initial value of alpha in scaled pos encoding of the encoder. + init_dec_alpha (float): + Initial value of alpha in scaled pos encoding of the decoder. """ assert check_argument_types() @@ -449,20 +511,29 @@ class FastSpeech2(nn.Layer): """Calculate forward propagation. Args: - text(Tensor(int64)): Batch of padded token ids (B, Tmax). - text_lengths(Tensor(int64)): Batch of lengths of each input (B,). - speech(Tensor): Batch of padded target features (B, Lmax, odim). - speech_lengths(Tensor(int64)): Batch of the lengths of each target (B,). - durations(Tensor(int64)): Batch of padded durations (B, Tmax). - pitch(Tensor): Batch of padded token-averaged pitch (B, Tmax, 1). - energy(Tensor): Batch of padded token-averaged energy (B, Tmax, 1). - tone_id(Tensor, optional(int64)): Batch of padded tone ids (B, Tmax). - spk_emb(Tensor, optional): Batch of speaker embeddings (B, spk_embed_dim). - spk_id(Tnesor, optional(int64)): Batch of speaker ids (B,) + text(Tensor(int64)): + Batch of padded token ids (B, Tmax). + text_lengths(Tensor(int64)): + Batch of lengths of each input (B,). + speech(Tensor): + Batch of padded target features (B, Lmax, odim). + speech_lengths(Tensor(int64)): + Batch of the lengths of each target (B,). + durations(Tensor(int64)): + Batch of padded durations (B, Tmax). + pitch(Tensor): + Batch of padded token-averaged pitch (B, Tmax, 1). + energy(Tensor): + Batch of padded token-averaged energy (B, Tmax, 1). + tone_id(Tensor, optional(int64)): + Batch of padded tone ids (B, Tmax). + spk_emb(Tensor, optional): + Batch of speaker embeddings (B, spk_embed_dim). + spk_id(Tnesor, optional(int64)): + Batch of speaker ids (B,) Returns: - """ # input of embedding must be int64 @@ -658,20 +729,28 @@ class FastSpeech2(nn.Layer): """Generate the sequence of features given the sequences of characters. Args: - text(Tensor(int64)): Input sequence of characters (T,). - durations(Tensor, optional (int64)): Groundtruth of duration (T,). - pitch(Tensor, optional): Groundtruth of token-averaged pitch (T, 1). - energy(Tensor, optional): Groundtruth of token-averaged energy (T, 1). - alpha(float, optional): Alpha to control the speed. - use_teacher_forcing(bool, optional): Whether to use teacher forcing. + text(Tensor(int64)): + Input sequence of characters (T,). + durations(Tensor, optional (int64)): + Groundtruth of duration (T,). + pitch(Tensor, optional): + Groundtruth of token-averaged pitch (T, 1). + energy(Tensor, optional): + Groundtruth of token-averaged energy (T, 1). + alpha(float, optional): + Alpha to control the speed. + use_teacher_forcing(bool, optional): + Whether to use teacher forcing. If true, groundtruth of duration, pitch and energy will be used. - spk_emb(Tensor, optional, optional): peaker embedding vector (spk_embed_dim,). (Default value = None) - spk_id(Tensor, optional(int64), optional): spk ids (1,). (Default value = None) - tone_id(Tensor, optional(int64), optional): tone ids (T,). (Default value = None) + spk_emb(Tensor, optional, optional): + peaker embedding vector (spk_embed_dim,). (Default value = None) + spk_id(Tensor, optional(int64), optional): + spk ids (1,). (Default value = None) + tone_id(Tensor, optional(int64), optional): + tone ids (T,). (Default value = None) Returns: - """ # input of embedding must be int64 x = paddle.cast(text, 'int64') @@ -720,8 +799,10 @@ class FastSpeech2(nn.Layer): """Integrate speaker embedding with hidden states. Args: - hs(Tensor): Batch of hidden state sequences (B, Tmax, adim). - spk_emb(Tensor): Batch of speaker embeddings (B, spk_embed_dim). + hs(Tensor): + Batch of hidden state sequences (B, Tmax, adim). + spk_emb(Tensor): + Batch of speaker embeddings (B, spk_embed_dim). Returns: @@ -745,8 +826,10 @@ class FastSpeech2(nn.Layer): """Integrate speaker embedding with hidden states. Args: - hs(Tensor): Batch of hidden state sequences (B, Tmax, adim). - tone_embs(Tensor): Batch of speaker embeddings (B, Tmax, tone_embed_dim). + hs(Tensor): + Batch of hidden state sequences (B, Tmax, adim). + tone_embs(Tensor): + Batch of speaker embeddings (B, Tmax, tone_embed_dim). Returns: @@ -769,10 +852,12 @@ class FastSpeech2(nn.Layer): """Make masks for self-attention. Args: - ilens(Tensor): Batch of lengths (B,). + ilens(Tensor): + Batch of lengths (B,). Returns: - Tensor: Mask tensor for self-attention. dtype=paddle.bool + Tensor: + Mask tensor for self-attention. dtype=paddle.bool Examples: >>> ilens = [5, 3] @@ -854,19 +939,32 @@ class StyleFastSpeech2Inference(FastSpeech2Inference): """ Args: - text(Tensor(int64)): Input sequence of characters (T,). - durations(paddle.Tensor/np.ndarray, optional (int64)): Groundtruth of duration (T,), this will overwrite the set of durations_scale and durations_bias + text(Tensor(int64)): + Input sequence of characters (T,). + durations(paddle.Tensor/np.ndarray, optional (int64)): + Groundtruth of duration (T,), this will overwrite the set of durations_scale and durations_bias durations_scale(int/float, optional): + durations_bias(int/float, optional): - pitch(paddle.Tensor/np.ndarray, optional): Groundtruth of token-averaged pitch (T, 1), this will overwrite the set of pitch_scale and pitch_bias - pitch_scale(int/float, optional): In denormed HZ domain. - pitch_bias(int/float, optional): In denormed HZ domain. - energy(paddle.Tensor/np.ndarray, optional): Groundtruth of token-averaged energy (T, 1), this will overwrite the set of energy_scale and energy_bias - energy_scale(int/float, optional): In denormed domain. - energy_bias(int/float, optional): In denormed domain. - robot: bool: (Default value = False) - spk_emb: (Default value = None) - spk_id: (Default value = None) + + pitch(paddle.Tensor/np.ndarray, optional): + Groundtruth of token-averaged pitch (T, 1), this will overwrite the set of pitch_scale and pitch_bias + pitch_scale(int/float, optional): + In denormed HZ domain. + pitch_bias(int/float, optional): + In denormed HZ domain. + energy(paddle.Tensor/np.ndarray, optional): + Groundtruth of token-averaged energy (T, 1), this will overwrite the set of energy_scale and energy_bias + energy_scale(int/float, optional): + In denormed domain. + energy_bias(int/float, optional): + In denormed domain. + robot(bool) (Default value = False): + + spk_emb(Default value = None): + + spk_id(Default value = None): + Returns: Tensor: logmel @@ -945,8 +1043,10 @@ class FastSpeech2Loss(nn.Layer): use_weighted_masking: bool=False): """Initialize feed-forward Transformer loss module. Args: - use_masking (bool): Whether to apply masking for padded part in loss calculation. - use_weighted_masking (bool): Whether to weighted masking in loss calculation. + use_masking (bool): + Whether to apply masking for padded part in loss calculation. + use_weighted_masking (bool): + Whether to weighted masking in loss calculation. """ assert check_argument_types() super().__init__() @@ -978,17 +1078,28 @@ class FastSpeech2Loss(nn.Layer): """Calculate forward propagation. Args: - after_outs(Tensor): Batch of outputs after postnets (B, Lmax, odim). - before_outs(Tensor): Batch of outputs before postnets (B, Lmax, odim). - d_outs(Tensor): Batch of outputs of duration predictor (B, Tmax). - p_outs(Tensor): Batch of outputs of pitch predictor (B, Tmax, 1). - e_outs(Tensor): Batch of outputs of energy predictor (B, Tmax, 1). - ys(Tensor): Batch of target features (B, Lmax, odim). - ds(Tensor): Batch of durations (B, Tmax). - ps(Tensor): Batch of target token-averaged pitch (B, Tmax, 1). - es(Tensor): Batch of target token-averaged energy (B, Tmax, 1). - ilens(Tensor): Batch of the lengths of each input (B,). - olens(Tensor): Batch of the lengths of each target (B,). + after_outs(Tensor): + Batch of outputs after postnets (B, Lmax, odim). + before_outs(Tensor): + Batch of outputs before postnets (B, Lmax, odim). + d_outs(Tensor): + Batch of outputs of duration predictor (B, Tmax). + p_outs(Tensor): + Batch of outputs of pitch predictor (B, Tmax, 1). + e_outs(Tensor): + Batch of outputs of energy predictor (B, Tmax, 1). + ys(Tensor): + Batch of target features (B, Lmax, odim). + ds(Tensor): + Batch of durations (B, Tmax). + ps(Tensor): + Batch of target token-averaged pitch (B, Tmax, 1). + es(Tensor): + Batch of target token-averaged energy (B, Tmax, 1). + ilens(Tensor): + Batch of the lengths of each input (B,). + olens(Tensor): + Batch of the lengths of each target (B,). Returns: diff --git a/paddlespeech/t2s/models/hifigan/hifigan.py b/paddlespeech/t2s/models/hifigan/hifigan.py index bea9dd9a..7a01840e 100644 --- a/paddlespeech/t2s/models/hifigan/hifigan.py +++ b/paddlespeech/t2s/models/hifigan/hifigan.py @@ -50,20 +50,34 @@ class HiFiGANGenerator(nn.Layer): init_type: str="xavier_uniform", ): """Initialize HiFiGANGenerator module. Args: - in_channels (int): Number of input channels. - out_channels (int): Number of output channels. - channels (int): Number of hidden representation channels. - global_channels (int): Number of global conditioning channels. - kernel_size (int): Kernel size of initial and final conv layer. - upsample_scales (list): List of upsampling scales. - upsample_kernel_sizes (list): List of kernel sizes for upsampling layers. - resblock_kernel_sizes (list): List of kernel sizes for residual blocks. - resblock_dilations (list): List of dilation list for residual blocks. - use_additional_convs (bool): Whether to use additional conv layers in residual blocks. - bias (bool): Whether to add bias parameter in convolution layers. - nonlinear_activation (str): Activation function module name. - nonlinear_activation_params (dict): Hyperparameters for activation function. - use_weight_norm (bool): Whether to use weight norm. + in_channels (int): + Number of input channels. + out_channels (int): + Number of output channels. + channels (int): + Number of hidden representation channels. + global_channels (int): + Number of global conditioning channels. + kernel_size (int): + Kernel size of initial and final conv layer. + upsample_scales (list): + List of upsampling scales. + upsample_kernel_sizes (list): + List of kernel sizes for upsampling layers. + resblock_kernel_sizes (list): + List of kernel sizes for residual blocks. + resblock_dilations (list): + List of dilation list for residual blocks. + use_additional_convs (bool): + Whether to use additional conv layers in residual blocks. + bias (bool): + Whether to add bias parameter in convolution layers. + nonlinear_activation (str): + Activation function module name. + nonlinear_activation_params (dict): + Hyperparameters for activation function. + use_weight_norm (bool): + Whether to use weight norm. If set to true, it will be applied to all of the conv layers. """ super().__init__() @@ -199,9 +213,10 @@ class HiFiGANGenerator(nn.Layer): def inference(self, c, g: Optional[paddle.Tensor]=None): """Perform inference. Args: - c (Tensor): Input tensor (T, in_channels). - normalize_before (bool): Whether to perform normalization. - g (Optional[Tensor]): Global conditioning tensor (global_channels, 1). + c (Tensor): + Input tensor (T, in_channels). + g (Optional[Tensor]): + Global conditioning tensor (global_channels, 1). Returns: Tensor: Output tensor (T ** prod(upsample_scales), out_channels). @@ -233,20 +248,33 @@ class HiFiGANPeriodDiscriminator(nn.Layer): """Initialize HiFiGANPeriodDiscriminator module. Args: - in_channels (int): Number of input channels. - out_channels (int): Number of output channels. - period (int): Period. - kernel_sizes (list): Kernel sizes of initial conv layers and the final conv layer. - channels (int): Number of initial channels. - downsample_scales (list): List of downsampling scales. - max_downsample_channels (int): Number of maximum downsampling channels. - use_additional_convs (bool): Whether to use additional conv layers in residual blocks. - bias (bool): Whether to add bias parameter in convolution layers. - nonlinear_activation (str): Activation function module name. - nonlinear_activation_params (dict): Hyperparameters for activation function. - use_weight_norm (bool): Whether to use weight norm. + in_channels (int): + Number of input channels. + out_channels (int): + Number of output channels. + period (int): + Period. + kernel_sizes (list): + Kernel sizes of initial conv layers and the final conv layer. + channels (int): + Number of initial channels. + downsample_scales (list): + List of downsampling scales. + max_downsample_channels (int): + Number of maximum downsampling channels. + use_additional_convs (bool): + Whether to use additional conv layers in residual blocks. + bias (bool): + Whether to add bias parameter in convolution layers. + nonlinear_activation (str): + Activation function module name. + nonlinear_activation_params (dict): + Hyperparameters for activation function. + use_weight_norm (bool): + Whether to use weight norm. If set to true, it will be applied to all of the conv layers. - use_spectral_norm (bool): Whether to use spectral norm. + use_spectral_norm (bool): + Whether to use spectral norm. If set to true, it will be applied to all of the conv layers. """ super().__init__() @@ -298,7 +326,8 @@ class HiFiGANPeriodDiscriminator(nn.Layer): """Calculate forward propagation. Args: - c (Tensor): Input tensor (B, in_channels, T). + c (Tensor): + Input tensor (B, in_channels, T). Returns: list: List of each layer's tensors. """ @@ -367,8 +396,10 @@ class HiFiGANMultiPeriodDiscriminator(nn.Layer): """Initialize HiFiGANMultiPeriodDiscriminator module. Args: - periods (list): List of periods. - discriminator_params (dict): Parameters for hifi-gan period discriminator module. + periods (list): + List of periods. + discriminator_params (dict): + Parameters for hifi-gan period discriminator module. The period parameter will be overwritten. """ super().__init__() @@ -385,7 +416,8 @@ class HiFiGANMultiPeriodDiscriminator(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Input noise signal (B, 1, T). + x (Tensor): + Input noise signal (B, 1, T). Returns: List: List of list of each discriminator outputs, which consists of each layer output tensors. """ @@ -417,16 +449,25 @@ class HiFiGANScaleDiscriminator(nn.Layer): """Initilize HiFiGAN scale discriminator module. Args: - in_channels (int): Number of input channels. - out_channels (int): Number of output channels. - kernel_sizes (list): List of four kernel sizes. The first will be used for the first conv layer, + in_channels (int): + Number of input channels. + out_channels (int): + Number of output channels. + kernel_sizes (list): + List of four kernel sizes. The first will be used for the first conv layer, and the second is for downsampling part, and the remaining two are for output layers. - channels (int): Initial number of channels for conv layer. - max_downsample_channels (int): Maximum number of channels for downsampling layers. - bias (bool): Whether to add bias parameter in convolution layers. - downsample_scales (list): List of downsampling scales. - nonlinear_activation (str): Activation function module name. - nonlinear_activation_params (dict): Hyperparameters for activation function. + channels (int): + Initial number of channels for conv layer. + max_downsample_channels (int): + Maximum number of channels for downsampling layers. + bias (bool): + Whether to add bias parameter in convolution layers. + downsample_scales (list): + List of downsampling scales. + nonlinear_activation (str): + Activation function module name. + nonlinear_activation_params (dict): + Hyperparameters for activation function. use_weight_norm (bool): Whether to use weight norm. If set to true, it will be applied to all of the conv layers. use_spectral_norm (bool): Whether to use spectral norm. @@ -614,7 +655,8 @@ class HiFiGANMultiScaleDiscriminator(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Input noise signal (B, 1, T). + x (Tensor): + Input noise signal (B, 1, T). Returns: List: List of list of each discriminator outputs, which consists of each layer output tensors. """ @@ -675,14 +717,21 @@ class HiFiGANMultiScaleMultiPeriodDiscriminator(nn.Layer): """Initilize HiFiGAN multi-scale + multi-period discriminator module. Args: - scales (int): Number of multi-scales. - scale_downsample_pooling (str): Pooling module name for downsampling of the inputs. - scale_downsample_pooling_params (dict): Parameters for the above pooling module. - scale_discriminator_params (dict): Parameters for hifi-gan scale discriminator module. - follow_official_norm (bool): Whether to follow the norm setting of the official implementaion. + scales (int): + Number of multi-scales. + scale_downsample_pooling (str): + Pooling module name for downsampling of the inputs. + scale_downsample_pooling_params (dict): + Parameters for the above pooling module. + scale_discriminator_params (dict): + Parameters for hifi-gan scale discriminator module. + follow_official_norm (bool): + Whether to follow the norm setting of the official implementaion. The first discriminator uses spectral norm and the other discriminators use weight norm. - periods (list): List of periods. - period_discriminator_params (dict): Parameters for hifi-gan period discriminator module. + periods (list): + List of periods. + period_discriminator_params (dict): + Parameters for hifi-gan period discriminator module. The period parameter will be overwritten. """ super().__init__() @@ -704,7 +753,8 @@ class HiFiGANMultiScaleMultiPeriodDiscriminator(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Input noise signal (B, 1, T). + x (Tensor): + Input noise signal (B, 1, T). Returns: List: List of list of each discriminator outputs, diff --git a/paddlespeech/t2s/models/melgan/melgan.py b/paddlespeech/t2s/models/melgan/melgan.py index 22d8fd9e..058cf40d 100644 --- a/paddlespeech/t2s/models/melgan/melgan.py +++ b/paddlespeech/t2s/models/melgan/melgan.py @@ -53,24 +53,38 @@ class MelGANGenerator(nn.Layer): """Initialize MelGANGenerator module. Args: - in_channels (int): Number of input channels. - out_channels (int): Number of output channels, + in_channels (int): + Number of input channels. + out_channels (int): + Number of output channels, the number of sub-band is out_channels in multi-band melgan. - kernel_size (int): Kernel size of initial and final conv layer. - channels (int): Initial number of channels for conv layer. - bias (bool): Whether to add bias parameter in convolution layers. - upsample_scales (List[int]): List of upsampling scales. - stack_kernel_size (int): Kernel size of dilated conv layers in residual stack. - stacks (int): Number of stacks in a single residual stack. - nonlinear_activation (Optional[str], optional): Non linear activation in upsample network, by default None - nonlinear_activation_params (Dict[str, Any], optional): Parameters passed to the linear activation in the upsample network, - by default {} - pad (str): Padding function module name before dilated convolution layer. - pad_params (dict): Hyperparameters for padding function. - use_final_nonlinear_activation (nn.Layer): Activation function for the final layer. - use_weight_norm (bool): Whether to use weight norm. + kernel_size (int): + Kernel size of initial and final conv layer. + channels (int): + Initial number of channels for conv layer. + bias (bool): + Whether to add bias parameter in convolution layers. + upsample_scales (List[int]): + List of upsampling scales. + stack_kernel_size (int): + Kernel size of dilated conv layers in residual stack. + stacks (int): + Number of stacks in a single residual stack. + nonlinear_activation (Optional[str], optional): + Non linear activation in upsample network, by default None + nonlinear_activation_params (Dict[str, Any], optional): + Parameters passed to the linear activation in the upsample network, by default {} + pad (str): + Padding function module name before dilated convolution layer. + pad_params (dict): + Hyperparameters for padding function. + use_final_nonlinear_activation (nn.Layer): + Activation function for the final layer. + use_weight_norm (bool): + Whether to use weight norm. If set to true, it will be applied to all of the conv layers. - use_causal_conv (bool): Whether to use causal convolution. + use_causal_conv (bool): + Whether to use causal convolution. """ super().__init__() @@ -194,7 +208,8 @@ class MelGANGenerator(nn.Layer): """Calculate forward propagation. Args: - c (Tensor): Input tensor (B, in_channels, T). + c (Tensor): + Input tensor (B, in_channels, T). Returns: Tensor: Output tensor (B, out_channels, T ** prod(upsample_scales)). """ @@ -244,7 +259,8 @@ class MelGANGenerator(nn.Layer): """Perform inference. Args: - c (Union[Tensor, ndarray]): Input tensor (T, in_channels). + c (Union[Tensor, ndarray]): + Input tensor (T, in_channels). Returns: Tensor: Output tensor (out_channels*T ** prod(upsample_scales), 1). """ @@ -279,20 +295,30 @@ class MelGANDiscriminator(nn.Layer): """Initilize MelGAN discriminator module. Args: - in_channels (int): Number of input channels. - out_channels (int): Number of output channels. + in_channels (int): + Number of input channels. + out_channels (int): + Number of output channels. kernel_sizes (List[int]): List of two kernel sizes. The prod will be used for the first conv layer, and the first and the second kernel sizes will be used for the last two layers. For example if kernel_sizes = [5, 3], the first layer kernel size will be 5 * 3 = 15, the last two layers' kernel size will be 5 and 3, respectively. - channels (int): Initial number of channels for conv layer. - max_downsample_channels (int): Maximum number of channels for downsampling layers. - bias (bool): Whether to add bias parameter in convolution layers. - downsample_scales (List[int]): List of downsampling scales. - nonlinear_activation (str): Activation function module name. - nonlinear_activation_params (dict): Hyperparameters for activation function. - pad (str): Padding function module name before dilated convolution layer. - pad_params (dict): Hyperparameters for padding function. + channels (int): + Initial number of channels for conv layer. + max_downsample_channels (int): + Maximum number of channels for downsampling layers. + bias (bool): + Whether to add bias parameter in convolution layers. + downsample_scales (List[int]): + List of downsampling scales. + nonlinear_activation (str): + Activation function module name. + nonlinear_activation_params (dict): + Hyperparameters for activation function. + pad (str): + Padding function module name before dilated convolution layer. + pad_params (dict): + Hyperparameters for padding function. """ super().__init__() @@ -364,7 +390,8 @@ class MelGANDiscriminator(nn.Layer): def forward(self, x): """Calculate forward propagation. Args: - x (Tensor): Input noise signal (B, 1, T). + x (Tensor): + Input noise signal (B, 1, T). Returns: List: List of output tensors of each layer (for feat_match_loss). """ @@ -406,22 +433,37 @@ class MelGANMultiScaleDiscriminator(nn.Layer): """Initilize MelGAN multi-scale discriminator module. Args: - in_channels (int): Number of input channels. - out_channels (int): Number of output channels. - scales (int): Number of multi-scales. - downsample_pooling (str): Pooling module name for downsampling of the inputs. - downsample_pooling_params (dict): Parameters for the above pooling module. - kernel_sizes (List[int]): List of two kernel sizes. The sum will be used for the first conv layer, + in_channels (int): + Number of input channels. + out_channels (int): + Number of output channels. + scales (int): + Number of multi-scales. + downsample_pooling (str): + Pooling module name for downsampling of the inputs. + downsample_pooling_params (dict): + Parameters for the above pooling module. + kernel_sizes (List[int]): + List of two kernel sizes. The sum will be used for the first conv layer, and the first and the second kernel sizes will be used for the last two layers. - channels (int): Initial number of channels for conv layer. - max_downsample_channels (int): Maximum number of channels for downsampling layers. - bias (bool): Whether to add bias parameter in convolution layers. - downsample_scales (List[int]): List of downsampling scales. - nonlinear_activation (str): Activation function module name. - nonlinear_activation_params (dict): Hyperparameters for activation function. - pad (str): Padding function module name before dilated convolution layer. - pad_params (dict): Hyperparameters for padding function. - use_causal_conv (bool): Whether to use causal convolution. + channels (int): + Initial number of channels for conv layer. + max_downsample_channels (int): + Maximum number of channels for downsampling layers. + bias (bool): + Whether to add bias parameter in convolution layers. + downsample_scales (List[int]): + List of downsampling scales. + nonlinear_activation (str): + Activation function module name. + nonlinear_activation_params (dict): + Hyperparameters for activation function. + pad (str): + Padding function module name before dilated convolution layer. + pad_params (dict): + Hyperparameters for padding function. + use_causal_conv (bool): + Whether to use causal convolution. """ super().__init__() @@ -464,7 +506,8 @@ class MelGANMultiScaleDiscriminator(nn.Layer): def forward(self, x): """Calculate forward propagation. Args: - x (Tensor): Input noise signal (B, 1, T). + x (Tensor): + Input noise signal (B, 1, T). Returns: List: List of list of each discriminator outputs, which consists of each layer output tensors. """ diff --git a/paddlespeech/t2s/models/melgan/style_melgan.py b/paddlespeech/t2s/models/melgan/style_melgan.py index 40a2f100..d902a4b0 100644 --- a/paddlespeech/t2s/models/melgan/style_melgan.py +++ b/paddlespeech/t2s/models/melgan/style_melgan.py @@ -54,20 +54,34 @@ class StyleMelGANGenerator(nn.Layer): """Initilize Style MelGAN generator. Args: - in_channels (int): Number of input noise channels. - aux_channels (int): Number of auxiliary input channels. - channels (int): Number of channels for conv layer. - out_channels (int): Number of output channels. - kernel_size (int): Kernel size of conv layers. - dilation (int): Dilation factor for conv layers. - bias (bool): Whether to add bias parameter in convolution layers. - noise_upsample_scales (list): List of noise upsampling scales. - noise_upsample_activation (str): Activation function module name for noise upsampling. - noise_upsample_activation_params (dict): Hyperparameters for the above activation function. - upsample_scales (list): List of upsampling scales. - upsample_mode (str): Upsampling mode in TADE layer. - gated_function (str): Gated function in TADEResBlock ("softmax" or "sigmoid"). - use_weight_norm (bool): Whether to use weight norm. + in_channels (int): + Number of input noise channels. + aux_channels (int): + Number of auxiliary input channels. + channels (int): + Number of channels for conv layer. + out_channels (int): + Number of output channels. + kernel_size (int): + Kernel size of conv layers. + dilation (int): + Dilation factor for conv layers. + bias (bool): + Whether to add bias parameter in convolution layers. + noise_upsample_scales (list): + List of noise upsampling scales. + noise_upsample_activation (str): + Activation function module name for noise upsampling. + noise_upsample_activation_params (dict): + Hyperparameters for the above activation function. + upsample_scales (list): + List of upsampling scales. + upsample_mode (str): + Upsampling mode in TADE layer. + gated_function (str): + Gated function in TADEResBlock ("softmax" or "sigmoid"). + use_weight_norm (bool): + Whether to use weight norm. If set to true, it will be applied to all of the conv layers. """ super().__init__() @@ -194,7 +208,8 @@ class StyleMelGANGenerator(nn.Layer): def inference(self, c): """Perform inference. Args: - c (Tensor): Input tensor (T, in_channels). + c (Tensor): + Input tensor (T, in_channels). Returns: Tensor: Output tensor (T ** prod(upsample_scales), out_channels). """ @@ -258,11 +273,16 @@ class StyleMelGANDiscriminator(nn.Layer): """Initilize Style MelGAN discriminator. Args: - repeats (int): Number of repititons to apply RWD. - window_sizes (list): List of random window sizes. - pqmf_params (list): List of list of Parameters for PQMF modules - discriminator_params (dict): Parameters for base discriminator module. - use_weight_nom (bool): Whether to apply weight normalization. + repeats (int): + Number of repititons to apply RWD. + window_sizes (list): + List of random window sizes. + pqmf_params (list): + List of list of Parameters for PQMF modules + discriminator_params (dict): + Parameters for base discriminator module. + use_weight_nom (bool): + Whether to apply weight normalization. """ super().__init__() @@ -299,7 +319,8 @@ class StyleMelGANDiscriminator(nn.Layer): def forward(self, x): """Calculate forward propagation. Args: - x (Tensor): Input tensor (B, 1, T). + x (Tensor): + Input tensor (B, 1, T). Returns: List: List of discriminator outputs, #items in the list will be equal to repeats * #discriminators. diff --git a/paddlespeech/t2s/models/parallel_wavegan/parallel_wavegan.py b/paddlespeech/t2s/models/parallel_wavegan/parallel_wavegan.py index cc8460e4..be306d9c 100644 --- a/paddlespeech/t2s/models/parallel_wavegan/parallel_wavegan.py +++ b/paddlespeech/t2s/models/parallel_wavegan/parallel_wavegan.py @@ -32,29 +32,45 @@ class PWGGenerator(nn.Layer): """Wave Generator for Parallel WaveGAN Args: - in_channels (int, optional): Number of channels of the input waveform, by default 1 - out_channels (int, optional): Number of channels of the output waveform, by default 1 - kernel_size (int, optional): Kernel size of the residual blocks inside, by default 3 - layers (int, optional): Number of residual blocks inside, by default 30 - stacks (int, optional): The number of groups to split the residual blocks into, by default 3 + in_channels (int, optional): + Number of channels of the input waveform, by default 1 + out_channels (int, optional): + Number of channels of the output waveform, by default 1 + kernel_size (int, optional): + Kernel size of the residual blocks inside, by default 3 + layers (int, optional): + Number of residual blocks inside, by default 30 + stacks (int, optional): + The number of groups to split the residual blocks into, by default 3 Within each group, the dilation of the residual block grows exponentially. - residual_channels (int, optional): Residual channel of the residual blocks, by default 64 - gate_channels (int, optional): Gate channel of the residual blocks, by default 128 - skip_channels (int, optional): Skip channel of the residual blocks, by default 64 - aux_channels (int, optional): Auxiliary channel of the residual blocks, by default 80 - aux_context_window (int, optional): The context window size of the first convolution applied to the - auxiliary input, by default 2 - dropout (float, optional): Dropout of the residual blocks, by default 0. - bias (bool, optional): Whether to use bias in residual blocks, by default True - use_weight_norm (bool, optional): Whether to use weight norm in all convolutions, by default True - use_causal_conv (bool, optional): Whether to use causal padding in the upsample network and residual - blocks, by default False - upsample_scales (List[int], optional): Upsample scales of the upsample network, by default [4, 4, 4, 4] - nonlinear_activation (Optional[str], optional): Non linear activation in upsample network, by default None - nonlinear_activation_params (Dict[str, Any], optional): Parameters passed to the linear activation in the upsample network, - by default {} - interpolate_mode (str, optional): Interpolation mode of the upsample network, by default "nearest" - freq_axis_kernel_size (int, optional): Kernel size along the frequency axis of the upsample network, by default 1 + residual_channels (int, optional): + Residual channel of the residual blocks, by default 64 + gate_channels (int, optional): + Gate channel of the residual blocks, by default 128 + skip_channels (int, optional): + Skip channel of the residual blocks, by default 64 + aux_channels (int, optional): + Auxiliary channel of the residual blocks, by default 80 + aux_context_window (int, optional): + The context window size of the first convolution applied to the auxiliary input, by default 2 + dropout (float, optional): + Dropout of the residual blocks, by default 0. + bias (bool, optional): + Whether to use bias in residual blocks, by default True + use_weight_norm (bool, optional): + Whether to use weight norm in all convolutions, by default True + use_causal_conv (bool, optional): + Whether to use causal padding in the upsample network and residual blocks, by default False + upsample_scales (List[int], optional): + Upsample scales of the upsample network, by default [4, 4, 4, 4] + nonlinear_activation (Optional[str], optional): + Non linear activation in upsample network, by default None + nonlinear_activation_params (Dict[str, Any], optional): + Parameters passed to the linear activation in the upsample network, by default {} + interpolate_mode (str, optional): + Interpolation mode of the upsample network, by default "nearest" + freq_axis_kernel_size (int, optional): + Kernel size along the frequency axis of the upsample network, by default 1 """ def __init__( @@ -147,9 +163,11 @@ class PWGGenerator(nn.Layer): """Generate waveform. Args: - x(Tensor): Shape (N, C_in, T), The input waveform. - c(Tensor): Shape (N, C_aux, T'). The auxiliary input (e.g. spectrogram). It - is upsampled to match the time resolution of the input. + x(Tensor): + Shape (N, C_in, T), The input waveform. + c(Tensor): + Shape (N, C_aux, T'). The auxiliary input (e.g. spectrogram). + It is upsampled to match the time resolution of the input. Returns: Tensor: Shape (N, C_out, T), the generated waveform. @@ -195,8 +213,10 @@ class PWGGenerator(nn.Layer): """Waveform generation. This function is used for single instance inference. Args: - c(Tensor, optional, optional): Shape (T', C_aux), the auxiliary input, by default None - x(Tensor, optional): Shape (T, C_in), the noise waveform, by default None + c(Tensor, optional, optional): + Shape (T', C_aux), the auxiliary input, by default None + x(Tensor, optional): + Shape (T, C_in), the noise waveform, by default None Returns: Tensor: Shape (T, C_out), the generated waveform @@ -214,20 +234,28 @@ class PWGDiscriminator(nn.Layer): """A convolutional discriminator for audio. Args: - in_channels (int, optional): Number of channels of the input audio, by default 1 - out_channels (int, optional): Output feature size, by default 1 - kernel_size (int, optional): Kernel size of convolutional sublayers, by default 3 - layers (int, optional): Number of layers, by default 10 - conv_channels (int, optional): Feature size of the convolutional sublayers, by default 64 - dilation_factor (int, optional): The factor with which dilation of each convolutional sublayers grows + in_channels (int, optional): + Number of channels of the input audio, by default 1 + out_channels (int, optional): + Output feature size, by default 1 + kernel_size (int, optional): + Kernel size of convolutional sublayers, by default 3 + layers (int, optional): + Number of layers, by default 10 + conv_channels (int, optional): + Feature size of the convolutional sublayers, by default 64 + dilation_factor (int, optional): + The factor with which dilation of each convolutional sublayers grows exponentially if it is greater than 1, else the dilation of each convolutional sublayers grows linearly, by default 1 - nonlinear_activation (str, optional): The activation after each convolutional sublayer, by default "leakyrelu" - nonlinear_activation_params (Dict[str, Any], optional): The parameters passed to the activation's initializer, by default - {"negative_slope": 0.2} - bias (bool, optional): Whether to use bias in convolutional sublayers, by default True - use_weight_norm (bool, optional): Whether to use weight normalization at all convolutional sublayers, - by default True + nonlinear_activation (str, optional): + The activation after each convolutional sublayer, by default "leakyrelu" + nonlinear_activation_params (Dict[str, Any], optional): + The parameters passed to the activation's initializer, by default {"negative_slope": 0.2} + bias (bool, optional): + Whether to use bias in convolutional sublayers, by default True + use_weight_norm (bool, optional): + Whether to use weight normalization at all convolutional sublayers, by default True """ def __init__( @@ -290,7 +318,8 @@ class PWGDiscriminator(nn.Layer): """ Args: - x (Tensor): Shape (N, in_channels, num_samples), the input audio. + x (Tensor): + Shape (N, in_channels, num_samples), the input audio. Returns: Tensor: Shape (N, out_channels, num_samples), the predicted logits. @@ -318,24 +347,35 @@ class ResidualPWGDiscriminator(nn.Layer): """A wavenet-style discriminator for audio. Args: - in_channels (int, optional): Number of channels of the input audio, by default 1 - out_channels (int, optional): Output feature size, by default 1 - kernel_size (int, optional): Kernel size of residual blocks, by default 3 - layers (int, optional): Number of residual blocks, by default 30 - stacks (int, optional): Number of groups of residual blocks, within which the dilation + in_channels (int, optional): + Number of channels of the input audio, by default 1 + out_channels (int, optional): + Output feature size, by default 1 + kernel_size (int, optional): + Kernel size of residual blocks, by default 3 + layers (int, optional): + Number of residual blocks, by default 30 + stacks (int, optional): + Number of groups of residual blocks, within which the dilation of each residual blocks grows exponentially, by default 3 - residual_channels (int, optional): Residual channels of residual blocks, by default 64 - gate_channels (int, optional): Gate channels of residual blocks, by default 128 - skip_channels (int, optional): Skip channels of residual blocks, by default 64 - dropout (float, optional): Dropout probability of residual blocks, by default 0. - bias (bool, optional): Whether to use bias in residual blocks, by default True - use_weight_norm (bool, optional): Whether to use weight normalization in all convolutional layers, - by default True - use_causal_conv (bool, optional): Whether to use causal convolution in residual blocks, by default False - nonlinear_activation (str, optional): Activation after convolutions other than those in residual blocks, - by default "leakyrelu" - nonlinear_activation_params (Dict[str, Any], optional): Parameters to pass to the activation, - by default {"negative_slope": 0.2} + residual_channels (int, optional): + Residual channels of residual blocks, by default 64 + gate_channels (int, optional): + Gate channels of residual blocks, by default 128 + skip_channels (int, optional): + Skip channels of residual blocks, by default 64 + dropout (float, optional): + Dropout probability of residual blocks, by default 0. + bias (bool, optional): + Whether to use bias in residual blocks, by default True + use_weight_norm (bool, optional): + Whether to use weight normalization in all convolutional layers, by default True + use_causal_conv (bool, optional): + Whether to use causal convolution in residual blocks, by default False + nonlinear_activation (str, optional): + Activation after convolutions other than those in residual blocks, by default "leakyrelu" + nonlinear_activation_params (Dict[str, Any], optional): + Parameters to pass to the activation, by default {"negative_slope": 0.2} """ def __init__( @@ -405,7 +445,8 @@ class ResidualPWGDiscriminator(nn.Layer): def forward(self, x): """ Args: - x(Tensor): Shape (N, in_channels, num_samples), the input audio.↩ + x(Tensor): + Shape (N, in_channels, num_samples), the input audio.↩ Returns: Tensor: Shape (N, out_channels, num_samples), the predicted logits. diff --git a/paddlespeech/t2s/models/speedyspeech/speedyspeech.py b/paddlespeech/t2s/models/speedyspeech/speedyspeech.py index ed7c0b7e..395ad691 100644 --- a/paddlespeech/t2s/models/speedyspeech/speedyspeech.py +++ b/paddlespeech/t2s/models/speedyspeech/speedyspeech.py @@ -29,10 +29,14 @@ class ResidualBlock(nn.Layer): n: int=2): """SpeedySpeech encoder module. Args: - channels (int, optional): Feature size of the residual output(and also the input). - kernel_size (int, optional): Kernel size of the 1D convolution. - dilation (int, optional): Dilation of the 1D convolution. - n (int): Number of blocks. + channels (int, optional): + Feature size of the residual output(and also the input). + kernel_size (int, optional): + Kernel size of the 1D convolution. + dilation (int, optional): + Dilation of the 1D convolution. + n (int): + Number of blocks. """ super().__init__() @@ -57,7 +61,8 @@ class ResidualBlock(nn.Layer): def forward(self, x: paddle.Tensor): """Calculate forward propagation. Args: - x(Tensor): Batch of input sequences (B, hidden_size, Tmax). + x(Tensor): + Batch of input sequences (B, hidden_size, Tmax). Returns: Tensor: The residual output (B, hidden_size, Tmax). """ @@ -89,8 +94,10 @@ class TextEmbedding(nn.Layer): def forward(self, text: paddle.Tensor, tone: paddle.Tensor=None): """Calculate forward propagation. Args: - text(Tensor(int64)): Batch of padded token ids (B, Tmax). - tones(Tensor, optional(int64)): Batch of padded tone ids (B, Tmax). + text(Tensor(int64)): + Batch of padded token ids (B, Tmax). + tones(Tensor, optional(int64)): + Batch of padded tone ids (B, Tmax). Returns: Tensor: The residual output (B, Tmax, embedding_size). """ @@ -109,12 +116,18 @@ class TextEmbedding(nn.Layer): class SpeedySpeechEncoder(nn.Layer): """SpeedySpeech encoder module. Args: - vocab_size (int): Dimension of the inputs. - tone_size (Optional[int]): Number of tones. - hidden_size (int): Number of encoder hidden units. - kernel_size (int): Kernel size of encoder. - dilations (List[int]): Dilations of encoder. - spk_num (Optional[int]): Number of speakers. + vocab_size (int): + Dimension of the inputs. + tone_size (Optional[int]): + Number of tones. + hidden_size (int): + Number of encoder hidden units. + kernel_size (int): + Kernel size of encoder. + dilations (List[int]): + Dilations of encoder. + spk_num (Optional[int]): + Number of speakers. """ def __init__(self, @@ -161,9 +174,12 @@ class SpeedySpeechEncoder(nn.Layer): spk_id: paddle.Tensor=None): """Encoder input sequence. Args: - text(Tensor(int64)): Batch of padded token ids (B, Tmax). - tones(Tensor, optional(int64)): Batch of padded tone ids (B, Tmax). - spk_id(Tnesor, optional(int64)): Batch of speaker ids (B,) + text(Tensor(int64)): + Batch of padded token ids (B, Tmax). + tones(Tensor, optional(int64)): + Batch of padded tone ids (B, Tmax). + spk_id(Tnesor, optional(int64)): + Batch of speaker ids (B,) Returns: Tensor: Output tensor (B, Tmax, hidden_size). @@ -192,7 +208,8 @@ class DurationPredictor(nn.Layer): def forward(self, x: paddle.Tensor): """Calculate forward propagation. Args: - x(Tensor): Batch of input sequences (B, Tmax, hidden_size). + x(Tensor): + Batch of input sequences (B, Tmax, hidden_size). Returns: Tensor: Batch of predicted durations in log domain (B, Tmax). @@ -212,10 +229,14 @@ class SpeedySpeechDecoder(nn.Layer): ]): """SpeedySpeech decoder module. Args: - hidden_size (int): Number of decoder hidden units. - kernel_size (int): Kernel size of decoder. - output_size (int): Dimension of the outputs. - dilations (List[int]): Dilations of decoder. + hidden_size (int): + Number of decoder hidden units. + kernel_size (int): + Kernel size of decoder. + output_size (int): + Dimension of the outputs. + dilations (List[int]): + Dilations of decoder. """ super().__init__() res_blocks = [ @@ -230,7 +251,8 @@ class SpeedySpeechDecoder(nn.Layer): def forward(self, x): """Decoder input sequence. Args: - x(Tensor): Input tensor (B, time, hidden_size). + x(Tensor): + Input tensor (B, time, hidden_size). Returns: Tensor: Output tensor (B, time, output_size). @@ -261,18 +283,30 @@ class SpeedySpeech(nn.Layer): positional_dropout_rate: int=0.1): """Initialize SpeedySpeech module. Args: - vocab_size (int): Dimension of the inputs. - encoder_hidden_size (int): Number of encoder hidden units. - encoder_kernel_size (int): Kernel size of encoder. - encoder_dilations (List[int]): Dilations of encoder. - duration_predictor_hidden_size (int): Number of duration predictor hidden units. - decoder_hidden_size (int): Number of decoder hidden units. - decoder_kernel_size (int): Kernel size of decoder. - decoder_dilations (List[int]): Dilations of decoder. - decoder_output_size (int): Dimension of the outputs. - tone_size (Optional[int]): Number of tones. - spk_num (Optional[int]): Number of speakers. - init_type (str): How to initialize transformer parameters. + vocab_size (int): + Dimension of the inputs. + encoder_hidden_size (int): + Number of encoder hidden units. + encoder_kernel_size (int): + Kernel size of encoder. + encoder_dilations (List[int]): + Dilations of encoder. + duration_predictor_hidden_size (int): + Number of duration predictor hidden units. + decoder_hidden_size (int): + Number of decoder hidden units. + decoder_kernel_size (int): + Kernel size of decoder. + decoder_dilations (List[int]): + Dilations of decoder. + decoder_output_size (int): + Dimension of the outputs. + tone_size (Optional[int]): + Number of tones. + spk_num (Optional[int]): + Number of speakers. + init_type (str): + How to initialize transformer parameters. """ super().__init__() @@ -304,14 +338,20 @@ class SpeedySpeech(nn.Layer): spk_id: paddle.Tensor=None): """Calculate forward propagation. Args: - text(Tensor(int64)): Batch of padded token ids (B, Tmax). - durations(Tensor(int64)): Batch of padded durations (B, Tmax). - tones(Tensor, optional(int64)): Batch of padded tone ids (B, Tmax). - spk_id(Tnesor, optional(int64)): Batch of speaker ids (B,) + text(Tensor(int64)): + Batch of padded token ids (B, Tmax). + durations(Tensor(int64)): + Batch of padded durations (B, Tmax). + tones(Tensor, optional(int64)): + Batch of padded tone ids (B, Tmax). + spk_id(Tnesor, optional(int64)): + Batch of speaker ids (B,) Returns: - Tensor: Output tensor (B, T_frames, decoder_output_size). - Tensor: Predicted durations (B, Tmax). + Tensor: + Output tensor (B, T_frames, decoder_output_size). + Tensor: + Predicted durations (B, Tmax). """ # input of embedding must be int64 text = paddle.cast(text, 'int64') @@ -336,10 +376,14 @@ class SpeedySpeech(nn.Layer): spk_id: paddle.Tensor=None): """Generate the sequence of features given the sequences of characters. Args: - text(Tensor(int64)): Input sequence of characters (T,). - tones(Tensor, optional(int64)): Batch of padded tone ids (T, ). - durations(Tensor, optional (int64)): Groundtruth of duration (T,). - spk_id(Tensor, optional(int64), optional): spk ids (1,). (Default value = None) + text(Tensor(int64)): + Input sequence of characters (T,). + tones(Tensor, optional(int64)): + Batch of padded tone ids (T, ). + durations(Tensor, optional (int64)): + Groundtruth of duration (T,). + spk_id(Tensor, optional(int64), optional): + spk ids (1,). (Default value = None) Returns: Tensor: logmel (T, decoder_output_size). diff --git a/paddlespeech/t2s/models/tacotron2/tacotron2.py b/paddlespeech/t2s/models/tacotron2/tacotron2.py index 7b306e48..25b5c932 100644 --- a/paddlespeech/t2s/models/tacotron2/tacotron2.py +++ b/paddlespeech/t2s/models/tacotron2/tacotron2.py @@ -83,38 +83,67 @@ class Tacotron2(nn.Layer): init_type: str="xavier_uniform", ): """Initialize Tacotron2 module. Args: - idim (int): Dimension of the inputs. - odim (int): Dimension of the outputs. - embed_dim (int): Dimension of the token embedding. - elayers (int): Number of encoder blstm layers. - eunits (int): Number of encoder blstm units. - econv_layers (int): Number of encoder conv layers. - econv_filts (int): Number of encoder conv filter size. - econv_chans (int): Number of encoder conv filter channels. - dlayers (int): Number of decoder lstm layers. - dunits (int): Number of decoder lstm units. - prenet_layers (int): Number of prenet layers. - prenet_units (int): Number of prenet units. - postnet_layers (int): Number of postnet layers. - postnet_filts (int): Number of postnet filter size. - postnet_chans (int): Number of postnet filter channels. - output_activation (str): Name of activation function for outputs. - adim (int): Number of dimension of mlp in attention. - aconv_chans (int): Number of attention conv filter channels. - aconv_filts (int): Number of attention conv filter size. - cumulate_att_w (bool): Whether to cumulate previous attention weight. - use_batch_norm (bool): Whether to use batch normalization. - use_concate (bool): Whether to concat enc outputs w/ dec lstm outputs. - reduction_factor (int): Reduction factor. - spk_num (Optional[int]): Number of speakers. If set to > 1, assume that the + idim (int): + Dimension of the inputs. + odim (int): + Dimension of the outputs. + embed_dim (int): + Dimension of the token embedding. + elayers (int): + Number of encoder blstm layers. + eunits (int): + Number of encoder blstm units. + econv_layers (int): + Number of encoder conv layers. + econv_filts (int): + Number of encoder conv filter size. + econv_chans (int): + Number of encoder conv filter channels. + dlayers (int): + Number of decoder lstm layers. + dunits (int): + Number of decoder lstm units. + prenet_layers (int): + Number of prenet layers. + prenet_units (int): + Number of prenet units. + postnet_layers (int): + Number of postnet layers. + postnet_filts (int): + Number of postnet filter size. + postnet_chans (int): + Number of postnet filter channels. + output_activation (str): + Name of activation function for outputs. + adim (int): + Number of dimension of mlp in attention. + aconv_chans (int): + Number of attention conv filter channels. + aconv_filts (int): + Number of attention conv filter size. + cumulate_att_w (bool): + Whether to cumulate previous attention weight. + use_batch_norm (bool): + Whether to use batch normalization. + use_concate (bool): + Whether to concat enc outputs w/ dec lstm outputs. + reduction_factor (int): + Reduction factor. + spk_num (Optional[int]): + Number of speakers. If set to > 1, assume that the sids will be provided as the input and use sid embedding layer. - lang_num (Optional[int]): Number of languages. If set to > 1, assume that the + lang_num (Optional[int]): + Number of languages. If set to > 1, assume that the lids will be provided as the input and use sid embedding layer. - spk_embed_dim (Optional[int]): Speaker embedding dimension. If set to > 0, + spk_embed_dim (Optional[int]): + Speaker embedding dimension. If set to > 0, assume that spk_emb will be provided as the input. - spk_embed_integration_type (str): How to integrate speaker embedding. - dropout_rate (float): Dropout rate. - zoneout_rate (float): Zoneout rate. + spk_embed_integration_type (str): + How to integrate speaker embedding. + dropout_rate (float): + Dropout rate. + zoneout_rate (float): + Zoneout rate. """ assert check_argument_types() super().__init__() @@ -230,18 +259,28 @@ class Tacotron2(nn.Layer): """Calculate forward propagation. Args: - text (Tensor(int64)): Batch of padded character ids (B, T_text). - text_lengths (Tensor(int64)): Batch of lengths of each input batch (B,). - speech (Tensor): Batch of padded target features (B, T_feats, odim). - speech_lengths (Tensor(int64)): Batch of the lengths of each target (B,). - spk_emb (Optional[Tensor]): Batch of speaker embeddings (B, spk_embed_dim). - spk_id (Optional[Tensor]): Batch of speaker IDs (B, 1). - lang_id (Optional[Tensor]): Batch of language IDs (B, 1). + text (Tensor(int64)): + Batch of padded character ids (B, T_text). + text_lengths (Tensor(int64)): + Batch of lengths of each input batch (B,). + speech (Tensor): + Batch of padded target features (B, T_feats, odim). + speech_lengths (Tensor(int64)): + Batch of the lengths of each target (B,). + spk_emb (Optional[Tensor]): + Batch of speaker embeddings (B, spk_embed_dim). + spk_id (Optional[Tensor]): + Batch of speaker IDs (B, 1). + lang_id (Optional[Tensor]): + Batch of language IDs (B, 1). Returns: - Tensor: Loss scalar value. - Dict: Statistics to be monitored. - Tensor: Weight value if not joint training else model outputs. + Tensor: + Loss scalar value. + Dict: + Statistics to be monitored. + Tensor: + Weight value if not joint training else model outputs. """ text = text[:, :text_lengths.max()] @@ -329,18 +368,30 @@ class Tacotron2(nn.Layer): """Generate the sequence of features given the sequences of characters. Args: - text (Tensor(int64)): Input sequence of characters (T_text,). - speech (Optional[Tensor]): Feature sequence to extract style (N, idim). - spk_emb (ptional[Tensor]): Speaker embedding (spk_embed_dim,). - spk_id (Optional[Tensor]): Speaker ID (1,). - lang_id (Optional[Tensor]): Language ID (1,). - threshold (float): Threshold in inference. - minlenratio (float): Minimum length ratio in inference. - maxlenratio (float): Maximum length ratio in inference. - use_att_constraint (bool): Whether to apply attention constraint. - backward_window (int): Backward window in attention constraint. - forward_window (int): Forward window in attention constraint. - use_teacher_forcing (bool): Whether to use teacher forcing. + text (Tensor(int64)): + Input sequence of characters (T_text,). + speech (Optional[Tensor]): + Feature sequence to extract style (N, idim). + spk_emb (ptional[Tensor]): + Speaker embedding (spk_embed_dim,). + spk_id (Optional[Tensor]): + Speaker ID (1,). + lang_id (Optional[Tensor]): + Language ID (1,). + threshold (float): + Threshold in inference. + minlenratio (float): + Minimum length ratio in inference. + maxlenratio (float): + Maximum length ratio in inference. + use_att_constraint (bool): + Whether to apply attention constraint. + backward_window (int): + Backward window in attention constraint. + forward_window (int): + Forward window in attention constraint. + use_teacher_forcing (bool): + Whether to use teacher forcing. Returns: Dict[str, Tensor] diff --git a/paddlespeech/t2s/models/transformer_tts/transformer_tts.py b/paddlespeech/t2s/models/transformer_tts/transformer_tts.py index 92754c30..355fceb1 100644 --- a/paddlespeech/t2s/models/transformer_tts/transformer_tts.py +++ b/paddlespeech/t2s/models/transformer_tts/transformer_tts.py @@ -49,66 +49,124 @@ class TransformerTTS(nn.Layer): https://arxiv.org/pdf/1809.08895.pdf Args: - idim (int): Dimension of the inputs. - odim (int): Dimension of the outputs. - embed_dim (int, optional): Dimension of character embedding. - eprenet_conv_layers (int, optional): Number of encoder prenet convolution layers. - eprenet_conv_chans (int, optional): Number of encoder prenet convolution channels. - eprenet_conv_filts (int, optional): Filter size of encoder prenet convolution. - dprenet_layers (int, optional): Number of decoder prenet layers. - dprenet_units (int, optional): Number of decoder prenet hidden units. - elayers (int, optional): Number of encoder layers. - eunits (int, optional): Number of encoder hidden units. - adim (int, optional): Number of attention transformation dimensions. - aheads (int, optional): Number of heads for multi head attention. - dlayers (int, optional): Number of decoder layers. - dunits (int, optional): Number of decoder hidden units. - postnet_layers (int, optional): Number of postnet layers. - postnet_chans (int, optional): Number of postnet channels. - postnet_filts (int, optional): Filter size of postnet. - use_scaled_pos_enc (pool, optional): Whether to use trainable scaled positional encoding. - use_batch_norm (bool, optional): Whether to use batch normalization in encoder prenet. - encoder_normalize_before (bool, optional): Whether to perform layer normalization before encoder block. - decoder_normalize_before (bool, optional): Whether to perform layer normalization before decoder block. - encoder_concat_after (bool, optional): Whether to concatenate attention layer's input and output in encoder. - decoder_concat_after (bool, optional): Whether to concatenate attention layer's input and output in decoder. - positionwise_layer_type (str, optional): Position-wise operation type. - positionwise_conv_kernel_size (int, optional): Kernel size in position wise conv 1d. - reduction_factor (int, optional): Reduction factor. - spk_embed_dim (int, optional): Number of speaker embedding dimenstions. - spk_embed_integration_type (str, optional): How to integrate speaker embedding. - use_gst (str, optional): Whether to use global style token. - gst_tokens (int, optional): The number of GST embeddings. - gst_heads (int, optional): The number of heads in GST multihead attention. - gst_conv_layers (int, optional): The number of conv layers in GST. - gst_conv_chans_list (Sequence[int], optional): List of the number of channels of conv layers in GST. - gst_conv_kernel_size (int, optional): Kernal size of conv layers in GST. - gst_conv_stride (int, optional): Stride size of conv layers in GST. - gst_gru_layers (int, optional): The number of GRU layers in GST. - gst_gru_units (int, optional): The number of GRU units in GST. - transformer_lr (float, optional): Initial value of learning rate. - transformer_warmup_steps (int, optional): Optimizer warmup steps. - transformer_enc_dropout_rate (float, optional): Dropout rate in encoder except attention and positional encoding. - transformer_enc_positional_dropout_rate (float, optional): Dropout rate after encoder positional encoding. - transformer_enc_attn_dropout_rate (float, optional): Dropout rate in encoder self-attention module. - transformer_dec_dropout_rate (float, optional): Dropout rate in decoder except attention & positional encoding. - transformer_dec_positional_dropout_rate (float, optional): Dropout rate after decoder positional encoding. - transformer_dec_attn_dropout_rate (float, optional): Dropout rate in deocoder self-attention module. - transformer_enc_dec_attn_dropout_rate (float, optional): Dropout rate in encoder-deocoder attention module. - init_type (str, optional): How to initialize transformer parameters. - init_enc_alpha (float, optional): Initial value of alpha in scaled pos encoding of the encoder. - init_dec_alpha (float, optional): Initial value of alpha in scaled pos encoding of the decoder. - eprenet_dropout_rate (float, optional): Dropout rate in encoder prenet. - dprenet_dropout_rate (float, optional): Dropout rate in decoder prenet. - postnet_dropout_rate (float, optional): Dropout rate in postnet. - use_masking (bool, optional): Whether to apply masking for padded part in loss calculation. - use_weighted_masking (bool, optional): Whether to apply weighted masking in loss calculation. - bce_pos_weight (float, optional): Positive sample weight in bce calculation (only for use_masking=true). - loss_type (str, optional): How to calculate loss. - use_guided_attn_loss (bool, optional): Whether to use guided attention loss. - num_heads_applied_guided_attn (int, optional): Number of heads in each layer to apply guided attention loss. - num_layers_applied_guided_attn (int, optional): Number of layers to apply guided attention loss. - List of module names to apply guided attention loss. + idim (int): + Dimension of the inputs. + odim (int): + Dimension of the outputs. + embed_dim (int, optional): + Dimension of character embedding. + eprenet_conv_layers (int, optional): + Number of encoder prenet convolution layers. + eprenet_conv_chans (int, optional): + Number of encoder prenet convolution channels. + eprenet_conv_filts (int, optional): + Filter size of encoder prenet convolution. + dprenet_layers (int, optional): + Number of decoder prenet layers. + dprenet_units (int, optional): + Number of decoder prenet hidden units. + elayers (int, optional): + Number of encoder layers. + eunits (int, optional): + Number of encoder hidden units. + adim (int, optional): + Number of attention transformation dimensions. + aheads (int, optional): + Number of heads for multi head attention. + dlayers (int, optional): + Number of decoder layers. + dunits (int, optional): + Number of decoder hidden units. + postnet_layers (int, optional): + Number of postnet layers. + postnet_chans (int, optional): + Number of postnet channels. + postnet_filts (int, optional): + Filter size of postnet. + use_scaled_pos_enc (pool, optional): + Whether to use trainable scaled positional encoding. + use_batch_norm (bool, optional): + Whether to use batch normalization in encoder prenet. + encoder_normalize_before (bool, optional): + Whether to perform layer normalization before encoder block. + decoder_normalize_before (bool, optional): + Whether to perform layer normalization before decoder block. + encoder_concat_after (bool, optional): + Whether to concatenate attention layer's input and output in encoder. + decoder_concat_after (bool, optional): + Whether to concatenate attention layer's input and output in decoder. + positionwise_layer_type (str, optional): + Position-wise operation type. + positionwise_conv_kernel_size (int, optional): + Kernel size in position wise conv 1d. + reduction_factor (int, optional): + Reduction factor. + spk_embed_dim (int, optional): + Number of speaker embedding dimenstions. + spk_embed_integration_type (str, optional): + How to integrate speaker embedding. + use_gst (str, optional): + Whether to use global style token. + gst_tokens (int, optional): + The number of GST embeddings. + gst_heads (int, optional): + The number of heads in GST multihead attention. + gst_conv_layers (int, optional): + The number of conv layers in GST. + gst_conv_chans_list (Sequence[int], optional): + List of the number of channels of conv layers in GST. + gst_conv_kernel_size (int, optional): + Kernal size of conv layers in GST. + gst_conv_stride (int, optional): + Stride size of conv layers in GST. + gst_gru_layers (int, optional): + The number of GRU layers in GST. + gst_gru_units (int, optional): + The number of GRU units in GST. + transformer_lr (float, optional): + Initial value of learning rate. + transformer_warmup_steps (int, optional): + Optimizer warmup steps. + transformer_enc_dropout_rate (float, optional): + Dropout rate in encoder except attention and positional encoding. + transformer_enc_positional_dropout_rate (float, optional): + Dropout rate after encoder positional encoding. + transformer_enc_attn_dropout_rate (float, optional): + Dropout rate in encoder self-attention module. + transformer_dec_dropout_rate (float, optional): + Dropout rate in decoder except attention & positional encoding. + transformer_dec_positional_dropout_rate (float, optional): + Dropout rate after decoder positional encoding. + transformer_dec_attn_dropout_rate (float, optional): + Dropout rate in deocoder self-attention module. + transformer_enc_dec_attn_dropout_rate (float, optional): + Dropout rate in encoder-deocoder attention module. + init_type (str, optional): + How to initialize transformer parameters. + init_enc_alpha (float, optional): + Initial value of alpha in scaled pos encoding of the encoder. + init_dec_alpha (float, optional): + Initial value of alpha in scaled pos encoding of the decoder. + eprenet_dropout_rate (float, optional): + Dropout rate in encoder prenet. + dprenet_dropout_rate (float, optional): + Dropout rate in decoder prenet. + postnet_dropout_rate (float, optional): + Dropout rate in postnet. + use_masking (bool, optional): + Whether to apply masking for padded part in loss calculation. + use_weighted_masking (bool, optional): + Whether to apply weighted masking in loss calculation. + bce_pos_weight (float, optional): + Positive sample weight in bce calculation (only for use_masking=true). + loss_type (str, optional): + How to calculate loss. + use_guided_attn_loss (bool, optional): + Whether to use guided attention loss. + num_heads_applied_guided_attn (int, optional): + Number of heads in each layer to apply guided attention loss. + num_layers_applied_guided_attn (int, optional): + Number of layers to apply guided attention loss. """ def __init__( diff --git a/paddlespeech/t2s/models/waveflow.py b/paddlespeech/t2s/models/waveflow.py index 52e6005b..8e2ce822 100644 --- a/paddlespeech/t2s/models/waveflow.py +++ b/paddlespeech/t2s/models/waveflow.py @@ -33,8 +33,10 @@ def fold(x, n_group): """Fold audio or spectrogram's temporal dimension in to groups. Args: - x(Tensor): The input tensor. shape=(*, time_steps) - n_group(int): The size of a group. + x(Tensor): + The input tensor. shape=(*, time_steps) + n_group(int): + The size of a group. Returns: Tensor: Folded tensor. shape=(*, time_steps // n_group, group) @@ -53,7 +55,8 @@ class UpsampleNet(nn.LayerList): on mel and time dimension. Args: - upscale_factors(List[int], optional): Time upsampling factors for each Conv2DTranspose Layer. + upscale_factors(List[int], optional): + Time upsampling factors for each Conv2DTranspose Layer. The ``UpsampleNet`` contains ``len(upscale_factor)`` Conv2DTranspose Layers. Each upscale_factor is used as the ``stride`` for the corresponding Conv2DTranspose. Defaults to [16, 16], this the default @@ -94,8 +97,10 @@ class UpsampleNet(nn.LayerList): """Forward pass of the ``UpsampleNet`` Args: - x(Tensor): The input spectrogram. shape=(batch_size, input_channels, time_steps) - trim_conv_artifact(bool, optional, optional): Trim deconvolution artifact at each layer. Defaults to False. + x(Tensor): + The input spectrogram. shape=(batch_size, input_channels, time_steps) + trim_conv_artifact(bool, optional, optional): + Trim deconvolution artifact at each layer. Defaults to False. Returns: Tensor: The upsampled spectrogram. shape=(batch_size, input_channels, time_steps * upsample_factor) @@ -123,10 +128,14 @@ class ResidualBlock(nn.Layer): and output. Args: - channels (int): Feature size of the input. - cond_channels (int): Featuer size of the condition. - kernel_size (Tuple[int]): Kernel size of the Convolution2d applied to the input. - dilations (int): Dilations of the Convolution2d applied to the input. + channels (int): + Feature size of the input. + cond_channels (int): + Featuer size of the condition. + kernel_size (Tuple[int]): + Kernel size of the Convolution2d applied to the input. + dilations (int): + Dilations of the Convolution2d applied to the input. """ def __init__(self, channels, cond_channels, kernel_size, dilations): @@ -173,12 +182,16 @@ class ResidualBlock(nn.Layer): """Compute output for a whole folded sequence. Args: - x (Tensor): The input. [shape=(batch_size, channel, height, width)] - condition (Tensor [shape=(batch_size, condition_channel, height, width)]): The local condition. + x (Tensor): + The input. [shape=(batch_size, channel, height, width)] + condition (Tensor [shape=(batch_size, condition_channel, height, width)]): + The local condition. Returns: - res (Tensor): The residual output. [shape=(batch_size, channel, height, width)] - skip (Tensor): The skip output. [shape=(batch_size, channel, height, width)] + res (Tensor): + The residual output. [shape=(batch_size, channel, height, width)] + skip (Tensor): + The skip output. [shape=(batch_size, channel, height, width)] """ x_in = x x = self.conv(x) @@ -216,12 +229,16 @@ class ResidualBlock(nn.Layer): """Compute the output for a row and update the buffer. Args: - x_row (Tensor): A row of the input. shape=(batch_size, channel, 1, width) - condition_row (Tensor): A row of the condition. shape=(batch_size, condition_channel, 1, width) + x_row (Tensor): + A row of the input. shape=(batch_size, channel, 1, width) + condition_row (Tensor): + A row of the condition. shape=(batch_size, condition_channel, 1, width) Returns: - res (Tensor): A row of the the residual output. shape=(batch_size, channel, 1, width) - skip (Tensor): A row of the skip output. shape=(batch_size, channel, 1, width) + res (Tensor): + A row of the the residual output. shape=(batch_size, channel, 1, width) + skip (Tensor): + A row of the skip output. shape=(batch_size, channel, 1, width) """ x_row_in = x_row @@ -258,11 +275,16 @@ class ResidualNet(nn.LayerList): """A stack of several ResidualBlocks. It merges condition at each layer. Args: - n_layer (int): Number of ResidualBlocks in the ResidualNet. - residual_channels (int): Feature size of each ResidualBlocks. - condition_channels (int): Feature size of the condition. - kernel_size (Tuple[int]): Kernel size of each ResidualBlock. - dilations_h (List[int]): Dilation in height dimension of every ResidualBlock. + n_layer (int): + Number of ResidualBlocks in the ResidualNet. + residual_channels (int): + Feature size of each ResidualBlocks. + condition_channels (int): + Feature size of the condition. + kernel_size (Tuple[int]): + Kernel size of each ResidualBlock. + dilations_h (List[int]): + Dilation in height dimension of every ResidualBlock. Raises: ValueError: If the length of dilations_h does not equals n_layers. @@ -288,11 +310,13 @@ class ResidualNet(nn.LayerList): """Comput the output of given the input and the condition. Args: - x (Tensor): The input. shape=(batch_size, channel, height, width) - condition (Tensor): The local condition. shape=(batch_size, condition_channel, height, width) + x (Tensor): + The input. shape=(batch_size, channel, height, width) + condition (Tensor): + The local condition. shape=(batch_size, condition_channel, height, width) Returns: - Tensor : The output, which is an aggregation of all the skip outputs. shape=(batch_size, channel, height, width) + Tensor: The output, which is an aggregation of all the skip outputs. shape=(batch_size, channel, height, width) """ skip_connections = [] @@ -312,12 +336,16 @@ class ResidualNet(nn.LayerList): """Compute the output for a row and update the buffers. Args: - x_row (Tensor): A row of the input. shape=(batch_size, channel, 1, width) - condition_row (Tensor): A row of the condition. shape=(batch_size, condition_channel, 1, width) + x_row (Tensor): + A row of the input. shape=(batch_size, channel, 1, width) + condition_row (Tensor): + A row of the condition. shape=(batch_size, condition_channel, 1, width) Returns: - res (Tensor): A row of the the residual output. shape=(batch_size, channel, 1, width) - skip (Tensor): A row of the skip output. shape=(batch_size, channel, 1, width) + res (Tensor): + A row of the the residual output. shape=(batch_size, channel, 1, width) + skip (Tensor): + A row of the skip output. shape=(batch_size, channel, 1, width) """ skip_connections = [] @@ -337,11 +365,16 @@ class Flow(nn.Layer): sampling. Args: - n_layers (int): Number of ResidualBlocks in the Flow. - channels (int): Feature size of the ResidualBlocks. - mel_bands (int): Feature size of the mel spectrogram (mel bands). - kernel_size (Tuple[int]): Kernel size of each ResisualBlocks in the Flow. - n_group (int): Number of timesteps to the folded into a group. + n_layers (int): + Number of ResidualBlocks in the Flow. + channels (int): + Feature size of the ResidualBlocks. + mel_bands (int): + Feature size of the mel spectrogram (mel bands). + kernel_size (Tuple[int]): + Kernel size of each ResisualBlocks in the Flow. + n_group (int): + Number of timesteps to the folded into a group. """ dilations_dict = { 8: [1, 1, 1, 1, 1, 1, 1, 1], @@ -393,11 +426,14 @@ class Flow(nn.Layer): a sample from p(X) into a sample from p(Z). Args: - x (Tensor): A input sample of the distribution p(X). shape=(batch, 1, height, width) - condition (Tensor): The local condition. shape=(batch, condition_channel, height, width) + x (Tensor): + A input sample of the distribution p(X). shape=(batch, 1, height, width) + condition (Tensor): + The local condition. shape=(batch, condition_channel, height, width) Returns: - z (Tensor): shape(batch, 1, height, width), the transformed sample. + z (Tensor): + shape(batch, 1, height, width), the transformed sample. Tuple[Tensor, Tensor]: The parameter of the transformation. logs (Tensor): shape(batch, 1, height - 1, width), the log scale of the transformation from x to z. @@ -433,8 +469,10 @@ class Flow(nn.Layer): p(Z) and transform the sample. It is a auto regressive transformation. Args: - z(Tensor): A sample of the distribution p(Z). shape=(batch, 1, time_steps - condition(Tensor): The local condition. shape=(batch, condition_channel, time_steps) + z(Tensor): + A sample of the distribution p(Z). shape=(batch, 1, time_steps + condition(Tensor): + The local condition. shape=(batch, condition_channel, time_steps) Returns: Tensor: The transformed sample. shape=(batch, 1, height, width) @@ -462,12 +500,18 @@ class WaveFlow(nn.LayerList): flows. Args: - n_flows (int): Number of flows in the WaveFlow model. - n_layers (int): Number of ResidualBlocks in each Flow. - n_group (int): Number of timesteps to fold as a group. - channels (int): Feature size of each ResidualBlock. - mel_bands (int): Feature size of mel spectrogram (mel bands). - kernel_size (Union[int, List[int]]): Kernel size of the convolution layer in each ResidualBlock. + n_flows (int): + Number of flows in the WaveFlow model. + n_layers (int): + Number of ResidualBlocks in each Flow. + n_group (int): + Number of timesteps to fold as a group. + channels (int): + Feature size of each ResidualBlock. + mel_bands (int): + Feature size of mel spectrogram (mel bands). + kernel_size (Union[int, List[int]]): + Kernel size of the convolution layer in each ResidualBlock. """ def __init__(self, n_flows, n_layers, n_group, channels, mel_bands, @@ -518,12 +562,16 @@ class WaveFlow(nn.LayerList): condition. Args: - x (Tensor): The audio. shape=(batch_size, time_steps) - condition (Tensor): The local condition (mel spectrogram here). shape=(batch_size, condition channel, time_steps) + x (Tensor): + The audio. shape=(batch_size, time_steps) + condition (Tensor): + The local condition (mel spectrogram here). shape=(batch_size, condition channel, time_steps) Returns: - Tensor: The transformed random variable. shape=(batch_size, time_steps) - Tensor: The log determinant of the jacobian of the transformation from x to z. shape=(1,) + Tensor: + The transformed random variable. shape=(batch_size, time_steps) + Tensor: + The log determinant of the jacobian of the transformation from x to z. shape=(1,) """ # x: (B, T) # condition: (B, C, T) upsampled condition @@ -559,12 +607,13 @@ class WaveFlow(nn.LayerList): autoregressive manner. Args: - z (Tensor): A sample of the distribution p(Z). shape=(batch, 1, time_steps - condition (Tensor): The local condition. shape=(batch, condition_channel, time_steps) + z (Tensor): + A sample of the distribution p(Z). shape=(batch, 1, time_steps + condition (Tensor): + The local condition. shape=(batch, condition_channel, time_steps) Returns: Tensor: The transformed sample (audio here). shape=(batch_size, time_steps) - """ z, condition = self._trim(z, condition) @@ -590,13 +639,20 @@ class ConditionalWaveFlow(nn.LayerList): """ConditionalWaveFlow, a UpsampleNet with a WaveFlow model. Args: - upsample_factors (List[int]): Upsample factors for the upsample net. - n_flows (int): Number of flows in the WaveFlow model. - n_layers (int): Number of ResidualBlocks in each Flow. - n_group (int): Number of timesteps to fold as a group. - channels (int): Feature size of each ResidualBlock. - n_mels (int): Feature size of mel spectrogram (mel bands). - kernel_size (Union[int, List[int]]): Kernel size of the convolution layer in each ResidualBlock. + upsample_factors (List[int]): + Upsample factors for the upsample net. + n_flows (int): + Number of flows in the WaveFlow model. + n_layers (int): + Number of ResidualBlocks in each Flow. + n_group (int): + Number of timesteps to fold as a group. + channels (int): + Feature size of each ResidualBlock. + n_mels (int): + Feature size of mel spectrogram (mel bands). + kernel_size (Union[int, List[int]]): + Kernel size of the convolution layer in each ResidualBlock. """ def __init__(self, @@ -622,12 +678,16 @@ class ConditionalWaveFlow(nn.LayerList): the determinant of the jacobian of the transformation from x to z. Args: - audio(Tensor): The audio. shape=(B, T) - mel(Tensor): The mel spectrogram. shape=(B, C_mel, T_mel) + audio(Tensor): + The audio. shape=(B, T) + mel(Tensor): + The mel spectrogram. shape=(B, C_mel, T_mel) Returns: - Tensor: The inversely transformed random variable z (x to z). shape=(B, T) - Tensor: the log of the determinant of the jacobian of the transformation from x to z. shape=(1,) + Tensor: + The inversely transformed random variable z (x to z). shape=(B, T) + Tensor: + the log of the determinant of the jacobian of the transformation from x to z. shape=(1,) """ condition = self.encoder(mel) z, log_det_jacobian = self.decoder(audio, condition) @@ -638,10 +698,12 @@ class ConditionalWaveFlow(nn.LayerList): """Generate raw audio given mel spectrogram. Args: - mel(np.ndarray): Mel spectrogram of an utterance(in log-magnitude). shape=(C_mel, T_mel) + mel(np.ndarray): + Mel spectrogram of an utterance(in log-magnitude). shape=(C_mel, T_mel) Returns: - Tensor: The synthesized audio, where``T <= T_mel * upsample_factors``. shape=(B, T) + Tensor: + The synthesized audio, where``T <= T_mel * upsample_factors``. shape=(B, T) """ start = time.time() condition = self.encoder(mel, trim_conv_artifact=True) # (B, C, T) @@ -657,7 +719,8 @@ class ConditionalWaveFlow(nn.LayerList): """Generate raw audio given mel spectrogram. Args: - mel(np.ndarray): Mel spectrogram of an utterance(in log-magnitude). shape=(C_mel, T_mel) + mel(np.ndarray): + Mel spectrogram of an utterance(in log-magnitude). shape=(C_mel, T_mel) Returns: np.ndarray: The synthesized audio. shape=(T,) @@ -673,8 +736,10 @@ class ConditionalWaveFlow(nn.LayerList): """Build a ConditionalWaveFlow model from a pretrained model. Args: - config(yacs.config.CfgNode): model configs - checkpoint_path(Path or str): the path of pretrained model checkpoint, without extension name + config(yacs.config.CfgNode): + model configs + checkpoint_path(Path or str): + the path of pretrained model checkpoint, without extension name Returns: ConditionalWaveFlow The model built from pretrained result. @@ -694,8 +759,8 @@ class WaveFlowLoss(nn.Layer): """Criterion of a WaveFlow model. Args: - sigma (float): The standard deviation of the gaussian noise used in WaveFlow, - by default 1.0. + sigma (float): + The standard deviation of the gaussian noise used in WaveFlow, by default 1.0. """ def __init__(self, sigma=1.0): @@ -708,8 +773,10 @@ class WaveFlowLoss(nn.Layer): log_det_jacobian of transformation from x to z. Args: - z(Tensor): The transformed random variable (x to z). shape=(B, T) - log_det_jacobian(Tensor): The log of the determinant of the jacobian matrix of the + z(Tensor): + The transformed random variable (x to z). shape=(B, T) + log_det_jacobian(Tensor): + The log of the determinant of the jacobian matrix of the transformation from x to z. shape=(1,) Returns: @@ -726,7 +793,8 @@ class ConditionalWaveFlow2Infer(ConditionalWaveFlow): """Generate raw audio given mel spectrogram. Args: - mel (np.ndarray): Mel spectrogram of an utterance(in log-magnitude). shape=(C_mel, T_mel) + mel (np.ndarray): + Mel spectrogram of an utterance(in log-magnitude). shape=(C_mel, T_mel) Returns: np.ndarray: The synthesized audio. shape=(T,) diff --git a/paddlespeech/t2s/models/wavernn/wavernn.py b/paddlespeech/t2s/models/wavernn/wavernn.py index eb892eda..254edbb2 100644 --- a/paddlespeech/t2s/models/wavernn/wavernn.py +++ b/paddlespeech/t2s/models/wavernn/wavernn.py @@ -165,19 +165,29 @@ class WaveRNN(nn.Layer): init_type: str="xavier_uniform", ): ''' Args: - rnn_dims (int, optional): Hidden dims of RNN Layers. - fc_dims (int, optional): Dims of FC Layers. - bits (int, optional): bit depth of signal. - aux_context_window (int, optional): The context window size of the first convolution applied to the - auxiliary input, by default 2 - upsample_scales (List[int], optional): Upsample scales of the upsample network. - aux_channels (int, optional): Auxiliary channel of the residual blocks. - compute_dims (int, optional): Dims of Conv1D in MelResNet. - res_out_dims (int, optional): Dims of output in MelResNet. - res_blocks (int, optional): Number of residual blocks. - mode (str, optional): Output mode of the WaveRNN vocoder. + rnn_dims (int, optional): + Hidden dims of RNN Layers. + fc_dims (int, optional): + Dims of FC Layers. + bits (int, optional): + bit depth of signal. + aux_context_window (int, optional): + The context window size of the first convolution applied to the auxiliary input, by default 2 + upsample_scales (List[int], optional): + Upsample scales of the upsample network. + aux_channels (int, optional): + Auxiliary channel of the residual blocks. + compute_dims (int, optional): + Dims of Conv1D in MelResNet. + res_out_dims (int, optional): + Dims of output in MelResNet. + res_blocks (int, optional): + Number of residual blocks. + mode (str, optional): + Output mode of the WaveRNN vocoder. `MOL` for Mixture of Logistic Distribution, and `RAW` for quantized bits as the model's output. - init_type (str): How to initialize parameters. + init_type (str): + How to initialize parameters. ''' super().__init__() self.mode = mode @@ -226,8 +236,10 @@ class WaveRNN(nn.Layer): def forward(self, x, c): ''' Args: - x (Tensor): wav sequence, [B, T] - c (Tensor): mel spectrogram [B, C_aux, T'] + x (Tensor): + wav sequence, [B, T] + c (Tensor): + mel spectrogram [B, C_aux, T'] T = (T' - 2 * aux_context_window ) * hop_length Returns: @@ -280,10 +292,14 @@ class WaveRNN(nn.Layer): gen_display: bool=False): """ Args: - c(Tensor): input mels, (T', C_aux) - batched(bool): generate in batch or not - target(int): target number of samples to be generated in each batch entry - overlap(int): number of samples for crossfading between batches + c(Tensor): + input mels, (T', C_aux) + batched(bool): + generate in batch or not + target(int): + target number of samples to be generated in each batch entry + overlap(int): + number of samples for crossfading between batches mu_law(bool) Returns: wav sequence: Output (T' * prod(upsample_scales), out_channels, C_out). @@ -404,7 +420,8 @@ class WaveRNN(nn.Layer): def pad_tensor(self, x, pad, side='both'): ''' Args: - x(Tensor): mel, [1, n_frames, 80] + x(Tensor): + mel, [1, n_frames, 80] pad(int): side(str, optional): (Default value = 'both') @@ -428,12 +445,15 @@ class WaveRNN(nn.Layer): Overlap will be used for crossfading in xfade_and_unfold() Args: - x(Tensor): Upsampled conditioning features. mels or aux + x(Tensor): + Upsampled conditioning features. mels or aux shape=(1, T, features) mels: [1, T, 80] aux: [1, T, 128] - target(int): Target timesteps for each index of batch - overlap(int): Timesteps for both xfade and rnn warmup + target(int): + Target timesteps for each index of batch + overlap(int): + Timesteps for both xfade and rnn warmup Returns: Tensor: diff --git a/paddlespeech/t2s/modules/causal_conv.py b/paddlespeech/t2s/modules/causal_conv.py index 3abccc15..337ee238 100644 --- a/paddlespeech/t2s/modules/causal_conv.py +++ b/paddlespeech/t2s/modules/causal_conv.py @@ -42,7 +42,8 @@ class CausalConv1D(nn.Layer): def forward(self, x): """Calculate forward propagation. Args: - x (Tensor): Input tensor (B, in_channels, T). + x (Tensor): + Input tensor (B, in_channels, T). Returns: Tensor: Output tensor (B, out_channels, T). """ @@ -67,7 +68,8 @@ class CausalConv1DTranspose(nn.Layer): def forward(self, x): """Calculate forward propagation. Args: - x (Tensor): Input tensor (B, in_channels, T_in). + x (Tensor): + Input tensor (B, in_channels, T_in). Returns: Tensor: Output tensor (B, out_channels, T_out). """ diff --git a/paddlespeech/t2s/modules/conformer/convolution.py b/paddlespeech/t2s/modules/conformer/convolution.py index 185c62fb..dadda064 100644 --- a/paddlespeech/t2s/modules/conformer/convolution.py +++ b/paddlespeech/t2s/modules/conformer/convolution.py @@ -20,8 +20,10 @@ class ConvolutionModule(nn.Layer): """ConvolutionModule in Conformer model. Args: - channels (int): The number of channels of conv layers. - kernel_size (int): Kernerl size of conv layers. + channels (int): + The number of channels of conv layers. + kernel_size (int): + Kernerl size of conv layers. """ def __init__(self, channels, kernel_size, activation=nn.ReLU(), bias=True): @@ -59,7 +61,8 @@ class ConvolutionModule(nn.Layer): """Compute convolution module. Args: - x (Tensor): Input tensor (#batch, time, channels). + x (Tensor): + Input tensor (#batch, time, channels). Returns: Tensor: Output tensor (#batch, time, channels). """ diff --git a/paddlespeech/t2s/modules/conformer/encoder_layer.py b/paddlespeech/t2s/modules/conformer/encoder_layer.py index 61c32612..26a35456 100644 --- a/paddlespeech/t2s/modules/conformer/encoder_layer.py +++ b/paddlespeech/t2s/modules/conformer/encoder_layer.py @@ -23,25 +23,34 @@ class EncoderLayer(nn.Layer): """Encoder layer module. Args: - size (int): Input dimension. - self_attn (nn.Layer): Self-attention module instance. + size (int): + Input dimension. + self_attn (nn.Layer): + Self-attention module instance. `MultiHeadedAttention` or `RelPositionMultiHeadedAttention` instance can be used as the argument. - feed_forward (nn.Layer): Feed-forward module instance. + feed_forward (nn.Layer): + Feed-forward module instance. `PositionwiseFeedForward`, `MultiLayeredConv1d`, or `Conv1dLinear` instance can be used as the argument. - feed_forward_macaron (nn.Layer): Additional feed-forward module instance. + feed_forward_macaron (nn.Layer): + Additional feed-forward module instance. `PositionwiseFeedForward`, `MultiLayeredConv1d`, or `Conv1dLinear` instance can be used as the argument. - conv_module (nn.Layer): Convolution module instance. + conv_module (nn.Layer): + Convolution module instance. `ConvlutionModule` instance can be used as the argument. - dropout_rate (float): Dropout rate. - normalize_before (bool): Whether to use layer_norm before the first block. - concat_after (bool): Whether to concat attention layer's input and output. + dropout_rate (float): + Dropout rate. + normalize_before (bool): + Whether to use layer_norm before the first block. + concat_after (bool): + Whether to concat attention layer's input and output. if True, additional linear will be applied. i.e. x -> x + linear(concat(x, att(x))) if False, no additional linear will be applied. i.e. x -> x + att(x) - stochastic_depth_rate (float): Proability to skip this layer. + stochastic_depth_rate (float): + Proability to skip this layer. During training, the layer may skip residual computation and return input as-is with given probability. """ @@ -86,15 +95,19 @@ class EncoderLayer(nn.Layer): """Compute encoded features. Args: - x_input(Union[Tuple, Tensor]): Input tensor w/ or w/o pos emb. + x_input(Union[Tuple, Tensor]): + Input tensor w/ or w/o pos emb. - w/ pos emb: Tuple of tensors [(#batch, time, size), (1, time, size)]. - w/o pos emb: Tensor (#batch, time, size). - mask(Tensor): Mask tensor for the input (#batch, time). + mask(Tensor): + Mask tensor for the input (#batch, time). cache (Tensor): Returns: - Tensor: Output tensor (#batch, time, size). - Tensor: Mask tensor (#batch, time). + Tensor: + Output tensor (#batch, time, size). + Tensor: + Mask tensor (#batch, time). """ if isinstance(x_input, tuple): x, pos_emb = x_input[0], x_input[1] diff --git a/paddlespeech/t2s/modules/conv.py b/paddlespeech/t2s/modules/conv.py index aa875bd5..922af03f 100644 --- a/paddlespeech/t2s/modules/conv.py +++ b/paddlespeech/t2s/modules/conv.py @@ -42,13 +42,19 @@ class Conv1dCell(nn.Conv1D): class. Args: - in_channels (int): The feature size of the input. - out_channels (int): The feature size of the output. - kernel_size (int or Tuple[int]): The size of the kernel. - dilation (int or Tuple[int]): The dilation of the convolution, by default 1 - weight_attr (ParamAttr, Initializer, str or bool, optional) : The parameter attribute of the convolution kernel, + in_channels (int): + The feature size of the input. + out_channels (int): + The feature size of the output. + kernel_size (int or Tuple[int]): + The size of the kernel. + dilation (int or Tuple[int]): + The dilation of the convolution, by default 1 + weight_attr (ParamAttr, Initializer, str or bool, optional): + The parameter attribute of the convolution kernel, by default None. - bias_attr (ParamAttr, Initializer, str or bool, optional):The parameter attribute of the bias. + bias_attr (ParamAttr, Initializer, str or bool, optional): + The parameter attribute of the bias. If ``False``, this layer does not have a bias, by default None. Examples: @@ -122,7 +128,8 @@ class Conv1dCell(nn.Conv1D): """Initialize the buffer for the step input. Args: - x_t (Tensor): The step input. shape=(batch_size, in_channels) + x_t (Tensor): + The step input. shape=(batch_size, in_channels) """ batch_size, _ = x_t.shape @@ -134,7 +141,8 @@ class Conv1dCell(nn.Conv1D): """Shift the buffer by one step. Args: - x_t (Tensor): The step input. shape=(batch_size, in_channels) + x_t (Tensor): T + he step input. shape=(batch_size, in_channels) """ self._buffer = paddle.concat( @@ -144,10 +152,12 @@ class Conv1dCell(nn.Conv1D): """Add step input and compute step output. Args: - x_t (Tensor): The step input. shape=(batch_size, in_channels) + x_t (Tensor): + The step input. shape=(batch_size, in_channels) Returns: - y_t (Tensor): The step output. shape=(batch_size, out_channels) + y_t (Tensor): + The step output. shape=(batch_size, out_channels) """ batch_size = x_t.shape[0] @@ -173,10 +183,14 @@ class Conv1dBatchNorm(nn.Layer): """A Conv1D Layer followed by a BatchNorm1D. Args: - in_channels (int): The feature size of the input. - out_channels (int): The feature size of the output. - kernel_size (int): The size of the convolution kernel. - stride (int, optional): The stride of the convolution, by default 1. + in_channels (int): + The feature size of the input. + out_channels (int): + The feature size of the output. + kernel_size (int): + The size of the convolution kernel. + stride (int, optional): + The stride of the convolution, by default 1. padding (int, str or Tuple[int], optional): The padding of the convolution. If int, a symmetrical padding is applied before convolution; @@ -189,9 +203,12 @@ class Conv1dBatchNorm(nn.Layer): bias_attr (ParamAttr, Initializer, str or bool, optional): The parameter attribute of the bias of the convolution, by defaultNone. - data_format (str ["NCL" or "NLC"], optional): The data layout of the input, by default "NCL" - momentum (float, optional): The momentum of the BatchNorm1D layer, by default 0.9 - epsilon (float, optional): The epsilon of the BatchNorm1D layer, by default 1e-05 + data_format (str ["NCL" or "NLC"], optional): + The data layout of the input, by default "NCL" + momentum (float, optional): + The momentum of the BatchNorm1D layer, by default 0.9 + epsilon (float, optional): + The epsilon of the BatchNorm1D layer, by default 1e-05 """ def __init__(self, @@ -225,12 +242,13 @@ class Conv1dBatchNorm(nn.Layer): """Forward pass of the Conv1dBatchNorm layer. Args: - x (Tensor): The input tensor. Its data layout depends on ``data_format``. - shape=(B, C_in, T_in) or (B, T_in, C_in) + x (Tensor): + The input tensor. Its data layout depends on ``data_format``. + shape=(B, C_in, T_in) or (B, T_in, C_in) Returns: - Tensor: The output tensor. - shape=(B, C_out, T_out) or (B, T_out, C_out) + Tensor: + The output tensor. shape=(B, C_out, T_out) or (B, T_out, C_out) """ x = self.conv(x) diff --git a/paddlespeech/t2s/modules/geometry.py b/paddlespeech/t2s/modules/geometry.py index 01eb5ad0..80c872a8 100644 --- a/paddlespeech/t2s/modules/geometry.py +++ b/paddlespeech/t2s/modules/geometry.py @@ -19,8 +19,10 @@ def shuffle_dim(x, axis, perm=None): """Permute input tensor along aixs given the permutation or randomly. Args: - x (Tensor): The input tensor. - axis (int): The axis to shuffle. + x (Tensor): + The input tensor. + axis (int): + The axis to shuffle. perm (List[int], ndarray, optional): The order to reorder the tensor along the ``axis``-th dimension. It is a permutation of ``[0, d)``, where d is the size of the diff --git a/paddlespeech/t2s/modules/layer_norm.py b/paddlespeech/t2s/modules/layer_norm.py index 088b98e0..9e2add29 100644 --- a/paddlespeech/t2s/modules/layer_norm.py +++ b/paddlespeech/t2s/modules/layer_norm.py @@ -19,8 +19,10 @@ from paddle import nn class LayerNorm(nn.LayerNorm): """Layer normalization module. Args: - nout (int): Output dim size. - dim (int): Dimension to be normalized. + nout (int): + Output dim size. + dim (int): + Dimension to be normalized. """ def __init__(self, nout, dim=-1): @@ -32,7 +34,8 @@ class LayerNorm(nn.LayerNorm): """Apply layer normalization. Args: - x (Tensor):Input tensor. + x (Tensor): + Input tensor. Returns: Tensor: Normalized tensor. diff --git a/paddlespeech/t2s/modules/losses.py b/paddlespeech/t2s/modules/losses.py index 4726f40e..b2a31a32 100644 --- a/paddlespeech/t2s/modules/losses.py +++ b/paddlespeech/t2s/modules/losses.py @@ -269,8 +269,10 @@ class GuidedAttentionLoss(nn.Layer): """Make masks indicating non-padded part. Args: - ilens(Tensor(int64) or List): Batch of lengths (B,). - olens(Tensor(int64) or List): Batch of lengths (B,). + ilens(Tensor(int64) or List): + Batch of lengths (B,). + olens(Tensor(int64) or List): + Batch of lengths (B,). Returns: Tensor: Mask tensor indicating non-padded part. @@ -322,9 +324,12 @@ class GuidedMultiHeadAttentionLoss(GuidedAttentionLoss): """Calculate forward propagation. Args: - att_ws(Tensor): Batch of multi head attention weights (B, H, T_max_out, T_max_in). - ilens(Tensor): Batch of input lenghts (B,). - olens(Tensor): Batch of output lenghts (B,). + att_ws(Tensor): + Batch of multi head attention weights (B, H, T_max_out, T_max_in). + ilens(Tensor): + Batch of input lenghts (B,). + olens(Tensor): + Batch of output lenghts (B,). Returns: Tensor: Guided attention loss value. @@ -354,9 +359,12 @@ class Tacotron2Loss(nn.Layer): """Initialize Tactoron2 loss module. Args: - use_masking (bool): Whether to apply masking for padded part in loss calculation. - use_weighted_masking (bool): Whether to apply weighted masking in loss calculation. - bce_pos_weight (float): Weight of positive sample of stop token. + use_masking (bool): + Whether to apply masking for padded part in loss calculation. + use_weighted_masking (bool): + Whether to apply weighted masking in loss calculation. + bce_pos_weight (float): + Weight of positive sample of stop token. """ super().__init__() assert (use_masking != use_weighted_masking) or not use_masking @@ -374,17 +382,25 @@ class Tacotron2Loss(nn.Layer): """Calculate forward propagation. Args: - after_outs(Tensor): Batch of outputs after postnets (B, Lmax, odim). - before_outs(Tensor): Batch of outputs before postnets (B, Lmax, odim). - logits(Tensor): Batch of stop logits (B, Lmax). - ys(Tensor): Batch of padded target features (B, Lmax, odim). - stop_labels(Tensor(int64)): Batch of the sequences of stop token labels (B, Lmax). + after_outs(Tensor): + Batch of outputs after postnets (B, Lmax, odim). + before_outs(Tensor): + Batch of outputs before postnets (B, Lmax, odim). + logits(Tensor): + Batch of stop logits (B, Lmax). + ys(Tensor): + Batch of padded target features (B, Lmax, odim). + stop_labels(Tensor(int64)): + Batch of the sequences of stop token labels (B, Lmax). olens(Tensor(int64)): Returns: - Tensor: L1 loss value. - Tensor: Mean square error loss value. - Tensor: Binary cross entropy loss value. + Tensor: + L1 loss value. + Tensor: + Mean square error loss value. + Tensor: + Binary cross entropy loss value. """ # make mask and apply it if self.use_masking: @@ -437,16 +453,24 @@ def stft(x, pad_mode='reflect'): """Perform STFT and convert to magnitude spectrogram. Args: - x(Tensor): Input signal tensor (B, T). - fft_size(int): FFT size. - hop_size(int): Hop size. - win_length(int, optional): window : str, optional (Default value = None) - window(str, optional): Name of window function, see `scipy.signal.get_window` for more - details. Defaults to "hann". - center(bool, optional, optional): center (bool, optional): Whether to pad `x` to make that the + x(Tensor): + Input signal tensor (B, T). + fft_size(int): + FFT size. + hop_size(int): + Hop size. + win_length(int, optional): + window (str, optional): + (Default value = None) + window(str, optional): + Name of window function, see `scipy.signal.get_window` for more details. Defaults to "hann". + center(bool, optional, optional): center (bool, optional): + Whether to pad `x` to make that the :math:`t \times hop\\_length` at the center of :math:`t`-th frame. Default: `True`. - pad_mode(str, optional, optional): (Default value = 'reflect') - hop_length: (Default value = None) + pad_mode(str, optional, optional): + (Default value = 'reflect') + hop_length: + (Default value = None) Returns: Tensor: Magnitude spectrogram (B, #frames, fft_size // 2 + 1). @@ -480,8 +504,10 @@ class SpectralConvergenceLoss(nn.Layer): def forward(self, x_mag, y_mag): """Calculate forward propagation. Args: - x_mag (Tensor): Magnitude spectrogram of predicted signal (B, #frames, #freq_bins). - y_mag (Tensor): Magnitude spectrogram of groundtruth signal (B, #frames, #freq_bins). + x_mag (Tensor): + Magnitude spectrogram of predicted signal (B, #frames, #freq_bins). + y_mag (Tensor): + Magnitude spectrogram of groundtruth signal (B, #frames, #freq_bins). Returns: Tensor: Spectral convergence loss value. """ @@ -501,8 +527,10 @@ class LogSTFTMagnitudeLoss(nn.Layer): def forward(self, x_mag, y_mag): """Calculate forward propagation. Args: - x_mag (Tensor): Magnitude spectrogram of predicted signal (B, #frames, #freq_bins). - y_mag (Tensor): Magnitude spectrogram of groundtruth signal (B, #frames, #freq_bins). + x_mag (Tensor): + Magnitude spectrogram of predicted signal (B, #frames, #freq_bins). + y_mag (Tensor): + Magnitude spectrogram of groundtruth signal (B, #frames, #freq_bins). Returns: Tensor: Log STFT magnitude loss value. """ @@ -531,11 +559,15 @@ class STFTLoss(nn.Layer): def forward(self, x, y): """Calculate forward propagation. Args: - x (Tensor): Predicted signal (B, T). - y (Tensor): Groundtruth signal (B, T). + x (Tensor): + Predicted signal (B, T). + y (Tensor): + Groundtruth signal (B, T). Returns: - Tensor: Spectral convergence loss value. - Tensor: Log STFT magnitude loss value. + Tensor: + Spectral convergence loss value. + Tensor: + Log STFT magnitude loss value. """ x_mag = stft(x, self.fft_size, self.shift_size, self.win_length, self.window) @@ -558,10 +590,14 @@ class MultiResolutionSTFTLoss(nn.Layer): window="hann", ): """Initialize Multi resolution STFT loss module. Args: - fft_sizes (list): List of FFT sizes. - hop_sizes (list): List of hop sizes. - win_lengths (list): List of window lengths. - window (str): Window function type. + fft_sizes (list): + List of FFT sizes. + hop_sizes (list): + List of hop sizes. + win_lengths (list): + List of window lengths. + window (str): + Window function type. """ super().__init__() assert len(fft_sizes) == len(hop_sizes) == len(win_lengths) @@ -573,11 +609,15 @@ class MultiResolutionSTFTLoss(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Predicted signal (B, T) or (B, #subband, T). - y (Tensor): Groundtruth signal (B, T) or (B, #subband, T). + x (Tensor): + Predicted signal (B, T) or (B, #subband, T). + y (Tensor): + Groundtruth signal (B, T) or (B, #subband, T). Returns: - Tensor: Multi resolution spectral convergence loss value. - Tensor: Multi resolution log STFT magnitude loss value. + Tensor: + Multi resolution spectral convergence loss value. + Tensor: + Multi resolution log STFT magnitude loss value. """ if len(x.shape) == 3: # (B, C, T) -> (B x C, T) @@ -615,9 +655,11 @@ class GeneratorAdversarialLoss(nn.Layer): def forward(self, outputs): """Calcualate generator adversarial loss. Args: - outputs (Tensor or List): Discriminator outputs or list of discriminator outputs. + outputs (Tensor or List): + Discriminator outputs or list of discriminator outputs. Returns: - Tensor: Generator adversarial loss value. + Tensor: + Generator adversarial loss value. """ if isinstance(outputs, (tuple, list)): adv_loss = 0.0 @@ -659,13 +701,15 @@ class DiscriminatorAdversarialLoss(nn.Layer): """Calcualate discriminator adversarial loss. Args: - outputs_hat (Tensor or list): Discriminator outputs or list of - discriminator outputs calculated from generator outputs. - outputs (Tensor or list): Discriminator outputs or list of - discriminator outputs calculated from groundtruth. + outputs_hat (Tensor or list): + Discriminator outputs or list of discriminator outputs calculated from generator outputs. + outputs (Tensor or list): + Discriminator outputs or list of discriminator outputs calculated from groundtruth. Returns: - Tensor: Discriminator real loss value. - Tensor: Discriminator fake loss value. + Tensor: + Discriminator real loss value. + Tensor: + Discriminator fake loss value. """ if isinstance(outputs, (tuple, list)): real_loss = 0.0 @@ -766,9 +810,12 @@ def masked_l1_loss(prediction, target, mask): """Compute maksed L1 loss. Args: - prediction(Tensor): The prediction. - target(Tensor): The target. The shape should be broadcastable to ``prediction``. - mask(Tensor): The mask. The shape should be broadcatable to the broadcasted shape of + prediction(Tensor): + The prediction. + target(Tensor): + The target. The shape should be broadcastable to ``prediction``. + mask(Tensor): + The mask. The shape should be broadcatable to the broadcasted shape of ``prediction`` and ``target``. Returns: @@ -916,8 +963,10 @@ class MelSpectrogramLoss(nn.Layer): def forward(self, y_hat, y): """Calculate Mel-spectrogram loss. Args: - y_hat(Tensor): Generated single tensor (B, 1, T). - y(Tensor): Groundtruth single tensor (B, 1, T). + y_hat(Tensor): + Generated single tensor (B, 1, T). + y(Tensor): + Groundtruth single tensor (B, 1, T). Returns: Tensor: Mel-spectrogram loss value. @@ -947,9 +996,11 @@ class FeatureMatchLoss(nn.Layer): """Calcualate feature matching loss. Args: - feats_hat(list): List of list of discriminator outputs + feats_hat(list): + List of list of discriminator outputs calcuated from generater outputs. - feats(list): List of list of discriminator outputs + feats(list): + List of list of discriminator outputs Returns: Tensor: Feature matching loss value. @@ -986,11 +1037,16 @@ class KLDivergenceLoss(nn.Layer): """Calculate KL divergence loss. Args: - z_p (Tensor): Flow hidden representation (B, H, T_feats). - logs_q (Tensor): Posterior encoder projected scale (B, H, T_feats). - m_p (Tensor): Expanded text encoder projected mean (B, H, T_feats). - logs_p (Tensor): Expanded text encoder projected scale (B, H, T_feats). - z_mask (Tensor): Mask tensor (B, 1, T_feats). + z_p (Tensor): + Flow hidden representation (B, H, T_feats). + logs_q (Tensor): + Posterior encoder projected scale (B, H, T_feats). + m_p (Tensor): + Expanded text encoder projected mean (B, H, T_feats). + logs_p (Tensor): + Expanded text encoder projected scale (B, H, T_feats). + z_mask (Tensor): + Mask tensor (B, 1, T_feats). Returns: Tensor: KL divergence loss. diff --git a/paddlespeech/t2s/modules/nets_utils.py b/paddlespeech/t2s/modules/nets_utils.py index 8cf17a6a..a3d5d135 100644 --- a/paddlespeech/t2s/modules/nets_utils.py +++ b/paddlespeech/t2s/modules/nets_utils.py @@ -25,8 +25,10 @@ def pad_list(xs, pad_value): """Perform padding for the list of tensors. Args: - xs (List[Tensor]): List of Tensors [(T_1, `*`), (T_2, `*`), ..., (T_B, `*`)]. - pad_value (float): Value for padding. + xs (List[Tensor]): + List of Tensors [(T_1, `*`), (T_2, `*`), ..., (T_B, `*`)]. + pad_value (float): + Value for padding. Returns: Tensor: Padded tensor (B, Tmax, `*`). @@ -55,10 +57,13 @@ def make_pad_mask(lengths, xs=None, length_dim=-1): """Make mask tensor containing indices of padded part. Args: - lengths (Tensor(int64)): Batch of lengths (B,). - xs (Tensor, optional): The reference tensor. + lengths (Tensor(int64)): + Batch of lengths (B,). + xs (Tensor, optional): + The reference tensor. If set, masks will be the same shape as this tensor. - length_dim (int, optional): Dimension indicator of the above tensor. + length_dim (int, optional): + Dimension indicator of the above tensor. See the example. Returns: @@ -166,14 +171,18 @@ def make_non_pad_mask(lengths, xs=None, length_dim=-1): """Make mask tensor containing indices of non-padded part. Args: - lengths (Tensor(int64) or List): Batch of lengths (B,). - xs (Tensor, optional): The reference tensor. + lengths (Tensor(int64) or List): + Batch of lengths (B,). + xs (Tensor, optional): + The reference tensor. If set, masks will be the same shape as this tensor. - length_dim (int, optional): Dimension indicator of the above tensor. + length_dim (int, optional): + Dimension indicator of the above tensor. See the example. Returns: - Tensor(bool): mask tensor containing indices of padded part bool. + Tensor(bool): + mask tensor containing indices of padded part bool. Examples: With only lengths. @@ -257,8 +266,10 @@ def initialize(model: nn.Layer, init: str): Custom initialization routines can be implemented into submodules Args: - model (nn.Layer): Target. - init (str): Method of initialization. + model (nn.Layer): + Target. + init (str): + Method of initialization. """ assert check_argument_types() @@ -285,12 +296,17 @@ def get_random_segments( segment_size: int, ) -> Tuple[paddle.Tensor, paddle.Tensor]: """Get random segments. Args: - x (Tensor): Input tensor (B, C, T). - x_lengths (Tensor): Length tensor (B,). - segment_size (int): Segment size. + x (Tensor): + Input tensor (B, C, T). + x_lengths (Tensor): + Length tensor (B,). + segment_size (int): + Segment size. Returns: - Tensor: Segmented tensor (B, C, segment_size). - Tensor: Start index tensor (B,). + Tensor: + Segmented tensor (B, C, segment_size). + Tensor: + Start index tensor (B,). """ b, c, t = paddle.shape(x) max_start_idx = x_lengths - segment_size @@ -306,9 +322,12 @@ def get_segments( segment_size: int, ) -> paddle.Tensor: """Get segments. Args: - x (Tensor): Input tensor (B, C, T). - start_idxs (Tensor): Start index tensor (B,). - segment_size (int): Segment size. + x (Tensor): + Input tensor (B, C, T). + start_idxs (Tensor): + Start index tensor (B,). + segment_size (int): + Segment size. Returns: Tensor: Segmented tensor (B, C, segment_size). """ @@ -353,14 +372,20 @@ def phones_masking(xs_pad: paddle.Tensor, span_bdy: paddle.Tensor=None): ''' Args: - xs_pad (paddle.Tensor): input speech (B, Tmax, D). - src_mask (paddle.Tensor): mask of speech (B, 1, Tmax). - align_start (paddle.Tensor): frame level phone alignment start (B, Tmax2). - align_end (paddle.Tensor): frame level phone alignment end (B, Tmax2). - align_start_lens (paddle.Tensor): length of align_start (B, ). + xs_pad (paddle.Tensor): + input speech (B, Tmax, D). + src_mask (paddle.Tensor): + mask of speech (B, 1, Tmax). + align_start (paddle.Tensor): + frame level phone alignment start (B, Tmax2). + align_end (paddle.Tensor): + frame level phone alignment end (B, Tmax2). + align_start_lens (paddle.Tensor): + length of align_start (B, ). mlm_prob (float): mean_phn_span (int): - span_bdy (paddle.Tensor): masked mel boundary of input speech (B, 2). + span_bdy (paddle.Tensor): + masked mel boundary of input speech (B, 2). Returns: paddle.Tensor[bool]: masked position of input speech (B, Tmax). ''' @@ -416,19 +441,29 @@ def phones_text_masking(xs_pad: paddle.Tensor, span_bdy: paddle.Tensor=None): ''' Args: - xs_pad (paddle.Tensor): input speech (B, Tmax, D). - src_mask (paddle.Tensor): mask of speech (B, 1, Tmax). - text_pad (paddle.Tensor): input text (B, Tmax2). - text_mask (paddle.Tensor): mask of text (B, 1, Tmax2). - align_start (paddle.Tensor): frame level phone alignment start (B, Tmax2). - align_end (paddle.Tensor): frame level phone alignment end (B, Tmax2). - align_start_lens (paddle.Tensor): length of align_start (B, ). + xs_pad (paddle.Tensor): + input speech (B, Tmax, D). + src_mask (paddle.Tensor): + mask of speech (B, 1, Tmax). + text_pad (paddle.Tensor): + input text (B, Tmax2). + text_mask (paddle.Tensor): + mask of text (B, 1, Tmax2). + align_start (paddle.Tensor): + frame level phone alignment start (B, Tmax2). + align_end (paddle.Tensor): + frame level phone alignment end (B, Tmax2). + align_start_lens (paddle.Tensor): + length of align_start (B, ). mlm_prob (float): mean_phn_span (int): - span_bdy (paddle.Tensor): masked mel boundary of input speech (B, 2). + span_bdy (paddle.Tensor): + masked mel boundary of input speech (B, 2). Returns: - paddle.Tensor[bool]: masked position of input speech (B, Tmax). - paddle.Tensor[bool]: masked position of input text (B, Tmax2). + paddle.Tensor[bool]: + masked position of input speech (B, Tmax). + paddle.Tensor[bool]: + masked position of input text (B, Tmax2). ''' bz, sent_len, _ = paddle.shape(xs_pad) masked_pos = paddle.zeros((bz, sent_len)) @@ -488,12 +523,18 @@ def get_seg_pos(speech_pad: paddle.Tensor, seg_emb: bool=False): ''' Args: - speech_pad (paddle.Tensor): input speech (B, Tmax, D). - text_pad (paddle.Tensor): input text (B, Tmax2). - align_start (paddle.Tensor): frame level phone alignment start (B, Tmax2). - align_end (paddle.Tensor): frame level phone alignment end (B, Tmax2). - align_start_lens (paddle.Tensor): length of align_start (B, ). - seg_emb (bool): whether to use segment embedding. + speech_pad (paddle.Tensor): + input speech (B, Tmax, D). + text_pad (paddle.Tensor): + input text (B, Tmax2). + align_start (paddle.Tensor): + frame level phone alignment start (B, Tmax2). + align_end (paddle.Tensor): + frame level phone alignment end (B, Tmax2). + align_start_lens (paddle.Tensor): + length of align_start (B, ). + seg_emb (bool): + whether to use segment embedding. Returns: paddle.Tensor[int]: n-th phone of each mel, 0<=n<=Tmax2 (B, Tmax). eg: @@ -579,8 +620,10 @@ def random_spans_noise_mask(length: int, def _random_seg(num_items, num_segs): """Partition a sequence of items randomly into non-empty segments. Args: - num_items: an integer scalar > 0 - num_segs: an integer scalar in [1, num_items] + num_items: + an integer scalar > 0 + num_segs: + an integer scalar in [1, num_items] Returns: a Tensor with shape [num_segs] containing positive integers that add up to num_items diff --git a/paddlespeech/t2s/modules/pqmf.py b/paddlespeech/t2s/modules/pqmf.py index 9860da90..7b42409d 100644 --- a/paddlespeech/t2s/modules/pqmf.py +++ b/paddlespeech/t2s/modules/pqmf.py @@ -26,9 +26,12 @@ def design_prototype_filter(taps=62, cutoff_ratio=0.142, beta=9.0): filters of cosine modulated filterbanks`_. Args: - taps (int): The number of filter taps. - cutoff_ratio (float): Cut-off frequency ratio. - beta (float): Beta coefficient for kaiser window. + taps (int): + The number of filter taps. + cutoff_ratio (float): + Cut-off frequency ratio. + beta (float): + Beta coefficient for kaiser window. Returns: ndarray: Impluse response of prototype filter (taps + 1,). @@ -66,10 +69,14 @@ class PQMF(nn.Layer): See dicussion in https://github.com/kan-bayashi/ParallelWaveGAN/issues/195. Args: - subbands (int): The number of subbands. - taps (int): The number of filter taps. - cutoff_ratio (float): Cut-off frequency ratio. - beta (float): Beta coefficient for kaiser window. + subbands (int): + The number of subbands. + taps (int): + The number of filter taps. + cutoff_ratio (float): + Cut-off frequency ratio. + beta (float): + Beta coefficient for kaiser window. """ super().__init__() @@ -103,7 +110,8 @@ class PQMF(nn.Layer): def analysis(self, x): """Analysis with PQMF. Args: - x (Tensor): Input tensor (B, 1, T). + x (Tensor): + Input tensor (B, 1, T). Returns: Tensor: Output tensor (B, subbands, T // subbands). """ @@ -113,7 +121,8 @@ class PQMF(nn.Layer): def synthesis(self, x): """Synthesis with PQMF. Args: - x (Tensor): Input tensor (B, subbands, T // subbands). + x (Tensor): + Input tensor (B, subbands, T // subbands). Returns: Tensor: Output tensor (B, 1, T). """ diff --git a/paddlespeech/t2s/modules/predictor/duration_predictor.py b/paddlespeech/t2s/modules/predictor/duration_predictor.py index 33ed575b..cb38fd5b 100644 --- a/paddlespeech/t2s/modules/predictor/duration_predictor.py +++ b/paddlespeech/t2s/modules/predictor/duration_predictor.py @@ -50,12 +50,18 @@ class DurationPredictor(nn.Layer): """Initilize duration predictor module. Args: - idim (int):Input dimension. - n_layers (int, optional): Number of convolutional layers. - n_chans (int, optional): Number of channels of convolutional layers. - kernel_size (int, optional): Kernel size of convolutional layers. - dropout_rate (float, optional): Dropout rate. - offset (float, optional): Offset value to avoid nan in log domain. + idim (int): + Input dimension. + n_layers (int, optional): + Number of convolutional layers. + n_chans (int, optional): + Number of channels of convolutional layers. + kernel_size (int, optional): + Kernel size of convolutional layers. + dropout_rate (float, optional): + Dropout rate. + offset (float, optional): + Offset value to avoid nan in log domain. """ super().__init__() @@ -99,8 +105,10 @@ class DurationPredictor(nn.Layer): def forward(self, xs, x_masks=None): """Calculate forward propagation. Args: - xs(Tensor): Batch of input sequences (B, Tmax, idim). - x_masks(ByteTensor, optional, optional): Batch of masks indicating padded part (B, Tmax). (Default value = None) + xs(Tensor): + Batch of input sequences (B, Tmax, idim). + x_masks(ByteTensor, optional, optional): + Batch of masks indicating padded part (B, Tmax). (Default value = None) Returns: Tensor: Batch of predicted durations in log domain (B, Tmax). @@ -110,8 +118,10 @@ class DurationPredictor(nn.Layer): def inference(self, xs, x_masks=None): """Inference duration. Args: - xs(Tensor): Batch of input sequences (B, Tmax, idim). - x_masks(Tensor(bool), optional, optional): Batch of masks indicating padded part (B, Tmax). (Default value = None) + xs(Tensor): + Batch of input sequences (B, Tmax, idim). + x_masks(Tensor(bool), optional, optional): + Batch of masks indicating padded part (B, Tmax). (Default value = None) Returns: Tensor: Batch of predicted durations in linear domain int64 (B, Tmax). @@ -140,8 +150,10 @@ class DurationPredictorLoss(nn.Layer): """Calculate forward propagation. Args: - outputs(Tensor): Batch of prediction durations in log domain (B, T) - targets(Tensor): Batch of groundtruth durations in linear domain (B, T) + outputs(Tensor): + Batch of prediction durations in log domain (B, T) + targets(Tensor): + Batch of groundtruth durations in linear domain (B, T) Returns: Tensor: Mean squared error loss value. diff --git a/paddlespeech/t2s/modules/predictor/length_regulator.py b/paddlespeech/t2s/modules/predictor/length_regulator.py index e4fbf549..bdfa1839 100644 --- a/paddlespeech/t2s/modules/predictor/length_regulator.py +++ b/paddlespeech/t2s/modules/predictor/length_regulator.py @@ -36,7 +36,8 @@ class LengthRegulator(nn.Layer): """Initilize length regulator module. Args: - pad_value (float, optional): Value used for padding. + pad_value (float, optional): + Value used for padding. """ super().__init__() @@ -97,9 +98,12 @@ class LengthRegulator(nn.Layer): """Calculate forward propagation. Args: - xs (Tensor): Batch of sequences of char or phoneme embeddings (B, Tmax, D). - ds (Tensor(int64)): Batch of durations of each frame (B, T). - alpha (float, optional): Alpha value to control speed of speech. + xs (Tensor): + Batch of sequences of char or phoneme embeddings (B, Tmax, D). + ds (Tensor(int64)): + Batch of durations of each frame (B, T). + alpha (float, optional): + Alpha value to control speed of speech. Returns: Tensor: replicated input tensor based on durations (B, T*, D). diff --git a/paddlespeech/t2s/modules/predictor/variance_predictor.py b/paddlespeech/t2s/modules/predictor/variance_predictor.py index 8afbf257..4c2a67cc 100644 --- a/paddlespeech/t2s/modules/predictor/variance_predictor.py +++ b/paddlespeech/t2s/modules/predictor/variance_predictor.py @@ -43,11 +43,16 @@ class VariancePredictor(nn.Layer): """Initilize duration predictor module. Args: - idim (int): Input dimension. - n_layers (int, optional): Number of convolutional layers. - n_chans (int, optional): Number of channels of convolutional layers. - kernel_size (int, optional): Kernel size of convolutional layers. - dropout_rate (float, optional): Dropout rate. + idim (int): + Input dimension. + n_layers (int, optional): + Number of convolutional layers. + n_chans (int, optional): + Number of channels of convolutional layers. + kernel_size (int, optional): + Kernel size of convolutional layers. + dropout_rate (float, optional): + Dropout rate. """ assert check_argument_types() super().__init__() @@ -74,11 +79,14 @@ class VariancePredictor(nn.Layer): """Calculate forward propagation. Args: - xs (Tensor): Batch of input sequences (B, Tmax, idim). - x_masks (Tensor(bool), optional): Batch of masks indicating padded part (B, Tmax, 1). + xs (Tensor): + Batch of input sequences (B, Tmax, idim). + x_masks (Tensor(bool), optional): + Batch of masks indicating padded part (B, Tmax, 1). Returns: - Tensor: Batch of predicted sequences (B, Tmax, 1). + Tensor: + Batch of predicted sequences (B, Tmax, 1). """ # (B, idim, Tmax) xs = xs.transpose([0, 2, 1]) diff --git a/paddlespeech/t2s/modules/residual_block.py b/paddlespeech/t2s/modules/residual_block.py index 5965a720..f21eedec 100644 --- a/paddlespeech/t2s/modules/residual_block.py +++ b/paddlespeech/t2s/modules/residual_block.py @@ -29,15 +29,24 @@ class WaveNetResidualBlock(nn.Layer): refer to `WaveNet: A Generative Model for Raw Audio `_. Args: - kernel_size (int, optional): Kernel size of the 1D convolution, by default 3 - residual_channels (int, optional): Feature size of the residual output(and also the input), by default 64 - gate_channels (int, optional): Output feature size of the 1D convolution, by default 128 - skip_channels (int, optional): Feature size of the skip output, by default 64 - aux_channels (int, optional): Feature size of the auxiliary input (e.g. spectrogram), by default 80 - dropout (float, optional): Probability of the dropout before the 1D convolution, by default 0. - dilation (int, optional): Dilation of the 1D convolution, by default 1 - bias (bool, optional): Whether to use bias in the 1D convolution, by default True - use_causal_conv (bool, optional): Whether to use causal padding for the 1D convolution, by default False + kernel_size (int, optional): + Kernel size of the 1D convolution, by default 3 + residual_channels (int, optional): + Feature size of the residual output(and also the input), by default 64 + gate_channels (int, optional): + Output feature size of the 1D convolution, by default 128 + skip_channels (int, optional): + Feature size of the skip output, by default 64 + aux_channels (int, optional): + Feature size of the auxiliary input (e.g. spectrogram), by default 80 + dropout (float, optional): + Probability of the dropout before the 1D convolution, by default 0. + dilation (int, optional): + Dilation of the 1D convolution, by default 1 + bias (bool, optional): + Whether to use bias in the 1D convolution, by default True + use_causal_conv (bool, optional): + Whether to use causal padding for the 1D convolution, by default False """ def __init__(self, @@ -81,13 +90,17 @@ class WaveNetResidualBlock(nn.Layer): def forward(self, x, c): """ Args: - x (Tensor): the input features. Shape (N, C_res, T) - c (Tensor): the auxiliary input. Shape (N, C_aux, T) + x (Tensor): + the input features. Shape (N, C_res, T) + c (Tensor): + the auxiliary input. Shape (N, C_aux, T) Returns: - res (Tensor): Shape (N, C_res, T), the residual output, which is used as the + res (Tensor): + Shape (N, C_res, T), the residual output, which is used as the input of the next ResidualBlock in a stack of ResidualBlocks. - skip (Tensor): Shape (N, C_skip, T), the skip output, which is collected among + skip (Tensor): + Shape (N, C_skip, T), the skip output, which is collected among each layer in a stack of ResidualBlocks. """ x_input = x @@ -121,13 +134,20 @@ class HiFiGANResidualBlock(nn.Layer): ): """Initialize HiFiGANResidualBlock module. Args: - kernel_size (int): Kernel size of dilation convolution layer. - channels (int): Number of channels for convolution layer. - dilations (List[int]): List of dilation factors. - use_additional_convs (bool): Whether to use additional convolution layers. - bias (bool): Whether to add bias parameter in convolution layers. - nonlinear_activation (str): Activation function module name. - nonlinear_activation_params (dict): Hyperparameters for activation function. + kernel_size (int): + Kernel size of dilation convolution layer. + channels (int): + Number of channels for convolution layer. + dilations (List[int]): + List of dilation factors. + use_additional_convs (bool): + Whether to use additional convolution layers. + bias (bool): + Whether to add bias parameter in convolution layers. + nonlinear_activation (str): + Activation function module name. + nonlinear_activation_params (dict): + Hyperparameters for activation function. """ super().__init__() @@ -167,7 +187,8 @@ class HiFiGANResidualBlock(nn.Layer): def forward(self, x): """Calculate forward propagation. Args: - x (Tensor): Input tensor (B, channels, T). + x (Tensor): + Input tensor (B, channels, T). Returns: Tensor: Output tensor (B, channels, T). """ diff --git a/paddlespeech/t2s/modules/residual_stack.py b/paddlespeech/t2s/modules/residual_stack.py index 0d949b56..98f5db3c 100644 --- a/paddlespeech/t2s/modules/residual_stack.py +++ b/paddlespeech/t2s/modules/residual_stack.py @@ -39,15 +39,24 @@ class ResidualStack(nn.Layer): """Initialize ResidualStack module. Args: - kernel_size (int): Kernel size of dilation convolution layer. - channels (int): Number of channels of convolution layers. - dilation (int): Dilation factor. - bias (bool): Whether to add bias parameter in convolution layers. - nonlinear_activation (str): Activation function module name. - nonlinear_activation_params (Dict[str,Any]): Hyperparameters for activation function. - pad (str): Padding function module name before dilated convolution layer. - pad_params (Dict[str, Any]): Hyperparameters for padding function. - use_causal_conv (bool): Whether to use causal convolution. + kernel_size (int): + Kernel size of dilation convolution layer. + channels (int): + Number of channels of convolution layers. + dilation (int): + Dilation factor. + bias (bool): + Whether to add bias parameter in convolution layers. + nonlinear_activation (str): + Activation function module name. + nonlinear_activation_params (Dict[str,Any]): + Hyperparameters for activation function. + pad (str): + Padding function module name before dilated convolution layer. + pad_params (Dict[str, Any]): + Hyperparameters for padding function. + use_causal_conv (bool): + Whether to use causal convolution. """ super().__init__() # for compatibility @@ -95,7 +104,8 @@ class ResidualStack(nn.Layer): """Calculate forward propagation. Args: - c (Tensor): Input tensor (B, channels, T). + c (Tensor): + Input tensor (B, channels, T). Returns: Tensor: Output tensor (B, chennels, T). """ diff --git a/paddlespeech/t2s/modules/style_encoder.py b/paddlespeech/t2s/modules/style_encoder.py index 49091eac..b558e769 100644 --- a/paddlespeech/t2s/modules/style_encoder.py +++ b/paddlespeech/t2s/modules/style_encoder.py @@ -32,16 +32,26 @@ class StyleEncoder(nn.Layer): Speech Synthesis`: https://arxiv.org/abs/1803.09017 Args: - idim (int, optional): Dimension of the input mel-spectrogram. - gst_tokens (int, optional): The number of GST embeddings. - gst_token_dim (int, optional): Dimension of each GST embedding. - gst_heads (int, optional): The number of heads in GST multihead attention. - conv_layers (int, optional): The number of conv layers in the reference encoder. - conv_chans_list (Sequence[int], optional): List of the number of channels of conv layers in the referece encoder. - conv_kernel_size (int, optional): Kernal size of conv layers in the reference encoder. - conv_stride (int, optional): Stride size of conv layers in the reference encoder. - gru_layers (int, optional): The number of GRU layers in the reference encoder. - gru_units (int, optional):The number of GRU units in the reference encoder. + idim (int, optional): + Dimension of the input mel-spectrogram. + gst_tokens (int, optional): + The number of GST embeddings. + gst_token_dim (int, optional): + Dimension of each GST embedding. + gst_heads (int, optional): + The number of heads in GST multihead attention. + conv_layers (int, optional): + The number of conv layers in the reference encoder. + conv_chans_list (Sequence[int], optional): + List of the number of channels of conv layers in the referece encoder. + conv_kernel_size (int, optional): + Kernal size of conv layers in the reference encoder. + conv_stride (int, optional): + Stride size of conv layers in the reference encoder. + gru_layers (int, optional): + The number of GRU layers in the reference encoder. + gru_units (int, optional): + The number of GRU units in the reference encoder. Todo: * Support manual weight specification in inference. @@ -82,7 +92,8 @@ class StyleEncoder(nn.Layer): """Calculate forward propagation. Args: - speech (Tensor): Batch of padded target features (B, Lmax, odim). + speech (Tensor): + Batch of padded target features (B, Lmax, odim). Returns: Tensor: Style token embeddings (B, token_dim). @@ -104,13 +115,20 @@ class ReferenceEncoder(nn.Layer): Speech Synthesis`: https://arxiv.org/abs/1803.09017 Args: - idim (int, optional): Dimension of the input mel-spectrogram. - conv_layers (int, optional): The number of conv layers in the reference encoder. - conv_chans_list: (Sequence[int], optional): List of the number of channels of conv layers in the referece encoder. - conv_kernel_size (int, optional): Kernal size of conv layers in the reference encoder. - conv_stride (int, optional): Stride size of conv layers in the reference encoder. - gru_layers (int, optional): The number of GRU layers in the reference encoder. - gru_units (int, optional): The number of GRU units in the reference encoder. + idim (int, optional): + Dimension of the input mel-spectrogram. + conv_layers (int, optional): + The number of conv layers in the reference encoder. + conv_chans_list: (Sequence[int], optional): + List of the number of channels of conv layers in the referece encoder. + conv_kernel_size (int, optional): + Kernal size of conv layers in the reference encoder. + conv_stride (int, optional): + Stride size of conv layers in the reference encoder. + gru_layers (int, optional): + The number of GRU layers in the reference encoder. + gru_units (int, optional): + The number of GRU units in the reference encoder. """ @@ -168,7 +186,8 @@ class ReferenceEncoder(nn.Layer): def forward(self, speech: paddle.Tensor) -> paddle.Tensor: """Calculate forward propagation. Args: - speech (Tensor): Batch of padded target features (B, Lmax, idim). + speech (Tensor): + Batch of padded target features (B, Lmax, idim). Returns: Tensor: Reference embedding (B, gru_units) @@ -200,11 +219,16 @@ class StyleTokenLayer(nn.Layer): .. _`Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech Synthesis`: https://arxiv.org/abs/1803.09017 Args: - ref_embed_dim (int, optional): Dimension of the input reference embedding. - gst_tokens (int, optional): The number of GST embeddings. - gst_token_dim (int, optional): Dimension of each GST embedding. - gst_heads (int, optional): The number of heads in GST multihead attention. - dropout_rate (float, optional): Dropout rate in multi-head attention. + ref_embed_dim (int, optional): + Dimension of the input reference embedding. + gst_tokens (int, optional): + The number of GST embeddings. + gst_token_dim (int, optional): + Dimension of each GST embedding. + gst_heads (int, optional): + The number of heads in GST multihead attention. + dropout_rate (float, optional): + Dropout rate in multi-head attention. """ @@ -236,7 +260,8 @@ class StyleTokenLayer(nn.Layer): """Calculate forward propagation. Args: - ref_embs (Tensor): Reference embeddings (B, ref_embed_dim). + ref_embs (Tensor): + Reference embeddings (B, ref_embed_dim). Returns: Tensor: Style token embeddings (B, gst_token_dim). diff --git a/paddlespeech/t2s/modules/tacotron2/attentions.py b/paddlespeech/t2s/modules/tacotron2/attentions.py index a6fde742..cdaef460 100644 --- a/paddlespeech/t2s/modules/tacotron2/attentions.py +++ b/paddlespeech/t2s/modules/tacotron2/attentions.py @@ -31,10 +31,14 @@ def _apply_attention_constraint(e, Text-to-Speech with Convolutional Sequence Learning`_. Args: - e(Tensor): Attention energy before applying softmax (1, T). - last_attended_idx(int): The index of the inputs of the last attended [0, T]. - backward_window(int, optional, optional): Backward window size in attention constraint. (Default value = 1) - forward_window(int, optional, optional): Forward window size in attetion constraint. (Default value = 3) + e(Tensor): + Attention energy before applying softmax (1, T). + last_attended_idx(int): + The index of the inputs of the last attended [0, T]. + backward_window(int, optional, optional): + Backward window size in attention constraint. (Default value = 1) + forward_window(int, optional, optional): + Forward window size in attetion constraint. (Default value = 3) Returns: Tensor: Monotonic constrained attention energy (1, T). @@ -62,12 +66,18 @@ class AttLoc(nn.Layer): (https://arxiv.org/pdf/1506.07503.pdf) Args: - eprojs (int): projection-units of encoder - dunits (int): units of decoder - att_dim (int): attention dimension - aconv_chans (int): channels of attention convolution - aconv_filts (int): filter size of attention convolution - han_mode (bool): flag to swith on mode of hierarchical attention and not store pre_compute_enc_h + eprojs (int): + projection-units of encoder + dunits (int): + units of decoder + att_dim (int): + attention dimension + aconv_chans (int): + channels of attention convolution + aconv_filts (int): + filter size of attention convolution + han_mode (bool): + flag to swith on mode of hierarchical attention and not store pre_compute_enc_h """ def __init__(self, @@ -117,18 +127,29 @@ class AttLoc(nn.Layer): forward_window=3, ): """Calculate AttLoc forward propagation. Args: - enc_hs_pad(Tensor): padded encoder hidden state (B, T_max, D_enc) - enc_hs_len(Tensor): padded encoder hidden state length (B) - dec_z(Tensor dec_z): decoder hidden state (B, D_dec) - att_prev(Tensor): previous attention weight (B, T_max) - scaling(float, optional): scaling parameter before applying softmax (Default value = 2.0) - forward_window(Tensor, optional): forward window size when constraining attention (Default value = 3) - last_attended_idx(int, optional): index of the inputs of the last attended (Default value = None) - backward_window(int, optional): backward window size in attention constraint (Default value = 1) - forward_window(int, optional): forward window size in attetion constraint (Default value = 3) + enc_hs_pad(Tensor): + padded encoder hidden state (B, T_max, D_enc) + enc_hs_len(Tensor): + padded encoder hidden state length (B) + dec_z(Tensor dec_z): + decoder hidden state (B, D_dec) + att_prev(Tensor): + previous attention weight (B, T_max) + scaling(float, optional): + scaling parameter before applying softmax (Default value = 2.0) + forward_window(Tensor, optional): + forward window size when constraining attention (Default value = 3) + last_attended_idx(int, optional): + index of the inputs of the last attended (Default value = None) + backward_window(int, optional): + backward window size in attention constraint (Default value = 1) + forward_window(int, optional): + forward window size in attetion constraint (Default value = 3) Returns: - Tensor: attention weighted encoder state (B, D_enc) - Tensor: previous attention weights (B, T_max) + Tensor: + attention weighted encoder state (B, D_enc) + Tensor: + previous attention weights (B, T_max) """ batch = paddle.shape(enc_hs_pad)[0] # pre-compute all h outside the decoder loop @@ -192,11 +213,16 @@ class AttForward(nn.Layer): (https://arxiv.org/pdf/1807.06736.pdf) Args: - eprojs (int): projection-units of encoder - dunits (int): units of decoder - att_dim (int): attention dimension - aconv_chans (int): channels of attention convolution - aconv_filts (int): filter size of attention convolution + eprojs (int): + projection-units of encoder + dunits (int): + units of decoder + att_dim (int): + attention dimension + aconv_chans (int): + channels of attention convolution + aconv_filts (int): + filter size of attention convolution """ def __init__(self, eprojs, dunits, att_dim, aconv_chans, aconv_filts): @@ -239,18 +265,28 @@ class AttForward(nn.Layer): """Calculate AttForward forward propagation. Args: - enc_hs_pad(Tensor): padded encoder hidden state (B, T_max, D_enc) - enc_hs_len(list): padded encoder hidden state length (B,) - dec_z(Tensor): decoder hidden state (B, D_dec) - att_prev(Tensor): attention weights of previous step (B, T_max) - scaling(float, optional): scaling parameter before applying softmax (Default value = 1.0) - last_attended_idx(int, optional): index of the inputs of the last attended (Default value = None) - backward_window(int, optional): backward window size in attention constraint (Default value = 1) - forward_window(int, optional): (Default value = 3) + enc_hs_pad(Tensor): + padded encoder hidden state (B, T_max, D_enc) + enc_hs_len(list): + padded encoder hidden state length (B,) + dec_z(Tensor): + decoder hidden state (B, D_dec) + att_prev(Tensor): + attention weights of previous step (B, T_max) + scaling(float, optional): + scaling parameter before applying softmax (Default value = 1.0) + last_attended_idx(int, optional): + index of the inputs of the last attended (Default value = None) + backward_window(int, optional): + backward window size in attention constraint (Default value = 1) + forward_window(int, optional): + (Default value = 3) Returns: - Tensor: attention weighted encoder state (B, D_enc) - Tensor: previous attention weights (B, T_max) + Tensor: + attention weighted encoder state (B, D_enc) + Tensor: + previous attention weights (B, T_max) """ batch = len(enc_hs_pad) # pre-compute all h outside the decoder loop @@ -321,12 +357,18 @@ class AttForwardTA(nn.Layer): (https://arxiv.org/pdf/1807.06736.pdf) Args: - eunits (int): units of encoder - dunits (int): units of decoder - att_dim (int): attention dimension - aconv_chans (int): channels of attention convolution - aconv_filts (int): filter size of attention convolution - odim (int): output dimension + eunits (int): + units of encoder + dunits (int): + units of decoder + att_dim (int): + attention dimension + aconv_chans (int): + channels of attention convolution + aconv_filts (int): + filter size of attention convolution + odim (int): + output dimension """ def __init__(self, eunits, dunits, att_dim, aconv_chans, aconv_filts, odim): @@ -372,19 +414,30 @@ class AttForwardTA(nn.Layer): """Calculate AttForwardTA forward propagation. Args: - enc_hs_pad(Tensor): padded encoder hidden state (B, Tmax, eunits) - enc_hs_len(list Tensor): padded encoder hidden state length (B,) - dec_z(Tensor): decoder hidden state (B, dunits) - att_prev(Tensor): attention weights of previous step (B, T_max) - out_prev(Tensor): decoder outputs of previous step (B, odim) - scaling(float, optional): scaling parameter before applying softmax (Default value = 1.0) - last_attended_idx(int, optional): index of the inputs of the last attended (Default value = None) - backward_window(int, optional): backward window size in attention constraint (Default value = 1) - forward_window(int, optional): (Default value = 3) + enc_hs_pad(Tensor): + padded encoder hidden state (B, Tmax, eunits) + enc_hs_len(list Tensor): + padded encoder hidden state length (B,) + dec_z(Tensor): + decoder hidden state (B, dunits) + att_prev(Tensor): + attention weights of previous step (B, T_max) + out_prev(Tensor): + decoder outputs of previous step (B, odim) + scaling(float, optional): + scaling parameter before applying softmax (Default value = 1.0) + last_attended_idx(int, optional): + index of the inputs of the last attended (Default value = None) + backward_window(int, optional): + backward window size in attention constraint (Default value = 1) + forward_window(int, optional): + (Default value = 3) Returns: - Tensor: attention weighted encoder state (B, dunits) - Tensor: previous attention weights (B, Tmax) + Tensor: + attention weighted encoder state (B, dunits) + Tensor: + previous attention weights (B, Tmax) """ batch = len(enc_hs_pad) # pre-compute all h outside the decoder loop diff --git a/paddlespeech/t2s/modules/tacotron2/decoder.py b/paddlespeech/t2s/modules/tacotron2/decoder.py index ebdfa387..41c94b63 100644 --- a/paddlespeech/t2s/modules/tacotron2/decoder.py +++ b/paddlespeech/t2s/modules/tacotron2/decoder.py @@ -45,10 +45,14 @@ class Prenet(nn.Layer): """Initialize prenet module. Args: - idim (int): Dimension of the inputs. - odim (int): Dimension of the outputs. - n_layers (int, optional): The number of prenet layers. - n_units (int, optional): The number of prenet units. + idim (int): + Dimension of the inputs. + odim (int): + Dimension of the outputs. + n_layers (int, optional): + The number of prenet layers. + n_units (int, optional): + The number of prenet units. """ super().__init__() self.dropout_rate = dropout_rate @@ -62,7 +66,8 @@ class Prenet(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Batch of input tensors (B, ..., idim). + x (Tensor): + Batch of input tensors (B, ..., idim). Returns: Tensor: Batch of output tensors (B, ..., odim). @@ -212,7 +217,8 @@ class ZoneOutCell(nn.Layer): """Calculate forward propagation. Args: - inputs (Tensor): Batch of input tensor (B, input_size). + inputs (Tensor): + Batch of input tensor (B, input_size). hidden (tuple): - Tensor: Batch of initial hidden states (B, hidden_size). - Tensor: Batch of initial cell states (B, hidden_size). @@ -277,26 +283,39 @@ class Decoder(nn.Layer): """Initialize Tacotron2 decoder module. Args: - idim (int): Dimension of the inputs. - odim (int): Dimension of the outputs. - att (nn.Layer): Instance of attention class. - dlayers (int, optional): The number of decoder lstm layers. - dunits (int, optional): The number of decoder lstm units. - prenet_layers (int, optional): The number of prenet layers. - prenet_units (int, optional): The number of prenet units. - postnet_layers (int, optional): The number of postnet layers. - postnet_filts (int, optional): The number of postnet filter size. - postnet_chans (int, optional): The number of postnet filter channels. - output_activation_fn (nn.Layer, optional): Activation function for outputs. - cumulate_att_w (bool, optional): Whether to cumulate previous attention weight. - use_batch_norm (bool, optional): Whether to use batch normalization. - use_concate : bool, optional + idim (int): + Dimension of the inputs. + odim (int): + Dimension of the outputs. + att (nn.Layer): + Instance of attention class. + dlayers (int, optional): + The number of decoder lstm layers. + dunits (int, optional): + The number of decoder lstm units. + prenet_layers (int, optional): + The number of prenet layers. + prenet_units (int, optional): + The number of prenet units. + postnet_layers (int, optional): + The number of postnet layers. + postnet_filts (int, optional): + The number of postnet filter size. + postnet_chans (int, optional): + The number of postnet filter channels. + output_activation_fn (nn.Layer, optional): + Activation function for outputs. + cumulate_att_w (bool, optional): + Whether to cumulate previous attention weight. + use_batch_norm (bool, optional): + Whether to use batch normalization. + use_concate (bool, optional): Whether to concatenate encoder embedding with decoder lstm outputs. - dropout_rate : float, optional + dropout_rate (float, optional): Dropout rate. - zoneout_rate : float, optional + zoneout_rate (float, optional): Zoneout rate. - reduction_factor : int, optional + reduction_factor (int, optional): Reduction factor. """ super().__init__() @@ -363,15 +382,22 @@ class Decoder(nn.Layer): """Calculate forward propagation. Args: - hs (Tensor): Batch of the sequences of padded hidden states (B, Tmax, idim). - hlens (Tensor(int64) padded): Batch of lengths of each input batch (B,). - ys (Tensor): Batch of the sequences of padded target features (B, Lmax, odim). + hs (Tensor): + Batch of the sequences of padded hidden states (B, Tmax, idim). + hlens (Tensor(int64) padded): + Batch of lengths of each input batch (B,). + ys (Tensor): + Batch of the sequences of padded target features (B, Lmax, odim). Returns: - Tensor: Batch of output tensors after postnet (B, Lmax, odim). - Tensor: Batch of output tensors before postnet (B, Lmax, odim). - Tensor: Batch of logits of stop prediction (B, Lmax). - Tensor: Batch of attention weights (B, Lmax, Tmax). + Tensor: + Batch of output tensors after postnet (B, Lmax, odim). + Tensor: + Batch of output tensors before postnet (B, Lmax, odim). + Tensor: + Batch of logits of stop prediction (B, Lmax). + Tensor: + Batch of attention weights (B, Lmax, Tmax). Note: This computation is performed in teacher-forcing manner. @@ -471,20 +497,30 @@ class Decoder(nn.Layer): forward_window=None, ): """Generate the sequence of features given the sequences of characters. Args: - h(Tensor): Input sequence of encoder hidden states (T, C). - threshold(float, optional, optional): Threshold to stop generation. (Default value = 0.5) - minlenratio(float, optional, optional): Minimum length ratio. If set to 1.0 and the length of input is 10, + h(Tensor): + Input sequence of encoder hidden states (T, C). + threshold(float, optional, optional): + Threshold to stop generation. (Default value = 0.5) + minlenratio(float, optional, optional): + Minimum length ratio. If set to 1.0 and the length of input is 10, the minimum length of outputs will be 10 * 1 = 10. (Default value = 0.0) - maxlenratio(float, optional, optional): Minimum length ratio. If set to 10 and the length of input is 10, + maxlenratio(float, optional, optional): + Minimum length ratio. If set to 10 and the length of input is 10, the maximum length of outputs will be 10 * 10 = 100. (Default value = 0.0) - use_att_constraint(bool, optional): Whether to apply attention constraint introduced in `Deep Voice 3`_. (Default value = False) - backward_window(int, optional): Backward window size in attention constraint. (Default value = None) - forward_window(int, optional): (Default value = None) + use_att_constraint(bool, optional): + Whether to apply attention constraint introduced in `Deep Voice 3`_. (Default value = False) + backward_window(int, optional): + Backward window size in attention constraint. (Default value = None) + forward_window(int, optional): + (Default value = None) Returns: - Tensor: Output sequence of features (L, odim). - Tensor: Output sequence of stop probabilities (L,). - Tensor: Attention weights (L, T). + Tensor: + Output sequence of features (L, odim). + Tensor: + Output sequence of stop probabilities (L,). + Tensor: + Attention weights (L, T). Note: This computation is performed in auto-regressive manner. @@ -625,9 +661,12 @@ class Decoder(nn.Layer): """Calculate all of the attention weights. Args: - hs (Tensor): Batch of the sequences of padded hidden states (B, Tmax, idim). - hlens (Tensor(int64)): Batch of lengths of each input batch (B,). - ys (Tensor): Batch of the sequences of padded target features (B, Lmax, odim). + hs (Tensor): + Batch of the sequences of padded hidden states (B, Tmax, idim). + hlens (Tensor(int64)): + Batch of lengths of each input batch (B,). + ys (Tensor): + Batch of the sequences of padded target features (B, Lmax, odim). Returns: numpy.ndarray: diff --git a/paddlespeech/t2s/modules/tacotron2/encoder.py b/paddlespeech/t2s/modules/tacotron2/encoder.py index db102a11..224c8240 100644 --- a/paddlespeech/t2s/modules/tacotron2/encoder.py +++ b/paddlespeech/t2s/modules/tacotron2/encoder.py @@ -46,17 +46,28 @@ class Encoder(nn.Layer): padding_idx=0, ): """Initialize Tacotron2 encoder module. Args: - idim (int): Dimension of the inputs. - input_layer (str): Input layer type. - embed_dim (int, optional): Dimension of character embedding. - elayers (int, optional): The number of encoder blstm layers. - eunits (int, optional): The number of encoder blstm units. - econv_layers (int, optional): The number of encoder conv layers. - econv_filts (int, optional): The number of encoder conv filter size. - econv_chans (int, optional): The number of encoder conv filter channels. - use_batch_norm (bool, optional): Whether to use batch normalization. - use_residual (bool, optional): Whether to use residual connection. - dropout_rate (float, optional): Dropout rate. + idim (int): + Dimension of the inputs. + input_layer (str): + Input layer type. + embed_dim (int, optional): + Dimension of character embedding. + elayers (int, optional): + The number of encoder blstm layers. + eunits (int, optional): + The number of encoder blstm units. + econv_layers (int, optional): + The number of encoder conv layers. + econv_filts (int, optional): + The number of encoder conv filter size. + econv_chans (int, optional): + The number of encoder conv filter channels. + use_batch_norm (bool, optional): + Whether to use batch normalization. + use_residual (bool, optional): + Whether to use residual connection. + dropout_rate (float, optional): + Dropout rate. """ super().__init__() @@ -127,14 +138,18 @@ class Encoder(nn.Layer): """Calculate forward propagation. Args: - xs (Tensor): Batch of the padded sequence. Either character ids (B, Tmax) + xs (Tensor): + Batch of the padded sequence. Either character ids (B, Tmax) or acoustic feature (B, Tmax, idim * encoder_reduction_factor). Padded value should be 0. - ilens (Tensor(int64)): Batch of lengths of each input batch (B,). + ilens (Tensor(int64)): + Batch of lengths of each input batch (B,). Returns: - Tensor: Batch of the sequences of encoder states(B, Tmax, eunits). - Tensor(int64): Batch of lengths of each sequence (B,) + Tensor: + Batch of the sequences of encoder states(B, Tmax, eunits). + Tensor(int64): + Batch of lengths of each sequence (B,) """ xs = self.embed(xs).transpose([0, 2, 1]) if self.convs is not None: @@ -161,8 +176,8 @@ class Encoder(nn.Layer): """Inference. Args: - x (Tensor): The sequeunce of character ids (T,) - or acoustic feature (T, idim * encoder_reduction_factor). + x (Tensor): + The sequeunce of character ids (T,) or acoustic feature (T, idim * encoder_reduction_factor). Returns: Tensor: The sequences of encoder states(T, eunits). diff --git a/paddlespeech/t2s/modules/tade_res_block.py b/paddlespeech/t2s/modules/tade_res_block.py index b2275e23..799cbe9f 100644 --- a/paddlespeech/t2s/modules/tade_res_block.py +++ b/paddlespeech/t2s/modules/tade_res_block.py @@ -60,11 +60,15 @@ class TADELayer(nn.Layer): def forward(self, x, c): """Calculate forward propagation. Args: - x (Tensor): Input tensor (B, in_channels, T). - c (Tensor): Auxiliary input tensor (B, aux_channels, T). + x (Tensor): + Input tensor (B, in_channels, T). + c (Tensor): + Auxiliary input tensor (B, aux_channels, T). Returns: - Tensor: Output tensor (B, in_channels, T * upsample_factor). - Tensor: Upsampled aux tensor (B, in_channels, T * upsample_factor). + Tensor: + Output tensor (B, in_channels, T * upsample_factor). + Tensor: + Upsampled aux tensor (B, in_channels, T * upsample_factor). """ x = self.norm(x) @@ -138,11 +142,15 @@ class TADEResBlock(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Input tensor (B, in_channels, T). - c (Tensor): Auxiliary input tensor (B, aux_channels, T). + x (Tensor): + Input tensor (B, in_channels, T). + c (Tensor): + Auxiliary input tensor (B, aux_channels, T). Returns: - Tensor: Output tensor (B, in_channels, T * upsample_factor). - Tensor: Upsampled auxirialy tensor (B, in_channels, T * upsample_factor). + Tensor: + Output tensor (B, in_channels, T * upsample_factor). + Tensor: + Upsampled auxirialy tensor (B, in_channels, T * upsample_factor). """ residual = x x, c = self.tade1(x, c) diff --git a/paddlespeech/t2s/modules/transformer/attention.py b/paddlespeech/t2s/modules/transformer/attention.py index 538a36b6..d7a03244 100644 --- a/paddlespeech/t2s/modules/transformer/attention.py +++ b/paddlespeech/t2s/modules/transformer/attention.py @@ -25,9 +25,12 @@ from paddlespeech.t2s.modules.masked_fill import masked_fill class MultiHeadedAttention(nn.Layer): """Multi-Head Attention layer. Args: - n_head (int): The number of heads. - n_feat (int): The number of features. - dropout_rate (float): Dropout rate. + n_head (int): + The number of heads. + n_feat (int): + The number of features. + dropout_rate (float): + Dropout rate. """ def __init__(self, n_head, n_feat, dropout_rate): @@ -48,14 +51,20 @@ class MultiHeadedAttention(nn.Layer): """Transform query, key and value. Args: - query(Tensor): query tensor (#batch, time1, size). - key(Tensor): Key tensor (#batch, time2, size). - value(Tensor): Value tensor (#batch, time2, size). + query(Tensor): + query tensor (#batch, time1, size). + key(Tensor): + Key tensor (#batch, time2, size). + value(Tensor): + Value tensor (#batch, time2, size). Returns: - Tensor: Transformed query tensor (#batch, n_head, time1, d_k). - Tensor: Transformed key tensor (#batch, n_head, time2, d_k). - Tensor: Transformed value tensor (#batch, n_head, time2, d_k). + Tensor: + Transformed query tensor (#batch, n_head, time1, d_k). + Tensor: + Transformed key tensor (#batch, n_head, time2, d_k). + Tensor: + Transformed value tensor (#batch, n_head, time2, d_k). """ n_batch = paddle.shape(query)[0] @@ -77,9 +86,12 @@ class MultiHeadedAttention(nn.Layer): """Compute attention context vector. Args: - value(Tensor): Transformed value (#batch, n_head, time2, d_k). - scores(Tensor): Attention score (#batch, n_head, time1, time2). - mask(Tensor, optional): Mask (#batch, 1, time2) or (#batch, time1, time2). (Default value = None) + value(Tensor): + Transformed value (#batch, n_head, time2, d_k). + scores(Tensor): + Attention score (#batch, n_head, time1, time2). + mask(Tensor, optional): + Mask (#batch, 1, time2) or (#batch, time1, time2). (Default value = None) Returns: Tensor: Transformed value (#batch, time1, d_model) weighted by the attention score (#batch, time1, time2). @@ -113,10 +125,14 @@ class MultiHeadedAttention(nn.Layer): """Compute scaled dot product attention. Args: - query(Tensor): Query tensor (#batch, time1, size). - key(Tensor): Key tensor (#batch, time2, size). - value(Tensor): Value tensor (#batch, time2, size). - mask(Tensor, optional): Mask tensor (#batch, 1, time2) or (#batch, time1, time2). (Default value = None) + query(Tensor): + Query tensor (#batch, time1, size). + key(Tensor): + Key tensor (#batch, time2, size). + value(Tensor): + Value tensor (#batch, time2, size). + mask(Tensor, optional): + Mask tensor (#batch, 1, time2) or (#batch, time1, time2). (Default value = None) Returns: Tensor: Output tensor (#batch, time1, d_model). @@ -134,10 +150,14 @@ class RelPositionMultiHeadedAttention(MultiHeadedAttention): Paper: https://arxiv.org/abs/1901.02860 Args: - n_head (int): The number of heads. - n_feat (int): The number of features. - dropout_rate (float): Dropout rate. - zero_triu (bool): Whether to zero the upper triangular part of attention matrix. + n_head (int): + The number of heads. + n_feat (int): + The number of features. + dropout_rate (float): + Dropout rate. + zero_triu (bool): + Whether to zero the upper triangular part of attention matrix. """ def __init__(self, n_head, n_feat, dropout_rate, zero_triu=False): @@ -161,10 +181,11 @@ class RelPositionMultiHeadedAttention(MultiHeadedAttention): def rel_shift(self, x): """Compute relative positional encoding. Args: - x(Tensor): Input tensor (batch, head, time1, 2*time1-1). + x(Tensor): + Input tensor (batch, head, time1, 2*time1-1). Returns: - Tensor:Output tensor. + Tensor: Output tensor. """ b, h, t1, t2 = paddle.shape(x) zero_pad = paddle.zeros((b, h, t1, 1)) @@ -183,11 +204,16 @@ class RelPositionMultiHeadedAttention(MultiHeadedAttention): """Compute 'Scaled Dot Product Attention' with rel. positional encoding. Args: - query(Tensor): Query tensor (#batch, time1, size). - key(Tensor): Key tensor (#batch, time2, size). - value(Tensor): Value tensor (#batch, time2, size). - pos_emb(Tensor): Positional embedding tensor (#batch, 2*time1-1, size). - mask(Tensor): Mask tensor (#batch, 1, time2) or (#batch, time1, time2). + query(Tensor): + Query tensor (#batch, time1, size). + key(Tensor): + Key tensor (#batch, time2, size). + value(Tensor): + Value tensor (#batch, time2, size). + pos_emb(Tensor): + Positional embedding tensor (#batch, 2*time1-1, size). + mask(Tensor): + Mask tensor (#batch, 1, time2) or (#batch, time1, time2). Returns: Tensor: Output tensor (#batch, time1, d_model). @@ -228,10 +254,14 @@ class LegacyRelPositionMultiHeadedAttention(MultiHeadedAttention): Paper: https://arxiv.org/abs/1901.02860 Args: - n_head (int): The number of heads. - n_feat (int): The number of features. - dropout_rate (float): Dropout rate. - zero_triu (bool): Whether to zero the upper triangular part of attention matrix. + n_head (int): + The number of heads. + n_feat (int): + The number of features. + dropout_rate (float): + Dropout rate. + zero_triu (bool): + Whether to zero the upper triangular part of attention matrix. """ def __init__(self, n_head, n_feat, dropout_rate, zero_triu=False): @@ -255,8 +285,8 @@ class LegacyRelPositionMultiHeadedAttention(MultiHeadedAttention): def rel_shift(self, x): """Compute relative positional encoding. Args: - x(Tensor): Input tensor (batch, head, time1, time2). - + x(Tensor): + Input tensor (batch, head, time1, time2). Returns: Tensor:Output tensor. """ diff --git a/paddlespeech/t2s/modules/transformer/decoder.py b/paddlespeech/t2s/modules/transformer/decoder.py index a8db7345..e6848767 100644 --- a/paddlespeech/t2s/modules/transformer/decoder.py +++ b/paddlespeech/t2s/modules/transformer/decoder.py @@ -37,28 +37,46 @@ class Decoder(nn.Layer): """Transfomer decoder module. Args: - odim (int): Output diminsion. - self_attention_layer_type (str): Self-attention layer type. - attention_dim (int): Dimention of attention. - attention_heads (int): The number of heads of multi head attention. - conv_wshare (int): The number of kernel of convolution. Only used in + odim (int): + Output diminsion. + self_attention_layer_type (str): + Self-attention layer type. + attention_dim (int): + Dimention of attention. + attention_heads (int): + The number of heads of multi head attention. + conv_wshare (int): + The number of kernel of convolution. Only used in self_attention_layer_type == "lightconv*" or "dynamiconv*". - conv_kernel_length (Union[int, str]):Kernel size str of convolution + conv_kernel_length (Union[int, str]): + Kernel size str of convolution (e.g. 71_71_71_71_71_71). Only used in self_attention_layer_type == "lightconv*" or "dynamiconv*". - conv_usebias (bool): Whether to use bias in convolution. Only used in + conv_usebias (bool): + Whether to use bias in convolution. Only used in self_attention_layer_type == "lightconv*" or "dynamiconv*". - linear_units(int): The number of units of position-wise feed forward. - num_blocks (int): The number of decoder blocks. - dropout_rate (float): Dropout rate. - positional_dropout_rate (float): Dropout rate after adding positional encoding. - self_attention_dropout_rate (float): Dropout rate in self-attention. - src_attention_dropout_rate (float): Dropout rate in source-attention. - input_layer (Union[str, nn.Layer]): Input layer type. - use_output_layer (bool): Whether to use output layer. - pos_enc_class (nn.Layer): Positional encoding module class. + linear_units(int): + The number of units of position-wise feed forward. + num_blocks (int): + The number of decoder blocks. + dropout_rate (float): + Dropout rate. + positional_dropout_rate (float): + Dropout rate after adding positional encoding. + self_attention_dropout_rate (float): + Dropout rate in self-attention. + src_attention_dropout_rate (float): + Dropout rate in source-attention. + input_layer (Union[str, nn.Layer]): + Input layer type. + use_output_layer (bool): + Whether to use output layer. + pos_enc_class (nn.Layer): + Positional encoding module class. `PositionalEncoding `or `ScaledPositionalEncoding` - normalize_before (bool): Whether to use layer_norm before the first block. - concat_after (bool): Whether to concat attention layer's input and output. + normalize_before (bool): + Whether to use layer_norm before the first block. + concat_after (bool): + Whether to concat attention layer's input and output. if True, additional linear will be applied. i.e. x -> x + linear(concat(x, att(x))) if False, no additional linear will be applied. i.e. x -> x + att(x) @@ -143,17 +161,22 @@ class Decoder(nn.Layer): def forward(self, tgt, tgt_mask, memory, memory_mask): """Forward decoder. Args: - tgt(Tensor): Input token ids, int64 (#batch, maxlen_out) if input_layer == "embed". + tgt(Tensor): + Input token ids, int64 (#batch, maxlen_out) if input_layer == "embed". In the other case, input tensor (#batch, maxlen_out, odim). - tgt_mask(Tensor): Input token mask (#batch, maxlen_out). - memory(Tensor): Encoded memory, float32 (#batch, maxlen_in, feat). - memory_mask(Tensor): Encoded memory mask (#batch, maxlen_in). + tgt_mask(Tensor): + Input token mask (#batch, maxlen_out). + memory(Tensor): + Encoded memory, float32 (#batch, maxlen_in, feat). + memory_mask(Tensor): + Encoded memory mask (#batch, maxlen_in). Returns: Tensor: Decoded token score before softmax (#batch, maxlen_out, odim) if use_output_layer is True. In the other case,final block outputs (#batch, maxlen_out, attention_dim). - Tensor: Score mask before softmax (#batch, maxlen_out). + Tensor: + Score mask before softmax (#batch, maxlen_out). """ x = self.embed(tgt) @@ -169,14 +192,20 @@ class Decoder(nn.Layer): """Forward one step. Args: - tgt(Tensor): Input token ids, int64 (#batch, maxlen_out). - tgt_mask(Tensor): Input token mask (#batch, maxlen_out). - memory(Tensor): Encoded memory, float32 (#batch, maxlen_in, feat). - cache((List[Tensor]), optional): List of cached tensors. (Default value = None) + tgt(Tensor): + Input token ids, int64 (#batch, maxlen_out). + tgt_mask(Tensor): + Input token mask (#batch, maxlen_out). + memory(Tensor): + Encoded memory, float32 (#batch, maxlen_in, feat). + cache((List[Tensor]), optional): + List of cached tensors. (Default value = None) Returns: - Tensor: Output tensor (batch, maxlen_out, odim). - List[Tensor]: List of cache tensors of each decoder layer. + Tensor: + Output tensor (batch, maxlen_out, odim). + List[Tensor]: + List of cache tensors of each decoder layer. """ x = self.embed(tgt) @@ -219,9 +248,12 @@ class Decoder(nn.Layer): """Score new token batch (required). Args: - ys(Tensor): paddle.int64 prefix tokens (n_batch, ylen). - states(List[Any]): Scorer states for prefix tokens. - xs(Tensor): The encoder feature that generates ys (n_batch, xlen, n_feat). + ys(Tensor): + paddle.int64 prefix tokens (n_batch, ylen). + states(List[Any]): + Scorer states for prefix tokens. + xs(Tensor): + The encoder feature that generates ys (n_batch, xlen, n_feat). Returns: tuple[Tensor, List[Any]]: diff --git a/paddlespeech/t2s/modules/transformer/decoder_layer.py b/paddlespeech/t2s/modules/transformer/decoder_layer.py index 9a13cd79..0a79e954 100644 --- a/paddlespeech/t2s/modules/transformer/decoder_layer.py +++ b/paddlespeech/t2s/modules/transformer/decoder_layer.py @@ -24,16 +24,23 @@ class DecoderLayer(nn.Layer): Args: - size (int): Input dimension. - self_attn (nn.Layer): Self-attention module instance. + size (int): + Input dimension. + self_attn (nn.Layer): + Self-attention module instance. `MultiHeadedAttention` instance can be used as the argument. - src_attn (nn.Layer): Self-attention module instance. + src_attn (nn.Layer): + Self-attention module instance. `MultiHeadedAttention` instance can be used as the argument. - feed_forward (nn.Layer): Feed-forward module instance. + feed_forward (nn.Layer): + Feed-forward module instance. `PositionwiseFeedForward`, `MultiLayeredConv1d`, or `Conv1dLinear` instance can be used as the argument. - dropout_rate (float): Dropout rate. - normalize_before (bool): Whether to use layer_norm before the first block. - concat_after (bool): Whether to concat attention layer's input and output. + dropout_rate (float): + Dropout rate. + normalize_before (bool): + Whether to use layer_norm before the first block. + concat_after (bool): + Whether to concat attention layer's input and output. if True, additional linear will be applied. i.e. x -> x + linear(concat(x, att(x))) if False, no additional linear will be applied. i.e. x -> x + att(x) @@ -69,11 +76,16 @@ class DecoderLayer(nn.Layer): """Compute decoded features. Args: - tgt(Tensor): Input tensor (#batch, maxlen_out, size). - tgt_mask(Tensor): Mask for input tensor (#batch, maxlen_out). - memory(Tensor): Encoded memory, float32 (#batch, maxlen_in, size). - memory_mask(Tensor): Encoded memory mask (#batch, maxlen_in). - cache(List[Tensor], optional): List of cached tensors. + tgt(Tensor): + Input tensor (#batch, maxlen_out, size). + tgt_mask(Tensor): + Mask for input tensor (#batch, maxlen_out). + memory(Tensor): + Encoded memory, float32 (#batch, maxlen_in, size). + memory_mask(Tensor): + Encoded memory mask (#batch, maxlen_in). + cache(List[Tensor], optional): + List of cached tensors. Each tensor shape should be (#batch, maxlen_out - 1, size). (Default value = None) Returns: Tensor diff --git a/paddlespeech/t2s/modules/transformer/embedding.py b/paddlespeech/t2s/modules/transformer/embedding.py index 9524f07e..7ba301cb 100644 --- a/paddlespeech/t2s/modules/transformer/embedding.py +++ b/paddlespeech/t2s/modules/transformer/embedding.py @@ -23,11 +23,16 @@ class PositionalEncoding(nn.Layer): """Positional encoding. Args: - d_model (int): Embedding dimension. - dropout_rate (float): Dropout rate. - max_len (int): Maximum input length. - reverse (bool): Whether to reverse the input position. - type (str): dtype of param + d_model (int): + Embedding dimension. + dropout_rate (float): + Dropout rate. + max_len (int): + Maximum input length. + reverse (bool): + Whether to reverse the input position. + type (str): + dtype of param """ def __init__(self, @@ -68,7 +73,8 @@ class PositionalEncoding(nn.Layer): """Add positional encoding. Args: - x (Tensor): Input tensor (batch, time, `*`). + x (Tensor): + Input tensor (batch, time, `*`). Returns: Tensor: Encoded tensor (batch, time, `*`). @@ -84,10 +90,14 @@ class ScaledPositionalEncoding(PositionalEncoding): See Sec. 3.2 https://arxiv.org/abs/1809.08895 Args: - d_model (int): Embedding dimension. - dropout_rate (float): Dropout rate. - max_len (int): Maximum input length. - dtype (str): dtype of param + d_model (int): + Embedding dimension. + dropout_rate (float): + Dropout rate. + max_len (int): + Maximum input length. + dtype (str): + dtype of param """ def __init__(self, d_model, dropout_rate, max_len=5000, dtype="float32"): @@ -111,7 +121,8 @@ class ScaledPositionalEncoding(PositionalEncoding): """Add positional encoding. Args: - x (Tensor): Input tensor (batch, time, `*`). + x (Tensor): + Input tensor (batch, time, `*`). Returns: Tensor: Encoded tensor (batch, time, `*`). """ @@ -127,9 +138,12 @@ class RelPositionalEncoding(nn.Layer): See : Appendix B in https://arxiv.org/abs/1901.02860 Args: - d_model (int): Embedding dimension. - dropout_rate (float): Dropout rate. - max_len (int): Maximum input length. + d_model (int): + Embedding dimension. + dropout_rate (float): + Dropout rate. + max_len (int): + Maximum input length. """ def __init__(self, d_model, dropout_rate, max_len=5000, dtype="float32"): @@ -175,7 +189,8 @@ class RelPositionalEncoding(nn.Layer): def forward(self, x: paddle.Tensor): """Add positional encoding. Args: - x (Tensor):Input tensor (batch, time, `*`). + x (Tensor): + Input tensor (batch, time, `*`). Returns: Tensor: Encoded tensor (batch, time, `*`). """ @@ -195,18 +210,24 @@ class LegacyRelPositionalEncoding(PositionalEncoding): See : Appendix B in https://arxiv.org/abs/1901.02860 Args: - d_model (int): Embedding dimension. - dropout_rate (float): Dropout rate. - max_len (int): Maximum input length. + d_model (int): + Embedding dimension. + dropout_rate (float): + Dropout rate. + max_len (int): + Maximum input length. """ def __init__(self, d_model: int, dropout_rate: float, max_len: int=5000): """ Args: - d_model (int): Embedding dimension. - dropout_rate (float): Dropout rate. - max_len (int, optional): [Maximum input length.]. Defaults to 5000. + d_model (int): + Embedding dimension. + dropout_rate (float): + Dropout rate. + max_len (int, optional): + [Maximum input length.]. Defaults to 5000. """ super().__init__(d_model, dropout_rate, max_len, reverse=True) @@ -234,10 +255,13 @@ class LegacyRelPositionalEncoding(PositionalEncoding): def forward(self, x: paddle.Tensor): """Compute positional encoding. Args: - x (paddle.Tensor): Input tensor (batch, time, `*`). + x (Tensor): + Input tensor (batch, time, `*`). Returns: - paddle.Tensor: Encoded tensor (batch, time, `*`). - paddle.Tensor: Positional embedding tensor (1, time, `*`). + Tensor: + Encoded tensor (batch, time, `*`). + Tensor: + Positional embedding tensor (1, time, `*`). """ self.extend_pe(x) x = x * self.xscale diff --git a/paddlespeech/t2s/modules/transformer/encoder.py b/paddlespeech/t2s/modules/transformer/encoder.py index 11986360..f2aed589 100644 --- a/paddlespeech/t2s/modules/transformer/encoder.py +++ b/paddlespeech/t2s/modules/transformer/encoder.py @@ -38,32 +38,55 @@ class BaseEncoder(nn.Layer): """Base Encoder module. Args: - idim (int): Input dimension. - attention_dim (int): Dimention of attention. - attention_heads (int): The number of heads of multi head attention. - linear_units (int): The number of units of position-wise feed forward. - num_blocks (int): The number of decoder blocks. - dropout_rate (float): Dropout rate. - positional_dropout_rate (float): Dropout rate after adding positional encoding. - attention_dropout_rate (float): Dropout rate in attention. - input_layer (Union[str, nn.Layer]): Input layer type. - normalize_before (bool): Whether to use layer_norm before the first block. - concat_after (bool): Whether to concat attention layer's input and output. + idim (int): + Input dimension. + attention_dim (int): + Dimention of attention. + attention_heads (int): + The number of heads of multi head attention. + linear_units (int): + The number of units of position-wise feed forward. + num_blocks (int): + The number of decoder blocks. + dropout_rate (float): + Dropout rate. + positional_dropout_rate (float): + Dropout rate after adding positional encoding. + attention_dropout_rate (float): + Dropout rate in attention. + input_layer (Union[str, nn.Layer]): + Input layer type. + normalize_before (bool): + Whether to use layer_norm before the first block. + concat_after (bool): + Whether to concat attention layer's input and output. if True, additional linear will be applied. i.e. x -> x + linear(concat(x, att(x))) if False, no additional linear will be applied. i.e. x -> x + att(x) - positionwise_layer_type (str): "linear", "conv1d", or "conv1d-linear". - positionwise_conv_kernel_size (int): Kernel size of positionwise conv1d layer. - macaron_style (bool): Whether to use macaron style for positionwise layer. - pos_enc_layer_type (str): Encoder positional encoding layer type. - selfattention_layer_type (str): Encoder attention layer type. - activation_type (str): Encoder activation function type. - use_cnn_module (bool): Whether to use convolution module. - zero_triu (bool): Whether to zero the upper triangular part of attention matrix. - cnn_module_kernel (int): Kernerl size of convolution module. - padding_idx (int): Padding idx for input_layer=embed. - stochastic_depth_rate (float): Maximum probability to skip the encoder layer. - intermediate_layers (Union[List[int], None]): indices of intermediate CTC layer. + positionwise_layer_type (str): + "linear", "conv1d", or "conv1d-linear". + positionwise_conv_kernel_size (int): + Kernel size of positionwise conv1d layer. + macaron_style (bool): + Whether to use macaron style for positionwise layer. + pos_enc_layer_type (str): + Encoder positional encoding layer type. + selfattention_layer_type (str): + Encoder attention layer type. + activation_type (str): + Encoder activation function type. + use_cnn_module (bool): + Whether to use convolution module. + zero_triu (bool): + Whether to zero the upper triangular part of attention matrix. + cnn_module_kernel (int): + Kernerl size of convolution module. + padding_idx (int): + Padding idx for input_layer=embed. + stochastic_depth_rate (float): + Maximum probability to skip the encoder layer. + intermediate_layers (Union[List[int], None]): + indices of intermediate CTC layer. indices start from 1. if not None, intermediate outputs are returned (which changes return type signature.) @@ -266,12 +289,16 @@ class BaseEncoder(nn.Layer): """Encode input sequence. Args: - xs (Tensor): Input tensor (#batch, time, idim). - masks (Tensor): Mask tensor (#batch, 1, time). + xs (Tensor): + Input tensor (#batch, time, idim). + masks (Tensor): + Mask tensor (#batch, 1, time). Returns: - Tensor: Output tensor (#batch, time, attention_dim). - Tensor: Mask tensor (#batch, 1, time). + Tensor: + Output tensor (#batch, time, attention_dim). + Tensor: + Mask tensor (#batch, 1, time). """ xs = self.embed(xs) xs, masks = self.encoders(xs, masks) @@ -284,26 +311,43 @@ class TransformerEncoder(BaseEncoder): """Transformer encoder module. Args: - idim (int): Input dimension. - attention_dim (int): Dimention of attention. - attention_heads (int): The number of heads of multi head attention. - linear_units (int): The number of units of position-wise feed forward. - num_blocks (int): The number of decoder blocks. - dropout_rate (float): Dropout rate. - positional_dropout_rate (float): Dropout rate after adding positional encoding. - attention_dropout_rate (float): Dropout rate in attention. - input_layer (Union[str, paddle.nn.Layer]): Input layer type. - pos_enc_layer_type (str): Encoder positional encoding layer type. - normalize_before (bool): Whether to use layer_norm before the first block. - concat_after (bool): Whether to concat attention layer's input and output. + idim (int): + Input dimension. + attention_dim (int): + Dimention of attention. + attention_heads (int): + The number of heads of multi head attention. + linear_units (int): + The number of units of position-wise feed forward. + num_blocks (int): + The number of decoder blocks. + dropout_rate (float): + Dropout rate. + positional_dropout_rate (float): + Dropout rate after adding positional encoding. + attention_dropout_rate (float): + Dropout rate in attention. + input_layer (Union[str, paddle.nn.Layer]): + Input layer type. + pos_enc_layer_type (str): + Encoder positional encoding layer type. + normalize_before (bool): + Whether to use layer_norm before the first block. + concat_after (bool): + Whether to concat attention layer's input and output. if True, additional linear will be applied. i.e. x -> x + linear(concat(x, att(x))) if False, no additional linear will be applied. i.e. x -> x + att(x) - positionwise_layer_type (str): "linear", "conv1d", or "conv1d-linear". - positionwise_conv_kernel_size (int): Kernel size of positionwise conv1d layer. - selfattention_layer_type (str): Encoder attention layer type. - activation_type (str): Encoder activation function type. - padding_idx (int): Padding idx for input_layer=embed. + positionwise_layer_type (str): + "linear", "conv1d", or "conv1d-linear". + positionwise_conv_kernel_size (int): + Kernel size of positionwise conv1d layer. + selfattention_layer_type (str): + Encoder attention layer type. + activation_type (str): + Encoder activation function type. + padding_idx (int): + Padding idx for input_layer=embed. """ def __init__( @@ -350,12 +394,16 @@ class TransformerEncoder(BaseEncoder): """Encoder input sequence. Args: - xs(Tensor): Input tensor (#batch, time, idim). - masks(Tensor): Mask tensor (#batch, 1, time). + xs(Tensor): + Input tensor (#batch, time, idim). + masks(Tensor): + Mask tensor (#batch, 1, time). Returns: - Tensor: Output tensor (#batch, time, attention_dim). - Tensor: Mask tensor (#batch, 1, time). + Tensor: + Output tensor (#batch, time, attention_dim). + Tensor: + Mask tensor (#batch, 1, time). """ xs = self.embed(xs) xs, masks = self.encoders(xs, masks) @@ -367,14 +415,20 @@ class TransformerEncoder(BaseEncoder): """Encode input frame. Args: - xs (Tensor): Input tensor. - masks (Tensor): Mask tensor. - cache (List[Tensor]): List of cache tensors. + xs (Tensor): + Input tensor. + masks (Tensor): + Mask tensor. + cache (List[Tensor]): + List of cache tensors. Returns: - Tensor: Output tensor. - Tensor: Mask tensor. - List[Tensor]: List of new cache tensors. + Tensor: + Output tensor. + Tensor: + Mask tensor. + List[Tensor]: + List of new cache tensors. """ xs = self.embed(xs) @@ -393,32 +447,55 @@ class ConformerEncoder(BaseEncoder): """Conformer encoder module. Args: - idim (int): Input dimension. - attention_dim (int): Dimention of attention. - attention_heads (int): The number of heads of multi head attention. - linear_units (int): The number of units of position-wise feed forward. - num_blocks (int): The number of decoder blocks. - dropout_rate (float): Dropout rate. - positional_dropout_rate (float): Dropout rate after adding positional encoding. - attention_dropout_rate (float): Dropout rate in attention. - input_layer (Union[str, nn.Layer]): Input layer type. - normalize_before (bool): Whether to use layer_norm before the first block. - concat_after (bool):Whether to concat attention layer's input and output. + idim (int): + Input dimension. + attention_dim (int): + Dimention of attention. + attention_heads (int): + The number of heads of multi head attention. + linear_units (int): + The number of units of position-wise feed forward. + num_blocks (int): + The number of decoder blocks. + dropout_rate (float): + Dropout rate. + positional_dropout_rate (float): + Dropout rate after adding positional encoding. + attention_dropout_rate (float): + Dropout rate in attention. + input_layer (Union[str, nn.Layer]): + Input layer type. + normalize_before (bool): + Whether to use layer_norm before the first block. + concat_after (bool): + Whether to concat attention layer's input and output. if True, additional linear will be applied. i.e. x -> x + linear(concat(x, att(x))) if False, no additional linear will be applied. i.e. x -> x + att(x) - positionwise_layer_type (str): "linear", "conv1d", or "conv1d-linear". - positionwise_conv_kernel_size (int): Kernel size of positionwise conv1d layer. - macaron_style (bool): Whether to use macaron style for positionwise layer. - pos_enc_layer_type (str): Encoder positional encoding layer type. - selfattention_layer_type (str): Encoder attention layer type. - activation_type (str): Encoder activation function type. - use_cnn_module (bool): Whether to use convolution module. - zero_triu (bool): Whether to zero the upper triangular part of attention matrix. - cnn_module_kernel (int): Kernerl size of convolution module. - padding_idx (int): Padding idx for input_layer=embed. - stochastic_depth_rate (float): Maximum probability to skip the encoder layer. - intermediate_layers (Union[List[int], None]):indices of intermediate CTC layer. indices start from 1. + positionwise_layer_type (str): + "linear", "conv1d", or "conv1d-linear". + positionwise_conv_kernel_size (int): + Kernel size of positionwise conv1d layer. + macaron_style (bool): + Whether to use macaron style for positionwise layer. + pos_enc_layer_type (str): + Encoder positional encoding layer type. + selfattention_layer_type (str): + Encoder attention layer type. + activation_type (str): + Encoder activation function type. + use_cnn_module (bool): + Whether to use convolution module. + zero_triu (bool): + Whether to zero the upper triangular part of attention matrix. + cnn_module_kernel (int): + Kernerl size of convolution module. + padding_idx (int): + Padding idx for input_layer=embed. + stochastic_depth_rate (float): + Maximum probability to skip the encoder layer. + intermediate_layers (Union[List[int], None]): + indices of intermediate CTC layer. indices start from 1. if not None, intermediate outputs are returned (which changes return type signature.) """ @@ -478,11 +555,15 @@ class ConformerEncoder(BaseEncoder): """Encode input sequence. Args: - xs (Tensor): Input tensor (#batch, time, idim). - masks (Tensor): Mask tensor (#batch, 1, time). + xs (Tensor): + Input tensor (#batch, time, idim). + masks (Tensor): + Mask tensor (#batch, 1, time). Returns: - Tensor: Output tensor (#batch, time, attention_dim). - Tensor: Mask tensor (#batch, 1, time). + Tensor: + Output tensor (#batch, time, attention_dim). + Tensor: + Mask tensor (#batch, 1, time). """ if isinstance(self.embed, (Conv2dSubsampling)): xs, masks = self.embed(xs, masks) @@ -539,7 +620,8 @@ class Conv1dResidualBlock(nn.Layer): def forward(self, xs): """Encode input sequence. Args: - xs (Tensor): Input tensor (#batch, idim, T). + xs (Tensor): + Input tensor (#batch, idim, T). Returns: Tensor: Output tensor (#batch, odim, T). """ @@ -582,8 +664,10 @@ class CNNDecoder(nn.Layer): def forward(self, xs, masks=None): """Encode input sequence. Args: - xs (Tensor): Input tensor (#batch, time, idim). - masks (Tensor): Mask tensor (#batch, 1, time). + xs (Tensor): + Input tensor (#batch, time, idim). + masks (Tensor): + Mask tensor (#batch, 1, time). Returns: Tensor: Output tensor (#batch, time, odim). """ @@ -629,8 +713,10 @@ class CNNPostnet(nn.Layer): def forward(self, xs, masks=None): """Encode input sequence. Args: - xs (Tensor): Input tensor (#batch, odim, time). - masks (Tensor): Mask tensor (#batch, 1, time). + xs (Tensor): + Input tensor (#batch, odim, time). + masks (Tensor): + Mask tensor (#batch, 1, time). Returns: Tensor: Output tensor (#batch, odim, time). """ diff --git a/paddlespeech/t2s/modules/transformer/encoder_layer.py b/paddlespeech/t2s/modules/transformer/encoder_layer.py index 72372b69..63494b0d 100644 --- a/paddlespeech/t2s/modules/transformer/encoder_layer.py +++ b/paddlespeech/t2s/modules/transformer/encoder_layer.py @@ -21,14 +21,20 @@ class EncoderLayer(nn.Layer): """Encoder layer module. Args: - size (int): Input dimension. - self_attn (nn.Layer): Self-attention module instance. + size (int): + Input dimension. + self_attn (nn.Layer): + Self-attention module instance. `MultiHeadedAttention` instance can be used as the argument. - feed_forward (nn.Layer): Feed-forward module instance. + feed_forward (nn.Layer): + Feed-forward module instance. `PositionwiseFeedForward`, `MultiLayeredConv1d`, or `Conv1dLinear` instance can be used as the argument. - dropout_rate (float): Dropout rate. - normalize_before (bool): Whether to use layer_norm before the first block. - concat_after (bool): Whether to concat attention layer's input and output. + dropout_rate (float): + Dropout rate. + normalize_before (bool): + Whether to use layer_norm before the first block. + concat_after (bool): + Whether to concat attention layer's input and output. if True, additional linear will be applied. i.e. x -> x + linear(concat(x, att(x))) if False, no additional linear will be applied. i.e. x -> x + att(x) @@ -59,13 +65,18 @@ class EncoderLayer(nn.Layer): """Compute encoded features. Args: - x(Tensor): Input tensor (#batch, time, size). - mask(Tensor): Mask tensor for the input (#batch, time). - cache(Tensor, optional): Cache tensor of the input (#batch, time - 1, size). + x(Tensor): + Input tensor (#batch, time, size). + mask(Tensor): + Mask tensor for the input (#batch, time). + cache(Tensor, optional): + Cache tensor of the input (#batch, time - 1, size). Returns: - Tensor: Output tensor (#batch, time, size). - Tensor: Mask tensor (#batch, time). + Tensor: + Output tensor (#batch, time, size). + Tensor: + Mask tensor (#batch, time). """ residual = x if self.normalize_before: diff --git a/paddlespeech/t2s/modules/transformer/lightconv.py b/paddlespeech/t2s/modules/transformer/lightconv.py index 9bcc1acf..22217d50 100644 --- a/paddlespeech/t2s/modules/transformer/lightconv.py +++ b/paddlespeech/t2s/modules/transformer/lightconv.py @@ -31,12 +31,18 @@ class LightweightConvolution(nn.Layer): https://github.com/pytorch/fairseq/tree/master/fairseq Args: - wshare (int): the number of kernel of convolution - n_feat (int): the number of features - dropout_rate (float): dropout_rate - kernel_size (int): kernel size (length) - use_kernel_mask (bool): Use causal mask or not for convolution kernel - use_bias (bool): Use bias term or not. + wshare (int): + the number of kernel of convolution + n_feat (int): + the number of features + dropout_rate (float): + dropout_rate + kernel_size (int): + kernel size (length) + use_kernel_mask (bool): + Use causal mask or not for convolution kernel + use_bias (bool): + Use bias term or not. """ @@ -94,10 +100,14 @@ class LightweightConvolution(nn.Layer): This is just for compatibility with self-attention layer (attention.py) Args: - query (Tensor): input tensor. (batch, time1, d_model) - key (Tensor): NOT USED. (batch, time2, d_model) - value (Tensor): NOT USED. (batch, time2, d_model) - mask : (Tensor): (batch, time1, time2) mask + query (Tensor): + input tensor. (batch, time1, d_model) + key (Tensor): + NOT USED. (batch, time2, d_model) + value (Tensor): + NOT USED. (batch, time2, d_model) + mask : (Tensor): + (batch, time1, time2) mask Return: Tensor: ouput. (batch, time1, d_model) diff --git a/paddlespeech/t2s/modules/transformer/mask.py b/paddlespeech/t2s/modules/transformer/mask.py index c10e6add..71dd3797 100644 --- a/paddlespeech/t2s/modules/transformer/mask.py +++ b/paddlespeech/t2s/modules/transformer/mask.py @@ -19,8 +19,10 @@ def subsequent_mask(size, dtype=paddle.bool): """Create mask for subsequent steps (size, size). Args: - size (int): size of mask - dtype (paddle.dtype): result dtype + size (int): + size of mask + dtype (paddle.dtype): + result dtype Return: Tensor: >>> subsequent_mask(3) @@ -36,9 +38,12 @@ def target_mask(ys_in_pad, ignore_id, dtype=paddle.bool): """Create mask for decoder self-attention. Args: - ys_pad (Tensor): batch of padded target sequences (B, Lmax) - ignore_id (int): index of padding - dtype (paddle.dtype): result dtype + ys_pad (Tensor): + batch of padded target sequences (B, Lmax) + ignore_id (int): + index of padding + dtype (paddle.dtype): + result dtype Return: Tensor: (B, Lmax, Lmax) """ diff --git a/paddlespeech/t2s/modules/transformer/multi_layer_conv.py b/paddlespeech/t2s/modules/transformer/multi_layer_conv.py index d3285b65..91d67ca5 100644 --- a/paddlespeech/t2s/modules/transformer/multi_layer_conv.py +++ b/paddlespeech/t2s/modules/transformer/multi_layer_conv.py @@ -32,10 +32,14 @@ class MultiLayeredConv1d(nn.Layer): """Initialize MultiLayeredConv1d module. Args: - in_chans (int): Number of input channels. - hidden_chans (int): Number of hidden channels. - kernel_size (int): Kernel size of conv1d. - dropout_rate (float): Dropout rate. + in_chans (int): + Number of input channels. + hidden_chans (int): + Number of hidden channels. + kernel_size (int): + Kernel size of conv1d. + dropout_rate (float): + Dropout rate. """ super().__init__() @@ -58,7 +62,8 @@ class MultiLayeredConv1d(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Batch of input tensors (B, T, in_chans). + x (Tensor): + Batch of input tensors (B, T, in_chans). Returns: Tensor: Batch of output tensors (B, T, in_chans). @@ -79,10 +84,14 @@ class Conv1dLinear(nn.Layer): """Initialize Conv1dLinear module. Args: - in_chans (int): Number of input channels. - hidden_chans (int): Number of hidden channels. - kernel_size (int): Kernel size of conv1d. - dropout_rate (float): Dropout rate. + in_chans (int): + Number of input channels. + hidden_chans (int): + Number of hidden channels. + kernel_size (int): + Kernel size of conv1d. + dropout_rate (float): + Dropout rate. """ super().__init__() self.w_1 = nn.Conv1D( @@ -99,7 +108,8 @@ class Conv1dLinear(nn.Layer): """Calculate forward propagation. Args: - x (Tensor): Batch of input tensors (B, T, in_chans). + x (Tensor): + Batch of input tensors (B, T, in_chans). Returns: Tensor: Batch of output tensors (B, T, in_chans). diff --git a/paddlespeech/t2s/modules/transformer/positionwise_feed_forward.py b/paddlespeech/t2s/modules/transformer/positionwise_feed_forward.py index 92af6851..45ea279b 100644 --- a/paddlespeech/t2s/modules/transformer/positionwise_feed_forward.py +++ b/paddlespeech/t2s/modules/transformer/positionwise_feed_forward.py @@ -21,9 +21,12 @@ class PositionwiseFeedForward(nn.Layer): """Positionwise feed forward layer. Args: - idim (int): Input dimenstion. - hidden_units (int): The number of hidden units. - dropout_rate (float): Dropout rate. + idim (int): + Input dimenstion. + hidden_units (int): + The number of hidden units. + dropout_rate (float): + Dropout rate. """ def __init__(self, diff --git a/paddlespeech/t2s/modules/transformer/repeat.py b/paddlespeech/t2s/modules/transformer/repeat.py index 1e946adf..43d11e9f 100644 --- a/paddlespeech/t2s/modules/transformer/repeat.py +++ b/paddlespeech/t2s/modules/transformer/repeat.py @@ -30,8 +30,10 @@ def repeat(N, fn): """Repeat module N times. Args: - N (int): Number of repeat time. - fn (Callable): Function to generate module. + N (int): + Number of repeat time. + fn (Callable): + Function to generate module. Returns: MultiSequential: Repeated model instance. diff --git a/paddlespeech/t2s/modules/transformer/subsampling.py b/paddlespeech/t2s/modules/transformer/subsampling.py index 07439705..a17278c0 100644 --- a/paddlespeech/t2s/modules/transformer/subsampling.py +++ b/paddlespeech/t2s/modules/transformer/subsampling.py @@ -23,10 +23,14 @@ class Conv2dSubsampling(nn.Layer): """Convolutional 2D subsampling (to 1/4 length). Args: - idim (int): Input dimension. - odim (int): Output dimension. - dropout_rate (float): Dropout rate. - pos_enc (nn.Layer): Custom position encoding layer. + idim (int): + Input dimension. + odim (int): + Output dimension. + dropout_rate (float): + Dropout rate. + pos_enc (nn.Layer): + Custom position encoding layer. """ def __init__(self, idim, odim, dropout_rate, pos_enc=None): @@ -45,11 +49,15 @@ class Conv2dSubsampling(nn.Layer): def forward(self, x, x_mask): """Subsample x. Args: - x (Tensor): Input tensor (#batch, time, idim). - x_mask (Tensor): Input mask (#batch, 1, time). + x (Tensor): + Input tensor (#batch, time, idim). + x_mask (Tensor): + Input mask (#batch, 1, time). Returns: - Tensor: Subsampled tensor (#batch, time', odim), where time' = time // 4. - Tensor: Subsampled mask (#batch, 1, time'), where time' = time // 4. + Tensor: + Subsampled tensor (#batch, time', odim), where time' = time // 4. + Tensor: + Subsampled mask (#batch, 1, time'), where time' = time // 4. """ # (b, c, t, f) x = x.unsqueeze(1) diff --git a/paddlespeech/t2s/modules/upsample.py b/paddlespeech/t2s/modules/upsample.py index 65e78a89..164db65d 100644 --- a/paddlespeech/t2s/modules/upsample.py +++ b/paddlespeech/t2s/modules/upsample.py @@ -28,9 +28,12 @@ class Stretch2D(nn.Layer): """Strech an image (or image-like object) with some interpolation. Args: - w_scale (int): Scalar of width. - h_scale (int): Scalar of the height. - mode (str, optional): Interpolation mode, modes suppored are "nearest", "bilinear", + w_scale (int): + Scalar of width. + h_scale (int): + Scalar of the height. + mode (str, optional): + Interpolation mode, modes suppored are "nearest", "bilinear", "trilinear", "bicubic", "linear" and "area",by default "nearest" For more details about interpolation, see `paddle.nn.functional.interpolate `_. @@ -44,11 +47,12 @@ class Stretch2D(nn.Layer): """ Args: - x (Tensor): Shape (N, C, H, W) + x (Tensor): + Shape (N, C, H, W) Returns: - Tensor: The stretched image. - Shape (N, C, H', W'), where ``H'=h_scale * H``, ``W'=w_scale * W``. + Tensor: + The stretched image. Shape (N, C, H', W'), where ``H'=h_scale * H``, ``W'=w_scale * W``. """ out = F.interpolate( @@ -61,12 +65,18 @@ class UpsampleNet(nn.Layer): convolutions. Args: - upsample_scales (List[int]): Upsampling factors for each strech. - nonlinear_activation (Optional[str], optional): Activation after each convolution, by default None - nonlinear_activation_params (Dict[str, Any], optional): Parameters passed to construct the activation, by default {} - interpolate_mode (str, optional): Interpolation mode of the strech, by default "nearest" - freq_axis_kernel_size (int, optional): Convolution kernel size along the frequency axis, by default 1 - use_causal_conv (bool, optional): Whether to use causal padding before convolution, by default False + upsample_scales (List[int]): + Upsampling factors for each strech. + nonlinear_activation (Optional[str], optional): + Activation after each convolution, by default None + nonlinear_activation_params (Dict[str, Any], optional): + Parameters passed to construct the activation, by default {} + interpolate_mode (str, optional): + Interpolation mode of the strech, by default "nearest" + freq_axis_kernel_size (int, optional): + Convolution kernel size along the frequency axis, by default 1 + use_causal_conv (bool, optional): + Whether to use causal padding before convolution, by default False If True, Causal padding is used along the time axis, i.e. padding amount is ``receptive field - 1`` and 0 for before and after, respectively. If False, "same" padding is used along the time axis. @@ -106,7 +116,8 @@ class UpsampleNet(nn.Layer): def forward(self, c): """ Args: - c (Tensor): spectrogram. Shape (N, F, T) + c (Tensor): + spectrogram. Shape (N, F, T) Returns: Tensor: upsampled spectrogram. @@ -126,17 +137,25 @@ class ConvInUpsampleNet(nn.Layer): UpsampleNet. Args: - upsample_scales (List[int]): Upsampling factors for each strech. - nonlinear_activation (Optional[str], optional): Activation after each convolution, by default None - nonlinear_activation_params (Dict[str, Any], optional): Parameters passed to construct the activation, by default {} - interpolate_mode (str, optional): Interpolation mode of the strech, by default "nearest" - freq_axis_kernel_size (int, optional): Convolution kernel size along the frequency axis, by default 1 - aux_channels (int, optional): Feature size of the input, by default 80 - aux_context_window (int, optional): Context window of the first 1D convolution applied to the input. It + upsample_scales (List[int]): + Upsampling factors for each strech. + nonlinear_activation (Optional[str], optional): + Activation after each convolution, by default None + nonlinear_activation_params (Dict[str, Any], optional): + Parameters passed to construct the activation, by default {} + interpolate_mode (str, optional): + Interpolation mode of the strech, by default "nearest" + freq_axis_kernel_size (int, optional): + Convolution kernel size along the frequency axis, by default 1 + aux_channels (int, optional): + Feature size of the input, by default 80 + aux_context_window (int, optional): + Context window of the first 1D convolution applied to the input. It related to the kernel size of the convolution, by default 0 If use causal convolution, the kernel size is ``window + 1``, else the kernel size is ``2 * window + 1``. - use_causal_conv (bool, optional): Whether to use causal padding before convolution, by default False + use_causal_conv (bool, optional): + Whether to use causal padding before convolution, by default False If True, Causal padding is used along the time axis, i.e. padding amount is ``receptive field - 1`` and 0 for before and after, respectively. If False, "same" padding is used along the time axis. @@ -171,7 +190,8 @@ class ConvInUpsampleNet(nn.Layer): def forward(self, c): """ Args: - c (Tensor): spectrogram. Shape (N, F, T) + c (Tensor): + spectrogram. Shape (N, F, T) Returns: Tensors: upsampled spectrogram. Shape (N, F, T'), where ``T' = upsample_factor * T``, diff --git a/paddlespeech/t2s/training/experiment.py b/paddlespeech/t2s/training/experiment.py index 05a363ff..1eba826d 100644 --- a/paddlespeech/t2s/training/experiment.py +++ b/paddlespeech/t2s/training/experiment.py @@ -58,8 +58,10 @@ class ExperimentBase(object): need. Args: - config (yacs.config.CfgNode): The configuration used for the experiment. - args (argparse.Namespace): The parsed command line arguments. + config (yacs.config.CfgNode): + The configuration used for the experiment. + args (argparse.Namespace): + The parsed command line arguments. Examples: >>> def main_sp(config, args): diff --git a/paddlespeech/t2s/utils/checkpoint.py b/paddlespeech/t2s/utils/checkpoint.py index 1e222c50..a3a19c0a 100644 --- a/paddlespeech/t2s/utils/checkpoint.py +++ b/paddlespeech/t2s/utils/checkpoint.py @@ -25,7 +25,8 @@ def _load_latest_checkpoint(checkpoint_dir: str) -> int: """Get the iteration number corresponding to the latest saved checkpoint. Args: - checkpoint_dir (str): the directory where checkpoint is saved. + checkpoint_dir (str): + the directory where checkpoint is saved. Returns: int: the latest iteration number. @@ -46,8 +47,10 @@ def _save_checkpoint(checkpoint_dir: str, iteration: int): """Save the iteration number of the latest model to be checkpointed. Args: - checkpoint_dir (str): the directory where checkpoint is saved. - iteration (int): the latest iteration number. + checkpoint_dir (str): + the directory where checkpoint is saved. + iteration (int): + the latest iteration number. Returns: None @@ -65,11 +68,14 @@ def load_parameters(model, """Load a specific model checkpoint from disk. Args: - model (Layer): model to load parameters. - optimizer (Optimizer, optional): optimizer to load states if needed. - Defaults to None. - checkpoint_dir (str, optional): the directory where checkpoint is saved. - checkpoint_path (str, optional): if specified, load the checkpoint + model (Layer): + model to load parameters. + optimizer (Optimizer, optional): + optimizer to load states if needed. Defaults to None. + checkpoint_dir (str, optional): + the directory where checkpoint is saved. + checkpoint_path (str, optional): + if specified, load the checkpoint stored in the checkpoint_path and the argument 'checkpoint_dir' will be ignored. Defaults to None. @@ -113,11 +119,14 @@ def save_parameters(checkpoint_dir, iteration, model, optimizer=None): """Checkpoint the latest trained model parameters. Args: - checkpoint_dir (str): the directory where checkpoint is saved. - iteration (int): the latest iteration number. - model (Layer): model to be checkpointed. - optimizer (Optimizer, optional): optimizer to be checkpointed. - Defaults to None. + checkpoint_dir (str): + the directory where checkpoint is saved. + iteration (int): + the latest iteration number. + model (Layer): + model to be checkpointed. + optimizer (Optimizer, optional): + optimizer to be checkpointed. Defaults to None. Returns: None diff --git a/paddlespeech/t2s/utils/error_rate.py b/paddlespeech/t2s/utils/error_rate.py index 41b13b75..76a4f45b 100644 --- a/paddlespeech/t2s/utils/error_rate.py +++ b/paddlespeech/t2s/utils/error_rate.py @@ -71,10 +71,14 @@ def word_errors(reference, hypothesis, ignore_case=False, delimiter=' '): hypothesis sequence in word-level. Args: - reference (str): The reference sentence. - hypothesis (str): The hypothesis sentence. - ignore_case (bool): Whether case-sensitive or not. - delimiter (char(str)): Delimiter of input sentences. + reference (str): + The reference sentence. + hypothesis (str): + The hypothesis sentence. + ignore_case (bool): + Whether case-sensitive or not. + delimiter (char(str)): + Delimiter of input sentences. Returns: list: Levenshtein distance and word number of reference sentence. diff --git a/paddlespeech/t2s/utils/h5_utils.py b/paddlespeech/t2s/utils/h5_utils.py index 75c2e448..7558e046 100644 --- a/paddlespeech/t2s/utils/h5_utils.py +++ b/paddlespeech/t2s/utils/h5_utils.py @@ -24,8 +24,10 @@ import numpy as np def read_hdf5(filename: Union[Path, str], dataset_name: str) -> Any: """Read a dataset from a HDF5 file. Args: - filename (Union[Path, str]): Path of the HDF5 file. - dataset_name (str): Name of the dataset to read. + filename (Union[Path, str]): + Path of the HDF5 file. + dataset_name (str): + Name of the dataset to read. Returns: Any: The retrieved dataset. diff --git a/paddlespeech/t2s/utils/internals.py b/paddlespeech/t2s/utils/internals.py index 6c10bd2d..830e8a80 100644 --- a/paddlespeech/t2s/utils/internals.py +++ b/paddlespeech/t2s/utils/internals.py @@ -22,7 +22,8 @@ def convert_dtype_to_np_dtype_(dtype): Convert paddle's data type to corrsponding numpy data type. Args: - dtype(np.dtype): the data type in paddle. + dtype(np.dtype): + the data type in paddle. Returns: type: the data type in numpy. From 9e63b5947edc2b29b2171b5ee70322bec19f9980 Mon Sep 17 00:00:00 2001 From: TianYuan Date: Tue, 5 Jul 2022 08:40:52 +0000 Subject: [PATCH 23/27] update requirements --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index d00b469b..b46c24e8 100644 --- a/setup.py +++ b/setup.py @@ -76,7 +76,7 @@ server = [ "fastapi", "uvicorn", "pattern_singleton", - "websockets", + "websockets" ] requirements = { From a9a3cb4860b14b13b244ea7e7fdf013084d34fbc Mon Sep 17 00:00:00 2001 From: Hui Zhang Date: Tue, 5 Jul 2022 09:04:01 +0000 Subject: [PATCH 24/27] remove fluid tools for onnx export,test=doc --- .../ds2_ol/onnx/local/pd_infer_shape.py | 111 ------------ .../ds2_ol/onnx/local/pd_prune_model.py | 158 ------------------ speechx/examples/ds2_ol/onnx/local/prune.sh | 23 --- speechx/examples/ds2_ol/onnx/run.sh | 37 +--- 4 files changed, 3 insertions(+), 326 deletions(-) delete mode 100755 speechx/examples/ds2_ol/onnx/local/pd_infer_shape.py delete mode 100755 speechx/examples/ds2_ol/onnx/local/pd_prune_model.py delete mode 100755 speechx/examples/ds2_ol/onnx/local/prune.sh diff --git a/speechx/examples/ds2_ol/onnx/local/pd_infer_shape.py b/speechx/examples/ds2_ol/onnx/local/pd_infer_shape.py deleted file mode 100755 index c6e693c6..00000000 --- a/speechx/examples/ds2_ol/onnx/local/pd_infer_shape.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 -W ignore::DeprecationWarning -# https://github.com/jiangjiajun/PaddleUtils/blob/main/paddle/README.md#2-%E4%BF%AE%E6%94%B9paddle%E6%A8%A1%E5%9E%8B%E8%BE%93%E5%85%A5shape -import argparse - -# paddle inference shape - - -def process_old_ops_desc(program): - """set matmul op head_number attr to 1 is not exist. - - Args: - program (_type_): _description_ - """ - for i in range(len(program.blocks[0].ops)): - if program.blocks[0].ops[i].type == "matmul": - if not program.blocks[0].ops[i].has_attr("head_number"): - program.blocks[0].ops[i]._set_attr("head_number", 1) - - -def infer_shape(program, input_shape_dict): - # 2002002 - model_version = program.desc._version() - # 2.2.2 - paddle_version = paddle.__version__ - major_ver = model_version // 1000000 - minor_ver = (model_version - major_ver * 1000000) // 1000 - patch_ver = model_version - major_ver * 1000000 - minor_ver * 1000 - model_version = "{}.{}.{}".format(major_ver, minor_ver, patch_ver) - if model_version != paddle_version: - print( - f"[WARNING] The model is saved by paddlepaddle v{model_version}, but now your paddlepaddle is version of {paddle_version}, this difference may cause error, it is recommend you reinstall a same version of paddlepaddle for this model" - ) - - OP_WITHOUT_KERNEL_SET = { - 'feed', 'fetch', 'recurrent', 'go', 'rnn_memory_helper_grad', - 'conditional_block', 'while', 'send', 'recv', 'listen_and_serv', - 'fl_listen_and_serv', 'ncclInit', 'select', 'checkpoint_notify', - 'gen_bkcl_id', 'c_gen_bkcl_id', 'gen_nccl_id', 'c_gen_nccl_id', - 'c_comm_init', 'c_sync_calc_stream', 'c_sync_comm_stream', - 'queue_generator', 'dequeue', 'enqueue', 'heter_listen_and_serv', - 'c_wait_comm', 'c_wait_compute', 'c_gen_hccl_id', 'c_comm_init_hccl', - 'copy_cross_scope' - } - - for k, v in input_shape_dict.items(): - program.blocks[0].var(k).desc.set_shape(v) - - for i in range(len(program.blocks)): - for j in range(len(program.blocks[0].ops)): - # for ops - if program.blocks[i].ops[j].type in OP_WITHOUT_KERNEL_SET: - print(f"not infer: {program.blocks[i].ops[j].type} op") - continue - print(f"infer: {program.blocks[i].ops[j].type} op") - program.blocks[i].ops[j].desc.infer_shape(program.blocks[i].desc) - - -def parse_arguments(): - # python pd_infer_shape.py --model_dir data/exp/deepspeech2_online/checkpoints \ - # --model_filename avg_1.jit.pdmodel\ - # --params_filename avg_1.jit.pdiparams \ - # --save_dir . \ - # --input_shape_dict="{'audio_chunk':[1,-1,161], 'audio_chunk_lens':[1], 'chunk_state_c_box':[5, 1, 1024], 'chunk_state_h_box':[5,1,1024]}" - parser = argparse.ArgumentParser() - parser.add_argument( - '--model_dir', - required=True, - help='Path of directory saved the input model.') - parser.add_argument( - '--model_filename', required=True, help='model.pdmodel.') - parser.add_argument( - '--params_filename', required=True, help='model.pdiparams.') - parser.add_argument( - '--save_dir', - required=True, - help='directory to save the exported model.') - parser.add_argument( - '--input_shape_dict', required=True, help="The new shape information.") - return parser.parse_args() - - -if __name__ == '__main__': - args = parse_arguments() - - import paddle - paddle.enable_static() - import paddle.fluid as fluid - - input_shape_dict_str = args.input_shape_dict - input_shape_dict = eval(input_shape_dict_str) - - print("Start to load paddle model...") - exe = fluid.Executor(fluid.CPUPlace()) - - prog, ipts, outs = fluid.io.load_inference_model( - args.model_dir, - exe, - model_filename=args.model_filename, - params_filename=args.params_filename) - - process_old_ops_desc(prog) - infer_shape(prog, input_shape_dict) - - fluid.io.save_inference_model( - args.save_dir, - ipts, - outs, - exe, - prog, - model_filename=args.model_filename, - params_filename=args.params_filename) diff --git a/speechx/examples/ds2_ol/onnx/local/pd_prune_model.py b/speechx/examples/ds2_ol/onnx/local/pd_prune_model.py deleted file mode 100755 index 5386a971..00000000 --- a/speechx/examples/ds2_ol/onnx/local/pd_prune_model.py +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/env python3 -W ignore::DeprecationWarning -# https://github.com/jiangjiajun/PaddleUtils/blob/main/paddle/README.md#1-%E8%A3%81%E5%89%AApaddle%E6%A8%A1%E5%9E%8B -import argparse -import sys -from typing import List - -# paddle prune model. - - -def prepend_feed_ops(program, - feed_target_names: List[str], - feed_holder_name='feed'): - import paddle.fluid.core as core - if len(feed_target_names) == 0: - return - - global_block = program.global_block() - feed_var = global_block.create_var( - name=feed_holder_name, - type=core.VarDesc.VarType.FEED_MINIBATCH, - persistable=True, ) - - for i, name in enumerate(feed_target_names, 0): - if not global_block.has_var(name): - print( - f"The input[{i}]: '{name}' doesn't exist in pruned inference program, which will be ignored in new saved model." - ) - continue - - out = global_block.var(name) - global_block._prepend_op( - type='feed', - inputs={'X': [feed_var]}, - outputs={'Out': [out]}, - attrs={'col': i}, ) - - -def append_fetch_ops(program, - fetch_target_names: List[str], - fetch_holder_name='fetch'): - """in the place, we will add the fetch op - - Args: - program (_type_): inference program - fetch_target_names (List[str]): target names - fetch_holder_name (str, optional): fetch op name. Defaults to 'fetch'. - """ - import paddle.fluid.core as core - global_block = program.global_block() - fetch_var = global_block.create_var( - name=fetch_holder_name, - type=core.VarDesc.VarType.FETCH_LIST, - persistable=True, ) - - print(f"the len of fetch_target_names: {len(fetch_target_names)}") - - for i, name in enumerate(fetch_target_names): - global_block.append_op( - type='fetch', - inputs={'X': [name]}, - outputs={'Out': [fetch_var]}, - attrs={'col': i}, ) - - -def insert_fetch(program, - fetch_target_names: List[str], - fetch_holder_name='fetch'): - """in the place, we will add the fetch op - - Args: - program (_type_): inference program - fetch_target_names (List[str]): target names - fetch_holder_name (str, optional): fetch op name. Defaults to 'fetch'. - """ - global_block = program.global_block() - - # remove fetch - need_to_remove_op_index = [] - for i, op in enumerate(global_block.ops): - if op.type == 'fetch': - need_to_remove_op_index.append(i) - - for index in reversed(need_to_remove_op_index): - global_block._remove_op(index) - - program.desc.flush() - - # append new fetch - append_fetch_ops(program, fetch_target_names, fetch_holder_name) - - -def parse_arguments(): - parser = argparse.ArgumentParser() - parser.add_argument( - '--model_dir', - required=True, - help='Path of directory saved the input model.') - parser.add_argument( - '--model_filename', required=True, help='model.pdmodel.') - parser.add_argument( - '--params_filename', required=True, help='model.pdiparams.') - parser.add_argument( - '--output_names', - required=True, - help='The outputs of model. sep by comma') - parser.add_argument( - '--save_dir', - required=True, - help='directory to save the exported model.') - parser.add_argument('--debug', default=False, help='output debug info.') - return parser.parse_args() - - -if __name__ == '__main__': - args = parse_arguments() - - args.output_names = args.output_names.split(",") - - if len(set(args.output_names)) < len(args.output_names): - print( - f"[ERROR] There's dumplicate name in --output_names {args.output_names}, which is not allowed." - ) - sys.exit(-1) - - import paddle - paddle.enable_static() - # hack prepend_feed_ops - paddle.fluid.io.prepend_feed_ops = prepend_feed_ops - - import paddle.fluid as fluid - - print("start to load paddle model") - exe = fluid.Executor(fluid.CPUPlace()) - prog, ipts, outs = fluid.io.load_inference_model( - args.model_dir, - exe, - model_filename=args.model_filename, - params_filename=args.params_filename) - - print("start to load insert fetch op") - new_outputs = [] - insert_fetch(prog, args.output_names) - for out_name in args.output_names: - new_outputs.append(prog.global_block().var(out_name)) - - # not equal to paddle.static.save_inference_model - fluid.io.save_inference_model( - args.save_dir, - ipts, - new_outputs, - exe, - prog, - model_filename=args.model_filename, - params_filename=args.params_filename) - - if args.debug: - for op in prog.global_block().ops: - print(op) diff --git a/speechx/examples/ds2_ol/onnx/local/prune.sh b/speechx/examples/ds2_ol/onnx/local/prune.sh deleted file mode 100755 index 64636bcc..00000000 --- a/speechx/examples/ds2_ol/onnx/local/prune.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -set -e - -if [ $# != 5 ]; then - # local/prune.sh data/exp/deepspeech2_online/checkpoints avg_1.jit.pdmodel avg_1.jit.pdiparams softmax_0.tmp_0,tmp_5,concat_0.tmp_0,concat_1.tmp_0 $PWD - echo "usage: $0 model_dir model_filename param_filename outputs_names save_dir" - exit 1 -fi - -dir=$1 -model=$2 -param=$3 -outputs=$4 -save_dir=$5 - - -python local/pd_prune_model.py \ - --model_dir $dir \ - --model_filename $model \ - --params_filename $param \ - --output_names $outputs \ - --save_dir $save_dir \ No newline at end of file diff --git a/speechx/examples/ds2_ol/onnx/run.sh b/speechx/examples/ds2_ol/onnx/run.sh index b4df9d94..3dc5e910 100755 --- a/speechx/examples/ds2_ol/onnx/run.sh +++ b/speechx/examples/ds2_ol/onnx/run.sh @@ -39,41 +39,10 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ];then popd fi -output_names=softmax_0.tmp_0,tmp_5,concat_0.tmp_0,concat_1.tmp_0 -if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ];then - # prune model by outputs - mkdir -p $exp/prune - - # prune model deps on output_names. - ./local/prune.sh $dir $model $param $output_names $exp/prune -fi - -# aishell rnn hidden is 1024 -# wenetspeech rnn hiddn is 2048 -if [ $model_type == 'aishell' ];then - input_shape_dict="{'audio_chunk':[1,-1,161], 'audio_chunk_lens':[1], 'chunk_state_c_box':[5, 1, 1024], 'chunk_state_h_box':[5,1,1024]}" -elif [ $model_type == 'wenetspeech' ];then - input_shape_dict="{'audio_chunk':[1,-1,161], 'audio_chunk_lens':[1], 'chunk_state_c_box':[5, 1, 2048], 'chunk_state_h_box':[5,1,2048]}" -else - echo "not support: $model_type" - exit -1 -fi -if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ];then - # infer shape by new shape - mkdir -p $exp/shape - echo $input_shape_dict - python3 local/pd_infer_shape.py \ - --model_dir $dir \ - --model_filename $model \ - --params_filename $param \ - --save_dir $exp/shape \ - --input_shape_dict="${input_shape_dict}" -fi - input_file=$exp/static_ds2online_inputs.pickle test -e $input_file -if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ];then +if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ];then # to onnx ./local/tonnx.sh $dir $model $param $exp/model.onnx @@ -81,7 +50,7 @@ if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ];then fi -if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ] ;then +if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ] ;then # ort graph optmize ./local/ort_opt.py --model_in $exp/model.onnx --opt_level 0 --model_out $exp/model.ort.opt.onnx @@ -89,7 +58,7 @@ if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ] ;then fi -if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ];then +if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ];then # convert opset_num to 11 ./local/onnx_convert_opset.py --target-opset 11 --model-file $exp/model.ort.opt.onnx --save-model $exp/model.optset11.onnx From 92d1d08b9a9c8fbe96457024d60b60240fa3bc79 Mon Sep 17 00:00:00 2001 From: huangyuxin Date: Tue, 5 Jul 2022 09:23:01 +0000 Subject: [PATCH 25/27] fix scripts --- examples/wenetspeech/asr1/conf/conformer.yaml | 20 +- examples/wenetspeech/asr1/local/data.sh | 4 +- paddlespeech/audio/streamdata/__init__.py | 17 +- paddlespeech/audio/streamdata/autodecode.py | 8 +- paddlespeech/audio/streamdata/compat.py | 24 +- paddlespeech/audio/streamdata/filters.py | 28 +- paddlespeech/audio/streamdata/tariterators.py | 6 +- paddlespeech/audio/text/text_featurizer.py | 235 +++++++++++ paddlespeech/audio/text/utility.py | 393 ++++++++++++++++++ paddlespeech/s2t/exps/deepspeech2/model.py | 2 +- paddlespeech/s2t/exps/u2/model.py | 185 +-------- paddlespeech/s2t/exps/u2_kaldi/model.py | 116 ++---- paddlespeech/s2t/exps/u2_st/model.py | 93 +---- paddlespeech/s2t/io/dataloader.py | 177 +++++++- paddlespeech/s2t/models/u2/u2.py | 6 +- paddlespeech/s2t/models/u2_st/u2_st.py | 4 +- 16 files changed, 901 insertions(+), 417 deletions(-) create mode 100644 paddlespeech/audio/text/text_featurizer.py create mode 100644 paddlespeech/audio/text/utility.py diff --git a/examples/wenetspeech/asr1/conf/conformer.yaml b/examples/wenetspeech/asr1/conf/conformer.yaml index 013c3e0c..d1ac20b9 100644 --- a/examples/wenetspeech/asr1/conf/conformer.yaml +++ b/examples/wenetspeech/asr1/conf/conformer.yaml @@ -52,6 +52,7 @@ test_manifest: data/test_meeting/data.list use_stream_data: True unit_type: 'char' vocab_filepath: data/lang_char/vocab.txt +preprocess_config: conf/preprocess.yaml cmvn_file: data/mean_std.json spm_model_prefix: '' feat_dim: 80 @@ -65,30 +66,17 @@ maxlen_in: 1200 # if input length(number of frames) > maxlen-in, data is automa minlen_out: 0 maxlen_out: 150 # if output length(number of tokens) > maxlen-out, data is automatically removed resample_rate: 16000 -shuffle_size: 1500 -sort_size: 1000 +shuffle_size: 1500 # read number of 'shuffle_size' data as a chunk, shuffle the data in the chunk +sort_size: 1000 # read number of 'sort_size' data as a chunk, sort the data in the chunk num_workers: 8 prefetch_factor: 10 dist_sampler: True num_encs: 1 -augment_conf: - max_w: 80 - w_inplace: True - w_mode: "PIL" - max_f: 30 - num_f_mask: 2 - f_inplace: True - f_replace_with_zero: False - max_t: 40 - num_t_mask: 2 - t_inplace: True - t_replace_with_zero: False - ########################################### # Training # ########################################### -n_epoch: 30 +n_epoch: 32 accum_grad: 32 global_grad_clip: 5.0 log_interval: 100 diff --git a/examples/wenetspeech/asr1/local/data.sh b/examples/wenetspeech/asr1/local/data.sh index b3472a8f..62579ba3 100755 --- a/examples/wenetspeech/asr1/local/data.sh +++ b/examples/wenetspeech/asr1/local/data.sh @@ -90,8 +90,8 @@ if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then for x in $dev_set $test_sets ${train_set}; do dst=$shards_dir/$x mkdir -p $dst - utils/make_filted_shard_list.py --resample 16000 --num_utts_per_shard 1000 \ - --do_filter --num_node 1 --num_gpus_per_node 8 \ + utils/make_filted_shard_list.py --num_node 1 --num_gpus_per_node 8 --num_utts_per_shard 1000 \ + --do_filter --resample 16000 \ --num_threads 32 --segments data/$x/segments \ data/$x/wav.scp data/$x/text \ $(realpath $dst) data/$x/data.list diff --git a/paddlespeech/audio/streamdata/__init__.py b/paddlespeech/audio/streamdata/__init__.py index 1acd898a..753fcc11 100644 --- a/paddlespeech/audio/streamdata/__init__.py +++ b/paddlespeech/audio/streamdata/__init__.py @@ -1,4 +1,5 @@ # Copyright (c) 2017-2019 NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. # See the LICENSE file for licensing terms (BSD-style). # Modified from https://github.com/webdataset/webdataset # @@ -26,7 +27,7 @@ from .filters import ( pipelinefilter, rename, rename_keys, - rsample, + audio_resample, select, shuffle, slice, @@ -34,14 +35,14 @@ from .filters import ( transform_with, unbatched, xdecode, - data_filter, - tokenize, - resample, - compute_fbank, - spec_aug, + audio_data_filter, + audio_tokenize, + audio_resample, + audio_compute_fbank, + audio_spec_aug, sort, - padding, - cmvn, + audio_padding, + audio_cmvn, placeholder, ) from .handlers import ( diff --git a/paddlespeech/audio/streamdata/autodecode.py b/paddlespeech/audio/streamdata/autodecode.py index 8c74b685..ca0e2ea2 100644 --- a/paddlespeech/audio/streamdata/autodecode.py +++ b/paddlespeech/audio/streamdata/autodecode.py @@ -291,12 +291,12 @@ def torch_video(key, data): ################################################################ -# paddleaudio +# paddlespeech.audio ################################################################ def paddle_audio(key, data): - """Decode audio using the paddleaudio library. + """Decode audio using the paddlespeech.audio library. :param key: file name extension :param data: data to be decoded @@ -305,13 +305,13 @@ def paddle_audio(key, data): if extension not in ["flac", "mp3", "sox", "wav", "m4a", "ogg", "wma"]: return None - import paddleaudio + import paddlespeech.audio with tempfile.TemporaryDirectory() as dirname: fname = os.path.join(dirname, f"file.{extension}") with open(fname, "wb") as stream: stream.write(data) - return paddleaudio.load(fname) + return paddlespeech.audio.load(fname) ################################################################ diff --git a/paddlespeech/audio/streamdata/compat.py b/paddlespeech/audio/streamdata/compat.py index 11308d03..deda5338 100644 --- a/paddlespeech/audio/streamdata/compat.py +++ b/paddlespeech/audio/streamdata/compat.py @@ -78,29 +78,29 @@ class FluidInterface: def xdecode(self, *args, **kw): return self.compose(filters.xdecode(*args, **kw)) - def data_filter(self, *args, **kw): - return self.compose(filters.data_filter(*args, **kw)) + def audio_data_filter(self, *args, **kw): + return self.compose(filters.audio_data_filter(*args, **kw)) - def tokenize(self, *args, **kw): - return self.compose(filters.tokenize(*args, **kw)) + def audio_tokenize(self, *args, **kw): + return self.compose(filters.audio_tokenize(*args, **kw)) def resample(self, *args, **kw): return self.compose(filters.resample(*args, **kw)) - def compute_fbank(self, *args, **kw): - return self.compose(filters.compute_fbank(*args, **kw)) + def audio_compute_fbank(self, *args, **kw): + return self.compose(filters.audio_compute_fbank(*args, **kw)) - def spec_aug(self, *args, **kw): - return self.compose(filters.spec_aug(*args, **kw)) + def audio_spec_aug(self, *args, **kw): + return self.compose(filters.audio_spec_aug(*args, **kw)) def sort(self, size=500): return self.compose(filters.sort(size)) - def padding(self): - return self.compose(filters.padding()) + def audio_padding(self): + return self.compose(filters.audio_padding()) - def cmvn(self, cmvn_file): - return self.compose(filters.cmvn(cmvn_file)) + def audio_cmvn(self, cmvn_file): + return self.compose(filters.audio_cmvn(cmvn_file)) class WebDataset(DataPipeline, FluidInterface): """Small fluid-interface wrapper for DataPipeline.""" diff --git a/paddlespeech/audio/streamdata/filters.py b/paddlespeech/audio/streamdata/filters.py index 0ade66f9..82b9c6ba 100644 --- a/paddlespeech/audio/streamdata/filters.py +++ b/paddlespeech/audio/streamdata/filters.py @@ -579,7 +579,7 @@ xdecode = pipelinefilter(_xdecode) -def _data_filter(source, +def _audio_data_filter(source, frame_shift=10, max_length=10240, min_length=10, @@ -629,9 +629,9 @@ def _data_filter(source, continue yield sample -data_filter = pipelinefilter(_data_filter) +audio_data_filter = pipelinefilter(_audio_data_filter) -def _tokenize(source, +def _audio_tokenize(source, symbol_table, bpe_model=None, non_lang_syms=None, @@ -693,9 +693,9 @@ def _tokenize(source, sample['label'] = label yield sample -tokenize = pipelinefilter(_tokenize) +audio_tokenize = pipelinefilter(_audio_tokenize) -def _resample(source, resample_rate=16000): +def _audio_resample(source, resample_rate=16000): """ Resample data. Inplace operation. @@ -718,9 +718,9 @@ def _resample(source, resample_rate=16000): )) yield sample -resample = pipelinefilter(_resample) +audio_resample = pipelinefilter(_audio_resample) -def _compute_fbank(source, +def _audio_compute_fbank(source, num_mel_bins=80, frame_length=25, frame_shift=10, @@ -756,9 +756,9 @@ def _compute_fbank(source, yield dict(fname=sample['fname'], label=sample['label'], feat=mat) -compute_fbank = pipelinefilter(_compute_fbank) +audio_compute_fbank = pipelinefilter(_audio_compute_fbank) -def _spec_aug(source, +def _audio_spec_aug(source, max_w=5, w_inplace=True, w_mode="PIL", @@ -799,7 +799,7 @@ def _spec_aug(source, sample['feat'] = paddle.to_tensor(x, dtype=paddle.float32) yield sample -spec_aug = pipelinefilter(_spec_aug) +audio_spec_aug = pipelinefilter(_audio_spec_aug) def _sort(source, sort_size=500): @@ -881,7 +881,7 @@ def dynamic_batched(source, max_frames_in_batch=12000): yield buf -def _padding(source): +def _audio_padding(source): """ Padding the data into training data Args: @@ -914,9 +914,9 @@ def _padding(source): yield (sorted_keys, padded_feats, feats_lengths, padding_labels, label_lengths) -padding = pipelinefilter(_padding) +audio_padding = pipelinefilter(_audio_padding) -def _cmvn(source, cmvn_file): +def _audio_cmvn(source, cmvn_file): global_cmvn = GlobalCMVN(cmvn_file) for batch in source: sorted_keys, padded_feats, feats_lengths, padding_labels, label_lengths = batch @@ -926,7 +926,7 @@ def _cmvn(source, cmvn_file): yield (sorted_keys, padded_feats, feats_lengths, padding_labels, label_lengths) -cmvn = pipelinefilter(_cmvn) +audio_cmvn = pipelinefilter(_audio_cmvn) def _placeholder(source): for data in source: diff --git a/paddlespeech/audio/streamdata/tariterators.py b/paddlespeech/audio/streamdata/tariterators.py index 2c1daae1..b1616918 100644 --- a/paddlespeech/audio/streamdata/tariterators.py +++ b/paddlespeech/audio/streamdata/tariterators.py @@ -21,7 +21,7 @@ trace = False meta_prefix = "__" meta_suffix = "__" -from ... import audio as paddleaudio +import paddlespeech import paddle import numpy as np @@ -118,7 +118,7 @@ def tar_file_iterator( assert pos > 0 prefix, postfix = name[:pos], name[pos + 1:] if postfix == 'wav': - waveform, sample_rate = paddleaudio.load(stream.extractfile(tarinfo), normal=False) + waveform, sample_rate = paddlespeech.audio.load(stream.extractfile(tarinfo), normal=False) result = dict(fname=prefix, wav=waveform, sample_rate = sample_rate) else: txt = stream.extractfile(tarinfo).read().decode('utf8').strip() @@ -167,7 +167,7 @@ def tar_file_and_group_iterator( if postfix == 'txt': example['txt'] = file_obj.read().decode('utf8').strip() elif postfix in AUDIO_FORMAT_SETS: - waveform, sample_rate = paddleaudio.load(file_obj, normal=False) + waveform, sample_rate = paddlespeech.audio.load(file_obj, normal=False) waveform = paddle.to_tensor(np.expand_dims(np.array(waveform),0), dtype=paddle.float32) example['wav'] = waveform diff --git a/paddlespeech/audio/text/text_featurizer.py b/paddlespeech/audio/text/text_featurizer.py new file mode 100644 index 00000000..91c4d75c --- /dev/null +++ b/paddlespeech/audio/text/text_featurizer.py @@ -0,0 +1,235 @@ +# 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. +"""Contains the text featurizer class.""" +from pprint import pformat +from typing import Union + +import sentencepiece as spm + +from .utility import BLANK +from .utility import EOS +from .utility import load_dict +from .utility import MASKCTC +from .utility import SOS +from .utility import SPACE +from .utility import UNK +from ..utils.log import Logger + +logger = Logger(__name__) + +__all__ = ["TextFeaturizer"] + + +class TextFeaturizer(): + def __init__(self, unit_type, vocab, spm_model_prefix=None, maskctc=False): + """Text featurizer, for processing or extracting features from text. + + Currently, it supports char/word/sentence-piece level tokenizing and conversion into + a list of token indices. Note that the token indexing order follows the + given vocabulary file. + + Args: + unit_type (str): unit type, e.g. char, word, spm + vocab Option[str, list]: Filepath to load vocabulary for token indices conversion, or vocab list. + spm_model_prefix (str, optional): spm model prefix. Defaults to None. + """ + assert unit_type in ('char', 'spm', 'word') + self.unit_type = unit_type + self.unk = UNK + self.maskctc = maskctc + + if vocab: + self.vocab_dict, self._id2token, self.vocab_list, self.unk_id, self.eos_id, self.blank_id = self._load_vocabulary_from_file( + vocab, maskctc) + self.vocab_size = len(self.vocab_list) + else: + logger.warning("TextFeaturizer: not have vocab file or vocab list.") + + if unit_type == 'spm': + spm_model = spm_model_prefix + '.model' + self.sp = spm.SentencePieceProcessor() + self.sp.Load(spm_model) + + def tokenize(self, text, replace_space=True): + if self.unit_type == 'char': + tokens = self.char_tokenize(text, replace_space) + elif self.unit_type == 'word': + tokens = self.word_tokenize(text) + else: # spm + tokens = self.spm_tokenize(text) + return tokens + + def detokenize(self, tokens): + if self.unit_type == 'char': + text = self.char_detokenize(tokens) + elif self.unit_type == 'word': + text = self.word_detokenize(tokens) + else: # spm + text = self.spm_detokenize(tokens) + return text + + def featurize(self, text): + """Convert text string to a list of token indices. + + Args: + text (str): Text to process. + + Returns: + List[int]: List of token indices. + """ + tokens = self.tokenize(text) + ids = [] + for token in tokens: + if token not in self.vocab_dict: + logger.debug(f"Text Token: {token} -> {self.unk}") + token = self.unk + ids.append(self.vocab_dict[token]) + return ids + + def defeaturize(self, idxs): + """Convert a list of token indices to text string, + ignore index after eos_id. + + Args: + idxs (List[int]): List of token indices. + + Returns: + str: Text. + """ + tokens = [] + for idx in idxs: + if idx == self.eos_id: + break + tokens.append(self._id2token[idx]) + text = self.detokenize(tokens) + return text + + def char_tokenize(self, text, replace_space=True): + """Character tokenizer. + + Args: + text (str): text string. + replace_space (bool): False only used by build_vocab.py. + + Returns: + List[str]: tokens. + """ + text = text.strip() + if replace_space: + text_list = [SPACE if item == " " else item for item in list(text)] + else: + text_list = list(text) + return text_list + + def char_detokenize(self, tokens): + """Character detokenizer. + + Args: + tokens (List[str]): tokens. + + Returns: + str: text string. + """ + tokens = [t.replace(SPACE, " ") for t in tokens] + return "".join(tokens) + + def word_tokenize(self, text): + """Word tokenizer, separate by .""" + return text.strip().split() + + def word_detokenize(self, tokens): + """Word detokenizer, separate by .""" + return " ".join(tokens) + + def spm_tokenize(self, text): + """spm tokenize. + + Args: + text (str): text string. + + Returns: + List[str]: sentence pieces str code + """ + stats = {"num_empty": 0, "num_filtered": 0} + + def valid(line): + return True + + def encode(l): + return self.sp.EncodeAsPieces(l) + + def encode_line(line): + line = line.strip() + if len(line) > 0: + line = encode(line) + if valid(line): + return line + else: + stats["num_filtered"] += 1 + else: + stats["num_empty"] += 1 + return None + + enc_line = encode_line(text) + return enc_line + + def spm_detokenize(self, tokens, input_format='piece'): + """spm detokenize. + + Args: + ids (List[str]): tokens. + + Returns: + str: text + """ + if input_format == "piece": + + def decode(l): + return "".join(self.sp.DecodePieces(l)) + elif input_format == "id": + + def decode(l): + return "".join(self.sp.DecodeIds(l)) + + return decode(tokens) + + def _load_vocabulary_from_file(self, vocab: Union[str, list], + maskctc: bool): + """Load vocabulary from file.""" + if isinstance(vocab, list): + vocab_list = vocab + else: + vocab_list = load_dict(vocab, maskctc) + assert vocab_list is not None + logger.debug(f"Vocab: {pformat(vocab_list)}") + + id2token = dict( + [(idx, token) for (idx, token) in enumerate(vocab_list)]) + token2id = dict( + [(token, idx) for (idx, token) in enumerate(vocab_list)]) + + blank_id = vocab_list.index(BLANK) if BLANK in vocab_list else -1 + maskctc_id = vocab_list.index(MASKCTC) if MASKCTC in vocab_list else -1 + unk_id = vocab_list.index(UNK) if UNK in vocab_list else -1 + eos_id = vocab_list.index(EOS) if EOS in vocab_list else -1 + sos_id = vocab_list.index(SOS) if SOS in vocab_list else -1 + space_id = vocab_list.index(SPACE) if SPACE in vocab_list else -1 + + logger.info(f"BLANK id: {blank_id}") + logger.info(f"UNK id: {unk_id}") + logger.info(f"EOS id: {eos_id}") + logger.info(f"SOS id: {sos_id}") + logger.info(f"SPACE id: {space_id}") + logger.info(f"MASKCTC id: {maskctc_id}") + return token2id, id2token, vocab_list, unk_id, eos_id, blank_id diff --git a/paddlespeech/audio/text/utility.py b/paddlespeech/audio/text/utility.py new file mode 100644 index 00000000..d35785db --- /dev/null +++ b/paddlespeech/audio/text/utility.py @@ -0,0 +1,393 @@ +# 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. +"""Contains data helper functions.""" +import json +import math +import tarfile +from collections import namedtuple +from typing import List +from typing import Optional +from typing import Text + +import jsonlines +import numpy as np + +from paddlespeech.s2t.utils.log import Log + +logger = Log(__name__).getlog() + +__all__ = [ + "load_dict", "load_cmvn", "read_manifest", "rms_to_db", "rms_to_dbfs", + "max_dbfs", "mean_dbfs", "gain_db_to_ratio", "normalize_audio", "SOS", + "EOS", "UNK", "BLANK", "MASKCTC", "SPACE", "convert_samples_to_float32", + "convert_samples_from_float32" +] + +IGNORE_ID = -1 +# `sos` and `eos` using same token +SOS = "" +EOS = SOS +UNK = "" +BLANK = "" +MASKCTC = "" +SPACE = "" + + +def load_dict(dict_path: Optional[Text], maskctc=False) -> Optional[List[Text]]: + if dict_path is None: + return None + + with open(dict_path, "r") as f: + dictionary = f.readlines() + # first token is `` + # multi line: ` 0\n` + # one line: `` + # space is relpace with + char_list = [entry[:-1].split(" ")[0] for entry in dictionary] + if BLANK not in char_list: + char_list.insert(0, BLANK) + if EOS not in char_list: + char_list.append(EOS) + # for non-autoregressive maskctc model + if maskctc and MASKCTC not in char_list: + char_list.append(MASKCTC) + return char_list + + +def read_manifest( + manifest_path, + max_input_len=float('inf'), + min_input_len=0.0, + max_output_len=float('inf'), + min_output_len=0.0, + max_output_input_ratio=float('inf'), + min_output_input_ratio=0.0, ): + """Load and parse manifest file. + + Args: + manifest_path ([type]): Manifest file to load and parse. + max_input_len ([type], optional): maximum output seq length, + in seconds for raw wav, in frame numbers for feature data. + Defaults to float('inf'). + min_input_len (float, optional): minimum input seq length, + in seconds for raw wav, in frame numbers for feature data. + Defaults to 0.0. + max_output_len (float, optional): maximum input seq length, + in modeling units. Defaults to 500.0. + min_output_len (float, optional): minimum input seq length, + in modeling units. Defaults to 0.0. + max_output_input_ratio (float, optional): + maximum output seq length/output seq length ratio. Defaults to 10.0. + min_output_input_ratio (float, optional): + minimum output seq length/output seq length ratio. Defaults to 0.05. + + Raises: + IOError: If failed to parse the manifest. + + Returns: + List[dict]: Manifest parsing results. + """ + manifest = [] + with jsonlines.open(manifest_path, 'r') as reader: + for json_data in reader: + feat_len = json_data["input"][0]["shape"][ + 0] if "input" in json_data and "shape" in json_data["input"][ + 0] else 1.0 + token_len = json_data["output"][0]["shape"][ + 0] if "output" in json_data and "shape" in json_data["output"][ + 0] else 1.0 + conditions = [ + feat_len >= min_input_len, + feat_len <= max_input_len, + token_len >= min_output_len, + token_len <= max_output_len, + token_len / feat_len >= min_output_input_ratio, + token_len / feat_len <= max_output_input_ratio, + ] + if all(conditions): + manifest.append(json_data) + return manifest + + +# Tar File read +TarLocalData = namedtuple('TarLocalData', ['tar2info', 'tar2object']) + + +def parse_tar(file): + """Parse a tar file to get a tarfile object + and a map containing tarinfoes + """ + result = {} + f = tarfile.open(file) + for tarinfo in f.getmembers(): + result[tarinfo.name] = tarinfo + return f, result + + +def subfile_from_tar(file, local_data=None): + """Get subfile object from tar. + + tar:tarpath#filename + + It will return a subfile object from tar file + and cached tar file info for next reading request. + """ + tarpath, filename = file.split(':', 1)[1].split('#', 1) + + if local_data is None: + local_data = TarLocalData(tar2info={}, tar2object={}) + + assert isinstance(local_data, TarLocalData) + + if 'tar2info' not in local_data.__dict__: + local_data.tar2info = {} + if 'tar2object' not in local_data.__dict__: + local_data.tar2object = {} + + if tarpath not in local_data.tar2info: + fobj, infos = parse_tar(tarpath) + local_data.tar2info[tarpath] = infos + local_data.tar2object[tarpath] = fobj + else: + fobj = local_data.tar2object[tarpath] + infos = local_data.tar2info[tarpath] + return fobj.extractfile(infos[filename]) + + +def rms_to_db(rms: float): + """Root Mean Square to dB. + + Args: + rms ([float]): root mean square + + Returns: + float: dB + """ + return 20.0 * math.log10(max(1e-16, rms)) + + +def rms_to_dbfs(rms: float): + """Root Mean Square to dBFS. + https://fireattack.wordpress.com/2017/02/06/replaygain-loudness-normalization-and-applications/ + Audio is mix of sine wave, so 1 amp sine wave's Full scale is 0.7071, equal to -3.0103dB. + + dB = dBFS + 3.0103 + dBFS = db - 3.0103 + e.g. 0 dB = -3.0103 dBFS + + Args: + rms ([float]): root mean square + + Returns: + float: dBFS + """ + return rms_to_db(rms) - 3.0103 + + +def max_dbfs(sample_data: np.ndarray): + """Peak dBFS based on the maximum energy sample. + + Args: + sample_data ([np.ndarray]): float array, [-1, 1]. + + Returns: + float: dBFS + """ + # Peak dBFS based on the maximum energy sample. Will prevent overdrive if used for normalization. + return rms_to_dbfs(max(abs(np.min(sample_data)), abs(np.max(sample_data)))) + + +def mean_dbfs(sample_data): + """Peak dBFS based on the RMS energy. + + Args: + sample_data ([np.ndarray]): float array, [-1, 1]. + + Returns: + float: dBFS + """ + return rms_to_dbfs( + math.sqrt(np.mean(np.square(sample_data, dtype=np.float64)))) + + +def gain_db_to_ratio(gain_db: float): + """dB to ratio + + Args: + gain_db (float): gain in dB + + Returns: + float: scale in amp + """ + return math.pow(10.0, gain_db / 20.0) + + +def normalize_audio(sample_data: np.ndarray, dbfs: float=-3.0103): + """Nomalize audio to dBFS. + + Args: + sample_data (np.ndarray): input wave samples, [-1, 1]. + dbfs (float, optional): target dBFS. Defaults to -3.0103. + + Returns: + np.ndarray: normalized wave + """ + return np.maximum( + np.minimum(sample_data * gain_db_to_ratio(dbfs - max_dbfs(sample_data)), + 1.0), -1.0) + + +def _load_json_cmvn(json_cmvn_file): + """ Load the json format cmvn stats file and calculate cmvn + + Args: + json_cmvn_file: cmvn stats file in json format + + Returns: + a numpy array of [means, vars] + """ + with open(json_cmvn_file) as f: + cmvn_stats = json.load(f) + + means = cmvn_stats['mean_stat'] + variance = cmvn_stats['var_stat'] + count = cmvn_stats['frame_num'] + for i in range(len(means)): + means[i] /= count + variance[i] = variance[i] / count - means[i] * means[i] + if variance[i] < 1.0e-20: + variance[i] = 1.0e-20 + variance[i] = 1.0 / math.sqrt(variance[i]) + cmvn = np.array([means, variance]) + return cmvn + + +def _load_kaldi_cmvn(kaldi_cmvn_file): + """ Load the kaldi format cmvn stats file and calculate cmvn + + Args: + kaldi_cmvn_file: kaldi text style global cmvn file, which + is generated by: + compute-cmvn-stats --binary=false scp:feats.scp global_cmvn + + Returns: + a numpy array of [means, vars] + """ + means = [] + variance = [] + with open(kaldi_cmvn_file, 'r') as fid: + # kaldi binary file start with '\0B' + if fid.read(2) == '\0B': + logger.error('kaldi cmvn binary file is not supported, please ' + 'recompute it by: compute-cmvn-stats --binary=false ' + ' scp:feats.scp global_cmvn') + sys.exit(1) + fid.seek(0) + arr = fid.read().split() + assert (arr[0] == '[') + assert (arr[-2] == '0') + assert (arr[-1] == ']') + feat_dim = int((len(arr) - 2 - 2) / 2) + for i in range(1, feat_dim + 1): + means.append(float(arr[i])) + count = float(arr[feat_dim + 1]) + for i in range(feat_dim + 2, 2 * feat_dim + 2): + variance.append(float(arr[i])) + + for i in range(len(means)): + means[i] /= count + variance[i] = variance[i] / count - means[i] * means[i] + if variance[i] < 1.0e-20: + variance[i] = 1.0e-20 + variance[i] = 1.0 / math.sqrt(variance[i]) + cmvn = np.array([means, variance]) + return cmvn + + +def load_cmvn(cmvn_file: str, filetype: str): + """load cmvn from file. + + Args: + cmvn_file (str): cmvn path. + filetype (str): file type, optional[npz, json, kaldi]. + + Raises: + ValueError: file type not support. + + Returns: + Tuple[np.ndarray, np.ndarray]: mean, istd + """ + assert filetype in ['npz', 'json', 'kaldi'], filetype + filetype = filetype.lower() + if filetype == "json": + cmvn = _load_json_cmvn(cmvn_file) + elif filetype == "kaldi": + cmvn = _load_kaldi_cmvn(cmvn_file) + elif filetype == "npz": + eps = 1e-14 + npzfile = np.load(cmvn_file) + mean = np.squeeze(npzfile["mean"]) + std = np.squeeze(npzfile["std"]) + istd = 1 / (std + eps) + cmvn = [mean, istd] + else: + raise ValueError(f"cmvn file type no support: {filetype}") + return cmvn[0], cmvn[1] + + +def convert_samples_to_float32(samples): + """Convert sample type to float32. + + Audio sample type is usually integer or float-point. + Integers will be scaled to [-1, 1] in float32. + + PCM16 -> PCM32 + """ + float32_samples = samples.astype('float32') + if samples.dtype in np.sctypes['int']: + bits = np.iinfo(samples.dtype).bits + float32_samples *= (1. / 2**(bits - 1)) + elif samples.dtype in np.sctypes['float']: + pass + else: + raise TypeError("Unsupported sample type: %s." % samples.dtype) + return float32_samples + + +def convert_samples_from_float32(samples, dtype): + """Convert sample type from float32 to dtype. + + Audio sample type is usually integer or float-point. For integer + type, float32 will be rescaled from [-1, 1] to the maximum range + supported by the integer type. + + PCM32 -> PCM16 + """ + dtype = np.dtype(dtype) + output_samples = samples.copy() + if dtype in np.sctypes['int']: + bits = np.iinfo(dtype).bits + output_samples *= (2**(bits - 1) / 1.) + min_val = np.iinfo(dtype).min + max_val = np.iinfo(dtype).max + output_samples[output_samples > max_val] = max_val + output_samples[output_samples < min_val] = min_val + elif samples.dtype in np.sctypes['float']: + min_val = np.finfo(dtype).min + max_val = np.finfo(dtype).max + output_samples[output_samples > max_val] = max_val + output_samples[output_samples < min_val] = min_val + else: + raise TypeError("Unsupported sample type: %s." % samples.dtype) + return output_samples.astype(dtype) diff --git a/paddlespeech/s2t/exps/deepspeech2/model.py b/paddlespeech/s2t/exps/deepspeech2/model.py index 511997a7..7ab8cf85 100644 --- a/paddlespeech/s2t/exps/deepspeech2/model.py +++ b/paddlespeech/s2t/exps/deepspeech2/model.py @@ -23,7 +23,7 @@ import paddle from paddle import distributed as dist from paddle import inference -from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer +from paddlespeech.audio.text.text_featurizer import TextFeaturizer from paddlespeech.s2t.io.dataloader import BatchDataLoader from paddlespeech.s2t.models.ds2 import DeepSpeech2InferModel from paddlespeech.s2t.models.ds2 import DeepSpeech2Model diff --git a/paddlespeech/s2t/exps/u2/model.py b/paddlespeech/s2t/exps/u2/model.py index d6c68f96..cdad3b8f 100644 --- a/paddlespeech/s2t/exps/u2/model.py +++ b/paddlespeech/s2t/exps/u2/model.py @@ -27,6 +27,7 @@ from paddle import distributed as dist from paddlespeech.s2t.frontend.featurizer import TextFeaturizer from paddlespeech.s2t.io.dataloader import BatchDataLoader from paddlespeech.s2t.io.dataloader import StreamDataLoader +from paddlespeech.s2t.io.dataloader import DataLoaderFactory from paddlespeech.s2t.models.u2 import U2Model from paddlespeech.s2t.training.optimizer import OptimizerFactory from paddlespeech.s2t.training.reporter import ObsScope @@ -134,7 +135,8 @@ class U2Trainer(Trainer): msg = f"Valid: Rank: {dist.get_rank()}, " msg += "epoch: {}, ".format(self.epoch) msg += "step: {}, ".format(self.iteration) - #msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) + if not self.use_streamdata: + msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) msg += ', '.join('{}: {:>.6f}'.format(k, v) for k, v in valid_dump.items()) logger.info(msg) @@ -195,7 +197,6 @@ class U2Trainer(Trainer): except Exception as e: logger.error(e) raise e - with Timer("Eval Time Cost: {}"): total_loss, num_seen_utts = self.valid() if dist.get_world_size() > 1: @@ -224,186 +225,14 @@ class U2Trainer(Trainer): config = self.config.clone() self.use_streamdata = config.get("use_stream_data", False) if self.train: - # train/valid dataset, return token ids - if self.use_streamdata: - self.train_loader = StreamDataLoader( - manifest_file=config.train_manifest, - train_mode=True, - unit_type=config.unit_type, - batch_size=config.batch_size, - num_mel_bins=config.feat_dim, - frame_length=config.window_ms, - frame_shift=config.stride_ms, - dither=config.dither, - minlen_in=config.minlen_in, - maxlen_in=config.maxlen_in, - minlen_out=config.minlen_out, - maxlen_out=config.maxlen_out, - resample_rate=config.resample_rate, - augment_conf=config.augment_conf, # dict - shuffle_size=config.shuffle_size, - sort_size=config.sort_size, - n_iter_processes=config.num_workers, - prefetch_factor=config.prefetch_factor, - dist_sampler=config.get('dist_sampler', False), - cmvn_file=config.cmvn_file, - vocab_filepath=config.vocab_filepath, - ) - self.valid_loader = StreamDataLoader( - manifest_file=config.dev_manifest, - train_mode=False, - unit_type=config.unit_type, - batch_size=config.batch_size, - num_mel_bins=config.feat_dim, - frame_length=config.window_ms, - frame_shift=config.stride_ms, - dither=config.dither, - minlen_in=config.minlen_in, - maxlen_in=config.maxlen_in, - minlen_out=config.minlen_out, - maxlen_out=config.maxlen_out, - resample_rate=config.resample_rate, - augment_conf=config.augment_conf, # dict - shuffle_size=config.shuffle_size, - sort_size=config.sort_size, - n_iter_processes=config.num_workers, - prefetch_factor=config.prefetch_factor, - dist_sampler=config.get('dist_sampler', False), - cmvn_file=config.cmvn_file, - vocab_filepath=config.vocab_filepath, - ) - else: - self.train_loader = BatchDataLoader( - json_file=config.train_manifest, - train_mode=True, - sortagrad=config.sortagrad, - batch_size=config.batch_size, - maxlen_in=config.maxlen_in, - maxlen_out=config.maxlen_out, - minibatches=config.minibatches, - mini_batch_size=self.args.ngpu, - batch_count=config.batch_count, - batch_bins=config.batch_bins, - batch_frames_in=config.batch_frames_in, - batch_frames_out=config.batch_frames_out, - batch_frames_inout=config.batch_frames_inout, - preprocess_conf=config.preprocess_config, - n_iter_processes=config.num_workers, - subsampling_factor=1, - num_encs=1, - dist_sampler=config.get('dist_sampler', False), - shortest_first=False) - - self.valid_loader = BatchDataLoader( - json_file=config.dev_manifest, - train_mode=False, - sortagrad=False, - batch_size=config.batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=self.args.ngpu, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config.preprocess_config, - n_iter_processes=config.num_workers, - subsampling_factor=1, - num_encs=1, - dist_sampler=config.get('dist_sampler', False), - shortest_first=False) + self.train_loader = DataLoaderFactory.get_dataloader('train', config, self.args) + self.valid_loader = DataLoaderFactory.get_dataloader('valid', config, self.args) logger.info("Setup train/valid Dataloader!") else: decode_batch_size = config.get('decode', dict()).get( 'decode_batch_size', 1) - # test dataset, return raw text - if self.use_streamdata: - self.test_loader = StreamDataLoader( - manifest_file=config.test_manifest, - train_mode=False, - unit_type=config.unit_type, - batch_size=config.batch_size, - num_mel_bins=config.feat_dim, - frame_length=config.window_ms, - frame_shift=config.stride_ms, - dither=0.0, - minlen_in=0.0, - maxlen_in=float('inf'), - minlen_out=0, - maxlen_out=float('inf'), - resample_rate=config.resample_rate, - augment_conf=config.augment_conf, # dict - shuffle_size=config.shuffle_size, - sort_size=config.sort_size, - n_iter_processes=config.num_workers, - prefetch_factor=config.prefetch_factor, - dist_sampler=config.get('dist_sampler', False), - cmvn_file=config.cmvn_file, - vocab_filepath=config.vocab_filepath, - ) - self.align_loader = StreamDataLoader( - manifest_file=config.test_manifest, - train_mode=False, - unit_type=config.unit_type, - batch_size=config.batch_size, - num_mel_bins=config.feat_dim, - frame_length=config.window_ms, - frame_shift=config.stride_ms, - dither=0.0, - minlen_in=0.0, - maxlen_in=float('inf'), - minlen_out=0, - maxlen_out=float('inf'), - resample_rate=config.resample_rate, - augment_conf=config.augment_conf, # dict - shuffle_size=config.shuffle_size, - sort_size=config.sort_size, - n_iter_processes=config.num_workers, - prefetch_factor=config.prefetch_factor, - dist_sampler=config.get('dist_sampler', False), - cmvn_file=config.cmvn_file, - vocab_filepath=config.vocab_filepath, - ) - else: - self.test_loader = BatchDataLoader( - json_file=config.test_manifest, - train_mode=False, - sortagrad=False, - batch_size=decode_batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config.preprocess_config, - n_iter_processes=1, - subsampling_factor=1, - num_encs=1) - - self.align_loader = BatchDataLoader( - json_file=config.test_manifest, - train_mode=False, - sortagrad=False, - batch_size=decode_batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config.preprocess_config, - n_iter_processes=1, - subsampling_factor=1, - num_encs=1) + self.test_loader = DataLoaderFactory.get_dataloader('test', config, self.args) + self.align_loader = DataLoaderFactory.get_dataloader('align', config, self.args) logger.info("Setup test/align Dataloader!") def setup_model(self): diff --git a/paddlespeech/s2t/exps/u2_kaldi/model.py b/paddlespeech/s2t/exps/u2_kaldi/model.py index bc995977..cb015c11 100644 --- a/paddlespeech/s2t/exps/u2_kaldi/model.py +++ b/paddlespeech/s2t/exps/u2_kaldi/model.py @@ -25,7 +25,7 @@ from paddle import distributed as dist from paddlespeech.s2t.frontend.featurizer import TextFeaturizer from paddlespeech.s2t.frontend.utility import load_dict -from paddlespeech.s2t.io.dataloader import BatchDataLoader +from paddlespeech.s2t.io.dataloader import DataLoaderFactory from paddlespeech.s2t.models.u2 import U2Model from paddlespeech.s2t.training.optimizer import OptimizerFactory from paddlespeech.s2t.training.scheduler import LRSchedulerFactory @@ -104,7 +104,8 @@ class U2Trainer(Trainer): @paddle.no_grad() def valid(self): self.model.eval() - logger.info(f"Valid Total Examples: {len(self.valid_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Valid Total Examples: {len(self.valid_loader.dataset)}") valid_losses = defaultdict(list) num_seen_utts = 1 total_loss = 0.0 @@ -131,7 +132,8 @@ class U2Trainer(Trainer): msg = f"Valid: Rank: {dist.get_rank()}, " msg += "epoch: {}, ".format(self.epoch) msg += "step: {}, ".format(self.iteration) - msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) + if not self.use_streamdata: + msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) msg += ', '.join('{}: {:>.6f}'.format(k, v) for k, v in valid_dump.items()) logger.info(msg) @@ -150,8 +152,8 @@ class U2Trainer(Trainer): # paddle.jit.save(script_model, script_model_path) self.before_train() - - logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") while self.epoch < self.config.n_epoch: with Timer("Epoch-Train Time Cost: {}"): self.model.train() @@ -162,7 +164,8 @@ class U2Trainer(Trainer): msg = "Train: Rank: {}, ".format(dist.get_rank()) msg += "epoch: {}, ".format(self.epoch) msg += "step: {}, ".format(self.iteration) - msg += "batch : {}/{}, ".format(batch_index + 1, + if not self.use_streamdata: + msg += "batch : {}/{}, ".format(batch_index + 1, len(self.train_loader)) msg += "lr: {:>.8f}, ".format(self.lr_scheduler()) msg += "data time: {:>.3f}s, ".format(dataload_time) @@ -198,87 +201,23 @@ class U2Trainer(Trainer): self.new_epoch() def setup_dataloader(self): - config = self.config.clone() - # train/valid dataset, return token ids - self.train_loader = BatchDataLoader( - json_file=config.train_manifest, - train_mode=True, - sortagrad=False, - batch_size=config.batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=self.args.ngpu, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config.preprocess_config, - n_iter_processes=config.num_workers, - subsampling_factor=1, - num_encs=1) - - self.valid_loader = BatchDataLoader( - json_file=config.dev_manifest, - train_mode=False, - sortagrad=False, - batch_size=config.batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=self.args.ngpu, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=None, - n_iter_processes=config.num_workers, - subsampling_factor=1, - num_encs=1) - - decode_batch_size = config.get('decode', dict()).get( - 'decode_batch_size', 1) - # test dataset, return raw text - self.test_loader = BatchDataLoader( - json_file=config.test_manifest, - train_mode=False, - sortagrad=False, - batch_size=decode_batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=None, - n_iter_processes=1, - subsampling_factor=1, - num_encs=1) - - self.align_loader = BatchDataLoader( - json_file=config.test_manifest, - train_mode=False, - sortagrad=False, - batch_size=decode_batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=None, - n_iter_processes=1, - subsampling_factor=1, - num_encs=1) - logger.info("Setup train/valid/test/align Dataloader!") + self.use_streamdata = config.get("use_stream_data", False) + if self.train: + config = self.config.clone() + self.train_loader = DataLoaderFactory.get_dataloader('train', config, self.args) + config = self.config.clone() + config['preprocess_config'] = None + self.valid_loader = DataLoaderFactory.get_dataloader('valid', config, self.args) + logger.info("Setup train/valid Dataloader!") + else: + config = self.config.clone() + config['preprocess_config'] = None + self.test_loader = DataLoaderFactory.get_dataloader('test', config, self.args) + config = self.config.clone() + config['preprocess_config'] = None + self.align_loader = DataLoaderFactory.get_dataloader('align', config, self.args) + logger.info("Setup test/align Dataloader!") + def setup_model(self): config = self.config @@ -406,7 +345,8 @@ class U2Tester(U2Trainer): def test(self): assert self.args.result_file self.model.eval() - logger.info(f"Test Total Examples: {len(self.test_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Test Total Examples: {len(self.test_loader.dataset)}") stride_ms = self.config.stride_ms error_rate_type = None diff --git a/paddlespeech/s2t/exps/u2_st/model.py b/paddlespeech/s2t/exps/u2_st/model.py index 6a32eda7..60382543 100644 --- a/paddlespeech/s2t/exps/u2_st/model.py +++ b/paddlespeech/s2t/exps/u2_st/model.py @@ -25,7 +25,7 @@ import paddle from paddle import distributed as dist from paddlespeech.s2t.frontend.featurizer import TextFeaturizer -from paddlespeech.s2t.io.dataloader import BatchDataLoader +from paddlespeech.s2t.io.dataloader import DataLoaderFactory from paddlespeech.s2t.models.u2_st import U2STModel from paddlespeech.s2t.training.optimizer import OptimizerFactory from paddlespeech.s2t.training.reporter import ObsScope @@ -120,7 +120,8 @@ class U2STTrainer(Trainer): @paddle.no_grad() def valid(self): self.model.eval() - logger.info(f"Valid Total Examples: {len(self.valid_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Valid Total Examples: {len(self.valid_loader.dataset)}") valid_losses = defaultdict(list) num_seen_utts = 1 total_loss = 0.0 @@ -153,7 +154,8 @@ class U2STTrainer(Trainer): msg = f"Valid: Rank: {dist.get_rank()}, " msg += "epoch: {}, ".format(self.epoch) msg += "step: {}, ".format(self.iteration) - msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) + if not self.use_streamdata: + msg += "batch: {}/{}, ".format(i + 1, len(self.valid_loader)) msg += ', '.join('{}: {:>.6f}'.format(k, v) for k, v in valid_dump.items()) logger.info(msg) @@ -172,8 +174,8 @@ class U2STTrainer(Trainer): # paddle.jit.save(script_model, script_model_path) self.before_train() - - logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") while self.epoch < self.config.n_epoch: with Timer("Epoch-Train Time Cost: {}"): self.model.train() @@ -191,7 +193,8 @@ class U2STTrainer(Trainer): self.train_batch(batch_index, batch, msg) self.after_train_batch() report('iter', batch_index + 1) - report('total', len(self.train_loader)) + if not self.use_streamdata: + report('total', len(self.train_loader)) report('reader_cost', dataload_time) observation['batch_cost'] = observation[ 'reader_cost'] + observation['step_cost'] @@ -241,79 +244,18 @@ class U2STTrainer(Trainer): load_transcript = True if config.model_conf.asr_weight > 0 else False + config = self.config.clone() + config['load_transcript'] = load_transcript + self.use_streamdata = config.get("use_stream_data", False) if self.train: - # train/valid dataset, return token ids - self.train_loader = BatchDataLoader( - json_file=config.train_manifest, - train_mode=True, - sortagrad=False, - batch_size=config.batch_size, - maxlen_in=config.maxlen_in, - maxlen_out=config.maxlen_out, - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config. - preprocess_config, # aug will be off when train_mode=False - n_iter_processes=config.num_workers, - subsampling_factor=1, - load_aux_output=load_transcript, - num_encs=1, - dist_sampler=True) - - self.valid_loader = BatchDataLoader( - json_file=config.dev_manifest, - train_mode=False, - sortagrad=False, - batch_size=config.batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config. - preprocess_config, # aug will be off when train_mode=False - n_iter_processes=config.num_workers, - subsampling_factor=1, - load_aux_output=load_transcript, - num_encs=1, - dist_sampler=False) + self.train_loader = DataLoaderFactory.get_dataloader('train', config, self.args) + self.valid_loader = DataLoaderFactory.get_dataloader('valid', config, self.args) logger.info("Setup train/valid Dataloader!") else: - # test dataset, return raw text - decode_batch_size = config.get('decode', dict()).get( - 'decode_batch_size', 1) - self.test_loader = BatchDataLoader( - json_file=config.test_manifest, - train_mode=False, - sortagrad=False, - batch_size=decode_batch_size, - maxlen_in=float('inf'), - maxlen_out=float('inf'), - minibatches=0, - mini_batch_size=1, - batch_count='auto', - batch_bins=0, - batch_frames_in=0, - batch_frames_out=0, - batch_frames_inout=0, - preprocess_conf=config. - preprocess_config, # aug will be off when train_mode=False - n_iter_processes=config.num_workers, - subsampling_factor=1, - num_encs=1, - dist_sampler=False) - + self.test_loader = DataLoaderFactory.get_dataloader('test', config, self.args) logger.info("Setup test Dataloader!") + def setup_model(self): config = self.config model_conf = config @@ -468,7 +410,8 @@ class U2STTester(U2STTrainer): def test(self): assert self.args.result_file self.model.eval() - logger.info(f"Test Total Examples: {len(self.test_loader.dataset)}") + if not self.use_streamdata: + logger.info(f"Test Total Examples: {len(self.test_loader.dataset)}") decode_cfg = self.config.decode bleu_func = bleu_score.char_bleu if decode_cfg.error_rate_type == 'char-bleu' else bleu_score.bleu diff --git a/paddlespeech/s2t/io/dataloader.py b/paddlespeech/s2t/io/dataloader.py index cb466ecb..83183024 100644 --- a/paddlespeech/s2t/io/dataloader.py +++ b/paddlespeech/s2t/io/dataloader.py @@ -30,9 +30,10 @@ from paddlespeech.s2t.io.reader import LoadInputsAndTargets from paddlespeech.s2t.utils.log import Log import paddlespeech.audio.streamdata as streamdata -from paddlespeech.s2t.frontend.featurizer.text_featurizer import TextFeaturizer +from paddlespeech.audio.text.text_featurizer import TextFeaturizer +from yacs.config import CfgNode -__all__ = ["BatchDataLoader"] +__all__ = ["BatchDataLoader", "StreamDataLoader"] logger = Log(__name__).getlog() @@ -60,12 +61,36 @@ def batch_collate(x): """ return x[0] +def read_preprocess_cfg(preprocess_conf_file): + augment_conf = dict() + preprocess_cfg = CfgNode(new_allowed=True) + preprocess_cfg.merge_from_file(preprocess_conf_file) + for idx, process in enumerate(preprocess_cfg["process"]): + opts = dict(process) + process_type = opts.pop("type") + if process_type == 'time_warp': + augment_conf['max_w'] = process['max_time_warp'] + augment_conf['w_inplace'] = process['inplace'] + augment_conf['w_mode'] = process['mode'] + if process_type == 'freq_mask': + augment_conf['max_f'] = process['F'] + augment_conf['num_f_mask'] = process['n_mask'] + augment_conf['f_inplace'] = process['inplace'] + augment_conf['f_replace_with_zero'] = process['replace_with_zero'] + if process_type == 'time_mask': + augment_conf['max_t'] = process['T'] + augment_conf['num_t_mask'] = process['n_mask'] + augment_conf['t_inplace'] = process['inplace'] + augment_conf['t_replace_with_zero'] = process['replace_with_zero'] + return augment_conf + class StreamDataLoader(): def __init__(self, manifest_file: str, train_mode: bool, unit_type: str='char', batch_size: int=0, + preprocess_conf=None, num_mel_bins=80, frame_length=25, frame_shift=10, @@ -75,7 +100,6 @@ class StreamDataLoader(): minlen_out: float=0.0, maxlen_out: float=float('inf'), resample_rate: int=16000, - augment_conf: dict=None, shuffle_size: int=10000, sort_size: int=1000, n_iter_processes: int=1, @@ -95,12 +119,27 @@ class StreamDataLoader(): self.feat_dim = num_mel_bins self.vocab_size = text_featurizer.vocab_size + augment_conf = read_preprocess_cfg(preprocess_conf) + # The list of shard shardlist = [] with open(manifest_file, "r") as f: for line in f.readlines(): shardlist.append(line.strip()) - + world_size = 1 + try: + world_size = paddle.distributed.get_world_size() + except Exception as e: + logger.warninig(e) + logger.warninig("can not get world_size using paddle.distributed.get_world_size(), use world_size=1") + assert(len(shardlist) >= world_size, "the length of shard list should >= number of gpus/xpus/...") + + update_n_iter_processes = int(max(min(len(shardlist)/world_size - 1, self.n_iter_processes), 0)) + logger.info(f"update_n_iter_processes {update_n_iter_processes}") + if update_n_iter_processes != self.n_iter_processes: + self.n_iter_processes = update_n_iter_processes + logger.info(f"change nun_workers to {self.n_iter_processes}") + if self.dist_sampler: base_dataset = streamdata.DataPipeline( streamdata.SimpleShardList(shardlist), @@ -116,16 +155,16 @@ class StreamDataLoader(): ) self.dataset = base_dataset.append_list( - streamdata.tokenize(symbol_table), - streamdata.data_filter(frame_shift=frame_shift, max_length=maxlen_in, min_length=minlen_in, token_max_length=maxlen_out, token_min_length=minlen_in), - streamdata.resample(resample_rate=resample_rate), - streamdata.compute_fbank(num_mel_bins=num_mel_bins, frame_length=frame_length, frame_shift=frame_shift, dither=dither), - streamdata.spec_aug(**augment_conf) if train_mode else streamdata.placeholder(), # num_t_mask=2, num_f_mask=2, max_t=40, max_f=30, max_w=80) + streamdata.audio_tokenize(symbol_table), + streamdata.audio_data_filter(frame_shift=frame_shift, max_length=maxlen_in, min_length=minlen_in, token_max_length=maxlen_out, token_min_length=minlen_out), + streamdata.audio_resample(resample_rate=resample_rate), + streamdata.audio_compute_fbank(num_mel_bins=num_mel_bins, frame_length=frame_length, frame_shift=frame_shift, dither=dither), + streamdata.audio_spec_aug(**augment_conf) if train_mode else streamdata.placeholder(), # num_t_mask=2, num_f_mask=2, max_t=40, max_f=30, max_w=80) streamdata.shuffle(shuffle_size), streamdata.sort(sort_size=sort_size), streamdata.batched(batch_size), - streamdata.padding(), - streamdata.cmvn(cmvn_file) + streamdata.audio_padding(), + streamdata.audio_cmvn(cmvn_file) ) if paddle.__version__ >= '2.3.2': @@ -295,3 +334,119 @@ class BatchDataLoader(): echo += f"shortest_first: {self.shortest_first}, " echo += f"file: {self.json_file}" return echo + + +class DataLoaderFactory(): + @staticmethod + def get_dataloader(mode: str, config, args): + config = config.clone() + use_streamdata = config.get("use_stream_data", False) + if use_streamdata: + if mode == 'train': + config['manifest'] = config.train_manifest + config['train_mode'] = True + elif mode == 'valid': + config['manifest'] = config.dev_manifest + config['train_mode'] = False + elif model == 'test' or mode == 'align': + config['manifest'] = config.test_manifest + config['train_mode'] = False + config['dither'] = 0.0 + config['minlen_in'] = 0.0 + config['maxlen_in'] = float('inf') + config['minlen_out'] = 0 + config['maxlen_out'] = float('inf') + config['dist_sampler'] = False + else: + raise KeyError("not valid mode type!!, please input one of 'train, valid, test, align'") + return StreamDataLoader( + manifest_file=config.manifest, + train_mode=config.train_mode, + unit_type=config.unit_type, + preprocess_conf=config.preprocess_config, + batch_size=config.batch_size, + num_mel_bins=config.feat_dim, + frame_length=config.window_ms, + frame_shift=config.stride_ms, + dither=config.dither, + minlen_in=config.minlen_in, + maxlen_in=config.maxlen_in, + minlen_out=config.minlen_out, + maxlen_out=config.maxlen_out, + resample_rate=config.resample_rate, + shuffle_size=config.shuffle_size, + sort_size=config.sort_size, + n_iter_processes=config.num_workers, + prefetch_factor=config.prefetch_factor, + dist_sampler=config.dist_sampler, + cmvn_file=config.cmvn_file, + vocab_filepath=config.vocab_filepath, + ) + else: + if mode == 'train': + config['manifest'] = config.train_manifest + config['train_mode'] = True + config['mini_batch_size'] = args.ngpu + config['subsampling_factor'] = 1 + config['num_encs'] = 1 + elif mode == 'valid': + config['manifest'] = config.dev_manifest + config['train_mode'] = False + config['sortagrad'] = False + config['maxlen_in'] = float('inf') + config['maxlen_out'] = float('inf') + config['minibatches'] = 0 + config['mini_batch_size'] = args.ngpu + config['batch_count'] = 'auto' + config['batch_bins'] = 0 + config['batch_frames_in'] = 0 + config['batch_frames_out'] = 0 + config['batch_frames_inout'] = 0 + config['subsampling_factor'] = 1 + config['num_encs'] = 1 + config['shortest_first'] = False + elif mode == 'test' or mode == 'align': + config['manifest'] = config.test_manifest + config['train_mode'] = False + config['sortagrad'] = False + config['batch_size'] = config.get('decode', dict()).get( + 'decode_batch_size', 1) + config['maxlen_in'] = float('inf') + config['maxlen_out'] = float('inf') + config['minibatches'] = 0 + config['mini_batch_size'] = 1 + config['batch_count'] = 'auto' + config['batch_bins'] = 0 + config['batch_frames_in'] = 0 + config['batch_frames_out'] = 0 + config['batch_frames_inout'] = 0 + config['num_workers'] = 1 + config['subsampling_factor'] = 1 + config['num_encs'] = 1 + config['dist_sampler'] = False + config['shortest_first'] = False + else: + raise KeyError("not valid mode type!!, please input one of 'train, valid, test, align'") + + return BatchDataLoader( + json_file=config.manifest, + train_mode=config.train_mode, + sortagrad=config.sortagrad, + batch_size=config.batch_size, + maxlen_in=config.maxlen_in, + maxlen_out=config.maxlen_out, + minibatches=config.minibatches, + mini_batch_size=config.mini_batch_size, + batch_count=config.batch_count, + batch_bins=config.batch_bins, + batch_frames_in=config.batch_frames_in, + batch_frames_out=config.batch_frames_out, + batch_frames_inout=config.batch_frames_inout, + preprocess_conf=config.preprocess_config, + n_iter_processes=config.num_workers, + subsampling_factor=config.subsampling_factor, + load_aux_output=config.get('load_transcript', None), + num_encs=config.num_encs, + dist_sampler=config.dist_sampler, + shortest_first=config.shortest_first) + diff --git a/paddlespeech/s2t/models/u2/u2.py b/paddlespeech/s2t/models/u2/u2.py index b4b61666..e3d0edb7 100644 --- a/paddlespeech/s2t/models/u2/u2.py +++ b/paddlespeech/s2t/models/u2/u2.py @@ -48,9 +48,9 @@ from paddlespeech.s2t.utils import checkpoint from paddlespeech.s2t.utils import layer_tools from paddlespeech.s2t.utils.ctc_utils import remove_duplicates_and_blank from paddlespeech.s2t.utils.log import Log -from paddlespeech.s2t.utils.tensor_utils import add_sos_eos -from paddlespeech.s2t.utils.tensor_utils import pad_sequence -from paddlespeech.s2t.utils.tensor_utils import th_accuracy +from paddlespeech.audio.utils.tensor_utils import add_sos_eos +from paddlespeech.audio.utils.tensor_utils import pad_sequence +from paddlespeech.audio.utils.tensor_utils import th_accuracy from paddlespeech.s2t.utils.utility import log_add from paddlespeech.s2t.utils.utility import UpdateConfig diff --git a/paddlespeech/s2t/models/u2_st/u2_st.py b/paddlespeech/s2t/models/u2_st/u2_st.py index 6447753c..00ded912 100644 --- a/paddlespeech/s2t/models/u2_st/u2_st.py +++ b/paddlespeech/s2t/models/u2_st/u2_st.py @@ -38,8 +38,8 @@ from paddlespeech.s2t.modules.mask import subsequent_mask from paddlespeech.s2t.utils import checkpoint from paddlespeech.s2t.utils import layer_tools from paddlespeech.s2t.utils.log import Log -from paddlespeech.s2t.utils.tensor_utils import add_sos_eos -from paddlespeech.s2t.utils.tensor_utils import th_accuracy +from paddlespeech.audio.utils.tensor_utils import add_sos_eos +from paddlespeech.audio.utils.tensor_utils import th_accuracy from paddlespeech.s2t.utils.utility import UpdateConfig __all__ = ["U2STModel", "U2STInferModel"] From 7a436276db13f249306a2f2a6ce9998cf9fb4905 Mon Sep 17 00:00:00 2001 From: Jackwaterveg <87408988+Jackwaterveg@users.noreply.github.com> Date: Thu, 7 Jul 2022 11:25:41 +0800 Subject: [PATCH 26/27] test=doc --- docs/source/install_cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/install_cn.md b/docs/source/install_cn.md index 9294a2bc..75f4174e 100644 --- a/docs/source/install_cn.md +++ b/docs/source/install_cn.md @@ -60,7 +60,7 @@ pip install paddlespeech -i https://pypi.tuna.tsinghua.edu.cn/simple ``` > 如果您在使用 paddlespeech 的过程中遇到关于下载 **nltk_data** 的问题,可能是您的网络不佳,我们建议您下载我们提供的 [nltk_data](https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz) 并解压缩到您的 `${HOME}` 目录下。 -> 如果出现 paddlespeech-ctcdecoders 无法安装的问题,无须担心,这不影响使用。 +> 如果出现 paddlespeech-ctcdecoders 无法安装的问题,无须担心,这个只影响 deepspeech2 模型的推理,不影响其他模型的使用。 ## 中等: 获取主要功能(支持 Linux, Mac 和 Windows 不支持训练) 如果你想要使用 `paddlespeech` 的主要功能。你需要完成以下几个步骤 From 210b8a562a5271ca75a40f4eb860122e4fbf67f5 Mon Sep 17 00:00:00 2001 From: Jackwaterveg <87408988+Jackwaterveg@users.noreply.github.com> Date: Thu, 7 Jul 2022 11:34:13 +0800 Subject: [PATCH 27/27] test=doc --- docs/source/install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/install.md b/docs/source/install.md index 4291b87a..e8bd5adf 100644 --- a/docs/source/install.md +++ b/docs/source/install.md @@ -63,7 +63,7 @@ pip install paddlespeech -i https://pypi.tuna.tsinghua.edu.cn/simple ``` > If you encounter problem with downloading **nltk_data** while using paddlespeech, it maybe due to your poor network, we suggest you download the [nltk_data](https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz) provided by us, and extract it to your `${HOME}`. -> If you fail to install paddlespeech-ctcdecoders, it doesn't matter. +> If you fail to install paddlespeech-ctcdecoders, you only can not use deepspeech2 model inference. For other models, it doesn't matter. ## Medium: Get the Major Functions (Support Linux, mac and windows not support training) If you want to get the major function of `paddlespeech`, you need to do following steps:

{nXEt*8rB5OA8T+Fa|L1?XGSy(y$M0#WyWc_UpWK;x z){kl#IMe@|YpeMlt_-!!X1;iUc8!1-p1D;`_v?ZrTVk_Wb@Ewq4+S zm)*}G)U)m~ZfQ<(#wsd0iDl(v71Mr1 zvHL>*C|OI^Jq2MMa(oy0#p*-;76tf65Qd5AHOo5UbftiDO#GBw8|C5{e{}QYBGxLK zmFp*f%AlEZcdVcy+-H8h&`_uO3BzHH!Zko4#5 zJOgl*n7%UY^;%&6qfRL7QMp6T%dGLy)aMhAJpwtt(i*0OXc;60vfg z2fTcei_V9e)T?Poj~Mfl_Ipx}!MYP>QYHejEPwkqM(Ge)&@1Re6Yq~`KIGEmP;nyi z{EDLDS3wrjG)tHN6G=R`A1dG&9IEO?MBi@rU3K_WHMj66{ugrLUiW{c6Js+M={3+; zMswS>2Fa>f7wTk34VlN&OP>HeQ-4x#o;pGg*$FSYd}YP!vPjlqEo)el*T2H7Z;0ND z;ED`}&38hs0@_qhsjF@plP%uN8P0_Oi+yluK9<_X=ZFt+_zp0+7Sm{Q!3=hQ?c6}8 zDAZ9HD|~t-vM44i#;kMtMDQh*Bzxa5cXP!1?-5GJVD!RsT)4HES-ZER-R4t{-u%vp z6YlbhqKcvqFWUjC#-3m4v0*0$Z$c4RirvY4@P3K;2OCKGA`kWr$60$b0xrStoJD(} zc#t&TNv^Vx__MFwZmovsD&2M}7WfkkX%0Wy+4NHZ*f$qdbf<7d$(R5^<-HV-oR>g zMnckxoWA)8fJ(yZ*C+on0LjuWCFC-Gc;!F|^NF66{72io2uzj<`r)bHGsa_Iiwce8 zLmjiTWES``|55vSeIQMhS8@^m6fBYE!E76|BFiadRQQp#j?zh7pPEuZNMtCF8rShm z%I><&Jsg%!gziTc^V?q9f4;Z&HPjHgL5KpAjn9^;>(bynu~3&IR%($1Flg~1&^sxG zwCZW)6z)l`@A(hBNrJ^*aadO|&FgJQa9iOOOAhekBha5=L-?0o7IJj4LEb$rou?zdbgJVqZ#H&7V2`B^he8&aI8*f@mT-r_M-aYMwX==tTi5-XusIF5MEKdN;{vVsxkk(_%M9u zdlwxxcQZdJ*%`VW@%LNmRlu;d?6T|v#l>Bg8NM~*LKWOZ9~>qhM(oZcTDw92fR|I3 zgiGG^usX-zc7xaMax%dUK3sjgn~ITA$wfE%opx~1TH)6k|& z3bC~}TJ)uXspI+MpGzY$!@}vL+QhVgWEnH>TMeGB2+q$(RKMA+TJukSXiz8xIeR7& zYhM$k_i7Y^@4=8d>^9ponn&IVX#T--O={lOxODPFm~&*wvhH=%qd^Uv-<`v@<7H?LSHL1@nv9 zMf%I)e&)f7gV>g?%Y=<9Cl)E+O1VdhR@EtMmLl2cgKkcZl}npFg=-H5!z2}`gq=EM z_pV!aZ)_NfZ5gJ>29S`HgZ0Jk#M}%GOXVfg1IBU1IkzP0F|;a~zx>oITYs6qiRev~ zT_gJT6i*%N>b-TfU5$w^*VFE!;o)V)&*~|1EZ(%Hd;a|kzy6ro{yS_=lH@w|o<@qp zkJdu0MWo+hS`;%=+oJdWc00fS1^Maz#J?grTo1h?8smLuJe1fn0HZ@UD3>BRL%2T- zvAUzCst;os$4v!T=W6z%tpC!FnTb_aApe;^i-P?bdQute9HC3@!XDlPo~7E}c9rB* zefUKBF%$<}qumnX>=8#Lcn!R%3^0)ZQ!evHA4h8&jCRNjBawW~)KR3WHl_73Z*LRM zK&yGQF0y76zl`Gx>mP6i8a_2$s5DW%zcMh8%y4t2#^v*HmNDEJJP`Ao8e`$xaMTAdH0u{~6_ z$IiKnnZFOM)SQ}AyKBh8Fq2yDWo}uOF0?6WxQh}1Y^nyq)Aj_sjc062etkc#bb9VjW>(y&tgv0@nrJ1F@LpW7W_13e<)+V3D%DHiWI4n-?FeNj8f=qrLR02 zlI^W~>AQ8zS(eHBN|$LAd)Feu?yyN=F`y=qzr*dhgl#_zu5eaY^amHcT!^3ymi z)ivdx`>oXVu1tFFM*HgOiE5HMH_m?wNzXmrju}FF&L zM0{rgto})1QVU~X@ZrxtTT!Bmve&*>WTJ{t|{^`KWAwQ8IO;zY)>}UETF6W4@7}e;vJ8$;Y z9s2u|ZI`qyMw%xc@gkJ6A@LE~3Z87EZC|86sfnl2qPcTwxd>Jn-S}_SbHxt=hm*t; zw+%$t-l`fYv0iV4qBdCa^X}}c%Mc=>C{wGRGfU>!nbLB=@zGuh#pic~kLi6uuKf_N zCW<@R5S*4jzZ9WAcT&|FO(927|5Q+)IVm-j#{hE&xtxGEd*~trW_9|*7u-eO81gza z!rp+1G0z5}weHecqXmM`vG;UyJZ92n|)8YLtxBz4@rG(s#0Y!}?7znLT+d zOA5`pl=b#o?FfJaxgp#Cb4AmX1o_eL&^z80&jNgXne_ifXlp%Jat{4uXpA=Nz@2COaXr&ebuR zyD;|Gs2#i@x`uo$c~Cl@c#9&htAa8WvBVG4o`@EV)QqhW(A&*2*}=^|+WqBi(j2B|cVIEJ)6jZfiPkjij_x8~I5gjUK0VAE$I zgoPxhl6}Zv5#HbSNE$<^8EntvkozknuVGw!Xbr#7DO%k2FW}CZ_%-)>sb!1T-O|*dfwl0V zuN$w;3ZjFX3%`M5|S44BfWF@W@&C zPRSYU67KL8|4z|El;%2Gm$$d;+Xi9g>{WtMesQhJ@n6H@{0lGKF)4e7yV`K#_lb>u zfitn*Ok)vR{rI+eMrHkzG-Pfos3h z+KZ|g9ZwBu4*#=2PS{?4<8(phPOpv9_`BsaRRs@CCQTW*0kFh1Dpr9h-q(0XMv7sv zCh=3InS5I&qB8{k>~WOXU22WCbUU1B*H}M_MzvUp?h%ff#A$VjSI%NH#8S$Mz%Ns> z(az%SF8+C{H-x)`c`BGMqkt5;O%btM+xOwK)Hp1n@}J@T6<(tW?x?qz_7l;tr{gzF z&gAMr5k9f6d(gNNHCLal;zYh~=JL3GM z5^E`^nbOX1{K&CCV~bY`dJYm z*it8r@5tcHX-k&*40mKMpWSV9dsm)~8NxO|R^NfoB#gtJPo#D6|3sU9j*HG8ZSM3N zMHZVLRQg|qSCrQawfL+^Ys&;-VgB^%$A}E0jBhQj*!FI7Q(&A2AtdkF%ezZhR?wkX z#UOIU1Gy++Brk(N@-;s&pLp`~;*T$+j1}13SYbHcmWS&to9B67AS(iLv0>NC54!#T zx&Q*F8&aE>Gq|hmGpf6_Jg)b5jmU*sTc!6`GJgA}lm8PCm~oq1EkB;xvx~?~t3%Ku}jk`HzKE4n< zbMO6$!6ed!@+?7C#*8ai{c6N21gcv*ag7+UN!(lxisEK+-A`70WhWPaiz#?>a7_3` zT4nyNeFr(4CQV1sb*M(Q`}y>>&W&PqaY{?rX zh9z$-p~=hlA>Vus|JGrowma3voOVB!O)5ZA<5~tX5`>c>(rxS0Et?kU$J++BLttyS zJ#XiM9jBsLnSi^e_J2HGB7yADS!Zr7@-SwaGx&R>Wzr0n>(P>^#g5J2ysT|a@Q<4I z%O$bAvs2fjkLlwe!r5-G2MN?9;5S`?ALi7I7AFdZ%Obln|1VY;0ptmIaPP`XPv2tJ zwoDQFgcJ<_crcnPpZo-tsp=kA$MQVm7!fGkb-vk6cw-#&O#52P|EzW42L(~uJgej4 zYw?-pax#YxkKz+em`p@9>aLmT9%S9G3mEF+h`U~Uut#&oJUPCi{tsK;-n|%}pb?@F zeXrmTqGUkpp#H~jOEe=3XtM7@-Mucg3a~=a&8;oX;;=AqPGO7t{bkC6V>)rE<2p4o+(+Cd8x z(CLBSYgxAGg+KLhjoaMIi`^@wmN)nK-SO}#qR=0Oj<6T)(jWrse%)<-Ug|3QRB({< z-}U=IyO}2;Jlibf60L|>ArAe|Dz43UZ@%o|b5LCu56S9A1DV~fHeUnbdG@hEu1_Nt zam61(JN^8>AM|432~qOXC`~!y@M&TR&}%dCOOxaD1g2=d)KIjN<&NUI4juMwmas7| zG(SGp`u;3sFnjLNzj0TmrG-bg9+$=aoZo@i!k)sp>1cJGsDpu473uZc;2#p9VPq+h z6l~}7iGwY|?hl1KNwF34NnKrx~VLogFIM-ZaiJ3cPDx0U3K>DI}H3 z*?PXc!zMO6(Mj|T;*WkH^<+&1F9fQL-ZE8px~jONJWG}DBTJlga^6gVQkV{hpv?1` z7FRoZt1UPxso4Zd$2m4!JWCxf?v`G4ZU-)Vw*qGU) zkMk^ktZQr}?f?y3*6D9lq@D;Q$dIQ`Wsvjn<++txu(Vgd?pwp_w;p{5XA%B>R~2+d zwwVD*aqXk^68y{}V!-H_-aX>&k3H*44wXh=%sINiJXP<`9B8@+=P*`%y5@r_C47@o zy~5SF=0+-JyM{c!IZY;Xd_KnW^rcl)7nd)AJ3`iJMzw2Gy1v5eu;J~D)IoUaJ6@>W zv)gvKqQ)H+v4CbD0}NE&;w|{l%XmQ8EwTA~Mn)aY$MA)g6qdg{I7O|6_U^hD{Gxj$ zuiNe!Y#n4A4H*Z81k>FMtPCRm?0fVN%05)Q$Lk&&^O$E>SsC(@YU@eb^Kcu@Um}#r z0_RU`<>tgTokV34@de!n=^Eef%7OO6AN&SRlzj>da3pJ+s%3nHcCkxl&$gAkoMgY{ z`7PpP(Xg<)4xxTYV$0&hi}YPNI^tr}{S=_JVK@+1t|s4CU@>0cBrUw8_yd$&A2}4p z2}xNPp-ea`q1q&1x+NT`g*MGVv)^WW zu6-@!e+<>HDV~D&#b?voilO}}!~kC>IS8U0p%yfm>;G^3eCy`A^D*tLtW<|!%h4_p zI%rwj(nnu!jse4$-35z-p1zp@b3Amk=8UYPU#e&@5si@>Eh*v%@&1zs&|P|%-o|3yT1 z!}ZtW#o)!;N_J^m;ec6=Ab$`=zus4$_D)1kYYxo9M|J;`u;*W*MBS#luZl5vhd8EH z2^3E;RIMS0RDxw?Qkki)??P|((z9TKiy&#USi?SK~pT_fdu*q;{1xNyLgpR z)p5vuLvNBr5~k3Cq@!AGy6%nu*wlb$YyFl{zL7p!NK zmLUSC;R{eMhc_BG|C$NAfM2fj+8XlOU=|e_irc%-BY`G0>(2)7aM;rQJ5C2#`RNcatSM<2RanePM?~)y#e!{gyHMALO$WJ?j^& z9IOKN5INF0boD2-a17SAAlhC^bV%kS1yu*cI7B0wtiu)f%8lZ zQHq)B+z;m^{ux)-Fu;Lp{5wO-g`$*&fqBN|{lX1CUH7BTgVgqTlDDp^wG3+hNP6+} zej3?x6)pMaqmV;oKIm>p`86g^nt_cZecqY|-ll!84-msr668H;Yrgh3Yn?9Yf^WB$ z;jZH7!O0CUm3Zu~KGt{6H_@@g;@-6(!a($jR!sUmt*jo#{{kMi-D9SFl3(cdknZY% zW=#H_h~6Ll>^wxG@+tiwBJTP$OX&M=@bxCSSUuVSe3mpMl8Co^A}Nko=naP#Mw@h{ zuvQx#^S9u4OqyF=vrup}*>l&YJB#tpCzDJuQyVmf%C@3piC# zP7^D*)13vuAAjyuQ;n~a0`XmT8IQ$E!{9`mlwvESzj;HtG>Kv*K2DU;WF+`OP2$Vm zY@8G_UP>^_CR&CKo;q@>1YoF7i^2F$UgD)z%rg}6V;NJu(ZujX%g&d~3WGHUZykmf z;T&gX^*2wLSh=8t#ZzYebS%MjfMOOX-%`k0pX|d$hUe?LvC*yAhXEfU&A?k&t6whc@MHNtf8433wKv z_3|Ypw{SkM%h90Q?X?%*E3r4a1cB3vnThu4$HCHqE4$X7U@84nRe*fxu@Uh-I7Nqv zEjJrp$>(bhO~S5nv7~-?bYNZ+=b?(K@{^cjmj>(Jv61hV!3-zwEg{8DW-kS}G8x_y zC2pCB*HP-olX>o%oXS`$y`a>(pDq1`E71z~ps;fy&EI}il}*b(nhI>kv(4+HE1JVF zKdH94UZ`gt*-X=~EMOgTQ3LYVC(#za{0uc1Y|yBWncg*N4DRn!_m`+5=ba&-@UVSG;{{S-HTv35|IDl0dI!uJbm_7bpu$Xd?{nXlu z(Af)QPO4$k*lI~u_uSs;@JoQ;W$?z?B|kq@Yp>p~*QbLI<7)L12hY8aIL<7zaSM`t zlDnpK{8|;94dv@&puCyCIet)RkNTSP7_whab1mQs<}u3<vnNp_@*F?gJ%^tk1$<|GOrU3e3)TD2+S{7_bsA%|1W!xM`i3 z6_bF#t!6C^q8EFdSH)ku=Vk`hbm*>kp(NNI4M7X^eBz1i9IpJ2be7*$4DmbXBTyiY zeJ_x(;9lt|x<|Lplw7?F>|&pSww8S5k7E{_Pg9qXbYE9zadTB-G_%=m=eZ&E$ZYlO zEZ6iQTOu>hgCG?#Wf`dweH?(CmRONtkI@It4F zRtLO0#a18uGiYep7qzMx(3t6iuZ#n8ew;m9=}nMzMlyadMHA%Cs5^3|#1QsdX~Bp& zg=N4%32~cHw!GQj^R6^s+XF$;tcpd`Azy6Ad=%7m-MVX(vw>wr;=j+od)o72vrwS@ zRl$1Nz{^t!M<#RfV7H5g4xZ&ug0CMsAssAUT{p>3QtZ%MjQ+fb)-2h_1IBY~-Veg# zu9H25=;P~}lJkQ+^Tf(yNCe{%F+%qAZB_xg zm+gD#0fjvQl~b9huo+uRaq3}}c`bA4`-TI0RhIP)UBX7cG@nH74f`{pId^~V&S*^{ z{QODHXA0urE)91??t&Qg-|a0&smrZ>FV$dI6Xq@O_c{9IAL3& z#70H*7CZKCi{uj|egA&X!FBK_qh>$q0s0m1{`m)u+`ju4P9`fu3s?H^W zgOEk?^ySX+tvC@lnjMwWap#yEwo#oU`GU+%o+_G4@AF8AA#6(qb;l-e$W@}}he=A_ zkcd-xSzrB_BNbtwo;QnDd;D%nF9)sLTjA|ph@ZFBe53^RehUqGvCCR*w4PX)nl#od zApZy$#fi@6b)s2WJFctW{y6w}b7}BjtSRKxzxFODTaQ=Y^^cB>KzU!VkoKl6ONZMd-T$|BMmehAp1*V zuQg~poE8YRknH0Lii1*|-F9Q880@yZ%w|*H^S?=l6%oT@vwULp?X4T%zN>69Nao~x zGGbXo(PPy9S z%F3QUev!KN1`OAR8RpC1+!`HX>I(0&Sza(9w6mJ96-0O(ovEf~tp+y4faxXRcLog} z>;5I5amM__zrLq@|!KszCvq2}Vz5@!}7U$<7ygS!_I^N1|E<@#>%TxS)ht z5y(d}b=@3%GhB@4%>sNARs^4R=;|U-d|D@L*FbYDm(+Kg?oUeJGaBckMMJ&O>EUt5 z6H45&f5;eS#7`O=HjS=weJdFt-yFsaUcE#hK2#~I9JRquOv}4Rgd>i7&l`GqR|B6U zlGEo*hKZnqiXF?srV^)6zD>)Q7f7!U|7R9Mao9e9a~-zUxVC!qB04axYCefl&X`?XS5uO^!$NYNw7 zB87hYc{B?EBhO%yFw`&4ml)kk`EnvCo+8UQ3U$I5Z(l~moV`{z{Vq>vq-IXG4cnAC zx{+85G#+`dcV#2hX5k*1|1GsAWNh<+D%0byxP2KXhB&QS=!#oHzQ=l5>YdzcJ@aJ~ zp=3RA{OiQ?t`ZHuu?FNb0iz6uF?#X+Vliu*#i((?>vg>sEKTX|z>2wzo_V&*PK!zT zBJ`)Jd-9!?xK6+sp(_ifR@n0iso<6kK!N*Gclau;FvvR)-a;>sn)Ib~z%zD;J&f-| z$-Yzex0MTMPg&fpD9C&2FwJ=sW5WX&a9DmO;uh$>!4Pl48os=0ho;5VOdvpC$PHVc ziY0YayY=+`-rIEfG1qxEs)Kq{-rI0vDD#RShIIWoseVCsDWN zZG#Tvm=6BIt4Fn&?>k})ORg8ZCvr`(JW}T#iafMMhE^Po5Lt9Aol4ILc@LL?f|wNq zw@e->ocZr}xZlE~XJ^kaZxp*5VAbfYwo=P9bc@rqomsO0vNqqf`UUSoBsX(jWQdGo zTQ{@3(&Ta5od+VQ7-=%ujC zJC|p+_=Ajw1ecm#&}Udz3*DwI4@C_T6G%TcGNlQsOal(q<_ zsfVrcJ$P5BMX9R%+P!dx=v|M(V^+Sj&#W}K>=TX?Fo&Y=j6_%A-(THryfyn=X}yy& zG?R(l^#LRP-}kJ18{jF^kCG%wZxIlyW zZ&}d#3q&9L9o9bE|D@=+i=QDM zDK0*5J&`@@d;=)|u_{X%1hcdP=M@zB*Rn;Fn3?aZlg#JX`GotYEW!E_Puv&TgiZ}Z zzN3P;ddTBS`D+dfROn7J0P}i~ey`fW0uK+8PCfAqA0hkzdi1Vb_-4W%H&J{q&k?zX zwHAg5b)E-o7A1DLT+jux<3=Y_a3TN$`br1FLfry6q2JoL^vGSj}YryDWK1K+I71|(VUddXBf`=#d&cEb=i;MeeebarL; z0oEKkwNs#gsM@ux5vaU7`mqbU?az2KtZy1potYHCxTNd-?#2u=4d-oF-&Z$sm*RUQ^>~n;wfq2| zMiM*(I`R6c{Oosp`dR?ywp1dbr;4yD+_Ie zmm;5pV)PZ3p8ZZvx^}qip=u+>JY?{$ku>5jk_I@{ACvum&S{E+AH_^;uI7xv&cLDnMJv#7~ z>Ju{@D(yn2@$RY1%xq>weCeA=<>wTioE*?OdN|1wb*{E8YR$35$-fiX3k)!k*Zotc z^>1NsfJ0)B`{2m$Vp^i?prSNR(xlUJ^7mJ_1asC>I#G)vI#G?wQ3QF(a20xHc?og1VY2c2v+WI~&A}8T9E))14CINW4W_~T!A(12b;sdI?lGMoR%4FQYD<((T{h<4`fuF%+t2A69eMf`38ol?sS^3*`B^{<+ zy5MSls;NkTD{ zEUK<9h>XfptcP)pYS`#|zVNg7(M|C4ixq#0PNlO+!=p4ipA7%|F4caMsXM}~peNU5 zePSOA_aIjy0Da3~9L%pb?CPlIg3|Qn`F$8hU~*;9gRjxbL^>tAqGAQO&m|jy)2)8* z2ipN@m6uYldO?4ghbL2@jNm{RAhw~{aovk351Av4=g6J^K%6M*gi0_TSo>t&QHTbvb`U z4eMJ7|HEp-x~!(twu6^ERheKzCCFSvq3C&mHz~9 zVl#HENS*RsT=|QMzCs#`$YJC;itx=9`GSEKg%tfc@J&>zomIs5ISe@YG`}?l+Mi~( zeqWsuniPVmXOr;){%}-(;-G{T6u>K3l!zZ(F-V3o9^Dew{*U+maQgw=$)xZGd#i_i z{*(S5EeyEbu-8L3@Klfp*~m9d>Y!SF&&xZ1VyZR!KNnZPLB;WH=+&oAvKxEfAzH^s zqSL#1fiiT^BL;~BaaZg0Q3ExIu*57^Nq`zR{%w%PArh`HuXUvan;FPjr$DFkA`zq- zY!}DE6EOvqxxmV3G3$-44%$ByROFj_BH+)XgF+)7-Mr*g{PPk3l8LRf*_)*#nz_8E zMQt5#Woyq|Z1pR%%7d#U_QTItT(sZo4GdD1sj>*dE9#+f3npkqk)_}pdlBoV7|Y2| zPphyeIFQQo7c2XWT7(xDnU*(QtS{N|lUn^5F_k9p^ezFJwx5Z}sTY+DO;m}5@At41 zsRFMbg;`>gb8CU4Z>=#jIbwU$_;vt;?oJ30Hy#@@09O)B%#Vy3PS24$@Iqy>^K`rS!w z2x)8u@+ZzwP`9A4Vkg8UDj)f3wBVzHZ+ypLx`#UxlGS}r2@%=Kf!O+&lKHvU*e8o( zW93e;1bFsZQiCkcT&$Pd)3GB+`Iog=-_}=JvRT?yBN5C1CDYi$yGBx|L3Nj?`^X;o zW<(Fp!r6s| zbCSKSMEf5Q(8=p z&-aX`HmNmGq|)0l^1`ZAG4}vtSMbXk7FhCyx{%#0BU318+!tB17z*b^uIa2FR4~r- z@c?sw-1)d`!gW6L&Y+g0_L?3<*U#d76`UUx_tvZ9H=Ud&Wh9kGxC*Cvb{QQp;}^v5 z;QgR#R)YaK@jjnvi0eYA*1{vu9`*ZMc#>i^c=mNjYVbfl(}p(Sl&soa7`=KTa9x61|^U9U6J4qK9Qkxg@1{bLMS3cIVS;i z#FQ7Ls3dgZ`JE1H$7SC8gBJ+kt#6ZOl7USl%XT*$d`50)P04s!w{vQ1;-#-t_ZECb zclrqtMheGCM49WSc0)s2@WBx6Q2OwH#o)^MVWqP{Y^-zRaQUpMMUzb~+9P(j@r%qX zWp321^qfGwsIsVAxVN1e$Lh?|Oo;xrY@e1ntp6j0%Snmyfjk?+zj>ibNNulYMrn|9 zd1)Q|Q`4NtW9WwGYW=IE{Y_b@nLI#2NG+ih_&s0$8j%Bf^n0UM0r_L;^ea?T485#J zJXb&ZKX2FQPjID%R~N+~KkTH!N5^Jmw)ipCq?YfI1S_?p0aW$Yfo;p&c6zKY4`B;g z^)B!}gZ?f4sL}3fU&Z8-%kq1I&slRtUG8J%==H%^so5Q$_!08Zy41hF5-%9kW2g@n z8F*Q#BKqVM9#F3?KbqXubxId}msbN@ymKTgY;yzGSz`r{y{m5VysN5d`AX#%ak5uy zR3`WSV6y0rg_;eiD~VIJw$F*4{{kr<-7mOKEd5=;^YcLxo2L=pz@^#Qf55?K=|u3^ z%0B&v^#Sr2?87WAkGdDPiPhyP@J+}`J(FVpI^FjYX%C*}2;DmFul5YdnUGMKlI{Dy zu5tQ3^CjV~Qg+Kz#rWgUmV8@xmVh4uqqE9J1{mS@5pr-kTygiD?=NmgrB=SoJhgAv zPmJjyYgWU6#@ z3-V0L@&M!YN08!9Ui$&6eK$hQ8MN)($655uf1$u3E*?&L(udl*GlVj&as1v=z6JZoWMrDDi27#(-bJcGK*|=cV_5`G#xkW$kA(xkkyiZe!W=hblAUJ);Hi<18-7gPD zEbsKyLys9VEAhhDd0}q?nei?#Dw0{X+9Xi$+W9NRy4Vo0uk&R$UP-M_lcr6zio?>J(()L6bGAm5KtltsZgl^Fhkf^@8W8Op=+klD>J}fNyADeftU+{kZPGP-t8MWEJU5-; zkq=d#u%>S*xTOJ9TlFDSwpjsgl6MQ@Z@5C<=0(R@BrKq{7zc3%$#eMpVy4=gc=f0& zsR*B)Pl-<-kNhkz{K+>ww%FIP^+TiSMa*TQ-nhNWiDAN5dS)eq#b~S!#>3Veo#l=hO zdO6DdQpoiWRNa^YZB!#2z)`=greU~_Z42Wt=u_ue`>2#cF%x3RPAdM`qq`!)Gyt%_ zlp{FTF7k~E9CXFnxB-fECj$@cJP13b2AE7tEB&FatI-_?aH{Oto7l)nxx zT$ST=@;+UPb5pBxii^2X(=SiNCoe;?g>~)RGigp$g|>!G36+glo(N<8tmV8qirAP9V!}*`grcdTWrr_nWInTnwlSgqO2Mbq?G2;Q>GecM# zAT5-+lWqP>lr^t3UaE+jRX;C?d$|&LS{6?&1}QYQ^is$6j0;8t(F^I))Jx+=$#+U|FIA5^G!qBUxR8$K*WvrQe(x~Xt*|3A0dwJxh90DN}g)6Z67v{ zcG#~rzKd!EURyz`s^1nmoP32@m{z?DP`X4BFybs<8<B5=&DV5q^hk<~)F?9{1d z?S6Mhf3jV6kHb%|iWgPc`UWc|6-WpYQdcO#C3kC_#dzL|CCh!be1=7DJ#8)Q7QcAX z^(?Nh^_M55kEt{d+i_9oY-sA&z4@|*yr6YM=#JR<;wuO*WLNYcXWru*hL_t-(+ltG zz`}7N00U}u<#JQ9Dn0vFnJc|I`f|wadA_{NPF!*-SEd5eA9wqrcDh%muf)f*gFtO#N84)^r_s zTzF!uh)~l;|I444#IIo3sxU1?J{2tJ}5yx{?lzGhtwXoW&s`UZFH#-^9!LJ2ahq)Z)&G!|`uvFcG(wHDWPw-YK2XXc zSwXGOvq{+1_3pk5sVWMrkRyTMYFM=ryp*VA>IrvqIp9AnAkXfZhc@>n6@YYJz}&*v zE)<*+4g8fT(X72Y_Ye*6OqFT#>?<=z!axa4+veY72k>avUgJk%#!$eO#5e89o%Ep~ zf`H|9>Y+7p-0iBKl+H{!TKD>5h7g$m&5)GNRs6Bbd`1uj#ljzm$bb3PqK9qEwBQ>u zhqd%Uiq>4Krm`5T-`L=J!o=@*3AUx3|KeIt>^c5tx{ute4b9-O>rCrB*8EF9zx&iq z93s-ityq08G5p41a>q}~sG; zKTe9WljFkHvb>&M$Mci#ruw?dMOqD@W4~pfl&UMAd5(FO%4i#cfQz;dPH`JCV%+|y zEZHwAL3w}1U9}o)AzJf6kLqAR+b{h{+42LQx~{5QVsD@IV+o}1vypcg&i=BZT@FG; zPTg18z^lOg#~iE@&>`(>DjzFp6tl~olIlrE6=)kjS8Z|CN74KK^Pyf2HJ%(drHA@C zu*T0jFGzEYWR`L%p0;mh{Th_<0pJw}O_dLdLPOIlYLd$h!vjk7rU+5t6YkkLYU*?8 zqV1q0R{v$9@bNr0;MGMVn&$Q2Pu#g``9S*qbK;5V^g5dj};`*Y@iw`*QH^N#GI>v(Alq1x*=AR#i+6Bwe#+GXmhVjVO#X(^?8=Lk~_Gm^Q5QX@MY9C z0W3j%X{Z_%LUhEX?xBMMZ8{;1>J2b7_R$! zMaHY?XcPR>p$FpDNQp)~K|JwvLSfGKx#%90<6~l$l{`(vCeMctp>gTSruT7JR;iw` z_uu;A)0>v9xosQ2P3`f~9lXLqyL2T+_kp+i(TP zPv+@H%7<_?n0(c1?xj2~N5{_+-kTWu1fW7F2X$qFL>8+dt#PRK(DQ5ttgCm|Q7-C8 zjnv<&n}G;Z@gdd4F~068$hwX)?V;?@Q&A%_pE3T|a!y*Cl*ls+Rt>=!| zqrFp4RTu8tOp)W^HIMT?RCr%}kH`*w471CB^TUM)HvLD3yx`tZqyiw)|3`lFF()zh zKp>nSK(YE-66y-!d9yWMn4@@)_fx)wDBpZ+(m1R ziJPLe|HpS|{{UZk#I!W;tm(19P5{*`f-c0aPE*${tWj3x*Tmtv@Ah)<|1V%r(Q;{H zhi7o^Jsw%cQ2%L##qhcPX_1)s{xo4n|I%M_aF+MEjcdGy#o9bMOwBA(cAAP9ya@vh zq!g&b_u2=%}vQ%GCgSjZlxj8D+vNNrIwtF>bib&=7d`B%^u^7m1!Vc8q8pjwFQ6bY9Ow90Mg2jthU*Y_w0Nvgz6yGVpCPJgn9pOT|c{hnS ztSz3=^3F@nqY9SvFJ|+PF4CN>Q!2t;f4K*3d-p)HV5lq<<8naDan8J{#zTV0);Rvb z*eg6mLjO*fV#(D}cmV)PKXgtT{9@%oklr(-Ynv)M!>LXwUS^oh^}$UFl!32vAv-Cw ze$8)zL8ImM)4O(8dF*Tg#2&LY?`NhD^~3xtY4)asdcu?URYac_1S&lw_uV9lkcWOh zqB0`=V^?Eo@jGiqC|`}KsOe^Zq)j;Wwre|hNSQ0^4HfOx1NVVuMOhoO-@hhXb6sAY z^^KEmch359XW|T@X!)yJ{Nr12p^C$@<>c1{Xd-ALoS5&C!`@3qkNan8v-XEsFx5g) z0Mx%DlN?tBJFE@LKlA{!U&(+6j@n(7I5-&$I3}qPescQPduK1+y~>jL9Gty#(i*>9 z3(92HT-kl^%6NWmjGit^s>|8w1&jft0;Kb}0=I5~q;oRfmLvpq?c}(`W%yu)Tho3S z{!5Ao;TfbwX0os5V1zh(Q^J`z$6Avcs+U7#;7RG@#>vW4&NP}7thz`4NT01GYqd@= zQQF5zGVsctV8TQ28&)*K2(8F2{pF{DP1wC^5z1$C=OXD3EBgqKf+PtAt~nN5;Aq4lfa?V4 z22898e=CpQ&F`7Ehf6m4?nc09P=t>LuJ2(Etdi|JN3b_X(vH&HlEE8kYcrRi+kFO4 z2Q(XAotMlLHKfv#{z>R=5PI11EgXL!n6XThOqRPaf6w-P=DzMvVz}`70o%9f28E>z zIa5$U&6GK$m`C+A$yN-G|ELOP)plW>jhTFR;WOX(Y9)7=$ZbvNZfePDSCz^@uhr6s7#SY2?H%Bv>8kME)wU!N* zEoi42wlxW0P`i`+2B>(l(Yk6F4IH~N#P2BUbPGgG*z=Wy-2B_ zRL8VBGOxPmb7y%C3(gK=5u3%-0uU=_FoL#m8s7cNKc29Aj<$d9L;ADRidQO4oVn-j zBzE-r%1fx4P>l-zL=Eb`mfJO|@qgFF{?by2<|A6A?hD)xWGNvYx&@)E9Ca!*)ZWju-gd zDvNzSTUD8dCx6EbqB>X-IegEXmr?Q5icjP?A!}`M9Xs!IUjMi#+ZYoG6%{UVtay><&m-g8~adabnM z%lv|OuZ;uviJ8VvXfa14M)K8R5!o+c6~>*3PBY48DucqW7Ve9Oa1w)??Wlo)zp2S# zHCsC7AxVy2!{l4^(l0`3gYINgZHD{d5kYTKm-jZGkbY(r8ERLQ3}6ZweYHcDTZ~%h z_5Ag=Q#;WGNYBl3<-_T<&U5m9_R>OBB7aq_CqlkkZs)^rzMCo=_(9CAr3vG1kPcY4 z!H-&M*-b~>qEoxN!<>@C>+R);MaL_VGz_(>J079w`r~jqr-|5Z8X)&b;VqlgyZM$# zvRvtFafF*ik@>aq{EpCshm;k<+|@7a#obD^bcA?p5GwTlbpcG08#{Xsr+9F?Gt0{l zOS|q=&DK8wUJ9p=b2Gn)_=w9ebis@RI~LU{)EbO4{dLe%=JQ#=?CR^)@yw5-G?1UP zxM<-2;p?owqH4fzKa_~XNJ-BiAfeJ-Go&;_OM`@fba#t%cXvs5x3qMJbaxFMci!(^ z_uk*`e{j}1Yn}7#=h^$SbDz;xetiVC)Lw=I=_`(v_rjR@hzq8HxdrUHe77oz4R_%Y zh0_VEZI$U?diW? z_ZV-K@4@zo?l=*inHJ3?dv_BPVjZfTxh5)mYJdB09faHUBOLSOA^Sx!YehJEJ?KO z-DILjJ$Xs=2*xcVj4Q?)ynNC&>_@f~>_vI*T+2+YHbr+ro_90d##rl-a>4-Hg%D8Y zF;%t@_P~}AB5%5xLKHJ$+ZsnM?JN`PUj?Mw?vt7Hv&B&%b8-Xba;f*%{pJs{WFVuL z@UQHm#!kM*O63~%)4PBt{TLos1-o%iDRbvhH$)HJlQ|AKCJqpnT%ialGOGw~U+(~O zPB|9V3v*4mQ$ChC?4?MsqBoW+pq-k{+KZrj!e@mLRlerBRD82+(1v`r0FS)c-r;-tXd@&?X2**!%xq z#$A(^U~3c$ql`P23=9yo@}$}i4W08jkP&NdS>$pi<(-m)b{B`s$nqb3fzVkrNPK*)BJJ`I*HKajvM(p?lkH zLK@rafRDJ}z=)1Q07GRy)))z>1GMPDsbXJHtWl}HZEU}i_@FVAg?gIY&wx*bYIxPyrU5~u*)6(O0;CJI_7ZANlzVCaRj4pLNX&0Lu)}i#s3a?tXcBhY^&gZ9>+=@Mvhe-A%-TLP^Nu^09{2FVr z^Vmy#*Jq-0XK{E5x8Wfdisa>{sd+pTN~qgfyO0%h*;O9Qvwpm|IEW0{61RJ(8l%0R z6Lh}(kwIP@^v)?PP0*&(;3wtloC{aAG!?0{7x-#L@hI+y3<2&;rhZ>l0N3+Tk?=rt z$eX*OpuVC^j|&8Szb}r+U_ue3gzEWDox1D&5bwtk8)63ArT$BWS$em^m+|S#+AZ+y zF9)Gqpx%o(pLlO8zNN&8z^DgYN?L5vqb5rOAo{ChHQuJ|6Ma)4o zZOkH}z}7FcJ#-7gO|n;;;8elg54E=6Uaiu%kwy=t&5C zB#d0VaD}mumORf^exV_ZebFPETnv=^+CC3udtk-^kLHv&aw*F#2ht|Pr#pd0G4Yx0 zYHAhX`ANL-KO#Nvd`;_UB*K>~*1pST_lx!lzyBVCxDm7D_Y=nLd>B5IUuHvJ$N_`v z=aJYz%94Y?7JfhUWtg)n`@^|X#d{e--0S*r|LgGCbc(0;$Hk>>eRr8KwA-Juk72Qu z3#}t+B_|(DICh?zi2mWp8<&4a9}i{fsJlN)9E+?xXl3fGqpbRVe{In(d?_%c+>nh)O0pgScK zu{}y15}0FD_xVF8Zaos^8+olPPj5cj(c=(u4=j9#@oM7Fa|uEE2i$D6xQS-n3QB{s||LI}0hXt{9zmb7^ViTp!D1R#+!< zdS`?^$d(lpm$ZAMgt`~sd!{|ofgr*#^l1^`+-4W3&tM2zeB6cfy~@;X*S^rEGGq8b(_q02bmXJ zdSUM#n&uFQ&G#2r8CjYM1P;giJxpW5-^B{LLJn|vCPrEN=TwKXN3?zWV3JM{?!POIpVf1Bf-`y2&MQg=x8IoYj%u)v zDQAM|B)srOc>}$-9}hm3A*C{G>}qX=HAve^b~7B+*tKV89P?vg_1)VFZd%^P6k3pP z_T1HQ%9AtVoABJv$@5G_(;fhRKmuDGTWs2&@@M<3%^*N&YlI^p?$d8Jd2{q3SIgF) zx(axPA%=ZK`vBgknpfE-{L!z3-_3OdwDvtv%qO3yrz?+*4^vhpNJ^0UrTv;}SJEsh z>(eP`UCf(eb+Af=1+afj51PLBhPF@d<-L!VTSdSK5LyDmq}+*=8F}v!!SCHfrW?AU zSa=Eea7klu3#wTDI6H*!X6*5#r3jtPG?%w^kbAfmZw+h)+8;>30u$i-ji-7_Pjd2$ zv#XT1V!ER-{=C76$)dieP%ct*%PpnGWDp5of)~&Hsq3XihddCaXs7T{d?yO(e#jSM zy5I2?b*^H+xiFm^$ss8yV_Hy>*$a2VQQ&@;i~OnRX7o#(N}6kM!v0T>zn=FJc~ef^ ztSj;{$Mn_EMEoZ(nVX}|)uTn-rFxk?_wfF0V8^!dzH(-gWyf5oLf-k&Wr&FtDbDli z-OTpPNCOL5A@c$fLBDtTaLPU?#HYnqH;?~iQtNl*K|UacLg+ypD?g3X0<%pLt|>m+ zt2WRv=97pXeDKJXo>|!i<=l;Y8Wq=>6I`;W(iD@1-v!%`C2|yknCXs=IhoVn9iRn_ zd2Qz0{ub+SHS~-`9~pD#Gg;HeR$nb3M*OA-_PD-ON20ORaHaicO~mMLS~1mSCTW@`!`8#gr*C}ohM;+|j6 zM$IR89jAM&K-u;8FZ6cB=BP%EqPuyweu?*T{L4$*UbNvH_Z6ZNwB1(c0Uh6)t{fZW zUG{)aeGtic?w{iN`2y%}W6jTY>hHd{@MTUy4!pzyQU52~qlMrQ-Iu;S_H13ZizVm}@W44!r-S(ArFBn_kb7io^?^fmS6mX*1W3ZZ0SX2)EWgEW&r)q<)t=F`S?t) zEfKKH&%y|FCL1JvytNQXQ?@4KKPsIlYtZE{)R1*U53Ho0`MRP$0xyVHdJ$76fHh{O zkyScrtnM3@F6$ajVY+X9`%*McGj3-A{aijc!9V`hB>da{Iv-?u@M8u~5!)`KlJ1!E z*??0MWkU@o#a(cpHEzdfGQI9s@@;^x>HOgT&hOi`uf-v}MO7O4IpBPD#D$!Gd!{jf zg@PwwByY4o;Ip&>@*nWsGc_y-9T^oq!uDraUqoi4oFwy&sbg1%F*cFh>yw71)?2Zg z6NxkpmO(U4bn!r^tI;F+tOI4ooY`6DM@giL1Krv9aH$zg8fTZPV1m`b=@ zs1gCkHqTJ=g?%iF7pt?+W}bYk85y4r^T6*=oHe2-LkgSLKypQ{ctc`io?PwsIxvo^ z=29k;diZP##i;jm|MyGd7U4m|U-&Q!1I%{SQQ_41F$`}6{7kJwVJl<4HAp!2VhY9; z4WW@hn*3(R)Vvq6Br-+}^o#{u1&cw2yPahQ*su2c=^z&W23B{ccK3X1ASmUCF0N%K zFmFLLr1*8B*d@*TDG;g2*;dVU|G_uAjw`E)GhU-bexYddiQOcIEz7?j7(Q&#=@FLY zCP6na^j>(GRi?=24Y^(`^ZINUWuJp5sNonczjIBj(*ic%=i$9_?f!!Is_nEw(vOBJ z*DH4HolI7gut5Ei0sLSgQln$hv@L9i@Mk!f+%fWHKi@NbmehzfbM>m5kt!rHuvMJ{pxA%Bshl7wuF6q>kr-Zozbb)*uv*U z5&|Rw9f}(i@x?fyW4OMdc%IufJC`cQpLl~X4z%y==j6PSEE(h0{D@)(JKh41+fYo= zx!MU`Sec1>XY5`bPjgLso0h!H9>z&nm)xx02MDHjZCZ9WlA>Z=kkNu{ST4d4S;qI} zsY43q^I8A57;$Rq{Q{lh0CtGSQRCc}znu3&gZT#j?CY*(($rQys~aS`Kj`$*RE8DF zQ4il2;4fZw8gS=@I=we-B`XJZ^B!dub;0BvM}JrH=ng=c&UDpA&M6OJLN_GP%z(9Xz&~IZdF{uGa%bVrGsxYADw66-81tF`#DwiRc1w{`u~o&{uln zJk2M4{Gz)mn;t2i-!@ajmMse8i=X79DHmkUwM%&ef_m|*sN!;eF{y#|g^Ca=F;JsrY0mF1mFu)7)~Cjp-1R1G$v zqEC4eqSb;0afUsl$rL;8LJ^6-7ggK?(#MBEW8TFx{aL&7o^Lo>wZjkV2f@|6=AViy zYW5P>kgS(!?;|ch;bbY6gDI~D;^BENHcEr1zH!02oFdlXaaaFy5mZfba@*QIuOt@A zBV=5FU(GzC2n)k&?E~07%4ybd%QN4;(tk_VT|5}o%)M=2+-;%I1NnIXf2&CQ9?8N> zb&oA)Dk?=Lz{w@JT74oI6Zs%|L^`h}%B@uJU-3v zTP|v!XCYUp@Hn8I_n zG!NT=?Ym6&)E5?Sfwx^qSB84>=zG9cFI@_xtH_su#0wXUEza%O>xCbIxYsY~<)2cX z%!giVbYg9=J*wMT#--AqZQI?CF}X_WCoy@C|L~@p|BT(-?)*NSet*mt40CpUQ5%$d za2N`Qp*wuqgwHy#+w?)$4fXFiI^jjnhven91s#ogZ!>nASDbi(cENw{2cERa(WgU3 z^K{?D%yEYP@Zif@QdgVhXX-Ne`$wH&GoVUTIP;IoI$Hm{^6&oPdBa{O7XJUCBTQOl zR)%`LZ*wbTW>|w)Y7o6w{yQoKUv=CaSOuhR~o(W%i zXIdxtLH`=Z71!6?qM-+(zABlM4;G#u`53p!8BFC8pzJ84w)iJ{!m^v~DB!7f2Y0a6 z=|_H6vKW@2x4a@zHRbWR{WRraiOG=M97;THH6dig&RD!xo>xS?{2n= znK6`FFMnkU^cOztqK-dtbAF$D(35hL*xk%L2uvO8jt?I(ghJOpB31{?!Q<5pGl)_2MTWFh<|!!^ipJnb~bCzJ-5P$ct+50f69CpX)REDwO;eQ8^nH+k>5fD z@(jRL8I~?5JcZ1XJ9Z`)00|MUwl z&A&XgA%DHDkyKc=j!`(Te&m-K4QUl?M7~k671XZ`!Xp25 zQtlFUzk#4CRM)D@k@ij;zg;*s@QjIm-PLN|=BL}D<~ZS8uVutC}Xf%n_p zasTQDSm%D#!2B-$K@@xPUx*5?#As5g6R*Z%aLc~WEd}pus9H2(@Vs+2l@AC(aNP>L zwf0!wS&t(vWl*&*1&W=GJgcn--7t#(rLtq(7Y$J-#1SLS3!Az*t(Ox^qDk2$+HMTg z-6KnlbsjLhSl3JpdJ|?Pb@ken1VI7d#mzqL(c^<1!6EYXUG2O)f@AOCxhr@ zT-H6pW#v2K*q0-(_BE~~bArC_VP0B%<(=o;?njD;6&g+<>H=ZyeCbO5G8eX}uB6#|ajN**sL3t~0fG6M6;m_h#1VuxH>v>7XN0Ev*;LA=&k!#UN z9d#YMcnFF0Hdnw8a%;xI(Kcp>A^PVpg|Y|`Ww^)c%D+mS6pQl-6> z#3?;=z4XA}j>-6#Pi>bB!hFg)ktd3MW=6Z`_e=Kc54^pkz3@{tF(U_Qv2K``oFdaO zW#BGT$h%Q(gizL;Yn5|6%??^^74xBhWCd+@($B%<=8{;*FI;cv_R#PqHFj6EJvB$4 ze5Zgw9gOZ8<~t`O%4P9tUh~Oa|ETvL?R0hBrpWm~ zk?;6yF(?Ds1xo<(kMx>%=t!9Z;#!_vY%>4x;R@OQF0n*Y{=n~JhqZbha|jFpgp{o^ zn`~Tjy0RmiwuJW|LUuGl#z$T6Ji*Ww9c{}B+m|0@*z-<6{?;1>_;&#bb6j)0C%>Co z8rIdCbH9G?5-@)ev{n0$$*Cpy$~J2j8LzoB_$B*Br)C&5VD|KC{Vh~G)B`prk@8Mw z5LYPJ#;fjREG1a7TTGRL8JT|S4lsDc84JhLEll$gg~vj%B8nDg0)?9GHZ(7B-M*bg z->3A_Hh;G)Jltjp$3LiW^x8@(((^O?XZ+r(>&{U4wzr8`{r1XVxF06v=sx=PZ+>9| zjh*HKrzV(#*p~QjBj)~x0VmBX8I~WOnt%R_^Z8n#ly#ZV%4ws_c9@eQ1ZBo>x@TUi zhwJAGIt`ekX5=uqb@1CA-P+a^ko!2M5Z8KYSOz{ruZE zo`BzMZ@(is26;+qQ-8y})i||m9W{{`EdYy--if{WE>U&ptKpw{2*U|cd_5gqkvjH2 zXPpa8Eon)SESHYJB@2%|+Dn0Ci z%X4i$6)8qij5J=zEvhJN8Hz*CF^0X9xve;HZGJxXWChQI@ycy@yf)Gnf9Z|!>TB~b z>*(qD2Xa#sx1{=miP3ekb|FhJ>5Z4u zJ4SOS)^bM4c{Kq8aVqjV_f_R3R#W5smS4W|n0(rwTZwuc=iXesAOmAacd){8zV^0P zn?!W1>(8%xR1$4w2Ll(NH|DRHGS2IGu0~x(9clU>n?L*Z&ndwEoy{s5Lgbi}zYE!*UEk7W|qC9TF%x@4LO?p&*sE z?$UF^_UgktN&(jAE@c96GS8s+VJ|--6QXO{b;oj&45IahQsJM+k`(UO!bH3u0|42! znzWfBzrM#&qs@(Np)75h=kTQaryi1kkw)G6`^VngJ;wT(&?#M*vhj&Q_m*Wfn>jnb zh{)so6EJ5%E9c+yIUwB(&174CCGrY|dov9G5h!q$F45N>LfI#J3VwVZIzYFpx1~y< z1%}yXbafpD{eur`6GZ^-md^q^T3Pr+z4ulW*-QHN3}Zt1uJK*zT$Ui}d)@MgVEKLEY!Z zXwzWc`u6gq+afm*Nj*xmO-}*zmHnjE`%Bl?(K!Ax`GGEOY}tD+6mv6nX{h`pn?6MB zh^8xatmj1uIG4&r-F)yVvr6izcxG%!BkFYt{8#pt!Le)Zt-2FAyuIZ0FR`MZ%sBDP zs&NKXmy>j$mCd)4wg7D04fK9#hz4u}zf59KDiG#1=?(I;$PKb-8QMpY;7en-Rj2e6 z!!>56_DhRM9)38|Bp2G&_y4<2sX`E9NP`nYb1%)YzA85Td*BUSe7cJKmMGq+*JY%J z!eIb!`%FQM=qBr~G+`$ACAkkflfn9cnRkczBA5F>%$uh0utO)BY);4Csdk(7Uc%Gr zj=y@4agyj_Q&L6@mUbXjThlSS@QEyf{OV;!Gn0|u5t=`iubWk*`)LS=hqpY}NjHC> zknAHH^*+@|4{+EwfvYGo#pj`&i(3AWg}fH>9-YzQ#Eu-zY&diMDLzfe+bxD_l5;Yp zdW_$Bk?&rHYjjxe<&JQ}UZNB~ERt^U+e-(*zd8G4$u@)+&~t6?sFQn#7mYuQtgkoP zE(9@5MrOr@O%T81~4;t8{Czh7taPdhA~f_47lw^H%n@{HlnG0Z z-BkQ*sLho{Ayinc<1pm}ph)aMBNK87%F$vwfqvT6>ob7;m;(@zo!-zzje?5 zj{Mklqw;*N6vJs7TjuA&i}JwKSDHh^Xyjsm&vGXG>}!{^hkXOHpW zyK6O_+mU=TSGK#m*T#`b^@HH6M{99H&$#l`;Oo$`npHg7`&FOU^MPYxd;3Hlr_>sH z<>qg6)srghWAChfkL7eInse>0c+T__2^6z`G4+abxFsU$yVoS3vvGzyrH3{JKGvs+ z2ImDsM1B3n6!T8eSKUW=DnL)+4iR2AB|B;*`{G%rd+is@A)r+j6`e6S9g6G3{`;F0 z>cY9Y4e{9VulpQM+lxOB<93Fr2`;NiE?%Sz_vJ;hxbInO$+>v2;U&#3STMXc*E%M0b1|Ul? zT3>4UomEPRf;KVA0t~n(!j&RCyFmewQ8A^bBm$f)8IV%C9tk<@h)KNuZ=bQyC)Xg`r5Sw?&o7{88qoOv0X8rxE$i5G|F`79XwLm^ zfY^`d4pWnhTYF;3zw?HB#zg(0{=`Afv1Oip(ri7Hnv-=N*?ZU>KPbpzY}-*{xOx*K zfpm#FVC*WycJY#z$h!5*l1Syt)w*0@dik-vb>o=OU-l44=??@>f`k|)94RZE?X&+T z;TJ5EG(UInug6OID|IKV0sT(J&nHhD$b=@n$_GbULFfT8F$Ekcr0kXAVe zM_uCJThpCqCC`C}c&6F&aq*n$X}l;s?jnMtKc`;hmDDF%%O_r_EWMjvJ{Ihyj3deO zM_=mR9xQ(EUPfMdtMcF;IVt+}o-BW%gL=hjOhLm7`I(E?r<@|wrym!CuI$^SrCXNs zcHOqGyVdC5Sy$PME?%H&cR&3RzF&r5{`NJGBgj**fTEsa(7-9_<=%lAqJRZ zRFb1o`o14N?gR$$7Ve6A`uX_ypen}ED0br|)Y1gw(J)X2y%s=8QdCr7$)bNnV=^cm zm(_ZydXt>&ee$>MMQ-@S&iv+?bEc`J#C!8xD#KPT=bl+YbN1Z z?&q_}yV$#-Fi{%VK-UZ?;Iuq(P=+Z+$Y_3ruv##LT(X#|uNVU$XZA13mzP4M<^0QQ zh4|wnBoriBUZFM0#fyhS5X0!~Y|53nS)JL9+*g}fq_o8hJisk3l0VpGZ+`>in$ac- z8mOEZL}t)GeJ~@_2N->9E`%jWbkh~TxSZuM`;2Kfy2GHR9mXgv2A+y**_pBc1tABM zpLC;0I%IDvlXiyNk=+%zdYXrA=i)b|c$P%)y=r|{8ZZ>TwtFc3aw*R82sMj1zK$l$ z#p`6^^^Xce z4LQrt^_AETIW_~ro@&r)+R$fxyW&vkG1pkG_${^EXFs@j$?eMQu-11m{CWnQq3&U@ z*fAs7u2uak!p)4E(*^j9H`ICZ2x(mnU&|LoJ8jt7C-?5+u&~*d_GSw1s=>8@UuR}T zp~--(IHXFel+H#MprhC2%}@^*Wcj|{z$uk?uBO-1;#2SK0k|2f)5J!4FP{%^)j4JT z#vO^{Z+%ZeU>$`(y<;d~=t+SLP@7@hQC7mZw(x^2>SS6Ol}aTQX`uRvZ};QTE5Tk; zU?hYPDPl#llgFXslz}_X9FKzflISq_YCll|-h3VuN~b?sNb9rMf&VrU_~~Fxs&7{b z$Ys{Gd&XTYVC#3Jic#zKP7{Z@3O#Xlvd{d1}0V6nA25HS3$Pp>7kR=db2>lclOi{tui9N9UGiHkb$#a6F^MgQ zL|#v50?y(b0l<+6leS)WIx!uWuAk~-qqsKDeOOuHox)yD6YvR<%Q20|FPy3gvyP@j3s#xqcMpmS6Z#G*LTU4)TU;mgO|7z+fO~l6vex4lb6EQL zaLWDJnv)KC#%CecKMCiT7)39Jo^Rn2I)-~&{EoYdAjb=csAoem5}?$)SxQ| znPjLc{7b$(tnzx>0rxP30jC6vF7ctx2xY60u0*Ln#j5IWq5nnFKtURNqhRpOmQ8fe z&OYz2t8oQXJJf9(M)8S0yr_g8>W&Cpvk99fvLlZK6EiDu2S=W(B*ee9B%N(mHiC4axS}PlfP@SRC*7WD} zTUfp_atZZK9Cb=ih7bGC-H4z%W@1B%RV`hCNQ~Zs`<5-~(|s?m&s)>0zXgWPvdSV? zt``B)EJY{oiWE*cFI6?NU!S+WQA16#Z+UK{XXRYxVPVehp79jC?SrYu$J8q*x>Fqw zM6Gm?_^;uSM!i$+qx`s#zH02rZ7unGIe0&6=rxe(GK{LA77KleRe?h&=LdI&9)2)T zHDfaNr&G4?A7!rY?6p6aU4fuC>xuymn{AYTT#8i7`!8H<;A{s{nnn8^Y8^}G7U%P3 z<`G*1KJULcwV-ce#rJ;_IMrtf_o`xF^R5-m>IXk;BrAS(+wHH}^{x!9L?0!Y7GJvR z51W*GyPGN&uRC}XcCd+WJIW|fAzr}|-u`V4Vm$*t_VAfxV0>1A>>utgx07_&cuj~3 zaL1BAVeq!Ck~LG*f~DPv2b7OGZ3?aXfN_er*XdVAmfMcZfs4=SzxA4aGsbhrEj!<_ z71V-uuQk<>!g!q$XV1S4RHqcJ-Z7R;Sl&x zv}!nUQ)C)170!%*?EhG>!FQxsl3EiQIpV>X%I|k!v8rDf0pU^l()H~hv?2qs&j*}9Z|2k>MNz*gBg(EFS=Vl&Km-n6G8uMCag0PA|N z*B!T%aP;%93azAp!%u*fH(y$>=G@x{50u1@cgX@%`Lm60{#0ve2i$;0zMqerge^kM z7pryV{Jz6`kPegr-PGtl1Wm!@Od>I6QQ^X2fU65M@`#Qn-DJhDzI?bP1I(;Ngf zW4KZp8tP>Y%OnR^pRg)Ld6k_pl|SI+jLV#*$QI-5W=lvHUge1s|D?6_zFPey$tHOc zTqNLw#gr&P^+Y4OHV>3kB5r75fGANpDlHGN`ABzB_F-E>Xem#WsnhV~LIPvGJ~xG6 z+BNA^_oP1hBX3o<@#_v=6VdlNY+aX_4j=M{Y{DmTY!K~XyZ64iFdlEM(i+*SU%CZ~ zeGW)X(w>qS*+gh>XT_PLC4}mIV1RKlbQ*pp>p;Y>CLVnp2?HGikmP)(!5w(ws^5iu zoABf2qnj%+@U7+ra&5ExlF_p^C>xQ%_HjTS|GR8Y1-cZOxwR)c-=LT_d4n)n-J zboDL-=j=;>$%oxTx$`4QR`6A<3uk?P>33eawt&A#_hNc@uRpgD+cZwaBqFnY8V+Go zj_VWB{~NAG-<9d2E5L-pF+c>A{ZkBlQ*P*h%>wM+T(i7+%@e;Q28o&D6)8pA$fu|o z$1kttAF#(;p+ibTdgC5~KKps`qp7=ZewB%kjSruTu*aDHqaX=@-54z7vdpib|6}oP zsRN>&R#w&{X90bo8c8LQk~`Z_yvTTSTMh=$uSGbnRJvH8SdsNBFGgM|{nM3*oQJp? zqV0KJH=vz`c8xKI<+Z2-uc+&OHORF3UWjXV^Hr3CQYo5CCdc{{p-tuf>#|@u z06o_g1W93)$+~OYd0Q$Oj%)xLU%idRCb7VXA|^xmS>2DJ+Cd%bwUamki2EaI=~?35 zkCJ5EIzO9=FocfN*+-#=?8Wk7_k93^V3E&5mfr$TtlhF>>j7WrmMkkhECM5(_8y?B zK(|^P45)C{d<$BLrzZ1b23}EyTN3x5t_2*g=FWH(HxauSiG4&5w0_HH{K+NA_LYUWP8dAeWL4Tm%EFs0gC`z9rt?C9ydxPo{{DhV z?%&>FCrkw}K888%m!8cpj!o(R8OiaoOW4QKcrLGBk@z_O*wXbdfD2&cLU> zz#NqgB6EqZ@X@o*3x8J__6GWSX^R*6H_F=xm%4CBjP+{SCx9u&kdi?CU*ak!ii9q+ za{e8Q6D%PufcX`ioo@Lpa7FN@%Co@P4JoP*9GT6mXW6x3Trvut12W;CVS(h&P01LQ z?|ibMX9XY7lrp9eU<+;cOT!DdTN@V$YMhESj3#fgxw@v+YNY2txNwy~3PpjD#Wi-o z;5X4WOXF15ltSq|_ty4_NkEbh=)wY{n~L z$p5xe?udDsscE#L1#au=<*hm6{;0y{MCqE*L`UcnznzjSK<5R&Hqg>xwz29(lyGNp z?kDJ4lpAnca*mBxMu2n7vBm;l|J|lwU@p$PvvXm3C&?6;+98V&kUvIzlC*qCzD@*c zyHx!2Dl`wb-=0V%I;(YNv_yLT=8K$Nqq+k|?RN4UoAPs-$0-q8{-)O`?$hiVg1uVj z5TZs8;;EPpM3;xTT1ljzw!!1hP=gyz%+ZF7w6022#~QrL>z0nkj)U)Fhl>x{XBh+L zc;U0gliol4w^46X=~}r!cllb55KphFSOHzpOx}}wwzfk@xV5f*v;l?d;UBG+=~%1M z#d!Qy)V2dsz&X3ETnu9;+B{WMjWMeiSkHRFfU_*VYUb{%L)&CR#`ElDr0?HG+x7>) z*8S%@+7adW7cS4ZUqsrFKK{p0?m{Q0T9b@j*hd_^d15}4%7(u1PjEYrZoUuPO+%r! z$~>J0LeE48q7;1)x8zN3mpP^061{4Ly=~Nev@*FRr+k3VmweCXw8G0JRqwLSoWG}x zFU|{qu6jaY=j2U`_mL8MJB)|DsT|KYkh3@lm%f&(=1@7hJ;ABEJ8qr*dPXE3RrPg` z0KZPgnDrZ>+Wu9H3_)HERn?AdVhPR)=)(Trsvmv->^4-bl|7PJe6xofBKvK(RE$vZ z(}8wubj+JNZpr0zZ8EmUjM^yjS|rYh8qDPUO3kz>UaHAxHpdCO(y`GyB$&F>O8~FAK;9g)g#eemWjJJ zHPaNtw6M-j?Yxxw4~!TBFm$JU(C38{BzkmaKM(w~eFN4kBn=nfJD)f)Z=b5CJUUlegi#b(YW)w%$_+=jx zq(y__E9WcGI8^QqkW;lCG@kZZtEA$sV|FTTUgf6!!Zs@*F3OZx9Al z&-hKHsZaNEn;#=NFJ65IW<6wtIJ0Fi@jNGQ1i|tX*Co>I%>k$LDrG%FeWbltUaxOiX5s8^E~JtRQy8zZ3! zSG)g{V}`=Y%XePNW^QHeda0ox)KNv*iS9m>I*SiuT{QEmho@ejd;n_8%m5VTR-e_+ zn~nm`RGBr4)SYZy=aicFlD+;SskiPEnqiUD)Ruj$nkN2?2ff>3?=|)@Fk<;>$bI%Q z@ZDmpLfbRjpyoxMGWe3YjSl5bGJc5NghErC5~KZR`?TXa_xh8Ls%JIO=4nE8V-0ueh!e2p4;wN@x#WZ z+4&?C$Zck>(fI)opMv`Oq6FGlIAdtk#w_7=r?#+(KXUZG<_lY-n%=h+Wb4Rr80S|2 zldy$jIF1GpY`T6Bj@}%db-sC?`@#=)*Adt=ez+ZB=fS8*cX22~ft0u^64tNIUi_x3 ze0sWgb{tRUmiY7Pg8urItF1r4V~TDOl)*D2+1CTiSO-|17rpV+pu_`=&v&jPe>9W; z3f|WW+ogl@R2y!+2i}{d7hWO5ZKJ zf4ljFd~&OebbD#eH?}rW6^bRF|IB3v2AFx5?8F0oSmDC+>=~e?*FLLU_dNbpi*lX6 zX{*ZHq_rOH%6l%E`O5I^i7M(k?x&!lurS~j`qo}*B+D5@OYcRe&+y{SC^3rFecP;a z=Z&MM*6CS+msB8kPuZ4^N9k*3XF$bL(51l2Ou!cLsFXXtZ{^fg(t@TzsV>Lb zmr4l$<8H+IO@kLd1mB@Xou*#QW44`lykj^UMbw8ic%TZeI*(?wJM-@}j~=LBt`ye2 z0_?3Uer%U2CDJl&TU)Mc8P$2hbDa8R?#KjXbW++I-M`x;K&&$hzo&2Z-fC%ZgC`|` z6*HVD%}@q!u^BGi>6e63;Ovc{)~s`bElYc(&lo_6`7MCMr@QWt3l%5e$|b!b+w5K+ z6PUF(zl%BQXo;Fd!T0rY&AHCClXLj}eNfl+VBMkrJ^i8D@nk1_nlq&YiK&?I9(u2^ zYgwVov9sZo5^MPforYQ4_Spc=a7p;d6z8lf7}~u~Y7F+Q6m2ORo3Lx>+E&j%;G%uX zY@YN}tNutZ{YZi#&I`9ewQ=Q$SicOM%P)-&#s0w3BVy(+61+ ze=E%DB`iiK(zV7bFcnC6>X5rNn@RY?RiKe*h`2(rzGX#sRzD;0th54$Bg`b80zN>s zafkIi+UJi(->=Edl-hBJE$1ip6nAayitUg?k35KqT?Y6-V$$8&gEaHw%I3_lP831l z#Zbr>CRollQfNj@+*tgC`+%91GPba7gj#PNnc362aNJH`O6OgwH)E5Vm1mXT@G*`g$@I?WPRIZdPCGw(C$azWkYY_tm-y{dtB5(A=2-tU(<`qgCnyOP^ZLPh$1?rOFezt#}lr+wF- zL-t=6qmRV3?~-qpzx>is5XV9-6CS6xO&b2t)?)&RSmE*hz<-wVGf-*8fBkOuDJk7` zzT;SE`J&N|MCz~doQdmOP~X>3Fr~@E% z6N7C3KkqT<@W%EX)nPG1;`MC4M4(pY7@F0SD@X%`-LUdq*mH43LIC>1$@GDYGZB)j zGij2R`Ptc~BCto$n`gCV$kN%+EV5qo(jqfV<|yhd_qf@UWc94ZGu^vG>7Nq!4qy&t zS3vl$FNXG^ydS=xvmk*bGB@bDm7r7*Jel+MRm^f1o=v2#O%{8siFF1)4wT^_v6?-g zn{=BjMWuiy=+w$m_Ty(zJK9%48&=&v#|_&A6oXnxx&;v0D9qtbMdX3;g7hEE%6jFA zx%R_`VHiCbdUtc4!+5w3!9Id71mk$AK53I|8Jht0m`L9Ok6%PW)9)7T;+j$Pb6NUX zXEWnXJ`M3nt^}XF?8f$*qv9;7gF?=T@A2DiwI!JSkPwMnIPLG__pMyz84Zol;&X!p zbTVu28LHm8izA1U`ujtwg95?vbN-5Vk6T#FRLkf7wyiB~>db`9b21jX-Ok&g-SExZ z@$@&}f7zxzPqL29Q9&BIZ1-fx82rYq$xV{`Vwf&Iq5)0PUbT1lAkY6%pU`!ixL3!1 z9RHl?#L<457Cd|tSDv3UZ~SQNYQ9cP=XICyAfHjI8K~LNFAeKxHP%($FpA6K1!G2;IBfwx0Jw?&fcJUa7xDUPB)TBHJ{? z_(THu3x4o_?J#}wRAn0Mf>19T*||6oe|_4U(K9>4y8jOgU|gI7$KA_8I?v?6Uf?Dl zJ^tVEKS@xDZfb*!pr%iN`}4Wc{(A!J5Q}U~{Sz5vpS~WI8E>8p#+gj7*7!-{+4QmR zo!I&Vr z#hHN}<&kW8xN1ooK9*`BF88k+oy~kx0F5Gvl7RqjhMs$1`4{B+TF-X3@PH6GwkXmy zhNX&j`{UjaZp>PgxP(T_sa)^Y~R7$#}q@+8fySsb9Xc#f-zt8vg zy6*>jw(V?Z=j^)PbzP+-qDf?+2%`7Rs`1WWYcCycQ?F&J?!o7(tqy@MPlLCs;dG!< zY?|=uonZ)L%@76Wg&Z>tj62;QUzz%JtiIYcNED#GEV(?iy2;NM2}6C7L_UpeoI#zC z%U6&>;DHJ@Wt2svf7?!!8h*O{OI{~t9&Z@*h~^zY%9y8U>*?CmK=HjskfGxpe51l8 zhB=otFs{dQlAs5u04e)_u}2@-IqCF1*)~rPwNO-dDi*DAQn`UKEzH3MwCq)zlB zZXhB8ulR$^8EtM~7mRZ=TQjyAaP&78{v6jN%v`qm=H#YW2yiqKuP+{)lBr-|7vJk! z)RB3Yl6J)}5K$aEYDE1$i}6IkT5M=%jgfHCI>#T{PlKM#y39wkqF44$9_*?ZDzFiD z*~T4MAYZ+{PN-RnJxA{UqdF*7`jgKDRG$|Sh|1q?=<(l6JotrfV8Bat1Z*M@u6dzU z*5@Nc3_k&=b%w1==3S75JX)c`0na^lThDq+h$@SZjLR zHom&oIGIL84Cfn>)6iPK%8Y|XtSGqVnC4f5)mKG<$Rp@LpeKrV-}xNumGBNqCH-*f zn&zp06)|Fym^&UsbM}}w5{ot6&n+DYQWKag(67ZaT(=J4jHp$fdD45e#J=H$jY%6KulN0Lz@J14sGJPPHdDVv<03w<|HLc488><-sp^so zN!necZtFkGc7NDkIm@TJ>F}_JAi<1_`^mMBs@hvO67w_f6x(n`w-UArR+|U*htAmA zxfVW_oV@|{C$#~1oBqS*akr{!Rx@2XDWM`-q^c1KEU$Y;E3*l>zmM?jzQD{a=MvhA zrdg~1u)lS=`gh4;&WgE&8Aou%EdJ%tlia-UEx}inHB+oRgr_zynGHHs z;%Y|!f3IRa+W1fv>}`?7Le+Oz453Qd0R4qtlsjeGcxvV*{pRD33jg`?F$_tx641{c zSoxf@uFrgiEYRBtt<9LS5WMg@$l1QnvlgYM@1`Qbc83b(eD9p5Di-_ zC~dgRRsaIfaJ*v85QDQ@cArld;vCEGKkd3F+a1EqujP;eyd5YNw7X0FimywFSwiOU z(Q9QqcY6r63S5LzW&a8PQmfD-0q=FARt;h*DL-rJ*2=ci%socWI_D-9hz^DOLh748 zMef<4bWWx77TGnVD3?*JDUpX>Ct*I5z{=vp~5h1>j@Zo#}kY{;D4Mp7vA%pw*`IHB$7(yu{bNu0T+H<%RN!^)hW|M|(@GI%(${wxxT1b~jr&lP zENmXBJo^MM8?VuwTUZ1d5O@?Ej))P}-=UO9US0U}%Lxup2+C+XF)y$HpUQW?T0JPg zbNTjp>4tZmP{Z~Pr>UMwTEP9anHr-K?R`aGIwmOUNqKvDZO<%N_;smmVefkiHB+kW zz6bqP!jPSIS@DhREB5d+U)z#LD(4f5L|=RE99~x*u7cjNY0EB@^WcV{5^v_r3u)xj z6i5x5a?WvldfJAJG%1(bwkMZvpbxQ5q5aOiVT7L%#h~rOUY^@Fyre209?kHoF zRPq8dB)Bb-BG6aF=D)ald*RZDz?8&XTwE=I8x##CJ3j#HGQ#D<{nf9i!Y%Ze-8P4w zPcUID2tqc*2W(fPh@6I8leJ4KAv^> zZewHPfpjW*{@gGMKx+5gjiF(*ykBL?Bjj;WtNSo9*T%@KDPJq!W4NSqCeScpmIzGP zW;zMtvx(sf#1mf6ee?D`J!()te5&^ct(w!(Qf$i$jstHSmY1BFznEHpqJe_R8ZLLS zwWk$p42mCl(kc5BU4-n4v}~67Cp{1hZ=Z*AZXmpM6KGPv%WpZo1RNGug$}mevB;3(DCn z+tf40!0pr+>a2cFGJukrKp`|ffQrHqD$*O)_+P)D_tagM>pZS?DK6OZ*$m5wQJ-=) z?hqI{g7KRa&qvJ6NGB@$Bg7n7#Gca&*kJJGua+|jC7u&tJ>`P-8 zk>CR?5WT=LtH4?=%xrceF@{0dKUHF9&eZI$$HW`!#`WiIselvUcEy``@BnVbB8uwf z=8>mYqezAHLFzTSG$Hql+RD&C4z3>}a%*5Ix%BnV`4$A*X{Tl|lH~P;!f~V`40{K{ zDW?>pz&DToNc5$K8$A!6t2W<%WRSj87FFcuIwp)OR_ZgjP=`i)szHCjRT-LY`nVQ) zQE2m-&Z9Xc3j&4FcEey-6{-{jMQh2~)AvT~un9=6b)7_=(%j6t1vZlZcEqOBL$mV>ZZC^3CY=->eX5HxSM%KOj&!FADEwGF^*h8Ex5G<)f zHSW9dtCBYP?q&?xrxxLx<6myH8|lZaYx_!sdQjZ`o++e^$?|Se5!BAK8!XWGiP`!f z?mgicdv7$5@f|spls1H5b$Em*P8JyUBWq%p=w^W>ox844o=mTTiPtK}gCKtFF0Ux7C2cL}-@@_!n%!bRzve%c@Lzpy*=q=DRlw&Nx8@$5_|DUS5xhi5l4+>RQ=G8 z)t%EPncgcuu_n0XZwPEfLDVLK>+;=W%Z@iC;?a_o+asjoPihv0&z;rfig-T<*jI4m zL!+zLWZgXJG$ffrD61<|nb)05Xb3f$^Z!_VwLtVeH$emQhT`EcaV=kmq&I$P=h5KB z`mO!5kEjGmtu{UStjiMN!ROP1@>O&z7X(4y@_}IzpJTG3IJQj574cL{=Z6746w$rh z;xw!z$e6R`nZ8sm$6$&Snz0bx9$s9EaFyA>PiUirQg1On{Sxry`OUk9Y|)D?a)>q9 zh}GIRFq>*jNW5|SFx&~oL)FGK#Hh88C`tjumgS_qzhM8eYBi-kd!rc9^=C-ZuKL~| z8+n9lo&9x2lP;NtMsI4A_)Qco-&at} zUklzAdiUCe%Mu_Z%N($JxsqIA&C*2G6+faras#!r@u@$;j{EpK1`5k8s@wgD;OZ*< zQl2zp8?h=YRnrl#hVrKkglyD&vt2N%cH9jyZ66h%`w%@GqIr`linn?B1wvVc^4Xoh z@&1MmCyMsBO6sAh;dh1|m}4AmTpArB{sdyq?n(G>QtA07%u|U_n0`5tB}JK%BOb9* zP6q6wZn0BM85!b%o6lRoHx0smi`UrHzPKe#r0-e@#7$d~e`-u3{BxZh$znH5BZ!|| z<1;9%R0xHIkuJA=BH;PqPuTzeFHX9XM!cc#_i3r0kGT9_W5`ik=0vHkZT z<=e9pTEveFgzF99)4`Mya~oHfnr#oA{AuMxDDaPvX>6g3BYWWoK2b}HRk*xhV@J}ELm zSzQ_i@~@U7zTf06#-MUN^28*$p%YL??Sb&2ChNV|Kd!x>=YiL)E0$O3!jTW-_uc6a zmGQ?g*~}YUlhJ*Fid273Z%@U=9B%q%%}3r{AIDgLwUe}*jLnd5FUR_Ks2bz+RuL=B zrMG!8Gfqdo#B&%cZz)J&SxDD;ycFs++b6E=`!dGa#5Wd9>Ibhs9;97zVQgDvZRTr= zYLALv?LsEWt)1WPPtYSF-nEMTV`Fv$^yBFqC|}E)FXxe3_R~_ z@P-?T5|gs7L!rBJnRCR?{?ZfbiG@p@?0z%JOK@Xb^ft(86Md1ivbBU zP))2!R<*3^JL$*y6X6ceLUyj%K5GdZ7_R#DBA!Z784xbNf2Uu#!$dTI^~%@J6b zt}J``CotE>#Ts-Nsi{$UIz_chXZ!~GX^=8sJMeSN7(d{v)j{*bX$(IarD)_xsNrh1 z{8idIP;4j%2-W%^tNq)t85FSE=ta((u|=yW>C8DM2xAIGsV+{GmF2_5u_YNuKpJ`k37Vzo6Xfr6Hr#=RGaev7lruP7U=*8%F zAbXP#@h46zE)x*M`>2H1Jm`=WKbfe4arx<209@@~~V`*dK~jAwg8ut5=z#f;I3 zW4-0e!kW$p*KZH#JT~t64Z&*5Z~W02Te<<8VZ&16;>V09mG%W{FJ3?0NTLw$4~31J%+wpT_u1~Q(TSDD z2?Fk>kdMXuc2fu94ON<>k!;fcz@Hl3T|!s)7Ydq}H7a8GBWwg6jIv2zGRpXUAJ-Ur z2YlK)P!oCSnb+VKDIh3^WSx2aU;h!<-hR;2)_i{n%%T9M6m*NXm0qJ1waes$MNLGc z-HENKo5gc#plzA5pL* zF6(h5&#lrHUAlZX5|fAF?RVAi8M=U|Bs!C5{^CCAjrxwu;PHyo32|eSnqguStLfYs z-|7)yZ|gPxzl!y5v3cQhK#6lFWinIM^xQi+4cBUn5P@5|^*_PfhA_vW)qs`#De5q( z*{n{^^;Ev{NyveI`05?UiaK$a%H+leu8Jl7j|5`zZj_WcE7L%+_N!AhLKp}PxF;L3HW*qU$q_LAf_$DpQ5yL`Fdf2*9Q9{&7Ejpg zaq_y0(6?$`yY*aZeQ`+L)!&EjCmNA;q$b@Kp=?RN1FP-((cqbE7QT`rYV%x1VC@M> z&P^=_vckcwo0_Z8lMIkFEV zz9SL@9>~#CzJ=V(Ik3Tfm2&#yRh8J2+`J-uYxjF-{}JD8UVi6lomKj(AaEpL3-Sr< zS})g|lFZs`Po8xs%O`(LuVEy|bxRS+C>?_q*A1W1_ZS;X&t#ao?_Kvo z8`efH2Mrk?zqXLGq(8IPhby2X7MZ$=({CuEP^DQjz76^0HYUU2dqhE}x-!8uIPh^>$*e zD{4h936JMJ?baDJPp^*p34w_;O<>>AzmkeLv zFS#5>Z-PC`@Wvh~jtHLoIDEoz?kmY31wh@#=`Dhx?GW|wz(J_1%=TuNu9EpNI^aleil{yenAy#Ci8&^wmtNY^>o!M; zk27Q+Du689Ix!sU&@7%54N7@{10)iv0~ABR>Oh7|u_4=sDkI9uA633F z9o9FF*tnCidt!tO!{^-sf4SF(ot>wsNf9is9uZu|?P}ZqU+ToArAxs_mT_=Xbrt+0Ajt8gr~5Ecr7xDu)QL-+i!~ zj3{=k6^Fi`AYMH=XuXPu>?_z5XH^}%4xu4h=Drzg7nbn zMn|Gn$lqocLz7Dpwz%h8dCgj5(s2%+GPS+LT$etrpE_x*Wh{;&)TWm zN^4?qF1i)i($s>C)1VZ>k(O^8$9Z4rLUj`P)W)di-eqlEp~@?wSiT+ksX%_C#oI!D ziF#n01M`Bj+m=NkGnXmSUCAk_!V3=eivPpZR&AVZn%2D7Vr~5h{IBP3zp$H2q@uvi{2rJx(JWq=W(J-FMmxPh<1C3tjzF^ktN4}EM5iaI|wfHwmZ^OKHok?d=G6ARg}1NnFtv#Z9`_o2vsEG^^y$^#D`pZKJ2 z&=C8I;Z+@P*Q(nTuht7c$SFYnBhvl4^Jo&Fv%KA-h*R-T%oj^_$F+tNVOuX9 zxXmPK)preYEN>PY#2nso9gQ5W-aYK3p21bay3JZ_=aXVCyHrIp_3u*@9KNI>({_76ONZ2x(D4ikJ>;hjW&{PD7v z-J^82mwV=T>p1kCYyAQ2Cr0P-_|~xNq-c!P>oYb?{BulT`{*{)OILA0x(csw4rt&R z53oL8NgSKPlnolQ4EjbJi2nvgcS!JF%hTLC%i(IGR^T!%ekMa$9I-s%BMuSIxOZP_ zKuexFgIbCn7Ns2(c#*mV+JBGyD84x}9jxY~o#a${xrr_tUB2#I4%_&3k+wSkpfVXM z+gD@!B-ge<7cu3a8*rDqgHHgrgTMSP*DsWNqj=K&F=-$WdK zsx721$m$~Ra>;*bu}8Gj>p_yHl()BiuOCa-D&gV_+lMnRol)Y>{Z(niqThyX#kdaq zB4`n#H>aLop4$m?z+-Lxc@HOEE0*W3402zNRN-ij4XnwM{P*f_mf3=Kf7@KvC)w4H|wE+zOcrx!=-d2UnfL7`aP9XjLJ%kl{)rsZH)beIkXRE@UwjGkwXZ{Z1kE-TZHkUTDfdH}8IhoFN;68iX3nCo&C3$Xr}iQpDv+95_^ z{8XXZqA1}$@dv3IEqX8KFpF>G0wd$d%vA=wuV3l9_sEak)oDBN2W+% zTXCEM>{*l2IGD+x8Y=^ACS>jXl4Ptyte%;9RbhNNLuzoA)!Hd0aPQ{(qInNAHbAA; ziCgKR+5wx*#48*4)5qD-$;BXi(e`Q8e4Qi+PB*aw zdRH|XE;c#DPUC+hq7L2fd7~V~;A+?JO$s;kLXAeqxTQ=JXFtgvj~R}^iLQ9L@K_LT z0zh}wNZVBb*1FBB_7iu^4B)-I7*Q4Nio+7LMaQ#XW1*8_{0YEbfdqI))BG3W%JXg~3E~IM#M#nZj)({rl=x+jUU1e*o2$$u%{bHpQYhhcz6}xrQVzsaPf3X^ z3kZG+*fJ^bZacofnzh!P6rd$}YH$nSY0s~?20T*zRBNgb>vuq3OQb(y0;*300a~h* z&}Jdfdl0Qr_8|qvyc}s+<7Tsr0B!G9VmeJVycmxhXK4;zxEIoV4)Tmt^57a@&KdSB zDu9m%4NP~iduE@0z{kpm@2h(>%?ZEkBwiAX&9XqH zE>F=%@C^$VWN2nN2*bbhU!V5tGP7QOXM~)+b-xw+wlX79J1R=(4z!C8Hwd%Zw9H$M zUsdT4U^{9S2fZYS+Dqz!FCBY0U)|Xr%yC*HI`oUVFCgX2dSa}&g0aIL*{&jJ6Z#Hr z?2e&u>$K7Bel_9c`$d-%pZRH@OT9o!ZF!dB{_u{Z2ZZI8c&1gA>yu4*^%? z6I@wVl~^klXnXG;SknB)F>9ZoPobPFF3{50v$9>#U~5qF9xejy60*&y3M2XIe>F3%B0cbwVHW zWGB3u`ahVAt?H0VuVCU|_?#4&N%*1^m_PhGt>qEmfjMyP#&aGt?V~2-!ZvvP;A>#p z%YBRV_odE$Jd`gK2u|wJp~uJ-lwi{gJ0|Ko1Ag_}w->K&aO^1^{B6IT{f~boor7#} zKCkuK8b=b6f1}A$es1 z2fNfE@NM6tCrBB*Y1OEauxfk9A(yO25MV(?=6S~Ks~}2k?9WgM?lQZx>74^m#Mg5o z&ui3;3mFRdjlQ;$zeJLFDY9oXLfb-pLY=T;kHxY@uP*IIl)APocIE4Sx1_6RT_O6? zMA(WFVWgWDo3Dt7uN3ue$8%L3EGSt2O`nnG3|8OjSUGm?o{+recXJmHq~roILCDGU zZ&Mi4<#4^H1zu;w9Tz=b1PS?vUsVvHC}+KObwKcKkh3vM8g!HT5Xmd0AgQdU{-T|n zKiG2W*NFf+N`90%NS55R?`|eTcZUbrMbTHd#2$uzoK`Em^kzh88Lt?p8dALjyVPpDEJDw?DCw{ths3^quL z-!X2d*c=_n5cxF7q6Dm}*FLeyM=C0NJ^Qt<0oCP&r?(W5z~B$op0fWbGb}Yea+_ij zr9-qjvk**G%2|B^<$MG0t0h0xXa(_%Vj&dhPQ!K}vgkHmy~TCM21^M7GN^KP6sF?5 zGxh+o?`vDT7g9E$nh8<667p>G25Gn*>WR#8L-%X8>#Q=e*=7Iz;e)1|i#b2?hnKrO zTxcXu{B)NFpL>scm8SM<$k8Gi;+2Cj&Ph;HO+3}rwltS<&1Z%;{M_c2=6 zf;NnokbE2izOGRmFbYho$g2v1tvr%!^m{6DuIMW+(wU^$aG!r{lqm6`9r382{#JB- zKs_!c;i#KW7+tRH^XIe{P@dp1iEP#X^<+;5Sl&xXk-o7Yh~4~{VG&NeH1RxzZ(Yej z+CywD4wNE`1UQUXfJl4<$$MLcU5 zSUsk$0{BVQt+b0FarJzg)X!ea)}RNe13gru<41B4py^uE6_Ph4>z!_wZB>{kC}qq^ zrZ&f@%QEEr>_z}F?I&OzTF9`FAqu8V=bU7tFh6evPB zCZhyWpO)q0&t&8w;?r#o+%12ZHYV2;qB3%eAw%)7rl+k3jt^Fn` zYV0SK7;N>6WH1)@<^@9;60lY3cIOX6zj8LXsxz8_&M75QqEjVp6JVK3qenHtyMg5f zK2@fps~GbB9E3XVR7eUXQEN1}1{&GULHE}~jUE@s^^eB2g_xGVw7itccI6>-P>SL# zp}t^sm1LotO*xcl;H7g5X+@rORwt;o4oNO-sBLCcgSL^X(#K=od>3 z6$;oTG+5UWS5qm&iKj6FYvlVGaeFLqx_%Dc|MM6Zx;Vwh^lx0BLOEpwV%(* zz*5hiY)mm3><4bQzx?CY68wqe zQ@=WP3pTfJ0oJ@jCMev@^PiKO2Dafuy6$_PqfkAWC`;T?`|tgk(uod*Hf3WY%l4vz zvZrzGJA36u_(K`Bkj8tDP`k4R^{da~DJ$opRFm6IXVGRaVlGFYt6f{tPj2&D0*ueP zRp#y{KXX1(JM&o5KthtU<@RBA_bjTfm&KoMj8KFI?ad?|T&d?o)VJc$Gq#Rh`LyoK z&0h7l`6qQg>HK~JuXXFdshi?1#4sWI)*Do}HSt3A%|UL`hab-VFT&r33Y4~9)rL?d zy-sD8>$Xk6>~1a4^=Fy0L^Q#RudKImV)5w`NwKZ%%*;GH{aluRFZx#)-k0-D32NiZ zkE^dl!s{NT>2Hz#ne1o3+~8!}_IaJ8f>TIBxF@kDNx9s6mf+yru<5>@<&B9yLk@Ym zN&e@Rx3is8eJUQ-yuR{BPZIb=)jb`XjV(w9J;AX>E5oSQ50yIC7Lso4vNtIJqR9^3zNzyS+qu#Nspi!Re-R zrlY<(WkGi;N~p=<|rT6U^`dKkz*Z==hrDo-~UUfoy+Y@GKp&!M8+c zQqVu2dZ;^92K-F4Q%1&oVUxbQLn#RwiVP;_wNelCUJ86|#rSv7CYDU|@7YH#)d%%Owv#fgUge8(h0uYeROK|b4DU!NZ5T)@b%-i)qB0B?aYKC`UR58TI5bNO1 zmw$jJtPPkzo|5(s1yChE#HLoeucJVb$r+7#r zhTWcSel!AJvznC_jo~c1c28|=`Ltfpt~otLK#Mkn(nO5XWf`+H_)teQLC1HV0ahkL zZnnPjb5%>=Ru1j>M9c6a#s%|EcP!wM7NVGKVZrR`&PvKb_!A(CO52S>%+{O@p*}b}u*33cvQBWLiDt9`cd-xr4Y9xzjHwEel3$s&yM}4C^I(9kGut3t{Hra8S64x zgK}TOoK&7jXW;1I>@8CcaRm>wF^pN;BH9HrL{}|^vu^?#Jj>2PddtFPQ5aRR-DBXk zq!9xe`Sxkd1?D3QcD|#VeLF!3Q|EW%dvosnX$5GC^`?(h#t(Dv+e5pqR4GV9%AaV* ziu1h#-S*+L@7ps}mrXo`hGH93+JK)ygMa~D!aPTWBWi!Jzi7&0!FBCzIKhG~44X6i znf=^yJv{(x=TXaAxP~b80P?4HkEYjIE#W({^Od=$-CnSNh1It3(;p zAtHk$Z76GHW13t)d%tcCFIQGzZ}5H776%YK78|nAveWleDP@SP_BoKiwf2bwwPCzn zH29jPALGaHK1`wYI|RPm98M7byL?_=0d`bKz=CdRX9lm&3oq$zN4nX;TwdFb#0}XF z907k$KTa3Ca|cKgl+UB}33+^ict7%{x_mL6wr>@os>0V~P<;0Wj?eCNCnLD*8RG?c z=$T5MzaIvicTpX~$7=oW-+_(9JNG4{lY>{mWzKdI*R@VJzT?Jy+$$?zK!#~<8yd;1 z1}0|nJ4g1BvbuB&sFt1nvxqTEYOm@^ZpxuLIDM3}T`@UdF4Q0PSIAJ)h=*X@=8>Ax zdX;cq`N6z%HHkJ{>g6x<-@K*;B^M-Ik1N}teRb?$yv%cglKqCc@h$d|C6XJ_gBB9+ z!nl8&LtHuc)9AL=361mTp;?Cqe%)WX!wEvVK0^DQTm6T7U;6uneI4$lfb}TIOy+$V zKBY~<|I-bn5cm8oWnLFxW4XtAm(`Nt+2Av2xz}lt1;MgOzlr444*!}UzE;?ikcih4 zP-;(y8RLQWK>b545bpHZJ8&oq=Dl=>nwfUn@o2BJiow`~R?^koRbe^5yUQ{0!d5H- zaq^0fY`=KC)&L zN#7jH;-cut!w(&MVT#&xRAXZ1_hE-ubuNCVJb(wV#){Jj$%8CBryCF3_QNN-G9 zxuexR_dxPua(RTii~H7H>wklnGw`NC4?O%n<^c$+qN28+@VNU<-z{DZ4cE%)foWQW z4WHN^aNP#0M1(!F+_ee;{L3{N91}w12LFY~5g*;Us6S)`{cRq!kD^=6ZRDDFOxExG zQXH$Ny!|vI_NXz~<&gV7mLT&5tF)v8w$p2q0P&SSd$49LMa<^znTS|xZ_FNNiVLmE zV*AoYwQ4zTB012! zNkb{(7prM~RwJz2K~LYRI=b_}&NesYv?!3h0=ItSUwzWNfzwo`|1mD&va{NtX>B2lzI)`*$wt4iE=f@sJ41ejhry-M_l}_6aA= zH6ayb`bQlNR~iY)0Co4Gvi9TT?53&czK>2D68)aKbQ;eIUkrO764nc<)z#jf(%^fv&-yY1R5r)0 zW*i0XH#h0!`->TXiM`(rpp0mbmE2W=$Zjw}KGLYsw}oIdaZM0D1;pQrH*>s6uNhDO z-HO3SaG#IS&~ld+vg)XqBTpYN0k-S$ltCpicdE8pB zG0S`UkZ6~Xh~%)d7mlG%4^;ECpPV52#k0O|F5h5QK)m&q8Q(4X5B5CG!imgyf08XC zu&I>9GXo>Oca-wGRyllsqzHEt#S3};E$gqZyPoL}3n8WIV7W1Z|T*)#Gki9p>G8T_21OKoZkO@Jjd`grjU4r zW0R?FH1qP)9jQVGB~65v=bwQBhn#~f&(827Q50lEDA1YIk{8O}uY@8Z%$Hn3lsP*s znfzYDF3UcG%m`3&p&hab8?7{K{_wbs(@s!I?1jb?y;Qy)bRyz@bV*z~qnV=8*6Msz zRY6a6laX zO>GzebEMU|XPJc@$dW?;(dA-X1tRnrlKfPLOxdMPbXejwt2Oaqz!faB?5_PX%~Wt% zMO{vxR@d~il$SSm(>Oi1%YSPKf0Ff`%5Mmgye_|S8X5LhU!vmG*a7Ah5xtM;>}pee z(Xy9n)x9bBm&@{`x4`eO>xWE4`Ng=R;HOvlWp^N`XRUQMQ6$0nr3M1b10A0#vlDynO3BT#zBXj+7w&fXc>CB|H!s;FdnO+%V%+X+B2D=G#fDc=pZ~zANrCEY z@quBm?TkwUtmqH#=7iZWof3Q#!~1>QDC~~4FkZn+@why1%Lb#eGN`gTF4cUW1(1jY ztH*^K6lUcAE?P7|GyK&t`C8#X0v4ZpR=bf}3=thNvjb7BZ=Dc{xF?!@maWOYM!auM z-{Ls1VmK6D`@LqNyzyCab6%z6KU4C@ z;U?R#5ct0FEvr%MD)5C2EWoXoyEGgb+ok=uC=QcpnG$;T=M5oSFLsD3>Zn0aSF<3RQA>t*LE24=*@0jcGG&=+*pXu#~9@$-ccP1}852K<)Yu5`|`LW*=95XhkUZ;%O=CpzZ-fuHe zn!I)V_JnbYHM#mi0m%gZI{k2K>#(>4j~G1^uUqC(+xvW5+eg)e5dFsfnr#m})P|i5 z;9M@#pR4xe&9~fsUH|CcfR1RD^df7Q06~POX3^RasfKj-KmPp6&BeWPzxSvlcgs6g z&nH?Cov26KUK?cXG<*JOs>Q{uBkahQG&#vEqpE3UA(gDcY~#!@N%ChbzjB>?M0Xhh z`q2ojSwk=F@t9{PVu%C+x-5wX|BO4fWVw;^7>zlNJj@lJE3QDa<=W55W#I%T zZS%73B(2H0)91Y}G5m98D0e8Nwwvp8_HfUg32S;J(tG%!!BR>m@i{0A*)B1pZ*RuK znQ#=2CVAt?;O5>=Aoih;(Z1=Un&*tEj?K}nG`Z0hsb@FXV3S;)`@<1k zaj56bYmapjnsNWMNw~!f!loh3*>rOplAf8%WAPZY#lF})#eFJ|y1b2EeB5>=PFSF! z%+swOj6VNl(_fB?Ux}lBsISr>EKft4qD+y z%q4lX*IpWxkzANf5kbDcdt<}R$6q*HzU>n&DpM;lc1z7c&Za`~hSz&O%*2N>g?29q zTTn8PqL!2A|1J}hB6|D~to^|brDiql1|uJ<7<(vixdsjoM{vE>AZ#k85}0`H?F2HW z;1V-39OE5#O*6Nw?Ma7q-Glphf>@^&x&*08cXLGB#zIFliK4!#-vgrMeX?tpPD##s z51L#;4X2J7Nj5A20%@SVem=>9RUiFx2AcbQJ;9)tvRknl+2Ohndtjf zIV z4|~QW*T%$e$h`ZG?<44rxAvU(y;_*}PSdok+IoCL)ruqC9yf~7d@PEC|PJBj386 z(#3-!ufpzoJbI1Si7vbvd_buin_2wU^&1cNT1*nJJ&m!#m=aL&jL9~u?&ZF2zF!Z+ zrubUzbTF7CV1EW+FYRu-b-L-ew|@2jdA#KNIT5fZI1FeFp%c~`;JESYjxh(83Ab~f ze>RQ0k8XNr$v5I|{oG%rgHc=%g?xEErN&j3HTDSrDL41gcS1dj?RS#7MhYAs7X)C| ziA#3|Z4M&Bk>Uo{QntPm1y{KRM8DHGFo3=<(_X6ivmB( z4xT3_R|CQNawI7~T}Q~jPiUM{?`MG3^MB-l2Cv*bNLTE}#-H}*;JzMG0;)9CH7~2l z9g$rDCl)AOU=egnHm_mB|HT_+!%s;>-?_?(7q?@jWpb=Li+?3R`0-gJe+^wbS8O8> z$A1`A3-@wt1RkX_u;p>0zch@=J*;r>ia#7*mQ5}@+J?Y$58^h&(Vw$iOGu=?o~$;n zdY!$2ood`!7Di*3A7YAx;e#)`(!BYd1ntY{dtVSXPN`X*~Pjg7J z&aHxk!mO*`i>pIF0yiyt$<^}I?0a>j2GUul1a*uJ;dMc%Bv7j~cj4d9YKeB2|15$T zHkKhn+pS~AJ1L0&PPk`Xg1dC!|45zdCo_fXGvdjO%PtacT(1sB>9c_p%nbeZ3>@1& zC82ip9Ccc7`GK z05mUz!ia5a)lu_LoqLy#__PVR04;;uSl-J~zeUjGzJT<{7ddh7)Jmj2p^6XRD88|| z^0g2aIeg^+yrUAo{18^h3ph5s=ok0WQH^%fkc`&dI%}Oj8eH0#Dfv@ha8x)R=mGVd z{`uqZyxI=GZ3N*pyj&s)ar;D${K$`IYWzU)C%yh(*KSsw-zpmHTz0HSS@%cE8#Ufs z;w=e%>Dp4`(`Sin+h-)CxyIZ&+a>CC=GIruIXc51_c}5s4|Zx|hbr|7+S>0CGUyL` zEB4@pq$XX}`ax~>^Gs0hc9xT!3uUPu>S>f-xOG46V$V`9-ujJ$*wp`G>i>_d_l#%z z|K7)=R!h+qMUk|n6m3zpNtBkV5iPAPTGZZJJF#kST583ps=cdb>{+#E5yYN}8Ii~@ z@6Y$~zxBVH8_!3Q*XumbIoG+a>+IwPK7kc27yudfUZ+p$r+nisDb3<@5peCL=zC-` zhfLnfuPboqs<2}ZkQP5EHI+Ab^~vtNKYlqsgPl_UCtat|@rK?oaOMXvo4vI`-cWdBROh?r`+f{$StER;Bm9%5Mx5jhN z;!!%?0JNb%vW;A7%nUijED*gLO5)aUxq9!vQolEe77>F3t*4|XGpubqdWI4)GGQ?v zO{;ypvpDv`{v-WUYvd8Fqbg9Nbh2+%5;MGpT%SBHRX0=HiUB#4MXQl5XKbGqaby)Z zeX#ON)FreU%CSr}c%;!Re~e4gk{z9J(#YFi(fBO5dX{=1IpgN`Jv+QCf2rbabGo=L zZtkcmlY%syuf8)jq{6jP5}Pm}^E<0S=@VMj-@&)49KYCr)CfcjX0bl{U^?NE@1J_P zv;5~V zfBuzVl>$X{pT^{Y-}zH2eLC_#`#XC72E(%4{|c5U=JF2cxQ^&a?L|mPZ=vlG&#mTg=6tddAaaC}74ew{T{_uyyvEiXW79nNLBw#1O*4 zzS-7R-C--u;4c4Q=#RoYgE;dgXR+a1EIt8QmHyp5nCosgHb2ai;@|6Sro&?IN;q+j zF8kOLg}qCSR7AyaU+F4JwE;q9tk+oLlBeb`3|vcoU0R{)%(LOax=mN4R%J7jtmMji1;vGkcf%{9QgDeU~IN^RdI{E-GU&Y$vE+ffn z0RNn(q?M=fyV09cAulUohE84w-<^E1{C!P6vS-&Fxi4ok-MtuvL3I3J*_W10wXX&% z+lW~GaJzx11BC4R9KY|g=MfE+g#IkQ`&#f@sU6P5E_bkz2Vu&EY%f02`t~|p^4`p0 zY0rbZ^X9n!F}lKhs5G2_3T=kK4fkg9yM%g*eEu*OqFa}${Np{$k^3s=o#q{NpUCi7 zkTVsGKHxPnutDK+99+&h0q zR63Qoo-ax%D-LqD|2~0sjiIr^3HR1(hB7Xa@7or5Vrt*t%mSVmGi$v9XwD34n9kzx ze(L@0qfAz2MO5GH$?4zotOv0vl=ug1#9M3UQ2k^KOO!RbipXC?uM=nzMX2(9&W@2x@_fQvkmI7ho`Qoe;v=h$z}mrZw-i z8hNxsDB5v-v>AU^?lC)ggaMh985m_>X3f4IFdTq4lrUvp3cGT3l#ZWzF+%#)fzr{L ztG5;@#UbQlhs9H#6PIz>IyNu2w@DhgS<(Zn`}DK|pE7HB% ziDr?Hzpe0uw7T*k;D?0D&l0tRUb6>vUXy_A8Y>w~z()SZYZgdaF?c{R^Yn-O)Vd57 zXv1P`#mBFpW!aRI_->z}hx)>6>;|cEV8Fm*Bz~ldEqMJf{CGjsQ&Brk0RY%~#<#dX zB74kBabzRB{4|**YV)UZO6t}h>YrnWR6S(}kFQ?lSoXOpwh6Tdd59rC%{zQ{Q(S3+ zC;xqS{IP$PDMdm~?Zfc=4En;?wRX~CyF3Q<3gqCgGc^o+``11!^P@X1L?Pf;et}=u zm=wY7cT<(}811Jf7*I(~nHrES98$$XrT5dl_v5W32qX3!WhZhJyt7n!1rXEw?&9hy zm4~4J)wX*2c9G*DJByjO6SIU~2NhFaB`-*KQc)iP!{Z(fw#kkw5x3sTyS&Zb5(`%H zN_R+N$^Ky{;=aC}LZKgi8Y=4r$REgym|McT_KCJKNM@X&L?<8wul&y^_?@(b6mpAtElmySJH{eRO> zbG!%hcm@}j zA9rY<+!cV+*|ZWoLjF&-X6tP*$F$x5WbQxSpXLYCi0!~R^rLSd4g&(tAKeEVj8q0C zmIM#`K8jmxh-L$BUD2oMapjFHVYP1%NLY-PyIQ5tmVe*Ya_%^rfiwEA&wtoF#CHH5 z8+(x|jGHs1<`}AdQvVwioGMKK4KXRtzl|FGzJBP<8UGP8#0qH_r^=#MY92xqdo*M8 zZ|+>;#{6SP-*BSdaddgJ_a9-=I^fS3`%&tnpNH;xed10+*&J|}~nC9|&{1~4$4Z^ZP3yZ`~^j1Tiql47mdq1%S$J}t`r zJJa9Y3ls76@7}<)pux%Vvqw%G8RxSy(i$)988hvj!;Uv7a_}}qpm^B`&_mm%BkQGN zzSlZ;?|*y-$l<`u*0@fr!pmtPKK^eXuMAZY=w-yU)o88@9UPmy%(UDGs8cm#qD^dN z87|LYl9U~^=5d_nu`wOV)c-<8iGS6@J-uGu{H3At^0ok7DRaI@zo`ZkVgVLWv1F;Q z0~LaO-hK|#>91dY{i$S3ANNL+WOEm6TSW07#MvC{irUlh6xU}##&5c-ttA197=C^f zoIx%>!QBOaGhB)5co1e!-+#Li{yyuqS4d~ueYnlF^}g}YND&jV1>qXBiY-~D>L<}a zy=SE5vKFM{i@jm7%9iU>zST#AXAdD9zmL~jD8_l7h7w9hrys>T`kxxa*M-H_N^h~v z*C|}CBl)zj#JjJjZ8`K$wmEe5ybmaeUk_=Yo9V32DnvR{MD-H~6~7~6cSfyOsui>q zj=vkNoqx%6(yZSd`TW0wgR$!JNEgNRlV_`e)S-({w37{^)8e>V6Fs6iSriXkxuji( z>*!KluDsuT=}3%{U+Rb6rO+<5Rd=n#I9nX4vJ{Zbs)`z;J>OVE(!25EdUU-5P8sYMAFj%FeU! z;wrPCBtz(#oTK&c1O;#Db1-HhC;Zh;2fWbXw`U zLmw+XTH`lSYK=G@Fdi9r`!!7YF=c;h=1ELrWIA^4dr&{483Vg_M!efs!00S1zmJ?A z;a21?4j1O3Pd`j!8^J&ZL!buGf0AX6C9^b%^ef{AAn`~^_}Eoxp0~|P?u)$`&P-6> z_;m`7mtJ9GcC+JvQp{+2K^5LCP*GWA>j&K5q+;U<;HL8F`z~lXM)N69yFo_@?Mo#P zb;O#b{yV}A#@_99i>5glF#NBq&Sd6o)l(0aMGB>ZDpxsRaQcGx?v6X}f;!6|!0`T+ zIc(wuC{3V-N}JQk-dzp1o%DNtyJjyHfFb5dVE zfBh_Po-NTARW7ELb*=MJ^-fae=WTXz7jHLV(0|(qdMsJX~pj z6VPB{(RCITLkldY=E?-c3U*1*+Wbs0jyuH}TiOFcnUX!cGRJBuvuXte^Gm(bBZ|ug z!B;6rb7a^kKttS%$wyD=Z;~Wp@1_lZHw*)C`Qld5SWqd!bl_{&=!N^_?QTDI#})@a zo&e32KHTTR06bOS;om=1FA19ATfl4fSF#G8 z?}zigjg>v#hCsf1!=0xeOZ9Me&%Ne;AM>h(3ZNqwhx=j~vmWrl?`tC<`%mTX6X9yX znS8kxEwJXIutN;IVpp`Zr~s|Bu6{%fV1uSUr7UZy-nkeamp!5*dkfn-1}@u5coeRc zC}Kn5;|MdFY`PVMhAYoM>iZU6W0`W+%t>DnZF7}C>P7kIC!ER09I9&f@=FXNzOsxS zUo|dJ2`Ix_`if2o$u=tnR7su;dRCUD+?sG@dlFEdpxDbBra#vx*`tRjgnb$KZD@A* zoRK}xp{gzrI1%3&&m!e;-5EBbo7c9xP`#1NEf6yp_LanV#jU^AotIt|5 zqgwrRYLEdf0pnDw;`=;hWyu6gyt^Q%YS@{;bvuTqERikCtn`fMUx|Kf5M%2b8=%V` z(#h+)FoKh0^6@~S>*hX8YSMz8J)}8Pp#0FQqckq6hrVT=Zr}@02|DhbE5b`S3kTo# zS!EnkQ_>62-`0I|p?K*>dDEOiSHX%FTcl&{$BSI@;6?1S?(~B@|4MnR5QczZG^5GX zTZ)~SpC<4=)wge0H@^~xVAkS!d7zRpfi-X8#v|WWi+fY{sPTG|a^O~>r-eUT zo7B=ZpgJy*;rAyle-}F3yY_>Ig%04OR=yQU$`+dwcFav9UZXuq2zRlk+k*kgA^2-M z)9%j2M>9K6tp&|9Y{nHTnkKxpgIde^o>)`NUx+J;{~+eT5zX8))bAD7D_^;gn(4x$wX zL=Bqu2Q}CjMYHQpzQGZ@d|mn;rUMG)+vPlJf)9+%*vco=XuNhlgFP2^-{o0V9b^j+ zEhx{F0n76vvV;~YPu_R=dJJ|=gYsG4`xN%0xxqEbN5=Wp3ODESrHrSNGo6B1#shlV z#Q&!!F#O>6oo4dbgWT)?@UcX719~^JVDH_s>wL~%LYA~?l$}&h?frGq!V&9eNdd(V zzi#dzda=y?LpoGk&F+xSP*-4(??YT{X170Qv@cK`CZjJ{#?wo%FngW~Ukpy@>9YMF zH1Q@#0t(igP_UaGm0No$RrGKyhN1Q5HEO=Ji%skX+1mQhJdG z$H;VjW%6JF--S1gyIck8|Czrz}0y3tDh6@Aa5~KZB zA?CKG$@P%xwNXWLG28%GPoeQ;O6sZCTq;19d{MJ8;Isc-xp%gNJ`#- z(Z?Z- zy67F~!}9)33ZkIm?NRgA;y+gatP!r7lyi)U{a-$pdN#29X!7ZQ#yYBdzoZ*Es(2DA6q>cs`SrSU@19(LlNMY3=!&%GH|rN2Pp z)e@gBHy#{ww9NY?G5(T89kvKYq8Y|L>dofB7a?GkT^ow%0eDwz1WoPoq)-OzE8I?f z|7@Xv!)$-#Q!k=^b!3^}8<3BdFGKkSaF<`NI66efOAC`Uj8gS@G8L~~C;_EJTTDa^ zCXN7YLR~x!?*60!4&g~wJhPk*U|5ZYU>UV{OsnawnT2V=?#f4%P8J3L0w6O+T-d+; z2hr8X=P6f|SkI_TGX;jJZVLh!qI-A^L9UkKU`RYa-xM zM+MvSzdls|C^A!?m`fYkP2VB;iSwfn0I)_t(=dY?LfI=wyfaosO$(O@5B;8(uSg5% z>Ol6SOFcX9v}pYB=9*|==QqmEyp%R}n#-;Bf4}(%`G+gfTBxJqW00b80nrfAic_@D zOSZVb`%S0n-p3Si(JBZO>H2&~;p*JGV4BwgcNP;13+4>Er+VU!PRt_(tBN1HSg3nv znLPjZS2@MLc#9E{>)0Uq$P13ei@7a%8}2HxP}L;(FTdlGXUf_w2O~A-hkR-zFqq$W%r&;Yx&$Gg0qoV;5xggnQdSy3qW&k^cJbvn zcDMbL3e30QS%61&MhdNIYPY3-89k2!@a}mpMl5?C++`SMJg=qKQm`A%y>X8()Y~T?j3nC3HCbbsLf+H2 zV>pK`pM|%IE&b$u{yl^zOw7)vs*Q%xp4xG}PAkOxg|skgiqY-ThTYYz>-r40KSqKQKx+oV7l_odF<}&aNDwsy1Ej z!*GoYgcX%9(wHmR)amNte;4=ep5s+`sJTsPn$v6sUc zu&Qy}mmz%sat?zJ0At6BVil>_PRT}!9a!4WaXNqQPY-ZhyP$X6Q261eb^dr5hBvDn z`G97#oN}kBC}Wf|iC%f?c6-;XoHbZB|C@IRu7l1^D)r)~W2BF9Bga9~2qedw$7)3X z{V(&Ce6S4c2j0)|;)lz@J|c%mzC$uO%yIj3CA&E~ZbIM~U6_QDM7JeoiFTy>+#jw2>Suf3{l<-PtL-QN(O)YHC>G&AIHHDSWw=vr!b;Dt)I;(eYv7DF^tzEZX_x`n%MNzK|Iiz>FR|yJ=!xx-MFN)hX!x2@P zu`gPPPKxVpZdS10o><-O4B+E6*6oiIv&f%ob9##Efl^7;|t81<&$MVw$r+EY;n07(l~Mqu83 z6hByiFoUUXVX##FJ>?@DuVqZhVaLP+{iDy#r&|m4Y;{A!DN6)ar6o*=uC`nz{E}Hs zxuYPAAh_7onL^(}S*h8EI#=_CK2C9PS>;;N@XUzT`qQ%G**sAYO%8AQc_2vMo&}^K z1IW%b>iE($MsPjJj#`eCGK(dmwwv!;V0LezK?SD;Y~53*8;Z+_g0n(Va=cr7%vWSK zQ%m#+n|7o%pRG26Sux)4jNNB#@hrjmqg2en#Xbg2@IkI!0iDKOtW4JIVgmjm4{c}f zmuQ_Iokj|#NETG_oKPQz`X9xsji!M&BX z?!Ur-mQ}JHKeo8Tay1TOVU5*j#XCpqZ$Rl20sQgrnvJCnia3pq?#LRMdkst6m%BX;pj-)PN1oS;iwmMNOVA-#f0NZ4j7;36&4cs&Pjr< z5+T!7tz=8Dqs!gzZ}3IMr%xH*%U@GL!~!ueeyPYYroIr`uSOQ-gypc&kI39H1w*|CBv>xTp#G@w0SVfi^|q*xF!)_f z_+wEo6UJO}q1OsPV(4}RWzCL9o{r*<-YVQLQOvItCUH3m6c>0D0Fyuk9QxUAymT=Y zb3Oy%hW$E&f7S!3EWsU{mC|@wF<0eBZb9;CU(`1D7rhe9EZcgKpPdC4I?3nK_VU`rScCeF9NXJw+cb;bQi_9hGZW-=tx(~)Pl33kdTdU3+BlD-` zB`VjUC6QW2_F72bJB0=G^M7pBw?bz(Z|1a31-!a(RzB8FpI%sTn3_nr1g_xyF1PH{ z=zxEc3O*WHFJsYm!RxTmA#ip4r5I%7hYr3~d-9+2AIOb!<;=AdWWtBQ(DtzQjBEY5 zUFBnR!$YHCgMLbOPo#u2JX7FQ8eN)Hu%|PP$8D1T zq|Y6&5DQQ7i=H>qEnv$9WNTaW9%lvT^JkcR7}{3CIfw(_BCG~nNtHCv9j zvAx%i`ee-QuxlS~f7*&;1QfM{Ak}!=rnV8by1KZ2Xs(HwJ|alTYjGUX2*8sgT4D)ytm zj!_}+p$^Js45ZzT4o{?x-IRc>-;X)|g%uzsSkK%fdH-anaKyWmDH|_@dxrsXpPVyg z7t*(!X_dQ^&TE8D*tJ#JO3PWYm;y#>!_YZn1~U|nUvdq#U>uhSej7I8e9JJ16k0OGupTggoTlA*J`BT+CXtW+$ihl(h@kO8CGnPG%A&3|pz9RR>;8379}ahX^3v16j_@J#@gJxY$XG`4 zi|*Mppx?IKQ)pwS-q2$8)cKP}r@R+Yd7l;=r2=w2k)qQ9U?GLzi(d%b;K@2{YBRDBDs2nF?8f}2F_;&K z^GOLsIC-}7AEmz4JT4)yD-=60NA9Tuo!2jS@uyZsqe| zMqE9B?>m$4BMb!zbnsQ_7B#tMB0psJFP*$pygR~{xv~j55o!f*x#)QEK^&KQFo8Y- zBCfRKYzf!mOa%ij_z16C{~enJ1u>JCkZ|O2+A>GAkwSJ#=0kY<*~cKy4Lu(Q?iVOR zx-gL3r2W&9ntzr1NV8{cKvw&nAUA(Kj2O^DoRrm>ia2>pRIBAmIR6O+ObAWn5mS!3 z!YrUZgIBUY8aZYLq_JuiFlASr+JDS_k{*xJLn&b;8-5_>{`8%}E|{w3y>(9fBf4b- z>s$0;zwn{XNt(6f`;IR@xQnjUKa6?PvfBtBEeK|-^rl+ZEx@48>jt1L&Xc)EHe$dh!v8J4A;t34+VQH@