@scrypted/libav 1.0.166 → 1.0.168
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/opus/.gitattributes +10 -0
- package/opus/.gitlab-ci.yml +122 -0
- package/opus/AUTHORS +6 -0
- package/opus/CMakeLists.txt +755 -0
- package/opus/COPYING +44 -0
- package/opus/ChangeLog +0 -0
- package/opus/LICENSE_PLEASE_READ.txt +22 -0
- package/opus/Makefile.am +497 -0
- package/opus/Makefile.mips +169 -0
- package/opus/Makefile.unix +167 -0
- package/opus/NEWS +0 -0
- package/opus/README +189 -0
- package/opus/README.draft +54 -0
- package/opus/autogen.bat +13 -0
- package/opus/autogen.sh +16 -0
- package/opus/celt/_kiss_fft_guts.h +188 -0
- package/opus/celt/arch.h +390 -0
- package/opus/celt/arm/arm2gnu.pl +353 -0
- package/opus/celt/arm/arm_celt_map.c +171 -0
- package/opus/celt/arm/armcpu.c +291 -0
- package/opus/celt/arm/armcpu.h +90 -0
- package/opus/celt/arm/armopts.s.in +37 -0
- package/opus/celt/arm/celt_fft_ne10.c +173 -0
- package/opus/celt/arm/celt_mdct_ne10.c +258 -0
- package/opus/celt/arm/celt_neon_intr.c +272 -0
- package/opus/celt/arm/celt_pitch_xcorr_arm.s +551 -0
- package/opus/celt/arm/fft_arm.h +71 -0
- package/opus/celt/arm/fixed_arm64.h +35 -0
- package/opus/celt/arm/fixed_armv4.h +80 -0
- package/opus/celt/arm/fixed_armv5e.h +151 -0
- package/opus/celt/arm/kiss_fft_armv4.h +121 -0
- package/opus/celt/arm/kiss_fft_armv5e.h +118 -0
- package/opus/celt/arm/mdct_arm.h +59 -0
- package/opus/celt/arm/meson.build +12 -0
- package/opus/celt/arm/pitch_arm.h +160 -0
- package/opus/celt/arm/pitch_neon_intr.c +288 -0
- package/opus/celt/bands.c +1686 -0
- package/opus/celt/bands.h +123 -0
- package/opus/celt/celt.c +317 -0
- package/opus/celt/celt.h +255 -0
- package/opus/celt/celt_decoder.c +1616 -0
- package/opus/celt/celt_encoder.c +2854 -0
- package/opus/celt/celt_lpc.c +364 -0
- package/opus/celt/celt_lpc.h +66 -0
- package/opus/celt/cpu_support.h +72 -0
- package/opus/celt/cwrs.c +715 -0
- package/opus/celt/cwrs.h +48 -0
- package/opus/celt/dump_modes/dump_modes.c +400 -0
- package/opus/celt/dump_modes/dump_modes_arch.h +45 -0
- package/opus/celt/dump_modes/dump_modes_arm_ne10.c +152 -0
- package/opus/celt/ecintrin.h +91 -0
- package/opus/celt/entcode.c +153 -0
- package/opus/celt/entcode.h +152 -0
- package/opus/celt/entdec.c +266 -0
- package/opus/celt/entdec.h +110 -0
- package/opus/celt/entenc.c +305 -0
- package/opus/celt/entenc.h +119 -0
- package/opus/celt/fixed_c5x.h +79 -0
- package/opus/celt/fixed_c6x.h +70 -0
- package/opus/celt/fixed_debug.h +839 -0
- package/opus/celt/fixed_generic.h +201 -0
- package/opus/celt/float_cast.h +152 -0
- package/opus/celt/kiss_fft.c +648 -0
- package/opus/celt/kiss_fft.h +217 -0
- package/opus/celt/laplace.c +235 -0
- package/opus/celt/laplace.h +57 -0
- package/opus/celt/mathops.c +217 -0
- package/opus/celt/mathops.h +479 -0
- package/opus/celt/mdct.c +372 -0
- package/opus/celt/mdct.h +115 -0
- package/opus/celt/meson.build +64 -0
- package/opus/celt/mfrngcod.h +48 -0
- package/opus/celt/mips/celt_mipsr1.h +152 -0
- package/opus/celt/mips/fixed_generic_mipsr1.h +126 -0
- package/opus/celt/mips/kiss_fft_mipsr1.h +167 -0
- package/opus/celt/mips/mdct_mipsr1.h +288 -0
- package/opus/celt/mips/pitch_mipsr1.h +161 -0
- package/opus/celt/mips/vq_mipsr1.h +116 -0
- package/opus/celt/modes.c +450 -0
- package/opus/celt/modes.h +75 -0
- package/opus/celt/opus_custom_demo.c +451 -0
- package/opus/celt/os_support.h +99 -0
- package/opus/celt/pitch.c +555 -0
- package/opus/celt/pitch.h +203 -0
- package/opus/celt/quant_bands.c +562 -0
- package/opus/celt/quant_bands.h +66 -0
- package/opus/celt/rate.c +646 -0
- package/opus/celt/rate.h +101 -0
- package/opus/celt/stack_alloc.h +185 -0
- package/opus/celt/static_modes_fixed.h +1541 -0
- package/opus/celt/static_modes_fixed_arm_ne10.h +388 -0
- package/opus/celt/static_modes_float.h +888 -0
- package/opus/celt/static_modes_float_arm_ne10.h +404 -0
- package/opus/celt/tests/meson.build +19 -0
- package/opus/celt/tests/test_unit_cwrs32.c +162 -0
- package/opus/celt/tests/test_unit_dft.c +181 -0
- package/opus/celt/tests/test_unit_entropy.c +383 -0
- package/opus/celt/tests/test_unit_laplace.c +94 -0
- package/opus/celt/tests/test_unit_mathops.c +369 -0
- package/opus/celt/tests/test_unit_mdct.c +233 -0
- package/opus/celt/tests/test_unit_rotation.c +87 -0
- package/opus/celt/tests/test_unit_types.c +50 -0
- package/opus/celt/vq.c +442 -0
- package/opus/celt/vq.h +79 -0
- package/opus/celt/x86/celt_lpc_sse.h +67 -0
- package/opus/celt/x86/celt_lpc_sse4_1.c +96 -0
- package/opus/celt/x86/pitch_avx.c +101 -0
- package/opus/celt/x86/pitch_sse.c +185 -0
- package/opus/celt/x86/pitch_sse.h +216 -0
- package/opus/celt/x86/pitch_sse2.c +95 -0
- package/opus/celt/x86/pitch_sse4_1.c +240 -0
- package/opus/celt/x86/vq_sse.h +52 -0
- package/opus/celt/x86/vq_sse2.c +217 -0
- package/opus/celt/x86/x86_arch_macros.h +47 -0
- package/opus/celt/x86/x86_celt_map.c +187 -0
- package/opus/celt/x86/x86cpu.c +184 -0
- package/opus/celt/x86/x86cpu.h +112 -0
- package/opus/celt_headers.mk +54 -0
- package/opus/celt_sources.mk +55 -0
- package/opus/cmake/CFeatureCheck.cmake +39 -0
- package/opus/cmake/OpusBuildtype.cmake +27 -0
- package/opus/cmake/OpusConfig.cmake +118 -0
- package/opus/cmake/OpusConfig.cmake.in +20 -0
- package/opus/cmake/OpusFunctions.cmake +231 -0
- package/opus/cmake/OpusPackageVersion.cmake +70 -0
- package/opus/cmake/OpusSources.cmake +71 -0
- package/opus/cmake/README.md +132 -0
- package/opus/cmake/RunTest.cmake +61 -0
- package/opus/cmake/config.h.cmake.in +1 -0
- package/opus/cmake/cpu_info_by_asm.c +31 -0
- package/opus/cmake/cpu_info_by_c.c +9 -0
- package/opus/cmake/vla.c +7 -0
- package/opus/configure.ac +1091 -0
- package/opus/dnn/LPCNet.yml +24 -0
- package/opus/dnn/README +1 -0
- package/opus/dnn/README.md +126 -0
- package/opus/dnn/adaconvtest.c +449 -0
- package/opus/dnn/arm/arm_dnn_map.c +88 -0
- package/opus/dnn/arm/dnn_arm.h +104 -0
- package/opus/dnn/arm/nnet_dotprod.c +38 -0
- package/opus/dnn/arm/nnet_neon.c +38 -0
- package/opus/dnn/burg.c +246 -0
- package/opus/dnn/burg.h +41 -0
- package/opus/dnn/common.h +56 -0
- package/opus/dnn/datasets.txt +163 -0
- package/opus/dnn/download_model.bat +9 -0
- package/opus/dnn/download_model.sh +30 -0
- package/opus/dnn/dred_coding.c +44 -0
- package/opus/dnn/dred_coding.h +36 -0
- package/opus/dnn/dred_config.h +54 -0
- package/opus/dnn/dred_decoder.c +129 -0
- package/opus/dnn/dred_decoder.h +49 -0
- package/opus/dnn/dred_encoder.c +363 -0
- package/opus/dnn/dred_encoder.h +71 -0
- package/opus/dnn/dred_rdovae.h +42 -0
- package/opus/dnn/dred_rdovae_dec.c +139 -0
- package/opus/dnn/dred_rdovae_dec.h +53 -0
- package/opus/dnn/dred_rdovae_enc.c +110 -0
- package/opus/dnn/dred_rdovae_enc.h +52 -0
- package/opus/dnn/dump_data.c +238 -0
- package/opus/dnn/dump_lpcnet_tables.c +104 -0
- package/opus/dnn/fargan.c +225 -0
- package/opus/dnn/fargan.h +68 -0
- package/opus/dnn/fargan_demo.c +217 -0
- package/opus/dnn/freq.c +328 -0
- package/opus/dnn/freq.h +61 -0
- package/opus/dnn/fwgan.c +322 -0
- package/opus/dnn/fwgan.h +83 -0
- package/opus/dnn/kiss99.c +81 -0
- package/opus/dnn/kiss99.h +46 -0
- package/opus/dnn/lossgen.c +192 -0
- package/opus/dnn/lossgen.h +55 -0
- package/opus/dnn/lossgen_demo.c +22 -0
- package/opus/dnn/lpcnet.c +283 -0
- package/opus/dnn/lpcnet.h +183 -0
- package/opus/dnn/lpcnet_enc.c +230 -0
- package/opus/dnn/lpcnet_plc.c +211 -0
- package/opus/dnn/lpcnet_private.h +90 -0
- package/opus/dnn/lpcnet_tables.c +307 -0
- package/opus/dnn/meson.build +64 -0
- package/opus/dnn/nndsp.c +416 -0
- package/opus/dnn/nndsp.h +143 -0
- package/opus/dnn/nnet.c +149 -0
- package/opus/dnn/nnet.h +163 -0
- package/opus/dnn/nnet_arch.h +247 -0
- package/opus/dnn/nnet_default.c +35 -0
- package/opus/dnn/osce.c +1419 -0
- package/opus/dnn/osce.h +84 -0
- package/opus/dnn/osce_config.h +60 -0
- package/opus/dnn/osce_features.c +454 -0
- package/opus/dnn/osce_features.h +50 -0
- package/opus/dnn/osce_structs.h +125 -0
- package/opus/dnn/parse_lpcnet_weights.c +238 -0
- package/opus/dnn/pitchdnn.c +79 -0
- package/opus/dnn/pitchdnn.h +34 -0
- package/opus/dnn/tansig_table.h +50 -0
- package/opus/dnn/test_vec.c +128 -0
- package/opus/dnn/torch/dnntools/dnntools/__init__.py +2 -0
- package/opus/dnn/torch/dnntools/dnntools/quantization/__init__.py +1 -0
- package/opus/dnn/torch/dnntools/dnntools/quantization/softquant.py +113 -0
- package/opus/dnn/torch/dnntools/dnntools/relegance/__init__.py +2 -0
- package/opus/dnn/torch/dnntools/dnntools/relegance/meta_critic.py +85 -0
- package/opus/dnn/torch/dnntools/dnntools/relegance/relegance.py +449 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/__init__.py +6 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/base_sparsifier.py +58 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/common.py +123 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/conv1d_sparsifier.py +133 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/conv_transpose1d_sparsifier.py +134 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/gru_sparsifier.py +178 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/linear_sparsifier.py +128 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/utils.py +64 -0
- package/opus/dnn/torch/dnntools/requirements.txt +1 -0
- package/opus/dnn/torch/dnntools/setup.py +48 -0
- package/opus/dnn/torch/fargan/README.md +54 -0
- package/opus/dnn/torch/fargan/adv_train_fargan.py +277 -0
- package/opus/dnn/torch/fargan/dataset.py +61 -0
- package/opus/dnn/torch/fargan/dump_fargan_weights.py +112 -0
- package/opus/dnn/torch/fargan/fargan.py +322 -0
- package/opus/dnn/torch/fargan/filters.py +46 -0
- package/opus/dnn/torch/fargan/rc.py +29 -0
- package/opus/dnn/torch/fargan/stft_loss.py +186 -0
- package/opus/dnn/torch/fargan/test_fargan.py +128 -0
- package/opus/dnn/torch/fargan/train_fargan.py +168 -0
- package/opus/dnn/torch/fwgan/dump_model_weights.py +88 -0
- package/opus/dnn/torch/fwgan/inference.py +141 -0
- package/opus/dnn/torch/fwgan/models/__init__.py +7 -0
- package/opus/dnn/torch/fwgan/models/fwgan400.py +308 -0
- package/opus/dnn/torch/fwgan/models/fwgan500.py +260 -0
- package/opus/dnn/torch/lossgen/README.md +27 -0
- package/opus/dnn/torch/lossgen/export_lossgen.py +101 -0
- package/opus/dnn/torch/lossgen/lossgen.py +29 -0
- package/opus/dnn/torch/lossgen/process_data.sh +17 -0
- package/opus/dnn/torch/lossgen/test_lossgen.py +42 -0
- package/opus/dnn/torch/lossgen/train_lossgen.py +99 -0
- package/opus/dnn/torch/lpcnet/README.md +27 -0
- package/opus/dnn/torch/lpcnet/add_dataset_config.py +77 -0
- package/opus/dnn/torch/lpcnet/data/__init__.py +1 -0
- package/opus/dnn/torch/lpcnet/data/lpcnet_dataset.py +227 -0
- package/opus/dnn/torch/lpcnet/engine/lpcnet_engine.py +141 -0
- package/opus/dnn/torch/lpcnet/make_default_setup.py +56 -0
- package/opus/dnn/torch/lpcnet/make_test_config.py +78 -0
- package/opus/dnn/torch/lpcnet/models/__init__.py +8 -0
- package/opus/dnn/torch/lpcnet/models/lpcnet.py +303 -0
- package/opus/dnn/torch/lpcnet/models/multi_rate_lpcnet.py +437 -0
- package/opus/dnn/torch/lpcnet/print_lpcnet_complexity.py +64 -0
- package/opus/dnn/torch/lpcnet/scripts/collect_multi_run_results.py +190 -0
- package/opus/dnn/torch/lpcnet/scripts/loop_run.sh +52 -0
- package/opus/dnn/torch/lpcnet/scripts/make_animation.py +67 -0
- package/opus/dnn/torch/lpcnet/scripts/modify_dataset_target.py +17 -0
- package/opus/dnn/torch/lpcnet/scripts/multi_run.sh +17 -0
- package/opus/dnn/torch/lpcnet/scripts/run_inference_test.sh +22 -0
- package/opus/dnn/torch/lpcnet/scripts/update_checkpoints.py +54 -0
- package/opus/dnn/torch/lpcnet/scripts/update_output_folder.sh +22 -0
- package/opus/dnn/torch/lpcnet/scripts/update_setups.py +57 -0
- package/opus/dnn/torch/lpcnet/test_lpcnet.py +89 -0
- package/opus/dnn/torch/lpcnet/train_lpcnet.py +272 -0
- package/opus/dnn/torch/lpcnet/utils/__init__.py +4 -0
- package/opus/dnn/torch/lpcnet/utils/data.py +141 -0
- package/opus/dnn/torch/lpcnet/utils/endoscopy.py +234 -0
- package/opus/dnn/torch/lpcnet/utils/layers/__init__.py +3 -0
- package/opus/dnn/torch/lpcnet/utils/layers/dual_fc.py +44 -0
- package/opus/dnn/torch/lpcnet/utils/layers/pcm_embeddings.py +71 -0
- package/opus/dnn/torch/lpcnet/utils/layers/subconditioner.py +497 -0
- package/opus/dnn/torch/lpcnet/utils/misc.py +65 -0
- package/opus/dnn/torch/lpcnet/utils/pcm.py +35 -0
- package/opus/dnn/torch/lpcnet/utils/sample.py +44 -0
- package/opus/dnn/torch/lpcnet/utils/sparsification/__init__.py +2 -0
- package/opus/dnn/torch/lpcnet/utils/sparsification/common.py +121 -0
- package/opus/dnn/torch/lpcnet/utils/sparsification/gru_sparsifier.py +187 -0
- package/opus/dnn/torch/lpcnet/utils/templates.py +157 -0
- package/opus/dnn/torch/lpcnet/utils/ulaw.py +58 -0
- package/opus/dnn/torch/lpcnet/utils/wav.py +43 -0
- package/opus/dnn/torch/neural-pitch/README.md +18 -0
- package/opus/dnn/torch/neural-pitch/data_augmentation.py +149 -0
- package/opus/dnn/torch/neural-pitch/download_demand.sh +43 -0
- package/opus/dnn/torch/neural-pitch/evaluation.py +349 -0
- package/opus/dnn/torch/neural-pitch/experiments.py +38 -0
- package/opus/dnn/torch/neural-pitch/export_neuralpitch_weights.py +109 -0
- package/opus/dnn/torch/neural-pitch/models.py +178 -0
- package/opus/dnn/torch/neural-pitch/neural_pitch_update.py +179 -0
- package/opus/dnn/torch/neural-pitch/ptdb_process.sh +34 -0
- package/opus/dnn/torch/neural-pitch/run_crepe.py +72 -0
- package/opus/dnn/torch/neural-pitch/training.py +162 -0
- package/opus/dnn/torch/neural-pitch/utils.py +59 -0
- package/opus/dnn/torch/osce/README.md +66 -0
- package/opus/dnn/torch/osce/adv_train_model.py +462 -0
- package/opus/dnn/torch/osce/adv_train_vocoder.py +451 -0
- package/opus/dnn/torch/osce/create_testvectors.py +165 -0
- package/opus/dnn/torch/osce/data/__init__.py +2 -0
- package/opus/dnn/torch/osce/data/lpcnet_vocoding_dataset.py +225 -0
- package/opus/dnn/torch/osce/data/silk_conversion_set.py +132 -0
- package/opus/dnn/torch/osce/data/silk_enhancement_set.py +140 -0
- package/opus/dnn/torch/osce/engine/engine.py +103 -0
- package/opus/dnn/torch/osce/engine/vocoder_engine.py +101 -0
- package/opus/dnn/torch/osce/export_model_weights.py +174 -0
- package/opus/dnn/torch/osce/losses/stft_loss.py +277 -0
- package/opus/dnn/torch/osce/losses/td_lowpass.py +34 -0
- package/opus/dnn/torch/osce/make_default_setup.py +93 -0
- package/opus/dnn/torch/osce/models/__init__.py +42 -0
- package/opus/dnn/torch/osce/models/fd_discriminator.py +974 -0
- package/opus/dnn/torch/osce/models/lace.py +190 -0
- package/opus/dnn/torch/osce/models/lavoce.py +274 -0
- package/opus/dnn/torch/osce/models/lavoce_400.py +254 -0
- package/opus/dnn/torch/osce/models/lpcnet_feature_net.py +91 -0
- package/opus/dnn/torch/osce/models/nns_base.py +69 -0
- package/opus/dnn/torch/osce/models/no_lace.py +218 -0
- package/opus/dnn/torch/osce/models/scale_embedding.py +68 -0
- package/opus/dnn/torch/osce/models/shape_up_48.py +179 -0
- package/opus/dnn/torch/osce/models/silk_feature_net.py +86 -0
- package/opus/dnn/torch/osce/models/silk_feature_net_pl.py +127 -0
- package/opus/dnn/torch/osce/requirements.txt +9 -0
- package/opus/dnn/torch/osce/resources/training_files.txt +107716 -0
- package/opus/dnn/torch/osce/resources/validation_files.txt +26929 -0
- package/opus/dnn/torch/osce/scripts/concatenator.py +85 -0
- package/opus/dnn/torch/osce/silk_16_to_48.py +28 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/commonvoice_clip_selection.py +123 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/create_input_data.sh +25 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/env.rc +7 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/evaluate.py +113 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/lace_loss_metric.py +330 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots.py +116 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots_moctest.py +109 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_tables.py +124 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_tables_moctest.py +121 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/moc.py +182 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/moc2.py +190 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/process_dataset.sh +98 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/run_nomad.py +138 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/run_osce_test.py +196 -0
- package/opus/dnn/torch/osce/stndrd/presentation/endoscopy.py +205 -0
- package/opus/dnn/torch/osce/stndrd/presentation/lace_demo.ipynb +313 -0
- package/opus/dnn/torch/osce/stndrd/presentation/linear_prediction.ipynb +320 -0
- package/opus/dnn/torch/osce/stndrd/presentation/playback.py +25 -0
- package/opus/dnn/torch/osce/stndrd/presentation/postfilter.ipynb +275 -0
- package/opus/dnn/torch/osce/stndrd/presentation/spectrogram.ipynb +173 -0
- package/opus/dnn/torch/osce/test_model.py +96 -0
- package/opus/dnn/torch/osce/test_vocoder.py +103 -0
- package/opus/dnn/torch/osce/train_model.py +307 -0
- package/opus/dnn/torch/osce/train_vocoder.py +287 -0
- package/opus/dnn/torch/osce/utils/ada_conv.py +71 -0
- package/opus/dnn/torch/osce/utils/complexity.py +8 -0
- package/opus/dnn/torch/osce/utils/endoscopy.py +205 -0
- package/opus/dnn/torch/osce/utils/layers/fir.py +27 -0
- package/opus/dnn/torch/osce/utils/layers/limited_adaptive_comb1d.py +230 -0
- package/opus/dnn/torch/osce/utils/layers/limited_adaptive_conv1d.py +200 -0
- package/opus/dnn/torch/osce/utils/layers/noise_shaper.py +100 -0
- package/opus/dnn/torch/osce/utils/layers/pitch_auto_correlator.py +84 -0
- package/opus/dnn/torch/osce/utils/layers/silk_upsampler.py +167 -0
- package/opus/dnn/torch/osce/utils/layers/td_shaper.py +145 -0
- package/opus/dnn/torch/osce/utils/lpcnet_features.py +112 -0
- package/opus/dnn/torch/osce/utils/misc.py +95 -0
- package/opus/dnn/torch/osce/utils/moc.py +153 -0
- package/opus/dnn/torch/osce/utils/pitch.py +122 -0
- package/opus/dnn/torch/osce/utils/silk_features.py +144 -0
- package/opus/dnn/torch/osce/utils/softquant.py +110 -0
- package/opus/dnn/torch/osce/utils/spec.py +210 -0
- package/opus/dnn/torch/osce/utils/templates.py +347 -0
- package/opus/dnn/torch/plc/export_plc.py +100 -0
- package/opus/dnn/torch/plc/plc.py +144 -0
- package/opus/dnn/torch/plc/plc_dataset.py +60 -0
- package/opus/dnn/torch/plc/train_plc.py +145 -0
- package/opus/dnn/torch/rdovae/README.md +55 -0
- package/opus/dnn/torch/rdovae/download_datasets.sh +6 -0
- package/opus/dnn/torch/rdovae/export_rdovae_weights.py +365 -0
- package/opus/dnn/torch/rdovae/fec_encoder.py +212 -0
- package/opus/dnn/torch/rdovae/import_rdovae_weights.py +143 -0
- package/opus/dnn/torch/rdovae/packets/__init__.py +1 -0
- package/opus/dnn/torch/rdovae/packets/fec_packets.c +142 -0
- package/opus/dnn/torch/rdovae/packets/fec_packets.h +34 -0
- package/opus/dnn/torch/rdovae/packets/fec_packets.py +108 -0
- package/opus/dnn/torch/rdovae/process_speech.sh +7 -0
- package/opus/dnn/torch/rdovae/rdovae/__init__.py +2 -0
- package/opus/dnn/torch/rdovae/rdovae/dataset.py +67 -0
- package/opus/dnn/torch/rdovae/rdovae/rdovae.py +719 -0
- package/opus/dnn/torch/rdovae/requirements.txt +4 -0
- package/opus/dnn/torch/rdovae/train_rdovae.py +278 -0
- package/opus/dnn/torch/testsuite/README.md +46 -0
- package/opus/dnn/torch/testsuite/examples/lpcnet_c_example.yml +6 -0
- package/opus/dnn/torch/testsuite/examples/lpcnet_c_plc_example.yml +5 -0
- package/opus/dnn/torch/testsuite/examples/lpcnet_torch_example.yml +5 -0
- package/opus/dnn/torch/testsuite/requirements.txt +12 -0
- package/opus/dnn/torch/testsuite/run_test.py +375 -0
- package/opus/dnn/torch/testsuite/utils/__init__.py +0 -0
- package/opus/dnn/torch/testsuite/utils/files.py +54 -0
- package/opus/dnn/torch/testsuite/utils/pesq.py +43 -0
- package/opus/dnn/torch/testsuite/utils/pitch.py +61 -0
- package/opus/dnn/torch/weight-exchange/README.md +21 -0
- package/opus/dnn/torch/weight-exchange/requirements.txt +1 -0
- package/opus/dnn/torch/weight-exchange/setup.py +48 -0
- package/opus/dnn/torch/weight-exchange/wexchange/__init__.py +30 -0
- package/opus/dnn/torch/weight-exchange/wexchange/c_export/__init__.py +31 -0
- package/opus/dnn/torch/weight-exchange/wexchange/c_export/c_writer.py +181 -0
- package/opus/dnn/torch/weight-exchange/wexchange/c_export/common.py +386 -0
- package/opus/dnn/torch/weight-exchange/wexchange/tf/__init__.py +5 -0
- package/opus/dnn/torch/weight-exchange/wexchange/tf/tf.py +188 -0
- package/opus/dnn/torch/weight-exchange/wexchange/torch/__init__.py +37 -0
- package/opus/dnn/torch/weight-exchange/wexchange/torch/torch.py +433 -0
- package/opus/dnn/training_tf2/dataloader.py +49 -0
- package/opus/dnn/training_tf2/decode_rdovae.py +111 -0
- package/opus/dnn/training_tf2/diffembed.py +49 -0
- package/opus/dnn/training_tf2/dump_lpcnet.py +388 -0
- package/opus/dnn/training_tf2/dump_plc.py +296 -0
- package/opus/dnn/training_tf2/dump_rdovae.py +306 -0
- package/opus/dnn/training_tf2/encode_rdovae.py +125 -0
- package/opus/dnn/training_tf2/fec_encoder.py +256 -0
- package/opus/dnn/training_tf2/fec_packets.c +142 -0
- package/opus/dnn/training_tf2/fec_packets.h +34 -0
- package/opus/dnn/training_tf2/fec_packets.py +108 -0
- package/opus/dnn/training_tf2/keraslayerdump.py +189 -0
- package/opus/dnn/training_tf2/lossfuncs.py +99 -0
- package/opus/dnn/training_tf2/lpcnet.py +339 -0
- package/opus/dnn/training_tf2/lpcnet_plc.py +101 -0
- package/opus/dnn/training_tf2/mdense.py +95 -0
- package/opus/dnn/training_tf2/pade.py +70 -0
- package/opus/dnn/training_tf2/parameters.py +29 -0
- package/opus/dnn/training_tf2/plc_loader.py +73 -0
- package/opus/dnn/training_tf2/rdovae.py +372 -0
- package/opus/dnn/training_tf2/rdovae_exchange.py +138 -0
- package/opus/dnn/training_tf2/rdovae_import.py +123 -0
- package/opus/dnn/training_tf2/test_lpcnet.py +120 -0
- package/opus/dnn/training_tf2/test_plc.py +92 -0
- package/opus/dnn/training_tf2/tf_funcs.py +70 -0
- package/opus/dnn/training_tf2/train_lpcnet.py +214 -0
- package/opus/dnn/training_tf2/train_plc.py +197 -0
- package/opus/dnn/training_tf2/train_rdovae.py +151 -0
- package/opus/dnn/training_tf2/ulaw.py +19 -0
- package/opus/dnn/training_tf2/uniform_noise.py +78 -0
- package/opus/dnn/vec.h +389 -0
- package/opus/dnn/vec_avx.h +884 -0
- package/opus/dnn/vec_neon.h +473 -0
- package/opus/dnn/write_lpcnet_weights.c +97 -0
- package/opus/dnn/x86/dnn_x86.h +121 -0
- package/opus/dnn/x86/nnet_avx2.c +40 -0
- package/opus/dnn/x86/nnet_sse2.c +40 -0
- package/opus/dnn/x86/nnet_sse4_1.c +40 -0
- package/opus/dnn/x86/x86_dnn_map.c +83 -0
- package/opus/doc/Doxyfile.in +340 -0
- package/opus/doc/Makefile.am +45 -0
- package/opus/doc/build_draft.sh +113 -0
- package/opus/doc/build_isobmff.sh +50 -0
- package/opus/doc/build_oggdraft.sh +52 -0
- package/opus/doc/customdoxygen.css +1011 -0
- package/opus/doc/draft-ietf-codec-oggopus.xml +1873 -0
- package/opus/doc/draft-ietf-codec-opus-update.xml +513 -0
- package/opus/doc/draft-ietf-codec-opus.xml +8276 -0
- package/opus/doc/draft-ietf-payload-rtp-opus.xml +960 -0
- package/opus/doc/footer.html +32 -0
- package/opus/doc/header.html +61 -0
- package/opus/doc/meson.build +33 -0
- package/opus/doc/opus_in_isobmff.css +60 -0
- package/opus/doc/opus_in_isobmff.html +692 -0
- package/opus/doc/opus_logo.svg +157 -0
- package/opus/doc/opus_update.patch +244 -0
- package/opus/doc/release.txt +43 -0
- package/opus/doc/trivial_example.c +171 -0
- package/opus/include/meson.build +13 -0
- package/opus/include/opus.h +1172 -0
- package/opus/include/opus_custom.h +381 -0
- package/opus/include/opus_defines.h +830 -0
- package/opus/include/opus_multistream.h +736 -0
- package/opus/include/opus_projection.h +643 -0
- package/opus/include/opus_types.h +166 -0
- package/opus/lpcnet_headers.mk +44 -0
- package/opus/lpcnet_sources.mk +44 -0
- package/opus/m4/as-gcc-inline-assembly.m4 +98 -0
- package/opus/m4/ax_add_fortify_source.m4 +53 -0
- package/opus/m4/opus-intrinsics.m4 +29 -0
- package/opus/meson/README.md +88 -0
- package/opus/meson/get-version.py +86 -0
- package/opus/meson/read-sources-list.py +28 -0
- package/opus/meson.build +745 -0
- package/opus/meson_options.txt +27 -0
- package/opus/opus-uninstalled.pc.in +12 -0
- package/opus/opus.m4 +117 -0
- package/opus/opus.pc.in +16 -0
- package/opus/opus_headers.mk +8 -0
- package/opus/opus_sources.mk +17 -0
- package/opus/releases.sha2 +85 -0
- package/opus/scripts/dump_rnn.py +57 -0
- package/opus/scripts/local_build.py +220 -0
- package/opus/scripts/rnn_train.py +67 -0
- package/opus/scripts/shrink_model.sh +7 -0
- package/opus/silk/A2NLSF.c +267 -0
- package/opus/silk/API.h +156 -0
- package/opus/silk/CNG.c +188 -0
- package/opus/silk/HP_variable_cutoff.c +77 -0
- package/opus/silk/Inlines.h +188 -0
- package/opus/silk/LPC_analysis_filter.c +111 -0
- package/opus/silk/LPC_fit.c +82 -0
- package/opus/silk/LPC_inv_pred_gain.c +141 -0
- package/opus/silk/LP_variable_cutoff.c +135 -0
- package/opus/silk/MacroCount.h +710 -0
- package/opus/silk/MacroDebug.h +945 -0
- package/opus/silk/NLSF2A.c +141 -0
- package/opus/silk/NLSF_VQ.c +76 -0
- package/opus/silk/NLSF_VQ_weights_laroia.c +80 -0
- package/opus/silk/NLSF_decode.c +93 -0
- package/opus/silk/NLSF_del_dec_quant.c +215 -0
- package/opus/silk/NLSF_encode.c +124 -0
- package/opus/silk/NLSF_stabilize.c +142 -0
- package/opus/silk/NLSF_unpack.c +55 -0
- package/opus/silk/NSQ.c +437 -0
- package/opus/silk/NSQ.h +101 -0
- package/opus/silk/NSQ_del_dec.c +733 -0
- package/opus/silk/PLC.c +493 -0
- package/opus/silk/PLC.h +65 -0
- package/opus/silk/SigProc_FIX.h +643 -0
- package/opus/silk/VAD.c +360 -0
- package/opus/silk/VQ_WMat_EC.c +131 -0
- package/opus/silk/ana_filt_bank_1.c +74 -0
- package/opus/silk/arm/LPC_inv_pred_gain_arm.h +57 -0
- package/opus/silk/arm/LPC_inv_pred_gain_neon_intr.c +288 -0
- package/opus/silk/arm/NSQ_del_dec_arm.h +100 -0
- package/opus/silk/arm/NSQ_del_dec_neon_intr.c +1138 -0
- package/opus/silk/arm/NSQ_neon.c +112 -0
- package/opus/silk/arm/NSQ_neon.h +114 -0
- package/opus/silk/arm/SigProc_FIX_armv4.h +47 -0
- package/opus/silk/arm/SigProc_FIX_armv5e.h +61 -0
- package/opus/silk/arm/arm_silk_map.c +128 -0
- package/opus/silk/arm/biquad_alt_arm.h +68 -0
- package/opus/silk/arm/biquad_alt_neon_intr.c +156 -0
- package/opus/silk/arm/macros_arm64.h +39 -0
- package/opus/silk/arm/macros_armv4.h +110 -0
- package/opus/silk/arm/macros_armv5e.h +220 -0
- package/opus/silk/biquad_alt.c +121 -0
- package/opus/silk/bwexpander.c +51 -0
- package/opus/silk/bwexpander_32.c +51 -0
- package/opus/silk/check_control_input.c +106 -0
- package/opus/silk/code_signs.c +115 -0
- package/opus/silk/control.h +161 -0
- package/opus/silk/control_SNR.c +113 -0
- package/opus/silk/control_audio_bandwidth.c +132 -0
- package/opus/silk/control_codec.c +423 -0
- package/opus/silk/debug.c +174 -0
- package/opus/silk/debug.h +267 -0
- package/opus/silk/dec_API.c +465 -0
- package/opus/silk/decode_core.c +243 -0
- package/opus/silk/decode_frame.c +169 -0
- package/opus/silk/decode_indices.c +151 -0
- package/opus/silk/decode_parameters.c +115 -0
- package/opus/silk/decode_pitch.c +77 -0
- package/opus/silk/decode_pulses.c +115 -0
- package/opus/silk/decoder_set_fs.c +108 -0
- package/opus/silk/define.h +235 -0
- package/opus/silk/enc_API.c +593 -0
- package/opus/silk/encode_indices.c +181 -0
- package/opus/silk/encode_pulses.c +206 -0
- package/opus/silk/errors.h +98 -0
- package/opus/silk/fixed/LTP_analysis_filter_FIX.c +90 -0
- package/opus/silk/fixed/LTP_scale_ctrl_FIX.c +58 -0
- package/opus/silk/fixed/apply_sine_window_FIX.c +101 -0
- package/opus/silk/fixed/arm/warped_autocorrelation_FIX_arm.h +68 -0
- package/opus/silk/fixed/arm/warped_autocorrelation_FIX_neon_intr.c +265 -0
- package/opus/silk/fixed/autocorr_FIX.c +48 -0
- package/opus/silk/fixed/burg_modified_FIX.c +280 -0
- package/opus/silk/fixed/corrMatrix_FIX.c +150 -0
- package/opus/silk/fixed/encode_frame_FIX.c +444 -0
- package/opus/silk/fixed/find_LPC_FIX.c +151 -0
- package/opus/silk/fixed/find_LTP_FIX.c +99 -0
- package/opus/silk/fixed/find_pitch_lags_FIX.c +143 -0
- package/opus/silk/fixed/find_pred_coefs_FIX.c +146 -0
- package/opus/silk/fixed/k2a_FIX.c +54 -0
- package/opus/silk/fixed/k2a_Q16_FIX.c +54 -0
- package/opus/silk/fixed/main_FIX.h +244 -0
- package/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h +336 -0
- package/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h +184 -0
- package/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h +165 -0
- package/opus/silk/fixed/noise_shape_analysis_FIX.c +407 -0
- package/opus/silk/fixed/pitch_analysis_core_FIX.c +721 -0
- package/opus/silk/fixed/process_gains_FIX.c +117 -0
- package/opus/silk/fixed/regularize_correlations_FIX.c +47 -0
- package/opus/silk/fixed/residual_energy16_FIX.c +103 -0
- package/opus/silk/fixed/residual_energy_FIX.c +98 -0
- package/opus/silk/fixed/schur64_FIX.c +93 -0
- package/opus/silk/fixed/schur_FIX.c +107 -0
- package/opus/silk/fixed/structs_FIX.h +116 -0
- package/opus/silk/fixed/vector_ops_FIX.c +102 -0
- package/opus/silk/fixed/warped_autocorrelation_FIX.c +92 -0
- package/opus/silk/fixed/x86/burg_modified_FIX_sse4_1.c +400 -0
- package/opus/silk/fixed/x86/vector_ops_FIX_sse4_1.c +93 -0
- package/opus/silk/float/LPC_analysis_filter_FLP.c +249 -0
- package/opus/silk/float/LPC_inv_pred_gain_FLP.c +73 -0
- package/opus/silk/float/LTP_analysis_filter_FLP.c +75 -0
- package/opus/silk/float/LTP_scale_ctrl_FLP.c +58 -0
- package/opus/silk/float/SigProc_FLP.h +205 -0
- package/opus/silk/float/apply_sine_window_FLP.c +81 -0
- package/opus/silk/float/autocorrelation_FLP.c +53 -0
- package/opus/silk/float/burg_modified_FLP.c +187 -0
- package/opus/silk/float/bwexpander_FLP.c +49 -0
- package/opus/silk/float/corrMatrix_FLP.c +95 -0
- package/opus/silk/float/encode_frame_FLP.c +432 -0
- package/opus/silk/float/energy_FLP.c +59 -0
- package/opus/silk/float/find_LPC_FLP.c +105 -0
- package/opus/silk/float/find_LTP_FLP.c +65 -0
- package/opus/silk/float/find_pitch_lags_FLP.c +132 -0
- package/opus/silk/float/find_pred_coefs_FLP.c +117 -0
- package/opus/silk/float/inner_product_FLP.c +59 -0
- package/opus/silk/float/k2a_FLP.c +54 -0
- package/opus/silk/float/main_FLP.h +290 -0
- package/opus/silk/float/noise_shape_analysis_FLP.c +350 -0
- package/opus/silk/float/pitch_analysis_core_FLP.c +630 -0
- package/opus/silk/float/process_gains_FLP.c +103 -0
- package/opus/silk/float/regularize_correlations_FLP.c +48 -0
- package/opus/silk/float/residual_energy_FLP.c +117 -0
- package/opus/silk/float/scale_copy_vector_FLP.c +57 -0
- package/opus/silk/float/scale_vector_FLP.c +56 -0
- package/opus/silk/float/schur_FLP.c +70 -0
- package/opus/silk/float/sort_FLP.c +83 -0
- package/opus/silk/float/structs_FLP.h +112 -0
- package/opus/silk/float/warped_autocorrelation_FLP.c +75 -0
- package/opus/silk/float/wrappers_FLP.c +209 -0
- package/opus/silk/float/x86/inner_product_FLP_avx2.c +85 -0
- package/opus/silk/gain_quant.c +142 -0
- package/opus/silk/init_decoder.c +84 -0
- package/opus/silk/init_encoder.c +68 -0
- package/opus/silk/inner_prod_aligned.c +47 -0
- package/opus/silk/interpolate.c +51 -0
- package/opus/silk/lin2log.c +46 -0
- package/opus/silk/log2lin.c +58 -0
- package/opus/silk/macros.h +151 -0
- package/opus/silk/main.h +486 -0
- package/opus/silk/meson.build +69 -0
- package/opus/silk/mips/NSQ_del_dec_mipsr1.h +410 -0
- package/opus/silk/mips/macros_mipsr1.h +92 -0
- package/opus/silk/mips/sigproc_fix_mipsr1.h +60 -0
- package/opus/silk/pitch_est_defines.h +88 -0
- package/opus/silk/pitch_est_tables.c +99 -0
- package/opus/silk/process_NLSFs.c +107 -0
- package/opus/silk/quant_LTP_gains.c +132 -0
- package/opus/silk/resampler.c +215 -0
- package/opus/silk/resampler_down2.c +74 -0
- package/opus/silk/resampler_down2_3.c +103 -0
- package/opus/silk/resampler_private.h +88 -0
- package/opus/silk/resampler_private_AR2.c +55 -0
- package/opus/silk/resampler_private_IIR_FIR.c +107 -0
- package/opus/silk/resampler_private_down_FIR.c +194 -0
- package/opus/silk/resampler_private_up2_HQ.c +113 -0
- package/opus/silk/resampler_rom.c +96 -0
- package/opus/silk/resampler_rom.h +68 -0
- package/opus/silk/resampler_structs.h +60 -0
- package/opus/silk/shell_coder.c +151 -0
- package/opus/silk/sigm_Q15.c +76 -0
- package/opus/silk/sort.c +154 -0
- package/opus/silk/stereo_LR_to_MS.c +229 -0
- package/opus/silk/stereo_MS_to_LR.c +85 -0
- package/opus/silk/stereo_decode_pred.c +73 -0
- package/opus/silk/stereo_encode_pred.c +62 -0
- package/opus/silk/stereo_find_predictor.c +79 -0
- package/opus/silk/stereo_quant_pred.c +73 -0
- package/opus/silk/structs.h +357 -0
- package/opus/silk/sum_sqr_shift.c +83 -0
- package/opus/silk/table_LSF_cos.c +70 -0
- package/opus/silk/tables.h +114 -0
- package/opus/silk/tables_LTP.c +294 -0
- package/opus/silk/tables_NLSF_CB_NB_MB.c +195 -0
- package/opus/silk/tables_NLSF_CB_WB.c +234 -0
- package/opus/silk/tables_gain.c +63 -0
- package/opus/silk/tables_other.c +124 -0
- package/opus/silk/tables_pitch_lag.c +69 -0
- package/opus/silk/tables_pulses_per_block.c +264 -0
- package/opus/silk/tests/meson.build +8 -0
- package/opus/silk/tests/test_unit_LPC_inv_pred_gain.c +130 -0
- package/opus/silk/tuning_parameters.h +155 -0
- package/opus/silk/typedef.h +81 -0
- package/opus/silk/x86/NSQ_del_dec_avx2.c +1075 -0
- package/opus/silk/x86/NSQ_del_dec_sse4_1.c +915 -0
- package/opus/silk/x86/NSQ_sse4_1.c +772 -0
- package/opus/silk/x86/SigProc_FIX_sse.h +99 -0
- package/opus/silk/x86/VAD_sse4_1.c +289 -0
- package/opus/silk/x86/VQ_WMat_EC_sse4_1.c +173 -0
- package/opus/silk/x86/main_sse.h +299 -0
- package/opus/silk/x86/x86_silk_map.c +179 -0
- package/opus/silk_headers.mk +44 -0
- package/opus/silk_sources.mk +164 -0
- package/opus/src/analysis.c +979 -0
- package/opus/src/analysis.h +103 -0
- package/opus/src/extensions.c +663 -0
- package/opus/src/mapping_matrix.c +993 -0
- package/opus/src/mapping_matrix.h +165 -0
- package/opus/src/meson.build +45 -0
- package/opus/src/mlp.c +132 -0
- package/opus/src/mlp.h +60 -0
- package/opus/src/mlp_data.c +672 -0
- package/opus/src/opus.c +362 -0
- package/opus/src/opus_compare.c +382 -0
- package/opus/src/opus_decoder.c +1579 -0
- package/opus/src/opus_demo.c +1194 -0
- package/opus/src/opus_encoder.c +3180 -0
- package/opus/src/opus_multistream.c +92 -0
- package/opus/src/opus_multistream_decoder.c +563 -0
- package/opus/src/opus_multistream_encoder.c +1321 -0
- package/opus/src/opus_private.h +263 -0
- package/opus/src/opus_projection_decoder.c +283 -0
- package/opus/src/opus_projection_encoder.c +522 -0
- package/opus/src/repacketizer.c +469 -0
- package/opus/src/repacketizer_demo.c +247 -0
- package/opus/src/tansig_table.h +45 -0
- package/opus/tar_list.txt +28 -0
- package/opus/tests/meson.build +39 -0
- package/opus/tests/opus_build_test.sh +29 -0
- package/opus/tests/opus_decode_fuzzer.c +124 -0
- package/opus/tests/opus_decode_fuzzer.options +2 -0
- package/opus/tests/opus_encode_regressions.c +1034 -0
- package/opus/tests/random_config.sh +126 -0
- package/opus/tests/run_vectors.sh +143 -0
- package/opus/tests/test_opus_api.c +1904 -0
- package/opus/tests/test_opus_common.h +86 -0
- package/opus/tests/test_opus_custom.c +694 -0
- package/opus/tests/test_opus_decode.c +481 -0
- package/opus/tests/test_opus_dred.c +107 -0
- package/opus/tests/test_opus_encode.c +738 -0
- package/opus/tests/test_opus_extensions.c +750 -0
- package/opus/tests/test_opus_padding.c +94 -0
- package/opus/tests/test_opus_projection.c +384 -0
- package/opus/training/rnn_dump.py +66 -0
- package/opus/training/rnn_train.py +177 -0
- package/opus/training/txt2hdf5.py +12 -0
- package/opus/update_version +65 -0
- package/package.json +2 -2
- package/src/build-ffmpeg-msys.sh +8 -2
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""
|
|
2
|
+
/* Copyright (c) 2023 Amazon
|
|
3
|
+
Written by Jan Buethe */
|
|
4
|
+
/*
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions
|
|
7
|
+
are met:
|
|
8
|
+
|
|
9
|
+
- Redistributions of source code must retain the above copyright
|
|
10
|
+
notice, this list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
- Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
documentation and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
|
20
|
+
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
import torch
|
|
31
|
+
|
|
32
|
+
from .base_sparsifier import BaseSparsifier
|
|
33
|
+
from .common import sparsify_matrix
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class LinearSparsifier(BaseSparsifier):
|
|
37
|
+
def __init__(self, task_list, start, stop, interval, exponent=3):
|
|
38
|
+
""" Sparsifier for torch.nn.GRUs
|
|
39
|
+
|
|
40
|
+
Parameters:
|
|
41
|
+
-----------
|
|
42
|
+
task_list : list
|
|
43
|
+
task_list contains a list of tuples (linear, params), where linear is an instance
|
|
44
|
+
of torch.nn.Linear and params is a tuple (density, [m, n]),
|
|
45
|
+
where density is the target density in [0, 1], [m, n] is the shape sub-blocks to which
|
|
46
|
+
sparsification is applied.
|
|
47
|
+
|
|
48
|
+
start : int
|
|
49
|
+
training step after which sparsification will be started.
|
|
50
|
+
|
|
51
|
+
stop : int
|
|
52
|
+
training step after which sparsification will be completed.
|
|
53
|
+
|
|
54
|
+
interval : int
|
|
55
|
+
sparsification interval for steps between start and stop. After stop sparsification will be
|
|
56
|
+
carried out after every call to GRUSparsifier.step()
|
|
57
|
+
|
|
58
|
+
exponent : float
|
|
59
|
+
Interpolation exponent for sparsification interval. In step i sparsification will be carried out
|
|
60
|
+
with density (alpha + target_density * (1 * alpha)), where
|
|
61
|
+
alpha = ((stop - i) / (start - stop)) ** exponent
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
--------
|
|
65
|
+
>>> import torch
|
|
66
|
+
>>> linear = torch.nn.Linear(8, 16)
|
|
67
|
+
>>> params = (0.2, [8, 4])
|
|
68
|
+
>>> sparsifier = LinearSparsifier([(linear, params)], 0, 100, 50)
|
|
69
|
+
>>> for i in range(100):
|
|
70
|
+
... sparsifier.step()
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
super().__init__(task_list, start, stop, interval, exponent=3)
|
|
74
|
+
|
|
75
|
+
self.last_mask = None
|
|
76
|
+
|
|
77
|
+
def sparsify(self, alpha, verbose=False):
|
|
78
|
+
""" carries out sparsification step
|
|
79
|
+
|
|
80
|
+
Call this function after optimizer.step in your
|
|
81
|
+
training loop.
|
|
82
|
+
|
|
83
|
+
Parameters:
|
|
84
|
+
----------
|
|
85
|
+
alpha : float
|
|
86
|
+
density interpolation parameter (1: dense, 0: target density)
|
|
87
|
+
verbose : bool
|
|
88
|
+
if true, densities are printed out
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
--------
|
|
92
|
+
None
|
|
93
|
+
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
with torch.no_grad():
|
|
97
|
+
for linear, params in self.task_list:
|
|
98
|
+
if hasattr(linear, 'weight_v'):
|
|
99
|
+
weight = linear.weight_v
|
|
100
|
+
else:
|
|
101
|
+
weight = linear.weight
|
|
102
|
+
target_density, block_size = params
|
|
103
|
+
density = alpha + (1 - alpha) * target_density
|
|
104
|
+
weight[:], new_mask = sparsify_matrix(weight, density, block_size, return_mask=True)
|
|
105
|
+
|
|
106
|
+
if self.last_mask is not None:
|
|
107
|
+
if not torch.all(self.last_mask * new_mask == new_mask) and debug:
|
|
108
|
+
print("weight resurrection in conv.weight")
|
|
109
|
+
|
|
110
|
+
self.last_mask = new_mask
|
|
111
|
+
|
|
112
|
+
if verbose:
|
|
113
|
+
print(f"linear_sparsifier[{self.step_counter}]: {density=}")
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
if __name__ == "__main__":
|
|
117
|
+
print("Testing sparsifier")
|
|
118
|
+
|
|
119
|
+
import torch
|
|
120
|
+
linear = torch.nn.Linear(8, 16)
|
|
121
|
+
params = (0.2, [4, 2])
|
|
122
|
+
|
|
123
|
+
sparsifier = LinearSparsifier([(linear, params)], 0, 100, 5)
|
|
124
|
+
|
|
125
|
+
for i in range(100):
|
|
126
|
+
sparsifier.step(verbose=True)
|
|
127
|
+
|
|
128
|
+
print(linear.weight)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
|
|
3
|
+
from dnntools.sparsification import GRUSparsifier, LinearSparsifier, Conv1dSparsifier, ConvTranspose1dSparsifier
|
|
4
|
+
|
|
5
|
+
def mark_for_sparsification(module, params):
|
|
6
|
+
setattr(module, 'sparsify', True)
|
|
7
|
+
setattr(module, 'sparsification_params', params)
|
|
8
|
+
return module
|
|
9
|
+
|
|
10
|
+
def create_sparsifier(module, start, stop, interval):
|
|
11
|
+
sparsifier_list = []
|
|
12
|
+
for m in module.modules():
|
|
13
|
+
if hasattr(m, 'sparsify'):
|
|
14
|
+
if isinstance(m, torch.nn.GRU):
|
|
15
|
+
sparsifier_list.append(
|
|
16
|
+
GRUSparsifier([(m, m.sparsification_params)], start, stop, interval)
|
|
17
|
+
)
|
|
18
|
+
elif isinstance(m, torch.nn.Linear):
|
|
19
|
+
sparsifier_list.append(
|
|
20
|
+
LinearSparsifier([(m, m.sparsification_params)], start, stop, interval)
|
|
21
|
+
)
|
|
22
|
+
elif isinstance(m, torch.nn.Conv1d):
|
|
23
|
+
sparsifier_list.append(
|
|
24
|
+
Conv1dSparsifier([(m, m.sparsification_params)], start, stop, interval)
|
|
25
|
+
)
|
|
26
|
+
elif isinstance(m, torch.nn.ConvTranspose1d):
|
|
27
|
+
sparsifier_list.append(
|
|
28
|
+
ConvTranspose1dSparsifier([(m, m.sparsification_params)], start, stop, interval)
|
|
29
|
+
)
|
|
30
|
+
else:
|
|
31
|
+
print(f"[create_sparsifier] warning: module {m} marked for sparsification but no suitable sparsifier exists.")
|
|
32
|
+
|
|
33
|
+
def sparsify(verbose=False):
|
|
34
|
+
for sparsifier in sparsifier_list:
|
|
35
|
+
sparsifier.step(verbose)
|
|
36
|
+
|
|
37
|
+
return sparsify
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def count_parameters(model, verbose=False):
|
|
41
|
+
total = 0
|
|
42
|
+
for name, p in model.named_parameters():
|
|
43
|
+
count = torch.ones_like(p).sum().item()
|
|
44
|
+
|
|
45
|
+
if verbose:
|
|
46
|
+
print(f"{name}: {count} parameters")
|
|
47
|
+
|
|
48
|
+
total += count
|
|
49
|
+
|
|
50
|
+
return total
|
|
51
|
+
|
|
52
|
+
def estimate_nonzero_parameters(module):
|
|
53
|
+
num_zero_parameters = 0
|
|
54
|
+
if hasattr(module, 'sparsify'):
|
|
55
|
+
params = module.sparsification_params
|
|
56
|
+
if isinstance(module, torch.nn.Conv1d) or isinstance(module, torch.nn.ConvTranspose1d):
|
|
57
|
+
num_zero_parameters = torch.ones_like(module.weight).sum().item() * (1 - params[0])
|
|
58
|
+
elif isinstance(module, torch.nn.GRU):
|
|
59
|
+
num_zero_parameters = module.input_size * module.hidden_size * (3 - params['W_ir'][0] - params['W_iz'][0] - params['W_in'][0])
|
|
60
|
+
num_zero_parameters += module.hidden_size * module.hidden_size * (3 - params['W_hr'][0] - params['W_hz'][0] - params['W_hn'][0])
|
|
61
|
+
elif isinstance(module, torch.nn.Linear):
|
|
62
|
+
num_zero_parameters = module.in_features * module.out_features * params[0]
|
|
63
|
+
else:
|
|
64
|
+
raise ValueError(f'unknown sparsification method for module of type {type(module)}')
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
torch
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""
|
|
2
|
+
/* Copyright (c) 2023 Amazon
|
|
3
|
+
Written by Jan Buethe */
|
|
4
|
+
/*
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions
|
|
7
|
+
are met:
|
|
8
|
+
|
|
9
|
+
- Redistributions of source code must retain the above copyright
|
|
10
|
+
notice, this list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
- Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
documentation and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
|
20
|
+
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
#!/usr/bin/env/python
|
|
31
|
+
import os
|
|
32
|
+
from setuptools import setup
|
|
33
|
+
|
|
34
|
+
lib_folder = os.path.dirname(os.path.realpath(__file__))
|
|
35
|
+
|
|
36
|
+
with open(os.path.join(lib_folder, 'requirements.txt'), 'r') as f:
|
|
37
|
+
install_requires = list(f.read().splitlines())
|
|
38
|
+
|
|
39
|
+
print(install_requires)
|
|
40
|
+
|
|
41
|
+
setup(name='dnntools',
|
|
42
|
+
version='1.0',
|
|
43
|
+
author='Jan Buethe',
|
|
44
|
+
author_email='jbuethe@amazon.de',
|
|
45
|
+
description='Non-Standard tools for deep neural network training with PyTorch',
|
|
46
|
+
packages=['dnntools', 'dnntools.sparsification', 'dnntools.quantization'],
|
|
47
|
+
install_requires=install_requires
|
|
48
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Framewise Auto-Regressive GAN (FARGAN)
|
|
2
|
+
|
|
3
|
+
Implementation of FARGAN, a low-complexity neural vocoder. Pre-trained models
|
|
4
|
+
are provided as C code in the dnn/ directory with the corresponding model in
|
|
5
|
+
dnn/models/ directory (name starts with fargan_). If you don't want to train
|
|
6
|
+
a new FARGAN model, you can skip straight to the Inference section.
|
|
7
|
+
|
|
8
|
+
## Data preparation
|
|
9
|
+
|
|
10
|
+
For data preparation you need to build Opus as detailed in the top-level README.
|
|
11
|
+
You will need to use the --enable-deep-plc configure option.
|
|
12
|
+
The build will produce an executable named "dump_data".
|
|
13
|
+
To prepare the training data, run:
|
|
14
|
+
```
|
|
15
|
+
./dump_data -train in_speech.pcm out_features.f32 out_speech.pcm
|
|
16
|
+
```
|
|
17
|
+
Where the in_speech.pcm speech file is a raw 16-bit PCM file sampled at 16 kHz.
|
|
18
|
+
The speech data used for training the model can be found at:
|
|
19
|
+
https://media.xiph.org/lpcnet/speech/tts_speech_negative_16k.sw
|
|
20
|
+
|
|
21
|
+
## Training
|
|
22
|
+
|
|
23
|
+
To perform pre-training, run the following command:
|
|
24
|
+
```
|
|
25
|
+
python ./train_fargan.py out_features.f32 out_speech.pcm output_dir --epochs 400 --batch-size 4096 --lr 0.002 --cuda-visible-devices 0
|
|
26
|
+
```
|
|
27
|
+
Once pre-training is complete, run adversarial training using:
|
|
28
|
+
```
|
|
29
|
+
python adv_train_fargan.py out_features.f32 out_speech.pcm output_dir --lr 0.000002 --reg-weight 5 --batch-size 160 --cuda-visible-devices 0 --initial-checkpoint output_dir/checkpoints/fargan_400.pth
|
|
30
|
+
```
|
|
31
|
+
The final model will be in output_dir/checkpoints/fargan_adv_50.pth.
|
|
32
|
+
|
|
33
|
+
The model can optionally be converted to C using:
|
|
34
|
+
```
|
|
35
|
+
python dump_fargan_weights.py output_dir/checkpoints/fargan_adv_50.pth fargan_c_dir
|
|
36
|
+
```
|
|
37
|
+
which will create a fargan_data.c and a fargan_data.h file in the fargan_c_dir directory.
|
|
38
|
+
Copy these files to the opus/dnn/ directory (replacing the existing ones) and recompile Opus.
|
|
39
|
+
|
|
40
|
+
## Inference
|
|
41
|
+
|
|
42
|
+
To run the inference, start by generating the features from the audio using:
|
|
43
|
+
```
|
|
44
|
+
./fargan_demo -features test_speech.pcm test_features.f32
|
|
45
|
+
```
|
|
46
|
+
Synthesis can be achieved either using the PyTorch code or the C code.
|
|
47
|
+
To synthesize from PyTorch, run:
|
|
48
|
+
```
|
|
49
|
+
python test_fargan.py output_dir/checkpoints/fargan_adv_50.pth test_features.f32 output_speech.pcm
|
|
50
|
+
```
|
|
51
|
+
To synthesize from the C code, run:
|
|
52
|
+
```
|
|
53
|
+
./fargan_demo -fargan-synthesis test_features.f32 output_speech.pcm
|
|
54
|
+
```
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import argparse
|
|
3
|
+
import random
|
|
4
|
+
import numpy as np
|
|
5
|
+
import sys
|
|
6
|
+
import math as m
|
|
7
|
+
|
|
8
|
+
import torch
|
|
9
|
+
from torch import nn
|
|
10
|
+
import torch.nn.functional as F
|
|
11
|
+
import tqdm
|
|
12
|
+
|
|
13
|
+
import fargan
|
|
14
|
+
from dataset import FARGANDataset
|
|
15
|
+
from stft_loss import *
|
|
16
|
+
|
|
17
|
+
source_dir = os.path.split(os.path.abspath(__file__))[0]
|
|
18
|
+
sys.path.append(os.path.join(source_dir, "../osce/"))
|
|
19
|
+
|
|
20
|
+
import models as osce_models
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def fmap_loss(scores_real, scores_gen):
|
|
24
|
+
num_discs = len(scores_real)
|
|
25
|
+
loss_feat = 0
|
|
26
|
+
for k in range(num_discs):
|
|
27
|
+
num_layers = len(scores_gen[k]) - 1
|
|
28
|
+
f = 4 / num_discs / num_layers
|
|
29
|
+
for l in range(num_layers):
|
|
30
|
+
loss_feat += f * F.l1_loss(scores_gen[k][l], scores_real[k][l].detach())
|
|
31
|
+
|
|
32
|
+
return loss_feat
|
|
33
|
+
|
|
34
|
+
parser = argparse.ArgumentParser()
|
|
35
|
+
|
|
36
|
+
parser.add_argument('features', type=str, help='path to feature file in .f32 format')
|
|
37
|
+
parser.add_argument('signal', type=str, help='path to signal file in .s16 format')
|
|
38
|
+
parser.add_argument('output', type=str, help='path to output folder')
|
|
39
|
+
|
|
40
|
+
parser.add_argument('--suffix', type=str, help="model name suffix", default="")
|
|
41
|
+
parser.add_argument('--cuda-visible-devices', type=str, help="comma separates list of cuda visible device indices, default: CUDA_VISIBLE_DEVICES", default=None)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
model_group = parser.add_argument_group(title="model parameters")
|
|
45
|
+
model_group.add_argument('--cond-size', type=int, help="first conditioning size, default: 256", default=256)
|
|
46
|
+
model_group.add_argument('--gamma', type=float, help="Use A(z/gamma), default: 0.9", default=0.9)
|
|
47
|
+
|
|
48
|
+
training_group = parser.add_argument_group(title="training parameters")
|
|
49
|
+
training_group.add_argument('--batch-size', type=int, help="batch size, default: 128", default=128)
|
|
50
|
+
training_group.add_argument('--lr', type=float, help='learning rate, default: 5e-4', default=5e-4)
|
|
51
|
+
training_group.add_argument('--epochs', type=int, help='number of training epochs, default: 50', default=50)
|
|
52
|
+
training_group.add_argument('--sequence-length', type=int, help='sequence length, default: 60', default=60)
|
|
53
|
+
training_group.add_argument('--lr-decay', type=float, help='learning rate decay factor, default: 0.0', default=0.0)
|
|
54
|
+
training_group.add_argument('--initial-checkpoint', type=str, help='initial checkpoint to start training from, default: None', default=None)
|
|
55
|
+
training_group.add_argument('--reg-weight', type=float, help='regression loss weight, default: 1.0', default=1.0)
|
|
56
|
+
training_group.add_argument('--fmap-weight', type=float, help='feature matchin loss weight, default: 1.0', default=1.)
|
|
57
|
+
|
|
58
|
+
args = parser.parse_args()
|
|
59
|
+
|
|
60
|
+
if args.cuda_visible_devices != None:
|
|
61
|
+
os.environ['CUDA_VISIBLE_DEVICES'] = args.cuda_visible_devices
|
|
62
|
+
|
|
63
|
+
# checkpoints
|
|
64
|
+
checkpoint_dir = os.path.join(args.output, 'checkpoints')
|
|
65
|
+
checkpoint = dict()
|
|
66
|
+
os.makedirs(checkpoint_dir, exist_ok=True)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# training parameters
|
|
70
|
+
batch_size = args.batch_size
|
|
71
|
+
lr = args.lr
|
|
72
|
+
epochs = args.epochs
|
|
73
|
+
sequence_length = args.sequence_length
|
|
74
|
+
lr_decay = args.lr_decay
|
|
75
|
+
|
|
76
|
+
adam_betas = [0.8, 0.99]
|
|
77
|
+
adam_eps = 1e-8
|
|
78
|
+
features_file = args.features
|
|
79
|
+
signal_file = args.signal
|
|
80
|
+
|
|
81
|
+
# model parameters
|
|
82
|
+
cond_size = args.cond_size
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
checkpoint['batch_size'] = batch_size
|
|
86
|
+
checkpoint['lr'] = lr
|
|
87
|
+
checkpoint['lr_decay'] = lr_decay
|
|
88
|
+
checkpoint['epochs'] = epochs
|
|
89
|
+
checkpoint['sequence_length'] = sequence_length
|
|
90
|
+
checkpoint['adam_betas'] = adam_betas
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
|
|
94
|
+
|
|
95
|
+
checkpoint['model_args'] = ()
|
|
96
|
+
checkpoint['model_kwargs'] = {'cond_size': cond_size, 'gamma': args.gamma}
|
|
97
|
+
print(checkpoint['model_kwargs'])
|
|
98
|
+
model = fargan.FARGAN(*checkpoint['model_args'], **checkpoint['model_kwargs'])
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
#discriminator
|
|
102
|
+
disc_name = 'fdmresdisc'
|
|
103
|
+
disc = osce_models.model_dict[disc_name](
|
|
104
|
+
architecture='free',
|
|
105
|
+
design='f_down',
|
|
106
|
+
fft_sizes_16k=[2**n for n in range(6, 12)],
|
|
107
|
+
freq_roi=[0, 7400],
|
|
108
|
+
max_channels=256,
|
|
109
|
+
noise_gain=0.0
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
if type(args.initial_checkpoint) != type(None):
|
|
113
|
+
checkpoint = torch.load(args.initial_checkpoint, map_location='cpu')
|
|
114
|
+
model.load_state_dict(checkpoint['state_dict'], strict=False)
|
|
115
|
+
|
|
116
|
+
checkpoint['state_dict'] = model.state_dict()
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
dataset = FARGANDataset(features_file, signal_file, sequence_length=sequence_length)
|
|
120
|
+
dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, drop_last=True, num_workers=4)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
optimizer = torch.optim.AdamW(model.parameters(), lr=lr, betas=adam_betas, eps=adam_eps)
|
|
124
|
+
optimizer_disc = torch.optim.AdamW([p for p in disc.parameters() if p.requires_grad], lr=lr, betas=adam_betas, eps=adam_eps)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# learning rate scheduler
|
|
128
|
+
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer=optimizer, lr_lambda=lambda x : 1 / (1 + lr_decay * x))
|
|
129
|
+
scheduler_disc = torch.optim.lr_scheduler.LambdaLR(optimizer=optimizer_disc, lr_lambda=lambda x : 1 / (1 + lr_decay * x))
|
|
130
|
+
|
|
131
|
+
states = None
|
|
132
|
+
|
|
133
|
+
spect_loss = MultiResolutionSTFTLoss(device).to(device)
|
|
134
|
+
|
|
135
|
+
for param in model.parameters():
|
|
136
|
+
param.requires_grad = False
|
|
137
|
+
|
|
138
|
+
batch_count = 0
|
|
139
|
+
if __name__ == '__main__':
|
|
140
|
+
model.to(device)
|
|
141
|
+
disc.to(device)
|
|
142
|
+
|
|
143
|
+
for epoch in range(1, epochs + 1):
|
|
144
|
+
|
|
145
|
+
m_r = 0
|
|
146
|
+
m_f = 0
|
|
147
|
+
s_r = 1
|
|
148
|
+
s_f = 1
|
|
149
|
+
|
|
150
|
+
running_cont_loss = 0
|
|
151
|
+
running_disc_loss = 0
|
|
152
|
+
running_gen_loss = 0
|
|
153
|
+
running_fmap_loss = 0
|
|
154
|
+
running_reg_loss = 0
|
|
155
|
+
running_wc = 0
|
|
156
|
+
|
|
157
|
+
print(f"training epoch {epoch}...")
|
|
158
|
+
with tqdm.tqdm(dataloader, unit='batch') as tepoch:
|
|
159
|
+
for i, (features, periods, target, lpc) in enumerate(tepoch):
|
|
160
|
+
if epoch == 1 and i == 400:
|
|
161
|
+
for param in model.parameters():
|
|
162
|
+
param.requires_grad = True
|
|
163
|
+
for param in model.cond_net.parameters():
|
|
164
|
+
param.requires_grad = False
|
|
165
|
+
for param in model.sig_net.cond_gain_dense.parameters():
|
|
166
|
+
param.requires_grad = False
|
|
167
|
+
|
|
168
|
+
optimizer.zero_grad()
|
|
169
|
+
features = features.to(device)
|
|
170
|
+
#lpc = lpc.to(device)
|
|
171
|
+
#lpc = lpc*(args.gamma**torch.arange(1,17, device=device))
|
|
172
|
+
#lpc = fargan.interp_lpc(lpc, 4)
|
|
173
|
+
periods = periods.to(device)
|
|
174
|
+
if True:
|
|
175
|
+
target = target[:, :sequence_length*160]
|
|
176
|
+
#lpc = lpc[:,:sequence_length*4,:]
|
|
177
|
+
features = features[:,:sequence_length+4,:]
|
|
178
|
+
periods = periods[:,:sequence_length+4]
|
|
179
|
+
else:
|
|
180
|
+
target=target[::2, :]
|
|
181
|
+
#lpc=lpc[::2,:]
|
|
182
|
+
features=features[::2,:]
|
|
183
|
+
periods=periods[::2,:]
|
|
184
|
+
target = target.to(device)
|
|
185
|
+
#target = fargan.analysis_filter(target, lpc[:,:,:], nb_subframes=1, gamma=args.gamma)
|
|
186
|
+
|
|
187
|
+
#nb_pre = random.randrange(1, 6)
|
|
188
|
+
nb_pre = 2
|
|
189
|
+
pre = target[:, :nb_pre*160]
|
|
190
|
+
output, _ = model(features, periods, target.size(1)//160 - nb_pre, pre=pre, states=None)
|
|
191
|
+
output = torch.cat([pre, output], -1)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
# discriminator update
|
|
195
|
+
scores_gen = disc(output.detach().unsqueeze(1))
|
|
196
|
+
scores_real = disc(target.unsqueeze(1))
|
|
197
|
+
|
|
198
|
+
disc_loss = 0
|
|
199
|
+
for scale in scores_gen:
|
|
200
|
+
disc_loss += ((scale[-1]) ** 2).mean()
|
|
201
|
+
m_f = 0.9 * m_f + 0.1 * scale[-1].detach().mean().cpu().item()
|
|
202
|
+
s_f = 0.9 * s_f + 0.1 * scale[-1].detach().std().cpu().item()
|
|
203
|
+
|
|
204
|
+
for scale in scores_real:
|
|
205
|
+
disc_loss += ((1 - scale[-1]) ** 2).mean()
|
|
206
|
+
m_r = 0.9 * m_r + 0.1 * scale[-1].detach().mean().cpu().item()
|
|
207
|
+
s_r = 0.9 * s_r + 0.1 * scale[-1].detach().std().cpu().item()
|
|
208
|
+
|
|
209
|
+
disc_loss = 0.5 * disc_loss / len(scores_gen)
|
|
210
|
+
winning_chance = 0.5 * m.erfc( (m_r - m_f) / m.sqrt(2 * (s_f**2 + s_r**2)) )
|
|
211
|
+
running_wc += winning_chance
|
|
212
|
+
|
|
213
|
+
disc.zero_grad()
|
|
214
|
+
disc_loss.backward()
|
|
215
|
+
optimizer_disc.step()
|
|
216
|
+
|
|
217
|
+
# model update
|
|
218
|
+
scores_gen = disc(output.unsqueeze(1))
|
|
219
|
+
if False: # todo: check whether that makes a difference
|
|
220
|
+
with torch.no_grad():
|
|
221
|
+
scores_real = disc(target.unsqueeze(1))
|
|
222
|
+
|
|
223
|
+
cont_loss = fargan.sig_loss(target[:, nb_pre*160:nb_pre*160+80], output[:, nb_pre*160:nb_pre*160+80])
|
|
224
|
+
specc_loss = spect_loss(output, target.detach())
|
|
225
|
+
reg_loss = (.00*cont_loss + specc_loss)
|
|
226
|
+
|
|
227
|
+
loss_gen = 0
|
|
228
|
+
for scale in scores_gen:
|
|
229
|
+
loss_gen += ((1 - scale[-1]) ** 2).mean() / len(scores_gen)
|
|
230
|
+
|
|
231
|
+
feat_loss = args.fmap_weight * fmap_loss(scores_real, scores_gen)
|
|
232
|
+
|
|
233
|
+
reg_weight = args.reg_weight# + 15./(1 + (batch_count/7600.))
|
|
234
|
+
gen_loss = reg_weight * reg_loss + feat_loss + loss_gen
|
|
235
|
+
|
|
236
|
+
model.zero_grad()
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
gen_loss.backward()
|
|
240
|
+
optimizer.step()
|
|
241
|
+
|
|
242
|
+
#model.clip_weights()
|
|
243
|
+
|
|
244
|
+
scheduler.step()
|
|
245
|
+
scheduler_disc.step()
|
|
246
|
+
|
|
247
|
+
running_cont_loss += cont_loss.detach().cpu().item()
|
|
248
|
+
running_gen_loss += loss_gen.detach().cpu().item()
|
|
249
|
+
running_disc_loss += disc_loss.detach().cpu().item()
|
|
250
|
+
running_fmap_loss += feat_loss.detach().cpu().item()
|
|
251
|
+
running_reg_loss += reg_loss.detach().cpu().item()
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
tepoch.set_postfix(cont_loss=f"{running_cont_loss/(i+1):8.5f}",
|
|
256
|
+
reg_weight=f"{reg_weight:8.5f}",
|
|
257
|
+
gen_loss=f"{running_gen_loss/(i+1):8.5f}",
|
|
258
|
+
disc_loss=f"{running_disc_loss/(i+1):8.5f}",
|
|
259
|
+
fmap_loss=f"{running_fmap_loss/(i+1):8.5f}",
|
|
260
|
+
reg_loss=f"{running_reg_loss/(i+1):8.5f}",
|
|
261
|
+
wc = f"{running_wc/(i+1):8.5f}",
|
|
262
|
+
)
|
|
263
|
+
batch_count = batch_count + 1
|
|
264
|
+
|
|
265
|
+
# save checkpoint
|
|
266
|
+
checkpoint_path = os.path.join(checkpoint_dir, f'fargan{args.suffix}_adv_{epoch}.pth')
|
|
267
|
+
checkpoint['state_dict'] = model.state_dict()
|
|
268
|
+
checkpoint['disc_sate_dict'] = disc.state_dict()
|
|
269
|
+
checkpoint['loss'] = {
|
|
270
|
+
'cont': running_cont_loss / len(dataloader),
|
|
271
|
+
'gen': running_gen_loss / len(dataloader),
|
|
272
|
+
'disc': running_disc_loss / len(dataloader),
|
|
273
|
+
'fmap': running_fmap_loss / len(dataloader),
|
|
274
|
+
'reg': running_reg_loss / len(dataloader)
|
|
275
|
+
}
|
|
276
|
+
checkpoint['epoch'] = epoch
|
|
277
|
+
torch.save(checkpoint, checkpoint_path)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
import numpy as np
|
|
3
|
+
import fargan
|
|
4
|
+
|
|
5
|
+
class FARGANDataset(torch.utils.data.Dataset):
|
|
6
|
+
def __init__(self,
|
|
7
|
+
feature_file,
|
|
8
|
+
signal_file,
|
|
9
|
+
frame_size=160,
|
|
10
|
+
sequence_length=15,
|
|
11
|
+
lookahead=1,
|
|
12
|
+
nb_used_features=20,
|
|
13
|
+
nb_features=36):
|
|
14
|
+
|
|
15
|
+
self.frame_size = frame_size
|
|
16
|
+
self.sequence_length = sequence_length
|
|
17
|
+
self.lookahead = lookahead
|
|
18
|
+
self.nb_features = nb_features
|
|
19
|
+
self.nb_used_features = nb_used_features
|
|
20
|
+
pcm_chunk_size = self.frame_size*self.sequence_length
|
|
21
|
+
|
|
22
|
+
self.data = np.memmap(signal_file, dtype='int16', mode='r')
|
|
23
|
+
#self.data = self.data[1::2]
|
|
24
|
+
self.nb_sequences = len(self.data)//(pcm_chunk_size)-4
|
|
25
|
+
self.data = self.data[(4-self.lookahead)*self.frame_size:]
|
|
26
|
+
self.data = self.data[:self.nb_sequences*pcm_chunk_size]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
#self.data = np.reshape(self.data, (self.nb_sequences, pcm_chunk_size))
|
|
30
|
+
sizeof = self.data.strides[-1]
|
|
31
|
+
self.data = np.lib.stride_tricks.as_strided(self.data, shape=(self.nb_sequences, pcm_chunk_size*2),
|
|
32
|
+
strides=(pcm_chunk_size*sizeof, sizeof))
|
|
33
|
+
|
|
34
|
+
self.features = np.reshape(np.memmap(feature_file, dtype='float32', mode='r'), (-1, nb_features))
|
|
35
|
+
sizeof = self.features.strides[-1]
|
|
36
|
+
self.features = np.lib.stride_tricks.as_strided(self.features, shape=(self.nb_sequences, self.sequence_length*2+4, nb_features),
|
|
37
|
+
strides=(self.sequence_length*self.nb_features*sizeof, self.nb_features*sizeof, sizeof))
|
|
38
|
+
#self.periods = np.round(50*self.features[:,:,self.nb_used_features-2]+100).astype('int')
|
|
39
|
+
self.periods = np.round(np.clip(256./2**(self.features[:,:,self.nb_used_features-2]+1.5), 32, 255)).astype('int')
|
|
40
|
+
|
|
41
|
+
self.lpc = self.features[:, :, self.nb_used_features:]
|
|
42
|
+
self.features = self.features[:, :, :self.nb_used_features]
|
|
43
|
+
print("lpc_size:", self.lpc.shape)
|
|
44
|
+
|
|
45
|
+
def __len__(self):
|
|
46
|
+
return self.nb_sequences
|
|
47
|
+
|
|
48
|
+
def __getitem__(self, index):
|
|
49
|
+
features = self.features[index, :, :].copy()
|
|
50
|
+
if self.lookahead != 0:
|
|
51
|
+
lpc = self.lpc[index, 4-self.lookahead:-self.lookahead, :].copy()
|
|
52
|
+
else:
|
|
53
|
+
lpc = self.lpc[index, 4:, :].copy()
|
|
54
|
+
data = self.data[index, :].copy().astype(np.float32) / 2**15
|
|
55
|
+
periods = self.periods[index, :].copy()
|
|
56
|
+
#lpc = lpc*(self.gamma**np.arange(1,17))
|
|
57
|
+
#lpc=lpc[None,:,:]
|
|
58
|
+
#lpc = fargan.interp_lpc(lpc, 4)
|
|
59
|
+
#lpc=lpc[0,:,:]
|
|
60
|
+
|
|
61
|
+
return features, periods, data, lpc
|