From 723d0d7248ae2eb03f14972dae763f13b213f1ba Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Wed, 11 Sep 2024 10:51:23 -0700 Subject: [PATCH 1/9] rebase to main --- .gitignore | 166 ++++++++++++++++++ README.md | 10 +- decoder/__init__.py | 4 - decoder/__pycache__/__init__.cpython-310.pyc | Bin 224 -> 0 bytes decoder/__pycache__/__init__.cpython-38.pyc | Bin 234 -> 0 bytes decoder/__pycache__/dataset.cpython-310.pyc | Bin 3344 -> 0 bytes .../discriminator_dac.cpython-310.pyc | Bin 8137 -> 0 bytes .../discriminators.cpython-310.pyc | Bin 6972 -> 0 bytes .../__pycache__/experiment.cpython-310.pyc | Bin 14643 -> 0 bytes .../feature_extractors.cpython-310.pyc | Bin 4658 -> 0 bytes .../feature_extractors.cpython-38.pyc | Bin 4122 -> 0 bytes decoder/__pycache__/heads.cpython-310.pyc | Bin 6688 -> 0 bytes decoder/__pycache__/helpers.cpython-310.pyc | Bin 2727 -> 0 bytes decoder/__pycache__/loss.cpython-310.pyc | Bin 6184 -> 0 bytes decoder/__pycache__/models.cpython-310.pyc | Bin 8086 -> 0 bytes decoder/__pycache__/modules.cpython-310.pyc | Bin 6644 -> 0 bytes decoder/__pycache__/modules.cpython-38.pyc | Bin 6616 -> 0 bytes .../__pycache__/pretrained.cpython-310.pyc | Bin 8324 -> 0 bytes decoder/__pycache__/pretrained.cpython-38.pyc | Bin 8082 -> 0 bytes .../pretrained_model.cpython-310.pyc | Bin 7124 -> 0 bytes .../__pycache__/spectral_ops.cpython-310.pyc | Bin 6845 -> 0 bytes encoder/__pycache__/__init__.cpython-310.pyc | Bin 268 -> 0 bytes encoder/__pycache__/__init__.cpython-38.pyc | Bin 278 -> 0 bytes encoder/__pycache__/distrib.cpython-310.pyc | Bin 3742 -> 0 bytes encoder/__pycache__/distrib.cpython-38.pyc | Bin 3794 -> 0 bytes encoder/__pycache__/model.cpython-310.pyc | Bin 11713 -> 0 bytes encoder/__pycache__/model.cpython-38.pyc | Bin 11745 -> 0 bytes encoder/__pycache__/utils.cpython-310.pyc | Bin 2680 -> 0 bytes encoder/__pycache__/utils.cpython-38.pyc | Bin 2653 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 557 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 567 -> 0 bytes .../modules/__pycache__/conv.cpython-310.pyc | Bin 9204 -> 0 bytes .../modules/__pycache__/conv.cpython-38.pyc | Bin 9484 -> 0 bytes .../modules/__pycache__/lstm.cpython-310.pyc | Bin 1052 -> 0 bytes .../modules/__pycache__/lstm.cpython-38.pyc | Bin 1058 -> 0 bytes .../modules/__pycache__/norm.cpython-310.pyc | Bin 1146 -> 0 bytes .../modules/__pycache__/norm.cpython-38.pyc | Bin 1152 -> 0 bytes .../__pycache__/seanet.cpython-310.pyc | Bin 9721 -> 0 bytes .../modules/__pycache__/seanet.cpython-38.pyc | Bin 9649 -> 0 bytes .../__pycache__/transformer.cpython-310.pyc | Bin 4535 -> 0 bytes .../__pycache__/transformer.cpython-38.pyc | Bin 4526 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 243 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 253 -> 0 bytes .../__pycache__/core_vq.cpython-310.pyc | Bin 12315 -> 0 bytes .../__pycache__/core_vq.cpython-38.pyc | Bin 13383 -> 0 bytes .../__pycache__/vq.cpython-310.pyc | Bin 5143 -> 0 bytes .../__pycache__/vq.cpython-38.pyc | Bin 4797 -> 0 bytes metrics/__pycache__/UTMOS.cpython-310.pyc | Bin 7971 -> 0 bytes .../__pycache__/periodicity.cpython-310.pyc | Bin 2728 -> 0 bytes pyproject.toml | 43 +++++ requirements.txt | 18 -- wavtokenizer/__init__.py | 0 ...3s_nq1_code4096_dim512_kmeans200_attn.yaml | 22 +-- ...3s_nq1_code4096_dim512_kmeans200_attn.yaml | 22 +-- {data => wavtokenizer/data}/demo.txt | 0 wavtokenizer/decoder/__init__.py | 4 + {decoder => wavtokenizer/decoder}/dataset.py | 0 .../decoder}/discriminator_dac.py | 0 .../decoder}/discriminators.py | 0 .../decoder}/experiment.py | 20 +-- .../decoder}/feature_extractors.py | 8 +- {decoder => wavtokenizer/decoder}/heads.py | 4 +- {decoder => wavtokenizer/decoder}/helpers.py | 0 {decoder => wavtokenizer/decoder}/loss.py | 2 +- {decoder => wavtokenizer/decoder}/models.py | 2 +- {decoder => wavtokenizer/decoder}/modules.py | 0 .../decoder}/pretrained.py | 7 +- .../decoder}/pretrained_model.py | 8 +- .../decoder}/spectral_ops.py | 0 {encoder => wavtokenizer/encoder}/__init__.py | 0 {encoder => wavtokenizer/encoder}/distrib.py | 0 {encoder => wavtokenizer/encoder}/model.py | 0 .../encoder}/modules/__init__.py | 0 .../encoder}/modules/conv.py | 0 .../encoder}/modules/lstm.py | 0 .../encoder}/modules/norm.py | 0 .../encoder}/modules/seanet.py | 0 .../encoder}/modules/transformer.py | 0 {encoder => wavtokenizer/encoder}/msstftd.py | 0 .../encoder}/quantization/__init__.py | 0 .../encoder}/quantization/ac.py | 0 .../encoder}/quantization/core_vq.py | 0 .../encoder}/quantization/vq.py | 0 {encoder => wavtokenizer/encoder}/utils.py | 0 infer.py => wavtokenizer/infer.py | 4 +- {metrics => wavtokenizer/metrics}/UTMOS.py | 0 {metrics => wavtokenizer/metrics}/infer.py | 0 .../metrics}/periodicity.py | 0 wavtokenizer/prepare_libritts.py | 92 ++++++++++ train.py => wavtokenizer/train.py | 0 90 files changed, 360 insertions(+), 76 deletions(-) create mode 100644 .gitignore delete mode 100644 decoder/__init__.py delete mode 100644 decoder/__pycache__/__init__.cpython-310.pyc delete mode 100644 decoder/__pycache__/__init__.cpython-38.pyc delete mode 100644 decoder/__pycache__/dataset.cpython-310.pyc delete mode 100644 decoder/__pycache__/discriminator_dac.cpython-310.pyc delete mode 100644 decoder/__pycache__/discriminators.cpython-310.pyc delete mode 100644 decoder/__pycache__/experiment.cpython-310.pyc delete mode 100644 decoder/__pycache__/feature_extractors.cpython-310.pyc delete mode 100644 decoder/__pycache__/feature_extractors.cpython-38.pyc delete mode 100644 decoder/__pycache__/heads.cpython-310.pyc delete mode 100644 decoder/__pycache__/helpers.cpython-310.pyc delete mode 100644 decoder/__pycache__/loss.cpython-310.pyc delete mode 100644 decoder/__pycache__/models.cpython-310.pyc delete mode 100644 decoder/__pycache__/modules.cpython-310.pyc delete mode 100644 decoder/__pycache__/modules.cpython-38.pyc delete mode 100644 decoder/__pycache__/pretrained.cpython-310.pyc delete mode 100644 decoder/__pycache__/pretrained.cpython-38.pyc delete mode 100644 decoder/__pycache__/pretrained_model.cpython-310.pyc delete mode 100644 decoder/__pycache__/spectral_ops.cpython-310.pyc delete mode 100644 encoder/__pycache__/__init__.cpython-310.pyc delete mode 100644 encoder/__pycache__/__init__.cpython-38.pyc delete mode 100644 encoder/__pycache__/distrib.cpython-310.pyc delete mode 100644 encoder/__pycache__/distrib.cpython-38.pyc delete mode 100644 encoder/__pycache__/model.cpython-310.pyc delete mode 100644 encoder/__pycache__/model.cpython-38.pyc delete mode 100644 encoder/__pycache__/utils.cpython-310.pyc delete mode 100644 encoder/__pycache__/utils.cpython-38.pyc delete mode 100644 encoder/modules/__pycache__/__init__.cpython-310.pyc delete mode 100644 encoder/modules/__pycache__/__init__.cpython-38.pyc delete mode 100644 encoder/modules/__pycache__/conv.cpython-310.pyc delete mode 100644 encoder/modules/__pycache__/conv.cpython-38.pyc delete mode 100644 encoder/modules/__pycache__/lstm.cpython-310.pyc delete mode 100644 encoder/modules/__pycache__/lstm.cpython-38.pyc delete mode 100644 encoder/modules/__pycache__/norm.cpython-310.pyc delete mode 100644 encoder/modules/__pycache__/norm.cpython-38.pyc delete mode 100644 encoder/modules/__pycache__/seanet.cpython-310.pyc delete mode 100644 encoder/modules/__pycache__/seanet.cpython-38.pyc delete mode 100644 encoder/modules/__pycache__/transformer.cpython-310.pyc delete mode 100644 encoder/modules/__pycache__/transformer.cpython-38.pyc delete mode 100644 encoder/quantization/__pycache__/__init__.cpython-310.pyc delete mode 100644 encoder/quantization/__pycache__/__init__.cpython-38.pyc delete mode 100644 encoder/quantization/__pycache__/core_vq.cpython-310.pyc delete mode 100644 encoder/quantization/__pycache__/core_vq.cpython-38.pyc delete mode 100644 encoder/quantization/__pycache__/vq.cpython-310.pyc delete mode 100644 encoder/quantization/__pycache__/vq.cpython-38.pyc delete mode 100644 metrics/__pycache__/UTMOS.cpython-310.pyc delete mode 100644 metrics/__pycache__/periodicity.cpython-310.pyc create mode 100644 pyproject.toml delete mode 100644 requirements.txt create mode 100644 wavtokenizer/__init__.py rename {configs => wavtokenizer/configs}/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml (72%) rename {configs => wavtokenizer/configs}/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml (71%) rename {data => wavtokenizer/data}/demo.txt (100%) create mode 100644 wavtokenizer/decoder/__init__.py rename {decoder => wavtokenizer/decoder}/dataset.py (100%) rename {decoder => wavtokenizer/decoder}/discriminator_dac.py (100%) rename {decoder => wavtokenizer/decoder}/discriminators.py (100%) rename {decoder => wavtokenizer/decoder}/experiment.py (97%) rename {decoder => wavtokenizer/decoder}/feature_extractors.py (96%) rename {decoder => wavtokenizer/decoder}/heads.py (98%) rename {decoder => wavtokenizer/decoder}/helpers.py (100%) rename {decoder => wavtokenizer/decoder}/loss.py (99%) rename {decoder => wavtokenizer/decoder}/models.py (99%) rename {decoder => wavtokenizer/decoder}/modules.py (100%) rename {decoder => wavtokenizer/decoder}/pretrained.py (98%) rename {decoder => wavtokenizer/decoder}/pretrained_model.py (96%) rename {decoder => wavtokenizer/decoder}/spectral_ops.py (100%) rename {encoder => wavtokenizer/encoder}/__init__.py (100%) rename {encoder => wavtokenizer/encoder}/distrib.py (100%) rename {encoder => wavtokenizer/encoder}/model.py (100%) rename {encoder => wavtokenizer/encoder}/modules/__init__.py (100%) rename {encoder => wavtokenizer/encoder}/modules/conv.py (100%) rename {encoder => wavtokenizer/encoder}/modules/lstm.py (100%) rename {encoder => wavtokenizer/encoder}/modules/norm.py (100%) rename {encoder => wavtokenizer/encoder}/modules/seanet.py (100%) rename {encoder => wavtokenizer/encoder}/modules/transformer.py (100%) rename {encoder => wavtokenizer/encoder}/msstftd.py (100%) rename {encoder => wavtokenizer/encoder}/quantization/__init__.py (100%) rename {encoder => wavtokenizer/encoder}/quantization/ac.py (100%) rename {encoder => wavtokenizer/encoder}/quantization/core_vq.py (100%) rename {encoder => wavtokenizer/encoder}/quantization/vq.py (100%) rename {encoder => wavtokenizer/encoder}/utils.py (100%) rename infer.py => wavtokenizer/infer.py (94%) rename {metrics => wavtokenizer/metrics}/UTMOS.py (100%) rename {metrics => wavtokenizer/metrics}/infer.py (100%) rename {metrics => wavtokenizer/metrics}/periodicity.py (100%) create mode 100644 wavtokenizer/prepare_libritts.py rename train.py => wavtokenizer/train.py (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8934a4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,166 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +wavtokenizer/data/train +wavtokenizer/data/infer +wavtokenizer/result diff --git a/README.md b/README.md index f09db83..16d0fda 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ To use WavTokenizer, install it using: ```bash conda create -n wavtokenizer python=3.9 conda activate wavtokenizer -pip install -r requirements.txt +pip install -e . ``` ## Infer @@ -36,10 +36,10 @@ pip install -r requirements.txt ```python -from encoder.utils import convert_audio +from wavtokenizer.encoder.utils import convert_audio import torchaudio import torch -from decoder.pretrained import WavTokenizer +from wavtokenizer.decoder.pretrained import WavTokenizer device=torch.device('cpu') @@ -65,10 +65,10 @@ torchaudio.save(audio_outpath, audio_out, sample_rate=24000, encoding='PCM_S', b ### Part2: Generating discrete codecs ```python -from encoder.utils import convert_audio +from wavtokenizer.encoder.utils import convert_audio import torchaudio import torch -from decoder.pretrained import WavTokenizer +from wavtokenizer.decoder.pretrained import WavTokenizer device=torch.device('cpu') diff --git a/decoder/__init__.py b/decoder/__init__.py deleted file mode 100644 index a04ecd9..0000000 --- a/decoder/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from decoder.pretrained import WavTokenizer - - -__version__ = "0.0.3" diff --git a/decoder/__pycache__/__init__.cpython-310.pyc b/decoder/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index ee67377fa8cb8994fa75071ede161273dabaa18c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmd1j<>g`kg2x?O)2u->h=UB6fE))PE*1e2DGVu$ISjdsQH+cXDNIpJDa^qPnk+AY zG7OrGw^+mSlkotl?fm0F|^ mHd#MDJ~J<~BtBlRpz;=nO>TZlX-=vgBhb8JkfA&b9LxY_e>lki diff --git a/decoder/__pycache__/__init__.cpython-38.pyc b/decoder/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 9118d8394ce1f9c6de79a1b21e506d9763858a89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmYjKy9&ZU5WGtah!3#vCsLRTSSn&?XCqqJ95J^fr^#KoGlBR=7S{etS}T9S$~`Lw zc6MhLX7=OpfFPd10~WYnPW;0|vBt4eBtZl%NJ)>B65$;^;qOS;d*g?Mv?AnrcD&yN*i{P*-S`# tVYUKDbCzlWtVmQ=CmA@AvR@11Tq=3xJgVBRzbv(=3s_Oiwyt#Ke*uG_Jt6=A diff --git a/decoder/__pycache__/dataset.cpython-310.pyc b/decoder/__pycache__/dataset.cpython-310.pyc deleted file mode 100644 index 0b625d907b8214b0b87ca5154b94082d28c49d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3344 zcmZ`*&5s;M74Pb-yv@z%wq1-)S{Zn4 z&(QGHA5`1bLC_8s|J2$w$)|PU&cH>opID+IyoZ+Xj_qUCZeZ?U?{R>Mvk_&drk}gJjF*=KpFGlwkP6FM$xtKe7 z7AIZZh?7*NNl}KwsO;%R5e7Nzs#8cZhHIPA=r`d(r*<{6J<HvY| z+diYW&dkmW*GbMpPq7cMyiUQSBW&r!{1Yo?!V&yo9q!{|wIbb^3s3kDdAmXm5ZlK1 zybYHyv$|+tulk9_t#*LRZtAsPl9K24*7Z_FNrvlI(EyivKS~#PhpfAN2)FUkSX=`r ztz&D-W)`!?Y;1-0*an1m-?bjIy%yJQF&aumhDfrcq|2Yn>CEkH z+5&hCM-4;creQcY#Rlz>+^hJC3P8XrEMQ05E9coc6XsTu& z8P%E1nym7SJ4e^ggwBI`=i)EAqGUNzS%-po`4CQyN7wQBI>6ZK)5io8_6cPVXK!D< zf{m7~zJ)=34FFeRj&K$ya~;>`Mm|5ptDyay9A}*!-B{IbmG~?5Qr`v#=<)UiJzmD5 z`VN5=Et=%S=QldE05^@{MD_MXe-YElc6b@Hb5bsnB zcpEuDR;ZLMV_ZAD;<@p97&#=(A(?+qH=^cBb~snmRLh zL&)Dl1><;+9cE?z8&i6MyWgHL*)JMP8k;Um-C~cN54d`*^o4T_ zi(sWHP##1D=?pgM2kLuetzVxus8G!8jEU-`Qa1Z*)Ag}C<{}tZMD5SKYj@eqfh2e0 zjXC~%>A+F%g6>lPGSShBsGm3_bGjkC8M1!=%7LYRP2+NH+nV^mH=zL^6J{u{SzFf3 zo>WVxzXe`Z0blya7S`DR$d2u+7TlPNhSAp*IQd<=gFyYA^zLs9w&X*Swk^T8EYSpY zFsAMaoW=oO>}>%jex&1q&w>K7u)n(7TH8~U{!Ymrqi+B_{mXAo|M=gp&f?v12G>%%kB#T_a%E}9Qyl+8spb27|J-7owCpy(Qud^E~nvKnu$go#G|Z3?NO9!U&(p)P(Mjh$1i&=PjLm_=dI%rP-n8U34Crp-CG?fRJjuM zx)xGtOG-Hi!yiIKK@}okO=rUnxNkSvHoJ}-uz`HA&aSannD1Bqa|4*~ZvM}=pKBZD zx#5i2-d7ZXUGO)#MqMI|WU99SbYFGV?h-fvJo z(`z_iNNsc3qqJMhOBxlVd13exjkSMk-ZKA~f}@}WUSIUClwW;2aBK(n>ThiPA55(< AK>z>% diff --git a/decoder/__pycache__/discriminator_dac.cpython-310.pyc b/decoder/__pycache__/discriminator_dac.cpython-310.pyc deleted file mode 100644 index 6a99286c46a7274bf1b7be1c8c00d08423a7ea81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8137 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 KNn-!Uvi}cged$mD diff --git a/decoder/__pycache__/discriminators.cpython-310.pyc b/decoder/__pycache__/discriminators.cpython-310.pyc deleted file mode 100644 index 1011217d79881835580eff47d775d5f0a98a6066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6972 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 J_QB$t{s-nY8*cyr diff --git a/decoder/__pycache__/feature_extractors.cpython-310.pyc b/decoder/__pycache__/feature_extractors.cpython-310.pyc deleted file mode 100644 index 078045d1a504ea71c0a8b27badd1a00e06e5c0ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4658 zcmbVQ%X1t@8K3vg&OR*Jj;%O}Gf9Z;EsRuzw+V?KQ9=qw6{0*~iZC_W?$wSoJG1Vd zm9T1b!7joj6jj`yQsw04OK#lxJNib!MF)y&2n6%{dUmC?l2ies>Yu*u`MUd??=2Ob zPGI2q>#zSf_}f{-_zO+u9|x1G81nZ3W-v1|MrLH1L|d5^S^Bpf+4yZ|*2syR={q-a zvF2pns1Y^vnw$BfX4D)7QK08u)*7{=wx%0dXVi_lrtylweAc{cuqJo5PTaAh1*`FbH)VLwZx32Q@>; zXB=`_xygj3h4KW)-n?(k$zg-0`HwK94=7=;JLWIVo|P<{h7p9*XL{r8d|W1qQCJRn zxS8(oJk(b#2Z#LE#HPG*IHN-}M|kN?p36e?u7t1V<4HMP-A#5lq#w;4@P-!l*ctWa zE8$cc&W_|M2B91#V;)|*emT5xIlS4s9PSRe;NkT!m0Hq`r0fqv342_ANV3^C-Uu1b zi;~N*n3N>kRGIQ}nB*+HIXg%4TN9r5d6@Bhvm7oT9=7+j^~r{|1@H{_`^JK*1SOsxBD%d0=x*f;2;Ox^kjW}jSAImO0vp-Z`Z7xBVXzAx* zf!3OUE{5~~zTueXEWP%H(E=7jJ`^p%d&a)|yM}Q9HUM1wfZ<@}^PWYN-r^f<#^il*S$7p7|kmRW37k zOwlPVW>L6QZe_%FiJ0B;DzmaGyK=x|Z(9_>?|XRLUlk_Wl({(Tb(TeWSCr1P|B$Lup*U@8)6B~ z_B_#nSRy2Nir{I2X9z98FF5f5cDGM0;>Gui7PDq{<|Y#Z7JWo}s-?ImM>YNo9Q425)i&Zu!+xun( zBUk2!=Dt(L0z!NP5ZO?(@}~hTj|UG$)iQ=`0|Ilw3{BFc zWA2^*61`2sx#x;Uu|=FCc#Pn20&+?Sa+2s%1g8neQaXTDXKKhk&$5{@DJ6-^1lp`* z%_lLY@!T~Rx`Ng|7tgeh9{DT4QT5wIgYc0_W&q`aLTnEj%;z?hcJ4lkvd%pe^#*HW z-oU&Ay2~4buFeG~*uvdT@;d<>)7fe>RspbnU4|u8*{%|I{)8IaEQl0GXKZhg3@K3 z%CEet!Jc5}*^}>k`>o1kA+o}6ORs8HLDi}(_7rp3({+;0{nBU8ROTNH_LUE8o!X79 z#=Yi;#!JS#?tYt{ui9~N>jR{CBW~%Geqrr^;t3@rnaCu2IaM3mEV<2v)IOn{ z9NAR0c6quvEMqZOQH^Rj8c;D;P_4E651}%sm z5WGO}BEeOHYXs{AZxg&j@DqS?_33p2)~Q%$VG{GZ7_tHcfoD6`1(XHr!RLl${o9!z zw)L4~JD*)}<~jY@&UsFvr`!R!y$8NSB|Law*@5Xi=-R#+ID1R0b^e?s)WgbMx3=v= z!^J7Gx?J13#JlLd40K@#+sZ

V?8YeV1B>mKWIlr2jkbXVsNvLY#wsfq&aS(=x1|D)SC{Hvqxgaq9yzD1yePQy_X z^liML6egbo_=aWIeQk}-Cl*4-L+DtJ^)Jh{{^@zvr&h!Ihvj!aIrH`N=LGHVol;(T zdrZDZatSR!k0^=~beu^!j5_)cyk+Dx{4pkVBN?6Gb;KR69;GO9Vo_It8PhbC>LjmI ynDSoJr|G}KbnB+YnfuPeG^70I>ziLdPf<7WZNs;GvrPl-Xd6E#?S;kDOaB3R_>C<9 diff --git a/decoder/__pycache__/feature_extractors.cpython-38.pyc b/decoder/__pycache__/feature_extractors.cpython-38.pyc deleted file mode 100644 index 229844c3c49494fabd883efe887620593a19caea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4122 zcmb7H&2JmW72j`?D^j9t#g^?f*(Plz0y0$?0otlT73Kd;`xP-9PX@tr*7NsB`vl(7BFR{uY86%uI~b?3gCCt;FhB`q%E*__Y%&bvjNt z=XP9-If<86Iu$+UCe^gosil6$*L^QpNb8-tZdZ~!Wwl2Jt8r&<>7m_e zV#H?)7+K&=^q0}Evj+MN-9N{ydq!*V6#5x0Q#rR|S?r);Wf^2uMm-)TdB0_;#=Y%# zcX+X#b#unWtot6+cXS6D4+7& z*(o?uiOAHXIe@=wbAL;|}SW z4en}%U)W>%@m5f3!`U-^@?IbZ(U1r0H#UNs8^P_?MsPUbf(JK(SZYmoqoO+qBz&^* zoMy8--V7Me@`B4C9~GorX;QfnL>UWi&-Ri0V8pX74-%gBi$Qz7+4$9rm#D|lNTS%7IC&M1dL-VNAjd62y4pQ$2WcXg&~&E z{raQLL7wu>z5KyZl%bvFVskg{UuCh}-;_hnyMs-N(9I;u`lG0?!?nBlAn)dKv%FAv zCPs!ws#5B;Oo5;yWMRDeV!XA>MLVsEs)k_}r92FkABJhpMhUg+VR(S(FJ~%Y$nq|R zT?A`)puDN?1RbJpaz-?1tOl`28W4w6O~=wB{{ zLdW^caEuPYXF*-K!;^bM;8Ns$5vAqjK_J>s8TM3O7ybflJvyd*s9nWN zn2|Ri3ge-1Vm`rF6PKC$6>+(+m__KBxDz9^3&42Ko0t=8Vow~bvG*_T(qjnm7^i(3_gsrxF8>X5+x(9BTrR^QyrAAy*4Ee zAC!|x!lzV=&l^%zaYBf&>$W`6fLbCT@of@ska&~CI>Z;Is)eBjM;K0huiZ{=4DiZT z2*dQvD*inDS>+#EUyomZ{@9uS+OtbMM{MLQ3KLCiAEGfa_CRg>me@ke+_SW_SB>M+ zO?wqM%4XJOV=8-^eIMJ$<^)cjm`}`Or>IVxhvu<6p@4FC#B131l)$1Yg7*@H7SQYf z47^p-7Zw{d=^w^f>5r*FE?`tp7%9Iu%DP3IXHlYT*j-TI&&){B7X%0K7Ok~mW>qcW zD_?{TVXBQ+vpCtXX$IPo?fJNLMG>=u>(YrR)gnLlx0?DK4ey}~X$_KtxDb`fa#b5R4Cd6Nn>T*b+kGimB1BG0#rH8HHX%-bO(Gyc6nsk1J|#OVd;9kN(+YLT z#H}W%I~qyAX*ml;S&W5Abi{>J4sEKcz!_yMuAD>`sj9IU*;xXFs@feySq8pTHBf1s zAO%R&O%V_(m5-V$en9O^E$nlFbs-fJYGr=T+0iDdvLZY?(qM6-KM!|Nwy9bnMm&`J z@et?c=@7ff(`&dy|I7FPGG6)eAMbn&0N&P@%)$fZ?8cc?_5GBCiNjdy<|2@zBdAjj zg3ZN`@P&pn(nDn$>_Szr5LXtehWtFON!4^;tgfT8In^Exwp($P8t;hcp>j! z6Xa1rtS!jFf;>9YzAM(K=MN+LRNuQHP=Cd+Scp{4I&L;f!vpbSECciE9JEEd(13WG z#Lq||(Hr6yBti(~>J6uarKwA^7ODC}yz=J|hUbGs1G8>gsFN+jH;|HaOaK1Mb6!5< z)5@owMafKm^VGL3(|_vNi+6DUV3ULXvYP&R!LX&DpCRdyqZ| zK*PRggGKEfjZGxC+FTuUs8$4r8YuFJ2UTs9Nz}$1|Mh5llc~in3G&9X_+!eY zh?J-|IMQEn)T&NBr_)|cYi*wHcH9HPvB+qLoJJP_mK0S>lFR>@1%HV}k~r5u1>svh zoOfAQ6P`7`_@c>YNwEGxrc<^ogwVO&?In3s0DgI%OcS8a-xqPfw37V+wR8Y!@hkyS z7}2EGrb^B?t#2&LqRQr*=DMKy)_LU>M?KpiAK)ab2e>F7V8?WI7A{29FVQ23T>dvU)vqeY<1p zx*b*ePRHq2J5^n;M74gsQ)kA{4B?3CM~0|McHrK&It{ecL>(=4*+6{>byqY{Z|Hgx z^(E0ny{YTVg6$fu<$KtRvD0F?8OJR%cfH=o%M!0IBb1R-r8h!P%=k=k`ElN|%w+8nO(+ zzRiBiTBiRNGYprP&rj8UdTCmt##?-2PsVAYT9^3McreU(rmH;Z^0em(fitDa4J6>$~cfblJS1l+vI*M_!TZ> zoMf_C566@d7hxYe2$Q(&PFHbR@BhHB#V@0YfENndV>F#X_#t%ES_ zK~4jtt;-P0)_eZVz2pNKL)dETW)dXnRu8I^wg*RfwfyQ5T|enTtv)(Cr(f-|e+PP3 z^Ss#aOV5M0dxc)1yySTw4*jU?sd}DB0yI~$Lxci$V#{NiP2@EDrz4!VKsGGJ*Wwna@bNsEWwuQ zpBT2$amlLlx;9g?CjZlk#_J|dZKVZi;~FR_!XOLdeNL9mgM@D97T&Vk4TBI@nU<=z zXf9Apz7fV5Eagflptv(tooJ2L;F-3>UbmY~=Ir9?Xk2+QJX3z0;%54@@x5f=m1`m-CbyG@=9XpSF2GJ8jG88~G* zpv~XWeJS_hIW7bcu2dH|eB6Z;JH626Z^*7cj52tDWYVU;0t>-_+=A5eiWX$<&g7F< z%MSzPN{!N?$^j8MloSc4{zV43~V)IId*ofpub!*|>6Qjt#GpIb(BdA=$#b zW22=i3@DVfbB_$EWvg%DrOqSEUC6k+9`z)3*78a^97sh*6~7c3Dv%>g^bUH^?u;$8GnA^jgmGggoUy%boHN!TZLD8|q}j1E*0ARv zO>C2tZo71r1H!%1?@rHBn(Q11ELtNi@C|rH zbyUgs9K^160bgCv!CCFl*~5457^7WhzZ2T?f4Eg({ErD3ctU_z@}C^@Mi zt-PPJLC%hHwwqTpC_jiG1TEi3O4pFBHP)ERmYHk1Y}Ij@%|>UYdNBdB7E|Xiw$)Ip zc&Rg#(PVWNS#H5kV>_8rWHW_XK1L<_P~I$!E09q%F)(dqWL$-*J&qEYs5Ui%G~Rg1 zQPlc5P-~!(p7a;U=0UA)i`5d&Y|z$lS?BX!4r12|%^3&5sPfP=|`pr|n5xWFWaQw~9p zy2BW-n8XF`TC}z=k9~a+WS)j2@|hD5yr#+D#Mt%r^q8*`S;%t$TLAi=@-q-z=*l97 z0Sb!&Tn{K+lUCd|zY1_u$<0tmv8g#9XnV#Z|41rGH;Mq$An+lH6o@aTkV&6?8K^HE#d%;`8n2HaW6iEq-|0kJ9qX+VFO^wF}9Y7caU1vc{Zzb9c7OfPirF zklhe-)M))@6c*9?ym9Pg=7|NYb~IMo8PI2pu<8yWw=)L1cvaxGF=Xm`Rzr!MH*T}z zYF0mSg*C2Xo^@Qy8si#T>%tz_$Mut?Q{zck_OXjm%~RtK>)-~)fqk%ivNCp0V6VbH z1==y=J%pz={%%_oi0&HC8|k};Xs5sHNYtjeg0oZjRI^i`>bn+$(*E`tob29xJgqb8 zDU=J3L>xhJ%E-YgVlf~HBun)&HIPsWCtHIOqys;YilAGOm&~hi;_WM6hUZD(dO7ADl$@n`09`)A4@;(N8V!p*(|p&&;QO!#2M1PRh^cG;#~u?rntWwtpw_n=mm;V>2@2C=h!cj;jqLj3@p>W9d3n|$lTn1rGrV{R`q{_rDo zkVdCu^28s^rhVUJ<^yT@{!?cajSY|%o=1nu%kyC}c!g7j%JgFx@d;P+iAKpM=qIpw zKCzN7X?a{uQX&(>zfLUWejvWji`C5AlhG`M#^h!RKgi{#&mo%wTMBzAoTIQ9K_F^nSS*-^+9D)2choDG*Q(8- zn8uTbK$*7OR^_2Uq~|;YVm_vw5g#DKU1n=+^w_+jei4??0UacbCGVp!!xF@_gdo6> zX-rGJ0w{lA3rpB{G@6`%U4U=sn0DO&!aytsRkaC(fnb0y`1u(KWRGniOwAup?1nhq zBN3*wvTxw!D~A`&xzw|`XpJwbMWvrpc8#*D$e^kkRW_+X|1xutN;7ELqAKa*L{)XX z%KGXB>Ub2+{2rYp&a6RA*9)9sqxA)Koq&v~L1tUMO-s&DYlal>pySuHB0gcCRu|*6riPZe4Ju4QJk!-xPrhg!ArvnK(=|^5NNHxPOeurunz2!d@ z6k%@eysiJmpntX1QLY9hy^Fa`Pw_Udy>_imzf+8L@It@xBnKeZ?r$CKl zG+Ys}WW%HviiT(&hn-cig6mUiB36Og`hG2$NgkShga1}IrnanBff*kST zPe}^xKHrxqPe%bnjz`rbse|jh1eg!gJnEcb`3zYFTM%WNGuVpW1<3$g}C+bfnE(BjtH@Akl8OX9@ycB6ymHSfL zG`If^LCg2AF8~2hy8p}yDLUc*K?tF3rC1iW##5U;ZGkEEDhv>a4e*cw54w<#t#VPJ z4y1NrsY=-nT+F?&E>=44=cQW%6iHpFg40=+g18on=P6D6qi?F+aQ-#vQ9VX zIhw$)NfXwD5penjY;~cZX_%YtLN`}nkfcKefvig*<1!H(lTIiQJds=fM02sL^ynn# z9p3P8I$0uW3ROow#DK^l6Qm`auN~IKKtE|XM@4s_8&qn_W{~$SowCPt4lox4-ekLO z1vzEN1=2?V?A_W4@0uF8(8!|a8dmeX1fNGE2}=~gJ;GC&RbdbXv~YnP9w{N>SmdK8(1$%;eCjj>Kib; z1>Gl*CJAXP^t3;KhV8Dt38Pypo^~q^iP5;|1J#04k-b=U?>jNI#N2J}#_51l`cJ_VP&Fyj`d+FU%d7oSZ&W2JjY^0Yt(Xu`HQk z-Dh)x{;9?CB0%PfEZP?nnI5@VNXxqesB!NB4@dhyQvEK>YI!}l-iPHqB;A3b9lE6A znAHIIMt^|xyD+%O0H25L&?C*Wa1knFTw;~wg;%KNiV>n)h!Ul)(tjnxzr3ewtC z-@?yDmpuC~;v!!ted4SiM)mbI7~F+w;m5XiPd8118LJ Cd(LeD diff --git a/decoder/__pycache__/loss.cpython-310.pyc b/decoder/__pycache__/loss.cpython-310.pyc deleted file mode 100644 index 0fa7d55b13b3b56915ca7249a61bd9436c01bdf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6184 zcmb_gTW=gm74A#*WhS=c*t?0H&F=Oh2syb9l+xoz08#B zZA;a$$R0Rtr)=jAEJM?^L8IN&wc8rExcyAyc4+OMdTO>8z;U<>j$3jT!D;X&IL(r? z1kNeG0M0_mIStMtUjk>T}IS1y-xI49V{F(@a|TM#CuFZt2p9V^B8@x}hH> zy$&_2KaH}G-oi(ywRNtw4X(G%hQ&`~v5Y%-UA&Eub=}`;U7a`isb`CA3yZRMovxu4 z#M-E1TDyV8EX(z~Vf5)R?0gb-k~q!8sFU@R_)e0hvyx9^FeGhH-x!ip@t!CrLLW9OuUHiCD$r&)`i-DoxYY7xaaf5zIr3ev=fWYkE!MdK-Qff_py!Q(*ibrjUOE;W|)WrG>x_f9_7vQLW%hejiH5QHy+ z5VzGNMUI0(NQ&(HgM^PF`d;w;y-^UAHIDD|qyx6uk29rO;vMvsb|E@(kqV2Y-gd$$ z^8MP{X}N+nAV`hKzS8p`uEuo3VlNHdsJ%-s*IdF5N&Z zSO>OM>OXII^+kE_(>3+0;!N+u3aLoYe!{k@VUM>ey6noqE~%j=Bj3N~shiNlHIxNF z(YU7snk88f6(&fRM&L!|{7USPf@p+e=!#@eO-#`7%7-qVboAiz%ns73zaZcjr$KL9@Vs7DLfelwNL3T zVGX9c`kLOv&o#zxRys#2w^7>Z_Vb4LIvNYQ#6*k8H;9m~sI`ep^kovE(Q7kSKp{3z zLA_GaDzdXnO!4MyiZI|hHT)^ai8eK{E;egjm6e&WGFy34WMvNY&Xs3w)@^}yI4m`(U}XBP2@ADr7V6gc&bg`OHsFr9dE=Z0n}uU?z;gG% zI@FXUTPQUqrM*++xa3yXR2F>+s!(b02^L-7@9UYhf;T1A!V4?mYhq=`i|&7zq7r}U z4q~2aQ?H39bLeuz%Lsf<#+OU~7jT)#r1(D`YNp~W)e=+Jv8~$k>|p=3Gy{paYo_9y zQGXg|3UY!xH@L9oxIZkgHld4xDUAGtp(N!_dtRFh99afRn{H0d98FqIN41FPs|K2>P zkpoEn-xkT>#~=i1H8495Fk=ed067ZYmJ4{x%>u~aZrHiA2B13B3A*-{_ne%d$p{cq zzY3a)rIlb&_ciLy#>{T%w)aj(BQ;>}wFjIUONDWj9UhN8DlUQB0(Sy&aN!biZ@Sdl zu}uR4Wq9x?z6T*s%}tuYgS6!qHueLmx=w^_OnjdR8I&|cB#qv&{zMn`DS6SXu>vzX z4{c}W_^n&>s#uv2ruz~;#fk33$CxajStstq6()!`XImzi^vt>FDno&|`B`C0;#+p?V+R2cf}aMFji`jwvvBkRbB`j_OL6M80q}$1gJAP^JWg=7eXqs)IEW#ta zN(0C}T5w$EI?D|~HLWw!&Yle6wG^=>nR6j4a?*;-)uPHNZWP&&RHe7tt17d#5yu-7 z$b!kfOI_}PNc*lzA*mFOiaC`RrmhP$ZEd9$0!jCyVv3I`9#7ALENd>rg`B0aVyu`e N@2sq?ynFV|{{S1F_hJA5 diff --git a/decoder/__pycache__/models.cpython-310.pyc b/decoder/__pycache__/models.cpython-310.pyc deleted file mode 100644 index 759d9a3406c92539d1f5ce9eee77f46757d3ad6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8086 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 O#UI@ut7g-_y#7Btii=?Y diff --git a/decoder/__pycache__/pretrained.cpython-38.pyc b/decoder/__pycache__/pretrained.cpython-38.pyc deleted file mode 100644 index 865d46b17b56825ce69ba8f1d88716ed0f5abe1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8082 zcmc&(%a0t#dGG4iJa%UGNs6Qyr%gK+Mb0FE7o5kgUvrAT6AiB61$l}Yb(%}meE zbPua~cD0+Hi&)Obx46lzu-r8-8+37pZ*WWBSz+ZfE3Aeqk8FSQJ4RRw>yM1E&Z~p1Bg?-K zvX6{r;|W%6+;7^-c`z9dxw7uW2g>?n>>>dl9PtB>5I+>H%N9NSc+|0<#pVASyhrfC!mT3^DQIK-!1zu+u zNa^iIY2Qox-0MYqJoad%UJ!>KEw)vydidQz-7S4bPt@X;_dz0~6sH#qsbVtXaVkB* zA5J2{L$8|%3^1Dw&06#BH0~{rj@(PSdSWyld4G9LFQ+{Y(*Ctutyb&CHEP+W+4S?Y zSj>m|_?Fi50Bc{&g~{`MB|8J&!47E2sxlwTuP)|Mto4N9v?0B6S0tlhB-5s=tR7EQ zHIn(D9j=^IW5yM7JcIKKJcb zctOA2I`{S>`o0ui(r+&;y`^z4V})13FX?v|e+*^xUxLnDRnDK%xdvYaOf-@RY`UsI zncz5bslgw31q0mN2_#?`^NE0VkYGYCv`Pe%FiJdm5JTT&By(^+=tr^`4L4&EjRFx3 z54;dfdXQwHOkFN`+~GHJg_V;rAyB^~u8QKGM-WE;83OcrfiphzI(^>R9VZcVwB@~% zdYvT3^iWu>fr4{y1kj)wu#Ranw?Gfwob)_CW4#-C#K7ArnC*tJ|O!Z@?D(zem(1o;3{1z2oM{ymOETb?i(hHXz zHnf~uvngN)R&Z|JsHZtfkQSXHaq3*bbr+Z1L6H(wvm^6w)`-N9v6T}xwf@Zbrtw|l zL*x5KYK3M78oz9WHfY-}o}J>^DW2WpnW)?bu|v5&wWg)41b~*GPPI^o9RUGy2r}mT1!i+J%y=yaO#c8UISvG9Ddj?X67~(C0~`YHAQ%BWdegu%(Y@D= zhI~Qhii!Lj>HHs?3l3b!LU{BF0!hXkww8wUD>CTvHsMw?&*QSPIzuU5K}*HD%FU-d zBR%El<>&Lwg{Nu+`*vUNK)#9*a(;7a;I=jW*I@tijN{6Q@g}Ga z=Gi%}X6^|C*zMz$%qi|_8veGH?+^dC@(qX*ZWdO-%Mq}UF&X~1C%qo=$6G-MM4$-+ zZqP!=hXw9iB)g_5zC~gx6A;Lj9j=cL0GUp|t-H2%q8QQ~PoQkIQ80#-I~qA1vb3|G zg&R`+k8sH=C?X>>KHh*c!=`2ky?F_4%io(1=?vK6m2;fZ0u^GRot8!eJS?;IscE-mJb{)GxTNGUvXk_y!grZcw4=Kp)R4J!(Dx-$kP(Cb`7u4@`1#>5yimgXSGV^z28LfY5yx zmmH%2O90cv{wW*44uo*wKQ)Q@iS>_+DctpAn^@uF7IeS`ySv8@+l;tp&f zUdc*i2W}e=U&*Xvu!!aj>$s$O!-CF~#J4f6xJAVuP(i49TA3N*)>B6t?WY^(HLF<` z?^2IDRJ?&g*@Rzlk8TOjB9#;~2vQ{RHVX96pe6bi?@&RKP>lt++alQ4OHgcAvAwfU z-8=(TI{!9?kQ*orr^+^9kJs3jS+%5rdU;6(3xHFvQ(_>kB!$&t*a7`4i=i;bc26HZ z4*nWNONgoq6!CCp zF~YQxRWfI{B>oDu@Q^`pxTe*#G$?1)uoRX7hzdqr(IeKfmE25dK-8y=td6x+u{Nde zR_1p#0ODs^BdcX~0ODs^8S6$J*1MCzt45?))xf$xUCp1fRm`%Mu7r)WmX(j-pkUos zrt4WbTgRJ?Y%SZMHs3<4zhw`vWNUf5FB#L#Y!lF1#XSE7;MKEI0ldZ>c&i$CzPm?m zb36LwvuDqq{3nY0Pe?(Yvh6dN6z`#0yidh_Dj+38tfOeIY8Wark*Y+2Sr`fN0bVFK z7{ikY;o-pn7Jot==2*>9YQqpniHRQ}4<1QQBBnO#SZ3vQAU20gc<{1W1W+D+ z@6UZyF(EgzlZ+2;&ZDB-EzLuv{a}w%dZ6V|;B_t{fj25-3I`|Ya4C`0Aa^G3skf0w zEHveQKkD>7#8+q$dt)R%;NybCl1VSme$1#*$22qy5hS_M0s%HM8DfHj#bWqmlH!<( zlmtz12Z8(|M?y7A$LU>vz+=F*c}wp@ugyz!6~+gJQ3OdY*kXd&&M8Eb{b0u=of z9yAwQqB%bAx8Fy^=)F;F8c|z{6Ohp%P6+9p_h$9;iJ&LFw2v*#JKNxqT% z6kfQKrK7`XpO)y^eJ$Kgc$i-Sw3G|~4nAJf%{7*zPQwzeXC9eK#oDTtA9KEvvl>+b zc94n*|B3KQ;58bQ@Hng&1|)xb%ELJYaqq2Kzx~Tg%T)DE_?A8FrR>i^Fu5L>{M=+yTXav|)9{g5FsZlB<*!>$Q0n88OTFe6bkU;}pm zR|?U2Wl#<6%uH7@^w>finXy3)QMnEH!!RA!5sxG5a$>>#veCLh&etP7mmXtvutw22 zT)YY*6$dTW2OGzmlzTZb2V1(HVt4oW0>&|sqQ^aysTz38%Jcy4ha}rY>GVPu<}wEK zX1o9!vkO3Y*Y&Y9(Go^y1{OZr;UOjWq&Fdt;uMnR8Mc?@T&HM|og~@y_IcFnBi*-P z^Ya!;&-ghS((>+oGDZ>|DxRAl=<@Y62B=G=_=-%nCOizHX+&k8OGCo_tM(#x&{sbQOvr`EcYDsoLCs-(q>H**%SD`9w zVEmmQE z`IC81%w>W7nis{Hd`aUD+%ZAv#d|^|LXgv|Dw9}(5&0n(#0aYLa6;d%@ThF$n51_4 z5e#TAU;H_m2nw~8y%+I)WT1jnNP2dM!2$A`g6Kt6yOX$+f3{MUxpFB>PDZMN99b;K ziR7~^OsxCIZJJJ%l5SV>RQjv)eh6^FPo%Qa(O4V%v!}Lx?pXdEBTD+%Vl+%<8|E|D zG=FW|NXM8pc9m_I*UU?-W*)xuf@5u7qMSFS-SF)R-=Pq|;L{TBYwb49XIQ)`web>|NQ zUwHF09s$C?v`2wztAOp|qlL_mj?#JlO5TP70;$i@ujMs5e3be5{)DC^$tw4KEfl@Z hB}B}Pq$=Oe#r8Twb4j{TW|z#e4(al+t!BNl`QKZ8T37%8 diff --git a/decoder/__pycache__/pretrained_model.cpython-310.pyc b/decoder/__pycache__/pretrained_model.cpython-310.pyc deleted file mode 100644 index c4db638cf483448c701c17642f140a4d84366607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7124 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 a0mo&?7LkGiLX8c@ncd}z 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 rUc; diff --git a/encoder/__pycache__/model.cpython-38.pyc b/encoder/__pycache__/model.cpython-38.pyc deleted file mode 100644 index 6de05a0e70c1adc7825da87ea66a2903aaf4c807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11745 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 diff --git a/encoder/__pycache__/utils.cpython-310.pyc b/encoder/__pycache__/utils.cpython-310.pyc deleted file mode 100644 index 37246ea4ae4bc5dcf03a0e1b85d81c00f469b122..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2680 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 MyaRh2CT3!O1A}#%(EtDd diff --git a/encoder/modules/__pycache__/__init__.cpython-38.pyc b/encoder/modules/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 84093798a1e1bae6df7359d95a8c87efdaec2c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmZuuyH3L}6wN#7Bc;H|!bk>c!Hf_H*q{q>s$#Yek}WE( zM_;zNE{Pg{p0gv?gbT4E-LX_~A;r>&yBj`HxzKZ|xeU_-WD^W>_;Ml9>cf zp5*c+7lsR|$U`|jWTk#4dd_(Ko QQ%tEbrRN@W`}WZO0VAlN4FCWD diff --git a/encoder/modules/__pycache__/conv.cpython-310.pyc b/encoder/modules/__pycache__/conv.cpython-310.pyc deleted file mode 100644 index 92428edd43a60388547badf58540565c97487f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9204 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 Z3kCjrPfvPh51d?FC@&n8zxl&w{s%XCXF~u0 diff --git a/encoder/modules/__pycache__/conv.cpython-38.pyc b/encoder/modules/__pycache__/conv.cpython-38.pyc deleted file mode 100644 index 751a4cf37fc0cddc3701554f0e01689dac5a0dcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9484 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 E24Y8z!~g&Q diff --git a/encoder/modules/__pycache__/lstm.cpython-310.pyc b/encoder/modules/__pycache__/lstm.cpython-310.pyc deleted file mode 100644 index 9c13de51af1d7e0a07d1899f7ec586fd6936729a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1052 zcmYjQ&2G~`5Z?8!ou4M52t*H5!UqJ3gkr&oLxn&U;zE0ABqR%I<$5=bTiY9UowkWm zE-k9WQ?$oE057vwPJIPV%s8pqv1YvU{0TCNGACOkz9F)?3~41`g^1w%%6PS8}5X8GE>Heg_hG?4Q?R;=~L&G zWs1j#)L1F@JscE?DOB<#jhS47+>jMGQ2r>mBqJ&tvU$;s1KE=83lcXj2`6zA>UNyJ zhlS@q+aXZh!%0?+^|T64v@x@+JP4D0RI9NH$C;F>3~iNE>P=W`Q(K{F4A7%mlS!2f z>TI7+Cn~LMn3WT7CpJuVd93qkmFY6caaQJjxIM}y zDdKuZc=mxAuzd-lBIo3aUK2_dY(a!qu`9ly@Oam#`;x%4bhjTk-%cmWxTX+UnN>m< zMABe=$8mngb6XXC4pmh?GFZg~C@}7Zx|R@Wo>(iy4f*#e8tXzuGP6hTqQlINRe3N0 zj<&T_(YNGysE<^c&6SB%nSw2imbF?gfy9HuFuj(r%*)==!761bbO}~3*?2IoM_!wS5@Bt8qp4kL|=mr6e0VI6aAeM%L zxJA)tt^xQI(@L2&^x)Wi-*n*R=&AEg-#R*TRG3HTt;IU}8Y68^5+h%LVlleMdb9`g zG%2U^?sB44Oy8@k4*MswC7-Sex*%1UfzRXr~d!yfCu^R UXKijRJNHDb(f-TtFh~ zysFA@d0+gMVc)?*k%R)0CuzduKyetpvM2lJBhM?_Gta9@nC_!lPgOY0rBqdD>$Fy{!%CZW7ZSz*J#H7uD~U8M!q3CFt78xJbjikE-rc`bzL z!Eu8bIF1ZBUf8;fIH0OxY!Jl+s4(uDx`7Z`kylWvRGB!x9hTv5pi=iHv@op4AUYYp+g$b#d_PK&D(S{ z%=A_;Ih>zh+AUB^df7fU$*$O`w**Rn0Q%iKWv6_}z{l_@f)7YJ@XUK4i*69G7|_Fa z4DxCys2fz!ksfeWHnlPj(1R32zFC8hqbJTgdF$xhQDGjUw^fhO*BfhdoErHY42#i( zty3HU?bF4mt7sJyc`fQ*G{BxzX{m&8Lm@hDV7(^9k0vcvo}Lg=XRyuks&;%|>!PL2 zY#{Jx)tpQf1+?}qtr2()=4SB8U`j2=eaiXM^>%Lu3VR0o&abt}rrnDOw%h-(4Y+sP TU8Vi4F3%50jYaynx5oYhOV|Cj diff --git a/encoder/modules/__pycache__/norm.cpython-310.pyc b/encoder/modules/__pycache__/norm.cpython-310.pyc deleted file mode 100644 index 2f6ae9ce6bbf5b6f4216cbffd38c45327a061218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1146 zcmY*YJ#P~+7`E>#A5BDs+N#|=Au=?Pm{A3)1Oru;f{<>poU<=+dhrF@DI_XWiz+ej z8(N8_?ED$8O#B5VUSEhOg$Vue&gO`~c?HXyfZ!-a z9P^;SX;A4f4J#d`5$LdpCUF{L^cL}m$2W+_A|5B#VOrzCIqD>fgMO(etdI+4WvR%d za#K%tZc&8N79gp)_Gzgu&)8gO4{7nMNnrR`Sx*? zRqzx4z!(|{B;bB0aIu+9g?4pHrIMD?PUs>did_2~F1h&3^w2zD*Pt|mLJg%4=-=z! zsGNu%m*(O{Z!FD7sNob=@3iEi_mN$`FE50W3!!^LWf04Ht5)|s_U?496G*@BA$shG zcyX}RkM0`IR%!lI56hQmo`bOH4hrM=KKP1laECw9?RJSJ z$0uX}3LGD+jAg9a?nEvTQk7HV8d@-|nHmc1-=M2OOMwpF33Sc-_=|3U)}CqI^5O{y zPr0dsXkkAiyx89^ZJnj`qV&^@6|0>ZrM%1_9N4LgKPY%%E|ki; z=u8^xVq5BL)D?c1c=UL1MhyWkp+e?@g<a&;rV|V&jK4HW>H$okUI=PAl2%@ERg!We!9Cf4 zZ+(Iul4AnoJ@O2^=9E{+DKnI9*cAB9aJZcP<{Pfw4u?k!$Cvyw{FO5Hl@E$rDyF$kT3#j5rd1kkR%K|@He2Ua&e@+#XF9)TI){8!T%}b{CvVuO*gv0kcCFfG zuYA)PvF`M?1vmbNx!H8YLt;!#{=-2GXt+NRfK?n>;M=PdvQ-WRVh@UA2IZMMUw{+!QW*oS6TTCza$e|W4aVU?7c+BMdCPP;(D<98;rAPw#SpmTsvwP$yBM17I5&%_lhBF9@Dp zu@%4MbAFlp$2qnUCE(Lh5^}fQfDNUTjcL4;qcmg=+PNjsLvj9(vJ3Z-hrX0Gmg%JY z$iBaxEW0&KR^7!;8T66NWY#QBbmPt^ZUay+Cv~S`(kipqss+%Zo`5;n+on&bhVf=+ z3w+fxq8e-9`{$23Grptts6={{C{mg3R|L=AV}Y7~NdDzMxnl3rOa6hQe~2d(k7cLR z{m(No9*>0=C#PbD1{V~I&LI}JM_DMKG2O<6z6E71Rs%N2mxUfS7p2jo#P(>--`PG| zON!e8!A}S;aJmwK@j?9UpFJ+^F3XS_VAL9<3`bHP1VVox<=Y zY*bphJ)!Ws4PIhPO|nCRV*=_y=-+=G@yLVx_gaMVw?jpzq?Mz;n=C1ll9zmt{s3nU BCFKAB diff --git a/encoder/modules/__pycache__/seanet.cpython-310.pyc b/encoder/modules/__pycache__/seanet.cpython-310.pyc deleted file mode 100644 index 0ee20a061f1d9314be4ef13c60d2a6469e160bc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9721 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 diff --git a/encoder/modules/__pycache__/transformer.cpython-38.pyc b/encoder/modules/__pycache__/transformer.cpython-38.pyc deleted file mode 100644 index c92d179a3168fc9075c1decab210229e28bdadf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4526 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 CR7IEo diff --git a/encoder/quantization/__pycache__/core_vq.cpython-310.pyc b/encoder/quantization/__pycache__/core_vq.cpython-310.pyc deleted file mode 100644 index 697d4470912d91c4deb64ba3b1516e7a0b913541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12315 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 EA185olK=n! diff --git a/encoder/quantization/__pycache__/core_vq.cpython-38.pyc b/encoder/quantization/__pycache__/core_vq.cpython-38.pyc deleted file mode 100644 index a4b50fbc6b025adf921725dc899676e7863fed84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13383 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 diff --git a/metrics/__pycache__/periodicity.cpython-310.pyc b/metrics/__pycache__/periodicity.cpython-310.pyc deleted file mode 100644 index a93553c24ee5c5ae754216c6627988662bebaf0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2728 zcmaJ@Pj4GV6rcU;^{)RVjnq&?u@InIKukDrr~u$A* zh()TQiVdO-Y-|z-SBMju*uvGPhFin7lskfkIPpP^IZ3{A9Lzuabzpcq@ygSxPmGqn?SQpswkjoh61&MRkX z)?7vtE4KzMT*r+QC07p6q>Ala&#P-9>V+Jl$<+h2h6ER?khZ4(oq~|vhW3CG90eI` zkD@H-xBUdSM}$Tx2&3${9j3IM^+~%I9g?Iiv$koUH%0nP;@H?7@kGwsk9dS4D{H;W&=>?{q4_ z4WmR*|1o!%KODuxqkcxXF-$Ru-9;+H^-9Zf6O%(Y$y^)x_yq>H9fgXs`vP1e3WY`; zivJ2XX1p;l=x9RQP-rtllaV;2)A&BvCbUZaF zuBaW36IowBhK-M))->%=f5;8#mpgqwNxWhcuJdqfdt>LJx3}eP@=6?iOH<~%P1u+h zQu1gFcReD^U4kqHWR#8l*gGOoub)LpkBY2teMtPowZ7W^dS`2WbE9KZar>z*h#?dV zS!eE)5=|GRCCeaxhFFKW&C&`|UYVZPXNbNB+JAr9?WaT1#SuGL?G7T=hm?eH-xGBi;GwgyCRsfzgN7u5c%X4e#3 zGeOdl@?uVCnSUPX&jOK~Sz83ggf1cQ4`4Esqwf^}JAgaj z70K%WYs#sbt7l3R0b~hYmwW|yEjMy)8DR4Y8t52c^F%pQ1bhKxnR(@wfGQpIj9ksD zuc0$V@&H|eUq(x4VoNW!@F48Yl!;SVo|@pLmYYo^{K&7mm}#QvS0k^%uYMK1jwVgX zHzeP}O5R*Tc?)_oZ%NrgZsktC5NZI9hJP>v$8|pr#xYz!fXDe2ZcpoT0giKU5b&AN z@eKR0pZWg^m&dO_yQ^*%GV?l>0Xe z`AWR38?L_W_0DRW1t}#mKgA>4y@1~!_8E)9DDVZCO9ZA3I9&9qAj?3apWqgDD#g)M zlMy!}miPdQ>=DiAJD|b!IPHDJH8vi07U_yG>;iFZk;dY7xUGVpZ{M{=-e$7}Uz&BK zei5zf$m!yPw@O)(8F9_2S_?;ENT~d0A@GrLTV746#T!KgDT^|AJQ;6>e#{`eR|N^_ zK`w+w6_yPm26^EoaDE(fHC&ZIQjqt>=HGyc;#8Jj0dIOJ?|=%s4y0DEDK)jGTvsiv ztt=`vt)VoeWJ$4A`U$9X8uV=#s8FXL3i6g9Zwhh^hrG zdwtW}zq`A+cX#LBhPyZe)47bB#UBEIOYy+VlFF4!dlE27<;JWvc;m(~`Bc0tOhjfO aODTReMOOjDRNd6iVLS&YgKnQ+`}iN}+zz|| diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0d97914 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,43 @@ +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "wavtokenizer" +version = "0.1.0" +description = "SOTA Discrete Codec Models With Forty Tokens Per Second for Audio Language Modeling" +authors = [ + { name = "Shengpeng Ji" }, + +] +license = { text = "MIT" } +readme = "README.md" +requires-python = ">=3.6" +keywords = ["speech", "audio", "tokenizer", "deep learning", "pytorch"] +dependencies = [ + "torch==2.0.0", + "torchaudio==2.0.1", + "scipy==1.10.1", + "einops==0.6.1", + "pyyaml==6.0", + "huggingface_hub==0.23.0", + "encodec==0.1.1", + "matplotlib==3.7.1", + "transformers==4.28.1", + "pytorch-lightning==1.8.6", + "tensorboardX==2.6", + "soundfile==0.12.1", + "numpy==1.23.5", + "jsonargparse[signatures]>=4.15.2", + "fairseq", + "torchcrepe", + "librosa", + "pesq" +] + +[project.urls] +"Homepage" = "https://github.com/jishengpeng/WavTokenizer" +"Documentation" = "https://github.com/jishengpeng/WavTokenizer#readme" +"Source Code" = "https://github.com/jishengpeng/WavTokenizer" +"Paper" = "https://arxiv.org/abs/2408.16532" +"Demo" = "https://wavtokenizer.github.io/" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index f16692b..0000000 --- a/requirements.txt +++ /dev/null @@ -1,18 +0,0 @@ -torch==2.0.0 -torchaudio==2.0.1 -scipy==1.10.1 -einops==0.6.1 -pyyaml==6.0 -huggingface_hub==0.23.0 -encodec==0.1.1 -matplotlib==3.7.1 -transformers==4.28.1 -pytorch-lightning==1.8.6 -tensorboardX==2.6 -soundfile==0.12.1 -numpy==1.23.5 -jsonargparse[signatures]>=4.15.2 -fairseq -torchcrepe -librosa -pesq \ No newline at end of file diff --git a/wavtokenizer/__init__.py b/wavtokenizer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml b/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml similarity index 72% rename from configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml rename to wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml index a42e514..bd61fc2 100644 --- a/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml +++ b/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml @@ -1,24 +1,24 @@ seed_everything: 3407 data: - class_path: decoder.dataset.VocosDataModule + class_path: wavtokenizer.decoder.dataset.VocosDataModule init_args: train_params: - filelist_path: ./WavTokenizer/data/train/libritts_train + filelist_path: ./data/train/libritts_train sampling_rate: 24000 num_samples: 72000 batch_size: 40 # 20 num_workers: 8 val_params: - filelist_path: ./WavTokenizer/data/infer/librttts_val + filelist_path: ./data/infer/librttts_val sampling_rate: 24000 num_samples: 72000 batch_size: 5 # 10 num_workers: 8 model: - class_path: decoder.experiment.WavTokenizer + class_path: wavtokenizer.decoder.experiment.WavTokenizer init_args: sample_rate: 24000 initial_learning_rate: 2e-4 @@ -33,11 +33,11 @@ model: evaluate_periodicty: true resume: false - resume_config: ./WavTokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code16384_dim512_kmeans800_attn.yaml - resume_model: ./version_3/checkpoints/xxx.ckpt + resume_config: ./configs/wavtokenizer_smalldata_frame40_3s_nq1_code16384_dim512_kmeans800_attn.yaml + resume_model: ./version_3/checkpoints/vocos_checkpoint_epoch=31_step=157696_val_loss=5.9855.ckpt feature_extractor: - class_path: decoder.feature_extractors.EncodecFeatures + class_path: wavtokenizer.decoder.feature_extractors.EncodecFeatures init_args: encodec_model: encodec_24khz bandwidths: [6.6, 6.6, 6.6, 6.6] @@ -48,7 +48,7 @@ model: vq_kmeans: 200 backbone: - class_path: decoder.models.VocosBackbone + class_path: wavtokenizer.decoder.models.VocosBackbone init_args: input_channels: 512 dim: 768 @@ -57,7 +57,7 @@ model: adanorm_num_embeddings: 4 head: - class_path: decoder.heads.ISTFTHead + class_path: wavtokenizer.decoder.heads.ISTFTHead init_args: dim: 768 n_fft: 2400 @@ -68,7 +68,7 @@ trainer: logger: class_path: pytorch_lightning.loggers.TensorBoardLogger init_args: - save_dir: ./WavTokenizer/result/train/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn/ + save_dir: ./result/train/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn/ callbacks: - class_path: pytorch_lightning.callbacks.LearningRateMonitor - class_path: pytorch_lightning.callbacks.ModelSummary @@ -80,7 +80,7 @@ trainer: filename: wavtokenizer_checkpoint_{epoch}_{step}_{val_loss:.4f} save_top_k: 10 save_last: true - - class_path: decoder.helpers.GradNormCallback + - class_path: wavtokenizer.decoder.helpers.GradNormCallback # Lightning calculates max_steps across all optimizer steps (rather than number of batches) # This equals to 1M steps per generator and 1M per discriminator diff --git a/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml similarity index 71% rename from configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml rename to wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml index 1aa7f41..598b0c5 100644 --- a/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml +++ b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml @@ -1,24 +1,24 @@ seed_everything: 3407 data: - class_path: decoder.dataset.VocosDataModule + class_path: wavtokenizer.decoder.dataset.VocosDataModule init_args: train_params: - filelist_path: ./WavTokenizer/data/train/libritts_train + filelist_path: ./data/train/libritts_train sampling_rate: 24000 num_samples: 72000 batch_size: 40 # 20 num_workers: 8 val_params: - filelist_path: ./WavTokenizer/data/infer/librttts_val + filelist_path: ./data/infer/librttts_val sampling_rate: 24000 num_samples: 72000 batch_size: 5 # 10 num_workers: 8 model: - class_path: decoder.experiment.WavTokenizer + class_path: wavtokenizer.decoder.experiment.WavTokenizer init_args: sample_rate: 24000 initial_learning_rate: 2e-4 @@ -33,11 +33,11 @@ model: evaluate_periodicty: true resume: false - resume_config: ./WavTokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code16384_dim512_kmeans800_attn.yaml - resume_model: ./WavTokenizer/result/train/wavtokenizer_smalldata_frame75_3s_nq1_code16384_dim512_kmeans800_attn/xxx.ckpt + resume_config: ./configs/wavtokenizer_smalldata_frame75_3s_nq1_code16384_dim512_kmeans800_attn.yaml + resume_model: ./result/train/wavtokenizer_smalldata_frame75_3s_nq1_code16384_dim512_kmeans800_attn/vocos_checkpoint_epoch=35_step=187848_val_loss=4.1611.ckpt feature_extractor: - class_path: decoder.feature_extractors.EncodecFeatures + class_path: wavtokenizer.decoder.feature_extractors.EncodecFeatures init_args: encodec_model: encodec_24khz bandwidths: [6.6, 6.6, 6.6, 6.6] @@ -48,7 +48,7 @@ model: vq_kmeans: 200 backbone: - class_path: decoder.models.VocosBackbone + class_path: wavtokenizer.decoder.models.VocosBackbone init_args: input_channels: 512 dim: 768 @@ -57,7 +57,7 @@ model: adanorm_num_embeddings: 4 head: - class_path: decoder.heads.ISTFTHead + class_path: wavtokenizer.decoder.heads.ISTFTHead init_args: dim: 768 n_fft: 1280 @@ -68,7 +68,7 @@ trainer: logger: class_path: pytorch_lightning.loggers.TensorBoardLogger init_args: - save_dir: ./WavTokenizer/result/train/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn/ + save_dir: ./result/train/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn/ callbacks: - class_path: pytorch_lightning.callbacks.LearningRateMonitor - class_path: pytorch_lightning.callbacks.ModelSummary @@ -80,7 +80,7 @@ trainer: filename: wavtokenizer_checkpoint_{epoch}_{step}_{val_loss:.4f} save_top_k: 10 save_last: true - - class_path: decoder.helpers.GradNormCallback + - class_path: wavtokenizer.decoder.helpers.GradNormCallback # Lightning calculates max_steps across all optimizer steps (rather than number of batches) # This equals to 1M steps per generator and 1M per discriminator diff --git a/data/demo.txt b/wavtokenizer/data/demo.txt similarity index 100% rename from data/demo.txt rename to wavtokenizer/data/demo.txt diff --git a/wavtokenizer/decoder/__init__.py b/wavtokenizer/decoder/__init__.py new file mode 100644 index 0000000..7f561e0 --- /dev/null +++ b/wavtokenizer/decoder/__init__.py @@ -0,0 +1,4 @@ +from wavtokenizer.decoder.pretrained import WavTokenizer + + +__version__ = "0.0.3" diff --git a/decoder/dataset.py b/wavtokenizer/decoder/dataset.py similarity index 100% rename from decoder/dataset.py rename to wavtokenizer/decoder/dataset.py diff --git a/decoder/discriminator_dac.py b/wavtokenizer/decoder/discriminator_dac.py similarity index 100% rename from decoder/discriminator_dac.py rename to wavtokenizer/decoder/discriminator_dac.py diff --git a/decoder/discriminators.py b/wavtokenizer/decoder/discriminators.py similarity index 100% rename from decoder/discriminators.py rename to wavtokenizer/decoder/discriminators.py diff --git a/decoder/experiment.py b/wavtokenizer/decoder/experiment.py similarity index 97% rename from decoder/experiment.py rename to wavtokenizer/decoder/experiment.py index f5557a2..ef85912 100644 --- a/decoder/experiment.py +++ b/wavtokenizer/decoder/experiment.py @@ -7,16 +7,16 @@ import transformers import yaml -from decoder.discriminator_dac import DACDiscriminator - -from decoder.discriminators import MultiPeriodDiscriminator, MultiResolutionDiscriminator -from decoder.feature_extractors import FeatureExtractor -from decoder.heads import FourierHead -from decoder.helpers import plot_spectrogram_to_numpy -from decoder.loss import DiscriminatorLoss, GeneratorLoss, FeatureMatchingLoss, MelSpecReconstructionLoss, DACGANLoss -from decoder.models import Backbone -from decoder.modules import safe_log -from decoder.pretrained_model import instantiate_class +from wavtokenizer.decoder.discriminator_dac import DACDiscriminator + +from wavtokenizer.decoder.discriminators import MultiPeriodDiscriminator, MultiResolutionDiscriminator +from wavtokenizer.decoder.feature_extractors import FeatureExtractor +from wavtokenizer.decoder.heads import FourierHead +from wavtokenizer.decoder.helpers import plot_spectrogram_to_numpy +from wavtokenizer.decoder.loss import DiscriminatorLoss, GeneratorLoss, FeatureMatchingLoss, MelSpecReconstructionLoss, DACGANLoss +from wavtokenizer.decoder.models import Backbone +from wavtokenizer.decoder.modules import safe_log +from wavtokenizer.decoder.pretrained_model import instantiate_class class VocosExp(pl.LightningModule): diff --git a/decoder/feature_extractors.py b/wavtokenizer/decoder/feature_extractors.py similarity index 96% rename from decoder/feature_extractors.py rename to wavtokenizer/decoder/feature_extractors.py index 3e45011..627784a 100644 --- a/decoder/feature_extractors.py +++ b/wavtokenizer/decoder/feature_extractors.py @@ -4,10 +4,10 @@ import torchaudio from torch import nn import math -from decoder.modules import safe_log -from encoder.modules import SEANetEncoder, SEANetDecoder -from encoder import EncodecModel -from encoder.quantization import ResidualVectorQuantizer +from wavtokenizer.decoder.modules import safe_log +from wavtokenizer.encoder.modules import SEANetEncoder, SEANetDecoder +from wavtokenizer.encoder import EncodecModel +from wavtokenizer.encoder.quantization import ResidualVectorQuantizer class FeatureExtractor(nn.Module): diff --git a/decoder/heads.py b/wavtokenizer/decoder/heads.py similarity index 98% rename from decoder/heads.py rename to wavtokenizer/decoder/heads.py index 9d526cf..a6fc6c3 100644 --- a/decoder/heads.py +++ b/wavtokenizer/decoder/heads.py @@ -2,8 +2,8 @@ from torch import nn from torchaudio.functional.functional import _hz_to_mel, _mel_to_hz -from decoder.spectral_ops import IMDCT, ISTFT -from decoder.modules import symexp +from wavtokenizer.decoder.spectral_ops import IMDCT, ISTFT +from wavtokenizer.decoder.modules import symexp class FourierHead(nn.Module): diff --git a/decoder/helpers.py b/wavtokenizer/decoder/helpers.py similarity index 100% rename from decoder/helpers.py rename to wavtokenizer/decoder/helpers.py diff --git a/decoder/loss.py b/wavtokenizer/decoder/loss.py similarity index 99% rename from decoder/loss.py rename to wavtokenizer/decoder/loss.py index 30f32cc..27d1213 100644 --- a/decoder/loss.py +++ b/wavtokenizer/decoder/loss.py @@ -4,7 +4,7 @@ import torchaudio from torch import nn -from decoder.modules import safe_log +from wavtokenizer.decoder.modules import safe_log import torch.nn.functional as F diff --git a/decoder/models.py b/wavtokenizer/decoder/models.py similarity index 99% rename from decoder/models.py rename to wavtokenizer/decoder/models.py index e09d4fa..2ba6606 100644 --- a/decoder/models.py +++ b/wavtokenizer/decoder/models.py @@ -4,7 +4,7 @@ from torch import nn from torch.nn.utils import weight_norm -from decoder.modules import ConvNeXtBlock, ResBlock1, AdaLayerNorm +from wavtokenizer.decoder.modules import ConvNeXtBlock, ResBlock1, AdaLayerNorm def nonlinearity(x): diff --git a/decoder/modules.py b/wavtokenizer/decoder/modules.py similarity index 100% rename from decoder/modules.py rename to wavtokenizer/decoder/modules.py diff --git a/decoder/pretrained.py b/wavtokenizer/decoder/pretrained.py similarity index 98% rename from decoder/pretrained.py rename to wavtokenizer/decoder/pretrained.py index 7fd3331..2d64ba5 100644 --- a/decoder/pretrained.py +++ b/wavtokenizer/decoder/pretrained.py @@ -5,9 +5,9 @@ import yaml from huggingface_hub import hf_hub_download from torch import nn -from decoder.feature_extractors import FeatureExtractor, EncodecFeatures -from decoder.heads import FourierHead -from decoder.models import Backbone +from wavtokenizer.decoder.feature_extractors import FeatureExtractor, EncodecFeatures +from wavtokenizer.decoder.heads import FourierHead +from wavtokenizer.decoder.models import Backbone def instantiate_class(args: Union[Any, Tuple[Any, ...]], init: Dict[str, Any]) -> Any: @@ -85,6 +85,7 @@ def from_hparams0802(cls, config_path: str) -> "Vocos": """ with open(config_path, "r") as f: config = yaml.safe_load(f) + feature_extractor = instantiate_class(args=(), init=config['model']['init_args']["feature_extractor"]) backbone = instantiate_class(args=(), init=config['model']['init_args']["backbone"]) head = instantiate_class(args=(), init=config['model']['init_args']["head"]) diff --git a/decoder/pretrained_model.py b/wavtokenizer/decoder/pretrained_model.py similarity index 96% rename from decoder/pretrained_model.py rename to wavtokenizer/decoder/pretrained_model.py index 504d217..377f096 100644 --- a/decoder/pretrained_model.py +++ b/wavtokenizer/decoder/pretrained_model.py @@ -4,10 +4,10 @@ import yaml from huggingface_hub import hf_hub_download from torch import nn -from decoder.feature_extractors import FeatureExtractor, EncodecFeatures -from decoder.heads import FourierHead -from decoder.models import Backbone -from decoder.discriminators import MultiPeriodDiscriminator, MultiResolutionDiscriminator +from wavtokenizer.decoder.feature_extractors import FeatureExtractor, EncodecFeatures +from wavtokenizer.decoder.heads import FourierHead +from wavtokenizer.decoder.models import Backbone +from wavtokenizer.decoder.discriminators import MultiPeriodDiscriminator, MultiResolutionDiscriminator def instantiate_class(args: Union[Any, Tuple[Any, ...]], init: Dict[str, Any]) -> Any: diff --git a/decoder/spectral_ops.py b/wavtokenizer/decoder/spectral_ops.py similarity index 100% rename from decoder/spectral_ops.py rename to wavtokenizer/decoder/spectral_ops.py diff --git a/encoder/__init__.py b/wavtokenizer/encoder/__init__.py similarity index 100% rename from encoder/__init__.py rename to wavtokenizer/encoder/__init__.py diff --git a/encoder/distrib.py b/wavtokenizer/encoder/distrib.py similarity index 100% rename from encoder/distrib.py rename to wavtokenizer/encoder/distrib.py diff --git a/encoder/model.py b/wavtokenizer/encoder/model.py similarity index 100% rename from encoder/model.py rename to wavtokenizer/encoder/model.py diff --git a/encoder/modules/__init__.py b/wavtokenizer/encoder/modules/__init__.py similarity index 100% rename from encoder/modules/__init__.py rename to wavtokenizer/encoder/modules/__init__.py diff --git a/encoder/modules/conv.py b/wavtokenizer/encoder/modules/conv.py similarity index 100% rename from encoder/modules/conv.py rename to wavtokenizer/encoder/modules/conv.py diff --git a/encoder/modules/lstm.py b/wavtokenizer/encoder/modules/lstm.py similarity index 100% rename from encoder/modules/lstm.py rename to wavtokenizer/encoder/modules/lstm.py diff --git a/encoder/modules/norm.py b/wavtokenizer/encoder/modules/norm.py similarity index 100% rename from encoder/modules/norm.py rename to wavtokenizer/encoder/modules/norm.py diff --git a/encoder/modules/seanet.py b/wavtokenizer/encoder/modules/seanet.py similarity index 100% rename from encoder/modules/seanet.py rename to wavtokenizer/encoder/modules/seanet.py diff --git a/encoder/modules/transformer.py b/wavtokenizer/encoder/modules/transformer.py similarity index 100% rename from encoder/modules/transformer.py rename to wavtokenizer/encoder/modules/transformer.py diff --git a/encoder/msstftd.py b/wavtokenizer/encoder/msstftd.py similarity index 100% rename from encoder/msstftd.py rename to wavtokenizer/encoder/msstftd.py diff --git a/encoder/quantization/__init__.py b/wavtokenizer/encoder/quantization/__init__.py similarity index 100% rename from encoder/quantization/__init__.py rename to wavtokenizer/encoder/quantization/__init__.py diff --git a/encoder/quantization/ac.py b/wavtokenizer/encoder/quantization/ac.py similarity index 100% rename from encoder/quantization/ac.py rename to wavtokenizer/encoder/quantization/ac.py diff --git a/encoder/quantization/core_vq.py b/wavtokenizer/encoder/quantization/core_vq.py similarity index 100% rename from encoder/quantization/core_vq.py rename to wavtokenizer/encoder/quantization/core_vq.py diff --git a/encoder/quantization/vq.py b/wavtokenizer/encoder/quantization/vq.py similarity index 100% rename from encoder/quantization/vq.py rename to wavtokenizer/encoder/quantization/vq.py diff --git a/encoder/utils.py b/wavtokenizer/encoder/utils.py similarity index 100% rename from encoder/utils.py rename to wavtokenizer/encoder/utils.py diff --git a/infer.py b/wavtokenizer/infer.py similarity index 94% rename from infer.py rename to wavtokenizer/infer.py index c943cd3..478657a 100644 --- a/infer.py +++ b/wavtokenizer/infer.py @@ -1,10 +1,10 @@ # --coding:utf-8-- import os -from encoder.utils import convert_audio +from wavtokenizer.encoder.utils import convert_audio import torchaudio import torch -from decoder.pretrained import WavTokenizer +from wavtokenizer.decoder.pretrained import WavTokenizer import time diff --git a/metrics/UTMOS.py b/wavtokenizer/metrics/UTMOS.py similarity index 100% rename from metrics/UTMOS.py rename to wavtokenizer/metrics/UTMOS.py diff --git a/metrics/infer.py b/wavtokenizer/metrics/infer.py similarity index 100% rename from metrics/infer.py rename to wavtokenizer/metrics/infer.py diff --git a/metrics/periodicity.py b/wavtokenizer/metrics/periodicity.py similarity index 100% rename from metrics/periodicity.py rename to wavtokenizer/metrics/periodicity.py diff --git a/wavtokenizer/prepare_libritts.py b/wavtokenizer/prepare_libritts.py new file mode 100644 index 0000000..b751bb3 --- /dev/null +++ b/wavtokenizer/prepare_libritts.py @@ -0,0 +1,92 @@ +import os +import subprocess + +def download_and_extract(url, target_dir): + """Downloads and extracts a tar.gz file from a URL into the target directory.""" + os.makedirs(target_dir, exist_ok=True) + + # Determine the extraction directory name from the URL + extract_dir = os.path.join(target_dir, "LibriTTS", os.path.basename(url).replace(".tar.gz", "")) + + # Check if the dataset is already extracted + if os.path.exists(extract_dir) and os.listdir(extract_dir): + print(f"{extract_dir} already exists and is not empty, skipping download and extraction.") + return + + # If not, download and extract + tar_filename = os.path.join(target_dir, os.path.basename(url)) + + # Download the tar file if it doesn't exist + if not os.path.exists(tar_filename): + print(f"Downloading {tar_filename}...") + subprocess.run(['wget', url, '-O', tar_filename], check=True) + else: + print(f"{tar_filename} already exists, skipping download.") + + # Extract the tar file + print(f"Extracting {tar_filename}...") + subprocess.run(['tar', '-xzvf', tar_filename, '-C', os.path.join(target_dir, "LibriTTS")], check=True) + +def generate_filelist(extraction_subdir, output_file): + """Generates a file list from a directory of audio files.""" + if os.path.exists(output_file): + print(f"File list {output_file} already exists, skipping generation.") + return + + with open(output_file, 'w') as f: + for root, _, files in os.walk(extraction_subdir): + for file in files: + if file.endswith('.wav'): + f.write(os.path.join(root, file) + '\n') + print(f"File list generated at {output_file}") + +def main(): + # Define download URLs + train_url = "http://www.openslr.org/resources/60/train-clean-100.tar.gz" + val_url = "http://www.openslr.org/resources/60/dev-clean.tar.gz" + + # Define target directories and extraction subdirectories + train_dir = "./data/train" + val_dir = "./data/infer" + train_extraction_subdir = os.path.join(train_dir, "LibriTTS", "train-clean-100") + val_extraction_subdir = os.path.join(val_dir, "LibriTTS", "dev-clean") + + # Download and extract the datasets, if necessary + print(f"Checking training data in {train_extraction_subdir}...") + download_and_extract(train_url, train_dir) + + print(f"Checking validation data in {val_extraction_subdir}...") + download_and_extract(val_url, val_dir) + + # Generate file lists with the specified names + print("Generating file lists...") + generate_filelist(train_extraction_subdir, os.path.join(train_dir, "libritts_train")) + generate_filelist(val_extraction_subdir, os.path.join(val_dir, "libritts_val")) + + print("Dataset preparation complete.") + +if __name__ == "__main__": + main() + +""" +wavtokenizer/ +├── data/ +│ ├── train/ +│ │ ├── LibriTTS/ +│ │ │ └── train-clean-100/ +│ │ │ ├── / +│ │ │ │ ├── / +│ │ │ │ │ ├── .wav +│ │ │ │ │ └── ... +│ │ │ └── ... +│ │ └── libritts_train # File list generated here +│ └── infer/ +│ ├── LibriTTS/ +│ │ └── dev-clean/ +│ │ ├── / +│ │ │ ├── / +│ │ │ │ ├── .wav +│ │ │ │ └── ... +│ │ └── ... +│ └── libritts_val # File list generated here +""" \ No newline at end of file diff --git a/train.py b/wavtokenizer/train.py similarity index 100% rename from train.py rename to wavtokenizer/train.py From b985d4258ca5ef9710c85d5a7b28cd4c981d5775 Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Fri, 30 Aug 2024 17:09:11 -0700 Subject: [PATCH 2/9] update author --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0d97914..3e36bc2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ version = "0.1.0" description = "SOTA Discrete Codec Models With Forty Tokens Per Second for Audio Language Modeling" authors = [ { name = "Shengpeng Ji" }, - + { name = "Sam Avery", email = "averysam2@gmail.com" } ] license = { text = "MIT" } readme = "README.md" From eb40d03355569ffabf4d0b8304b8f42a0064d6fa Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Tue, 3 Sep 2024 16:51:37 +0000 Subject: [PATCH 3/9] fix relative imports in infer.py --- wavtokenizer/infer.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wavtokenizer/infer.py b/wavtokenizer/infer.py index 478657a..37cda82 100644 --- a/wavtokenizer/infer.py +++ b/wavtokenizer/infer.py @@ -13,8 +13,8 @@ device1=torch.device('cuda:0') device2=torch.device('cpu') -input_path = "./WavTokenizer/data/infer/lirbitts_testclean" -out_folder = './WavTokenizer/result/infer' +input_path = "./data/infer/lirbitts_testclean" +out_folder = './result/infer' # os.system("rm -r %s"%(out_folder)) # os.system("mkdir -p %s"%(out_folder)) # ll="libritts_testclean500_large" @@ -26,8 +26,8 @@ os.system("mkdir -p %s"%(tmptmp)) # 自己数据模型加载 -config_path = "./WavTokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml" -model_path = "./WavTokenizer/result/train/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn/lightning_logs/version_3/checkpoints/wavtokenizer_checkpoint_epoch=24_step=137150_val_loss=5.6731.ckpt" +config_path = "./configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml" +model_path = "./result/train/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn/lightning_logs/version_3/checkpoints/wavtokenizer_checkpoint_epoch=24_step=137150_val_loss=5.6731.ckpt" wavtokenizer = WavTokenizer.from_pretrained0802(config_path, model_path) wavtokenizer = wavtokenizer.to(device1) # wavtokenizer = wavtokenizer.to(device2) From fe8b49580c6d5e2808ebf44f82f96d979674af2c Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Tue, 3 Sep 2024 21:01:57 +0000 Subject: [PATCH 4/9] wip: upgrade to lightning 2.0+ --- .gitignore | 2 + pyproject.toml | 26 +++--- ...3s_nq1_code4096_dim512_kmeans200_attn.yaml | 10 +-- ...3s_nq1_code4096_dim512_kmeans200_attn.yaml | 16 ++-- wavtokenizer/decoder/dataset.py | 2 +- wavtokenizer/decoder/experiment.py | 80 +++++++++++-------- wavtokenizer/decoder/helpers.py | 2 +- wavtokenizer/metrics/UTMOS.py | 2 +- wavtokenizer/train.py | 5 +- 9 files changed, 78 insertions(+), 67 deletions(-) diff --git a/.gitignore b/.gitignore index 8934a4c..dd76884 100644 --- a/.gitignore +++ b/.gitignore @@ -164,3 +164,5 @@ cython_debug/ wavtokenizer/data/train wavtokenizer/data/infer wavtokenizer/result +wavtokenizer/metrics/*.ckpt +wavtokenizer/metrics/*.pt diff --git a/pyproject.toml b/pyproject.toml index 3e36bc2..25fd666 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,20 +15,20 @@ readme = "README.md" requires-python = ">=3.6" keywords = ["speech", "audio", "tokenizer", "deep learning", "pytorch"] dependencies = [ - "torch==2.0.0", - "torchaudio==2.0.1", - "scipy==1.10.1", - "einops==0.6.1", - "pyyaml==6.0", - "huggingface_hub==0.23.0", - "encodec==0.1.1", - "matplotlib==3.7.1", - "transformers==4.28.1", - "pytorch-lightning==1.8.6", - "tensorboardX==2.6", - "soundfile==0.12.1", - "numpy==1.23.5", + "torch>=2.0.0", + "torchaudio>=2.0.1", + "scipy>=1.10.1", + "huggingface_hub>=0.23.0", + "matplotlib>=3.7.1", + "transformers>=4.28.1", + "lightning>=2.0.0", + "numpy>=1.23.5", "jsonargparse[signatures]>=4.15.2", + "einops>=0.6.1", + "pyyaml>=6.0", + "encodec>=0.1.1", + "tensorboardX>=2.6", + "soundfile>=0.12.1", "fairseq", "torchcrepe", "librosa", diff --git a/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml b/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml index bd61fc2..42cb500 100644 --- a/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml +++ b/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml @@ -11,7 +11,7 @@ data: num_workers: 8 val_params: - filelist_path: ./data/infer/librttts_val + filelist_path: ./data/infer/libritts_val sampling_rate: 24000 num_samples: 72000 batch_size: 5 # 10 @@ -66,15 +66,15 @@ model: trainer: logger: - class_path: pytorch_lightning.loggers.TensorBoardLogger + class_path: lightning.pytorch.loggers.TensorBoardLogger init_args: save_dir: ./result/train/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn/ callbacks: - - class_path: pytorch_lightning.callbacks.LearningRateMonitor - - class_path: pytorch_lightning.callbacks.ModelSummary + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + - class_path: lightning.pytorch.callbacks.ModelSummary init_args: max_depth: 2 - - class_path: pytorch_lightning.callbacks.ModelCheckpoint + - class_path: lightning.pytorch.callbacks.ModelCheckpoint init_args: monitor: val_loss filename: wavtokenizer_checkpoint_{epoch}_{step}_{val_loss:.4f} diff --git a/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml index 598b0c5..b83b0b1 100644 --- a/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml +++ b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml @@ -7,11 +7,11 @@ data: filelist_path: ./data/train/libritts_train sampling_rate: 24000 num_samples: 72000 - batch_size: 40 # 20 + batch_size: 5 # 20 num_workers: 8 val_params: - filelist_path: ./data/infer/librttts_val + filelist_path: ./data/infer/libritts_val sampling_rate: 24000 num_samples: 72000 batch_size: 5 # 10 @@ -66,15 +66,15 @@ model: trainer: logger: - class_path: pytorch_lightning.loggers.TensorBoardLogger + class_path: lightning.pytorch.loggers.TensorBoardLogger init_args: save_dir: ./result/train/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn/ callbacks: - - class_path: pytorch_lightning.callbacks.LearningRateMonitor - - class_path: pytorch_lightning.callbacks.ModelSummary + - class_path: lightning.pytorch.callbacks.LearningRateMonitor + - class_path: lightning.pytorch.callbacks.ModelSummary init_args: max_depth: 2 - - class_path: pytorch_lightning.callbacks.ModelCheckpoint + - class_path: lightning.pytorch.callbacks.ModelCheckpoint init_args: monitor: val_loss filename: wavtokenizer_checkpoint_{epoch}_{step}_{val_loss:.4f} @@ -88,6 +88,6 @@ trainer: # You might want to limit val batches when evaluating all the metrics, as they are time-consuming limit_val_batches: 100 accelerator: gpu - strategy: ddp - devices: [0,1,2,3,4,5,6,7] + strategy: auto #ddp + devices: 1 #[0,1,2,3,4,5,6,7] log_every_n_steps: 1000 diff --git a/wavtokenizer/decoder/dataset.py b/wavtokenizer/decoder/dataset.py index cc0a2fb..9442367 100644 --- a/wavtokenizer/decoder/dataset.py +++ b/wavtokenizer/decoder/dataset.py @@ -3,7 +3,7 @@ import numpy as np import torch import torchaudio -from pytorch_lightning import LightningDataModule +from lightning import LightningDataModule from torch.utils.data import Dataset, DataLoader import soundfile diff --git a/wavtokenizer/decoder/experiment.py b/wavtokenizer/decoder/experiment.py index ef85912..e16025d 100644 --- a/wavtokenizer/decoder/experiment.py +++ b/wavtokenizer/decoder/experiment.py @@ -1,7 +1,7 @@ import math import numpy as np -import pytorch_lightning as pl +import lightning as pl import torch import torchaudio import transformers @@ -118,19 +118,18 @@ def forward(self, audio_input, **kwargs): audio_output = self.head(x) return audio_output, commit_loss - def training_step(self, batch, batch_idx, optimizer_idx, **kwargs): + def training_step(self, batch, batch_idx, **kwargs): audio_input = batch + opt_disc, opt_gen = self.optimizers() - # train discriminator - if optimizer_idx == 0 and self.train_discriminator: + if self.global_step % 2 == 0 and self.train_discriminator: with torch.no_grad(): audio_hat, _ = self(audio_input, **kwargs) + loss_dac = self.dacdiscriminator.discriminator_loss(audio_hat.unsqueeze(1), audio_input.unsqueeze(1)) - loss_dac=self.dacdiscriminator.discriminator_loss(audio_hat.unsqueeze(1),audio_input.unsqueeze(1)) - - real_score_mp, gen_score_mp, _, _ = self.multiperioddisc(y=audio_input, y_hat=audio_hat, **kwargs,) - real_score_mrd, gen_score_mrd, _, _ = self.multiresddisc(y=audio_input, y_hat=audio_hat, **kwargs,) + real_score_mp, gen_score_mp, _, _ = self.multiperioddisc(y=audio_input, y_hat=audio_hat, **kwargs) + real_score_mrd, gen_score_mrd, _, _ = self.multiresddisc(y=audio_input, y_hat=audio_hat, **kwargs) loss_mp, loss_mp_real, _ = self.disc_loss( disc_real_outputs=real_score_mp, disc_generated_outputs=gen_score_mp ) @@ -141,24 +140,23 @@ def training_step(self, batch, batch_idx, optimizer_idx, **kwargs): loss_mrd /= len(loss_mrd_real) loss = loss_mp + self.hparams.mrd_loss_coeff * loss_mrd + loss_dac + opt_disc.zero_grad() + self.manual_backward(loss) + opt_disc.step() + self.log("discriminator/total", loss, prog_bar=True) self.log("discriminator/multi_period_loss", loss_mp) self.log("discriminator/multi_res_loss", loss_mrd) self.log("discriminator/dac", loss_dac) return loss - # train generator - if optimizer_idx == 1: + if self.global_step % 2 == 1: audio_hat, commit_loss = self(audio_input, **kwargs) if self.train_discriminator: - loss_dac_1,loss_dac_2 = self.dacdiscriminator.generator_loss(audio_hat.unsqueeze(1),audio_input.unsqueeze(1)) - _, gen_score_mp, fmap_rs_mp, fmap_gs_mp = self.multiperioddisc( - y=audio_input, y_hat=audio_hat, **kwargs, - ) - _, gen_score_mrd, fmap_rs_mrd, fmap_gs_mrd = self.multiresddisc( - y=audio_input, y_hat=audio_hat, **kwargs, - ) + loss_dac_1, loss_dac_2 = self.dacdiscriminator.generator_loss(audio_hat.unsqueeze(1), audio_input.unsqueeze(1)) + _, gen_score_mp, fmap_rs_mp, fmap_gs_mp = self.multiperioddisc(y=audio_input, y_hat=audio_hat, **kwargs) + _, gen_score_mrd, fmap_rs_mrd, fmap_gs_mrd = self.multiresddisc(y=audio_input, y_hat=audio_hat, **kwargs) loss_gen_mp, list_loss_gen_mp = self.gen_loss(disc_outputs=gen_score_mp) loss_gen_mrd, list_loss_gen_mrd = self.gen_loss(disc_outputs=gen_score_mrd) loss_gen_mp = loss_gen_mp / len(list_loss_gen_mp) @@ -187,6 +185,10 @@ def training_step(self, batch, batch_idx, optimizer_idx, **kwargs): + loss_dac_2 ) + opt_gen.zero_grad() + self.manual_backward(loss) + opt_gen.step() + self.log("generator/total_loss", loss, prog_bar=True) self.log("mel_loss_coeff", self.mel_loss_coeff) self.log("generator/mel_loss", mel_loss) @@ -257,7 +259,7 @@ def validation_step(self, batch, batch_idx, **kwargs): mel_loss = self.melspec_loss(audio_hat.unsqueeze(1), audio_input.unsqueeze(1)) total_loss = mel_loss + (5 - utmos_score) + (5 - pesq_score) + 1000 * commit_loss - return { + self.validation_step_outputs.append({ "val_loss": total_loss, "mel_loss": mel_loss, "utmos_score": utmos_score, @@ -267,11 +269,15 @@ def validation_step(self, batch, batch_idx, **kwargs): "f1_score": f1_score, "audio_input": audio_input[0], "audio_pred": audio_hat[0], - } + }) - def validation_epoch_end(self, outputs): + def on_validation_epoch_end(self): if self.global_rank == 0: - *_, audio_in, audio_pred = outputs[0].values() + all_audio_inputs = [x["audio_input"] for x in self.validation_step_outputs] + all_audio_preds = [x["audio_pred"] for x in self.validation_step_outputs] + audio_in = all_audio_inputs[0] + audio_pred = all_audio_preds[0] + self.logger.experiment.add_audio( "val_in", audio_in.data.cpu().numpy(), self.global_step, self.hparams.sample_rate ) @@ -292,13 +298,14 @@ def validation_epoch_end(self, outputs): self.global_step, dataformats="HWC", ) - avg_loss = torch.stack([x["val_loss"] for x in outputs]).mean() - mel_loss = torch.stack([x["mel_loss"] for x in outputs]).mean() - utmos_score = torch.stack([x["utmos_score"] for x in outputs]).mean() - pesq_score = torch.stack([x["pesq_score"] for x in outputs]).mean() - periodicity_loss = np.array([x["periodicity_loss"] for x in outputs]).mean() - pitch_loss = np.array([x["pitch_loss"] for x in outputs]).mean() - f1_score = np.array([x["f1_score"] for x in outputs]).mean() + + avg_loss = torch.stack([x["val_loss"] for x in self.validation_step_outputs]).mean() + mel_loss = torch.stack([x["mel_loss"] for x in self.validation_step_outputs]).mean() + utmos_score = torch.stack([x["utmos_score"] for x in self.validation_step_outputs]).mean() + pesq_score = torch.stack([x["pesq_score"] for x in self.validation_step_outputs]).mean() + periodicity_loss = np.array([x["periodicity_loss"] for x in self.validation_step_outputs]).mean() + pitch_loss = np.array([x["pitch_loss"] for x in self.validation_step_outputs]).mean() + f1_score = np.array([x["f1_score"] for x in self.validation_step_outputs]).mean() self.log("val_loss", avg_loss, sync_dist=True) self.log("val/mel_loss", mel_loss, sync_dist=True) @@ -308,6 +315,8 @@ def validation_epoch_end(self, outputs): self.log("val/pitch_loss", pitch_loss, sync_dist=True) self.log("val/f1_score", f1_score, sync_dist=True) + self.validation_step_outputs.clear() + @property def global_step(self): """ @@ -380,6 +389,9 @@ def __init__( evaluate_periodicty, resume ) + self.automatic_optimization = False + self.validation_step_outputs = [] + # Override with conditional discriminators # VocosExp.__init__(self, feature_extractor, backbone, head, resume_config, resume_model) # if self.resume: @@ -456,19 +468,17 @@ def training_step(self, *args): return output def validation_step(self, *args): - # print('-------------------valid--------------------') bandwidth_id = torch.tensor([0], device=self.device) - output = super().validation_step(*args, bandwidth_id=bandwidth_id) - return output + return super().validation_step(*args, bandwidth_id=bandwidth_id) - def validation_epoch_end(self, outputs): + def on_validation_epoch_end(self): if self.global_rank == 0: - *_, audio_in, _ = outputs[0].values() - # Resynthesis with encodec for reference + *_, audio_in, _ = self.validation_step_outputs[0].values() self.feature_extractor.encodec.set_target_bandwidth(self.feature_extractor.bandwidths[0]) encodec_audio = self.feature_extractor.encodec(audio_in[None, None, :]) self.logger.experiment.add_audio( "encodec", encodec_audio[0, 0].data.cpu().numpy(), self.global_step, self.hparams.sample_rate, ) - super().validation_epoch_end(outputs) + super().on_validation_epoch_end() + self.validation_step_outputs.clear() diff --git a/wavtokenizer/decoder/helpers.py b/wavtokenizer/decoder/helpers.py index 3d30301..2a89a84 100644 --- a/wavtokenizer/decoder/helpers.py +++ b/wavtokenizer/decoder/helpers.py @@ -2,7 +2,7 @@ import numpy as np import torch from matplotlib import pyplot as plt -from pytorch_lightning import Callback +from lightning import Callback matplotlib.use("Agg") diff --git a/wavtokenizer/metrics/UTMOS.py b/wavtokenizer/metrics/UTMOS.py index 5e6e9a5..59fafdd 100644 --- a/wavtokenizer/metrics/UTMOS.py +++ b/wavtokenizer/metrics/UTMOS.py @@ -1,7 +1,7 @@ import os import fairseq -import pytorch_lightning as pl +import lightning as pl import requests import torch import torch.nn as nn diff --git a/wavtokenizer/train.py b/wavtokenizer/train.py index e635c70..bfd3b8c 100644 --- a/wavtokenizer/train.py +++ b/wavtokenizer/train.py @@ -1,7 +1,6 @@ import os -# os.environ['CUDA_LAUNCH_BLOCKING'] = '1' - -from pytorch_lightning.cli import LightningCLI, ArgsType +os.environ['CUDA_LAUNCH_BLOCKING'] = '1' +from lightning.pytorch.cli import LightningCLI, ArgsType def cli_main(args: ArgsType = None): From 941f5f1148a257042e3a2349b681979f849c93d7 Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Tue, 3 Sep 2024 17:10:21 -0700 Subject: [PATCH 5/9] fix: libritts paths --- wavtokenizer/prepare_libritts.py | 39 ++++++++++++++++---------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/wavtokenizer/prepare_libritts.py b/wavtokenizer/prepare_libritts.py index b751bb3..aed8c82 100644 --- a/wavtokenizer/prepare_libritts.py +++ b/wavtokenizer/prepare_libritts.py @@ -5,17 +5,14 @@ def download_and_extract(url, target_dir): """Downloads and extracts a tar.gz file from a URL into the target directory.""" os.makedirs(target_dir, exist_ok=True) - # Determine the extraction directory name from the URL - extract_dir = os.path.join(target_dir, "LibriTTS", os.path.basename(url).replace(".tar.gz", "")) + # The tar file should be downloaded into the top-level directory (e.g., infer or train) + tar_filename = os.path.join(target_dir, os.path.basename(url)) # Check if the dataset is already extracted - if os.path.exists(extract_dir) and os.listdir(extract_dir): - print(f"{extract_dir} already exists and is not empty, skipping download and extraction.") + if os.path.exists(tar_filename.replace(".tar.gz", "")) and os.listdir(tar_filename.replace(".tar.gz", "")): + print(f"{tar_filename.replace('.tar.gz', '')} already exists and is not empty, skipping download and extraction.") return - # If not, download and extract - tar_filename = os.path.join(target_dir, os.path.basename(url)) - # Download the tar file if it doesn't exist if not os.path.exists(tar_filename): print(f"Downloading {tar_filename}...") @@ -23,9 +20,9 @@ def download_and_extract(url, target_dir): else: print(f"{tar_filename} already exists, skipping download.") - # Extract the tar file + # Extract the tar file into the parent directory (not creating nested dirs) print(f"Extracting {tar_filename}...") - subprocess.run(['tar', '-xzvf', tar_filename, '-C', os.path.join(target_dir, "LibriTTS")], check=True) + subprocess.run(['tar', '-xzvf', tar_filename, '-C', target_dir], check=True) def generate_filelist(extraction_subdir, output_file): """Generates a file list from a directory of audio files.""" @@ -51,23 +48,27 @@ def main(): train_extraction_subdir = os.path.join(train_dir, "LibriTTS", "train-clean-100") val_extraction_subdir = os.path.join(val_dir, "LibriTTS", "dev-clean") - # Download and extract the datasets, if necessary - print(f"Checking training data in {train_extraction_subdir}...") - download_and_extract(train_url, train_dir) - - print(f"Checking validation data in {val_extraction_subdir}...") - download_and_extract(val_url, val_dir) + # Skip processing if the train or infer directory already exists + if os.path.exists(train_extraction_subdir) and os.listdir(train_extraction_subdir): + print(f"{train_extraction_subdir} already exists, skipping training data preparation.") + else: + print(f"Checking training data in {train_extraction_subdir}...") + download_and_extract(train_url, train_dir) + generate_filelist(train_extraction_subdir, os.path.join(train_dir, "libritts_train")) - # Generate file lists with the specified names - print("Generating file lists...") - generate_filelist(train_extraction_subdir, os.path.join(train_dir, "libritts_train")) - generate_filelist(val_extraction_subdir, os.path.join(val_dir, "libritts_val")) + if os.path.exists(val_extraction_subdir) and os.listdir(val_extraction_subdir): + print(f"{val_extraction_subdir} already exists, skipping validation data preparation.") + else: + print(f"Checking validation data in {val_extraction_subdir}...") + download_and_extract(val_url, val_dir) + generate_filelist(val_extraction_subdir, os.path.join(val_dir, "libritts_val")) print("Dataset preparation complete.") if __name__ == "__main__": main() + """ wavtokenizer/ ├── data/ From 5d14d62c1227c1aedfa1d749b54fb05a2049458d Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Wed, 4 Sep 2024 08:26:32 -0700 Subject: [PATCH 6/9] remove author - to be updated --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 25fd666..6400ce7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,6 @@ version = "0.1.0" description = "SOTA Discrete Codec Models With Forty Tokens Per Second for Audio Language Modeling" authors = [ { name = "Shengpeng Ji" }, - { name = "Sam Avery", email = "averysam2@gmail.com" } ] license = { text = "MIT" } readme = "README.md" From 8653fe3393e63995a4184af853fc6db0f7c3dd30 Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Wed, 4 Sep 2024 08:32:03 -0700 Subject: [PATCH 7/9] revert back to original config file --- ...ldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml index b83b0b1..7bd1ac7 100644 --- a/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml +++ b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml @@ -7,7 +7,7 @@ data: filelist_path: ./data/train/libritts_train sampling_rate: 24000 num_samples: 72000 - batch_size: 5 # 20 + batch_size: 40 # 20 num_workers: 8 val_params: @@ -88,6 +88,6 @@ trainer: # You might want to limit val batches when evaluating all the metrics, as they are time-consuming limit_val_batches: 100 accelerator: gpu - strategy: auto #ddp - devices: 1 #[0,1,2,3,4,5,6,7] + strategy: ddp + devices: [0,1,2,3,4,5,6,7] log_every_n_steps: 1000 From 107c90c5f6222ec2eacedbdc94fca4ccd4db5d84 Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Fri, 6 Sep 2024 08:41:53 -0700 Subject: [PATCH 8/9] download libritts test --- wavtokenizer/prepare_libritts.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/wavtokenizer/prepare_libritts.py b/wavtokenizer/prepare_libritts.py index aed8c82..b248d18 100644 --- a/wavtokenizer/prepare_libritts.py +++ b/wavtokenizer/prepare_libritts.py @@ -41,12 +41,15 @@ def main(): # Define download URLs train_url = "http://www.openslr.org/resources/60/train-clean-100.tar.gz" val_url = "http://www.openslr.org/resources/60/dev-clean.tar.gz" + test_url = "http://www.openslr.org/resources/60/test-clean.tar.gz" # Define target directories and extraction subdirectories train_dir = "./data/train" val_dir = "./data/infer" + test_dir = "./data/infer" train_extraction_subdir = os.path.join(train_dir, "LibriTTS", "train-clean-100") val_extraction_subdir = os.path.join(val_dir, "LibriTTS", "dev-clean") + test_extraction_subdir = os.path.join(test_dir, "LibriTTS", "test-clean") # Skip processing if the train or infer directory already exists if os.path.exists(train_extraction_subdir) and os.listdir(train_extraction_subdir): @@ -63,6 +66,13 @@ def main(): download_and_extract(val_url, val_dir) generate_filelist(val_extraction_subdir, os.path.join(val_dir, "libritts_val")) + if os.path.exists(test_extraction_subdir) and os.listdir(test_extraction_subdir): + print(f"{test_extraction_subdir} already exists, skipping test data preparation.") + else: + print(f"Checking test data in {test_extraction_subdir}...") + download_and_extract(test_url, test_dir) + generate_filelist(test_extraction_subdir, os.path.join(test_dir, "libritts_testclean")) + print("Dataset preparation complete.") if __name__ == "__main__": @@ -84,10 +94,7 @@ def main(): │ └── infer/ │ ├── LibriTTS/ │ │ └── dev-clean/ -│ │ ├── / -│ │ │ ├── / -│ │ │ │ ├── .wav -│ │ │ │ └── ... -│ │ └── ... -│ └── libritts_val # File list generated here +│ | └── test-clean/ +│ └── libritts_val +| └── libritts_testclean """ \ No newline at end of file From 2a74e7f447d63343c381bcff76879b0c975d15e4 Mon Sep 17 00:00:00 2001 From: Sam Avery Date: Fri, 13 Sep 2024 17:49:55 +0000 Subject: [PATCH 9/9] fix: revert to lightning 2.0.9 and fix DDP training --- pyproject.toml | 2 +- ...smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml | 2 +- ...smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6400ce7..b64cffa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ dependencies = [ "huggingface_hub>=0.23.0", "matplotlib>=3.7.1", "transformers>=4.28.1", - "lightning>=2.0.0", + "lightning==2.0.9", "numpy>=1.23.5", "jsonargparse[signatures]>=4.15.2", "einops>=0.6.1", diff --git a/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml b/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml index 42cb500..322eda4 100644 --- a/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml +++ b/wavtokenizer/configs/wavtokenizer_smalldata_frame40_3s_nq1_code4096_dim512_kmeans200_attn.yaml @@ -88,6 +88,6 @@ trainer: # You might want to limit val batches when evaluating all the metrics, as they are time-consuming limit_val_batches: 200 accelerator: gpu - strategy: ddp + strategy: ddp_find_unused_parameters_true # auto for non DDP devices: [0,1,2,3,4,5,6,7] log_every_n_steps: 1000 diff --git a/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml index 7bd1ac7..fa3169d 100644 --- a/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml +++ b/wavtokenizer/configs/wavtokenizer_smalldata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml @@ -88,6 +88,6 @@ trainer: # You might want to limit val batches when evaluating all the metrics, as they are time-consuming limit_val_batches: 100 accelerator: gpu - strategy: ddp + strategy: ddp_find_unused_parameters_true # auto for non DDP devices: [0,1,2,3,4,5,6,7] log_every_n_steps: 1000