@scrypted/libav 1.0.167 → 1.0.169
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/binding.gyp +2 -0
- 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
- package/test.mp4 +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
from torch import nn
|
|
3
|
+
import torch.nn.functional as F
|
|
4
|
+
|
|
5
|
+
class LossGen(nn.Module):
|
|
6
|
+
def __init__(self, gru1_size=16, gru2_size=16):
|
|
7
|
+
super(LossGen, self).__init__()
|
|
8
|
+
|
|
9
|
+
self.gru1_size = gru1_size
|
|
10
|
+
self.gru2_size = gru2_size
|
|
11
|
+
self.dense_in = nn.Linear(2, 8)
|
|
12
|
+
self.gru1 = nn.GRU(8, self.gru1_size, batch_first=True)
|
|
13
|
+
self.gru2 = nn.GRU(self.gru1_size, self.gru2_size, batch_first=True)
|
|
14
|
+
self.dense_out = nn.Linear(self.gru2_size, 1)
|
|
15
|
+
|
|
16
|
+
def forward(self, loss, perc, states=None):
|
|
17
|
+
#print(states)
|
|
18
|
+
device = loss.device
|
|
19
|
+
batch_size = loss.size(0)
|
|
20
|
+
if states is None:
|
|
21
|
+
gru1_state = torch.zeros((1, batch_size, self.gru1_size), device=device)
|
|
22
|
+
gru2_state = torch.zeros((1, batch_size, self.gru2_size), device=device)
|
|
23
|
+
else:
|
|
24
|
+
gru1_state = states[0]
|
|
25
|
+
gru2_state = states[1]
|
|
26
|
+
x = torch.tanh(self.dense_in(torch.cat([loss, perc], dim=-1)))
|
|
27
|
+
gru1_out, gru1_state = self.gru1(x, gru1_state)
|
|
28
|
+
gru2_out, gru2_state = self.gru2(gru1_out, gru2_state)
|
|
29
|
+
return self.dense_out(gru2_out), [gru1_state, gru2_state]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
#directory containing the loss files
|
|
4
|
+
datadir=$1
|
|
5
|
+
|
|
6
|
+
for i in $datadir/*_is_lost.txt
|
|
7
|
+
do
|
|
8
|
+
perc=`cat $i | awk '{a+=$1}END{print a/NR}'`
|
|
9
|
+
echo $perc $i
|
|
10
|
+
done > percentage_list.txt
|
|
11
|
+
|
|
12
|
+
sort -n percentage_list.txt | awk '{print $2}' > percentage_sorted.txt
|
|
13
|
+
|
|
14
|
+
for i in `cat percentage_sorted.txt`
|
|
15
|
+
do
|
|
16
|
+
cat $i
|
|
17
|
+
done > loss_sorted.txt
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import lossgen
|
|
2
|
+
import os
|
|
3
|
+
import argparse
|
|
4
|
+
import torch
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
parser = argparse.ArgumentParser()
|
|
9
|
+
|
|
10
|
+
parser.add_argument('model', type=str, help='CELPNet model')
|
|
11
|
+
parser.add_argument('percentage', type=float, help='percentage loss')
|
|
12
|
+
parser.add_argument('output', type=str, help='path to output file (ascii)')
|
|
13
|
+
|
|
14
|
+
parser.add_argument('--length', type=int, help="length of sequence to generate", default=500)
|
|
15
|
+
|
|
16
|
+
args = parser.parse_args()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
checkpoint = torch.load(args.model, map_location='cpu')
|
|
21
|
+
model = lossgen.LossGen(*checkpoint['model_args'], **checkpoint['model_kwargs'])
|
|
22
|
+
model.load_state_dict(checkpoint['state_dict'], strict=False)
|
|
23
|
+
|
|
24
|
+
states=None
|
|
25
|
+
last = torch.zeros((1,1,1))
|
|
26
|
+
perc = torch.tensor((args.percentage,))[None,None,:]
|
|
27
|
+
seq = torch.zeros((0,1,1))
|
|
28
|
+
|
|
29
|
+
one = torch.ones((1,1,1))
|
|
30
|
+
zero = torch.zeros((1,1,1))
|
|
31
|
+
|
|
32
|
+
if __name__ == '__main__':
|
|
33
|
+
for i in range(args.length):
|
|
34
|
+
prob, states = model(last, perc, states=states)
|
|
35
|
+
prob = torch.sigmoid(prob)
|
|
36
|
+
states[0] = states[0].detach()
|
|
37
|
+
states[1] = states[1].detach()
|
|
38
|
+
loss = one if np.random.rand() < prob else zero
|
|
39
|
+
last = loss
|
|
40
|
+
seq = torch.cat([seq, loss])
|
|
41
|
+
|
|
42
|
+
np.savetxt(args.output, seq[:,:,0].numpy().astype('int'), fmt='%d')
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import torch
|
|
3
|
+
from torch import nn
|
|
4
|
+
import torch.nn.functional as F
|
|
5
|
+
import tqdm
|
|
6
|
+
from scipy.signal import lfilter
|
|
7
|
+
import os
|
|
8
|
+
import lossgen
|
|
9
|
+
|
|
10
|
+
class LossDataset(torch.utils.data.Dataset):
|
|
11
|
+
def __init__(self,
|
|
12
|
+
loss_file,
|
|
13
|
+
sequence_length=997):
|
|
14
|
+
|
|
15
|
+
self.sequence_length = sequence_length
|
|
16
|
+
|
|
17
|
+
self.loss = np.loadtxt(loss_file, dtype='float32')
|
|
18
|
+
|
|
19
|
+
self.nb_sequences = self.loss.shape[0]//self.sequence_length
|
|
20
|
+
self.loss = self.loss[:self.nb_sequences*self.sequence_length]
|
|
21
|
+
self.perc = lfilter(np.array([.001], dtype='float32'), np.array([1., -.999], dtype='float32'), self.loss)
|
|
22
|
+
|
|
23
|
+
self.loss = np.reshape(self.loss, (self.nb_sequences, self.sequence_length, 1))
|
|
24
|
+
self.perc = np.reshape(self.perc, (self.nb_sequences, self.sequence_length, 1))
|
|
25
|
+
|
|
26
|
+
def __len__(self):
|
|
27
|
+
return self.nb_sequences
|
|
28
|
+
|
|
29
|
+
def __getitem__(self, index):
|
|
30
|
+
r0 = np.random.normal(scale=.1, size=(1,1)).astype('float32')
|
|
31
|
+
r1 = np.random.normal(scale=.1, size=(self.sequence_length,1)).astype('float32')
|
|
32
|
+
perc = self.perc[index, :, :]
|
|
33
|
+
perc = perc + (r0+r1)*perc*(1-perc)
|
|
34
|
+
return [self.loss[index, :, :], perc]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
adam_betas = [0.8, 0.98]
|
|
38
|
+
adam_eps = 1e-8
|
|
39
|
+
batch_size=256
|
|
40
|
+
lr_decay = 0.001
|
|
41
|
+
lr = 0.003
|
|
42
|
+
epsilon = 1e-5
|
|
43
|
+
epochs = 2000
|
|
44
|
+
checkpoint_dir='checkpoint'
|
|
45
|
+
os.makedirs(checkpoint_dir, exist_ok=True)
|
|
46
|
+
checkpoint = dict()
|
|
47
|
+
|
|
48
|
+
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
|
|
49
|
+
|
|
50
|
+
checkpoint['model_args'] = ()
|
|
51
|
+
checkpoint['model_kwargs'] = {'gru1_size': 16, 'gru2_size': 32}
|
|
52
|
+
model = lossgen.LossGen(*checkpoint['model_args'], **checkpoint['model_kwargs'])
|
|
53
|
+
dataset = LossDataset('loss_sorted.txt')
|
|
54
|
+
dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, drop_last=True, num_workers=4)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
optimizer = torch.optim.AdamW(model.parameters(), lr=lr, betas=adam_betas, eps=adam_eps)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# learning rate scheduler
|
|
61
|
+
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer=optimizer, lr_lambda=lambda x : 1 / (1 + lr_decay * x))
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
if __name__ == '__main__':
|
|
65
|
+
model.to(device)
|
|
66
|
+
states = None
|
|
67
|
+
for epoch in range(1, epochs + 1):
|
|
68
|
+
|
|
69
|
+
running_loss = 0
|
|
70
|
+
|
|
71
|
+
print(f"training epoch {epoch}...")
|
|
72
|
+
with tqdm.tqdm(dataloader, unit='batch') as tepoch:
|
|
73
|
+
for i, (loss, perc) in enumerate(tepoch):
|
|
74
|
+
optimizer.zero_grad()
|
|
75
|
+
loss = loss.to(device)
|
|
76
|
+
perc = perc.to(device)
|
|
77
|
+
|
|
78
|
+
out, states = model(loss, perc, states=states)
|
|
79
|
+
states = [state.detach() for state in states]
|
|
80
|
+
out = torch.sigmoid(out[:,:-1,:])
|
|
81
|
+
target = loss[:,1:,:]
|
|
82
|
+
|
|
83
|
+
loss = torch.mean(-target*torch.log(out+epsilon) - (1-target)*torch.log(1-out+epsilon))
|
|
84
|
+
|
|
85
|
+
loss.backward()
|
|
86
|
+
optimizer.step()
|
|
87
|
+
|
|
88
|
+
scheduler.step()
|
|
89
|
+
|
|
90
|
+
running_loss += loss.detach().cpu().item()
|
|
91
|
+
tepoch.set_postfix(loss=f"{running_loss/(i+1):8.5f}",
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# save checkpoint
|
|
95
|
+
checkpoint_path = os.path.join(checkpoint_dir, f'lossgen_{epoch}.pth')
|
|
96
|
+
checkpoint['state_dict'] = model.state_dict()
|
|
97
|
+
checkpoint['loss'] = running_loss / len(dataloader)
|
|
98
|
+
checkpoint['epoch'] = epoch
|
|
99
|
+
torch.save(checkpoint, checkpoint_path)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# LPCNet
|
|
2
|
+
|
|
3
|
+
Incomplete pytorch implementation of LPCNet
|
|
4
|
+
|
|
5
|
+
## Data preparation
|
|
6
|
+
For data preparation use dump_data in github.com/xiph/LPCNet. To turn this into
|
|
7
|
+
a training dataset, copy data and feature file to a folder and run
|
|
8
|
+
|
|
9
|
+
python add_dataset_config.py my_dataset_folder
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Training
|
|
13
|
+
To train a model, create and adjust a setup file, e.g. with
|
|
14
|
+
|
|
15
|
+
python make_default_setup.py my_setup.yml --path2dataset my_dataset_folder
|
|
16
|
+
|
|
17
|
+
Then simply run
|
|
18
|
+
|
|
19
|
+
python train_lpcnet.py my_setup.yml my_output
|
|
20
|
+
|
|
21
|
+
## Inference
|
|
22
|
+
Create feature file with dump_data from github.com/xiph/LPCNet. Then run e.g.
|
|
23
|
+
|
|
24
|
+
python test_lpcnet.py features.f32 my_output/checkpoints/checkpoint_ep_10.pth out.wav
|
|
25
|
+
|
|
26
|
+
Inference runs on CPU and takes usually between 3 and 20 seconds per generated second of audio,
|
|
27
|
+
depending on the CPU.
|
|
@@ -0,0 +1,77 @@
|
|
|
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 argparse
|
|
31
|
+
import os
|
|
32
|
+
|
|
33
|
+
import yaml
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
from utils.templates import dataset_template_v1, dataset_template_v2
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
parser = argparse.ArgumentParser("add_dataset_config.py")
|
|
42
|
+
|
|
43
|
+
parser.add_argument('path', type=str, help='path to folder containing feature and data file')
|
|
44
|
+
parser.add_argument('--version', type=int, help="dataset version, 1 for classic LPCNet with 55 feature slots, 2 for new format with 36 feature slots.", default=2)
|
|
45
|
+
parser.add_argument('--description', type=str, help='brief dataset description', default="I will add a description later")
|
|
46
|
+
args = parser.parse_args()
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
if args.version == 1:
|
|
50
|
+
template = dataset_template_v1
|
|
51
|
+
data_extension = '.u8'
|
|
52
|
+
elif args.version == 2:
|
|
53
|
+
template = dataset_template_v2
|
|
54
|
+
data_extension = '.s16'
|
|
55
|
+
else:
|
|
56
|
+
raise ValueError(f"unknown dataset version {args.version}")
|
|
57
|
+
|
|
58
|
+
# get folder content
|
|
59
|
+
content = os.listdir(args.path)
|
|
60
|
+
|
|
61
|
+
features = [c for c in content if c.endswith('.f32')]
|
|
62
|
+
|
|
63
|
+
if len(features) != 1:
|
|
64
|
+
print("could not determine feature file")
|
|
65
|
+
else:
|
|
66
|
+
template['feature_file'] = features[0]
|
|
67
|
+
|
|
68
|
+
data = [c for c in content if c.endswith(data_extension)]
|
|
69
|
+
if len(data) != 1:
|
|
70
|
+
print("could not determine data file")
|
|
71
|
+
else:
|
|
72
|
+
template['signal_file'] = data[0]
|
|
73
|
+
|
|
74
|
+
template['description'] = args.description
|
|
75
|
+
|
|
76
|
+
with open(os.path.join(args.path, 'info.yml'), 'w') as f:
|
|
77
|
+
yaml.dump(template, f)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .lpcnet_dataset import LPCNetDataset
|
|
@@ -0,0 +1,227 @@
|
|
|
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
|
+
""" Dataset for LPCNet training """
|
|
31
|
+
import os
|
|
32
|
+
|
|
33
|
+
import yaml
|
|
34
|
+
import torch
|
|
35
|
+
import numpy as np
|
|
36
|
+
from torch.utils.data import Dataset
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
scale = 255.0/32768.0
|
|
40
|
+
scale_1 = 32768.0/255.0
|
|
41
|
+
def ulaw2lin(u):
|
|
42
|
+
u = u - 128
|
|
43
|
+
s = np.sign(u)
|
|
44
|
+
u = np.abs(u)
|
|
45
|
+
return s*scale_1*(np.exp(u/128.*np.log(256))-1)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def lin2ulaw(x):
|
|
49
|
+
s = np.sign(x)
|
|
50
|
+
x = np.abs(x)
|
|
51
|
+
u = (s*(128*np.log(1+scale*x)/np.log(256)))
|
|
52
|
+
u = np.clip(128 + np.round(u), 0, 255)
|
|
53
|
+
return u
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def run_lpc(signal, lpcs, frame_length=160):
|
|
57
|
+
num_frames, lpc_order = lpcs.shape
|
|
58
|
+
|
|
59
|
+
prediction = np.concatenate(
|
|
60
|
+
[- np.convolve(signal[i * frame_length : (i + 1) * frame_length + lpc_order - 1], lpcs[i], mode='valid') for i in range(num_frames)]
|
|
61
|
+
)
|
|
62
|
+
error = signal[lpc_order :] - prediction
|
|
63
|
+
|
|
64
|
+
return prediction, error
|
|
65
|
+
|
|
66
|
+
class LPCNetDataset(Dataset):
|
|
67
|
+
def __init__(self,
|
|
68
|
+
path_to_dataset,
|
|
69
|
+
features=['cepstrum', 'periods', 'pitch_corr'],
|
|
70
|
+
input_signals=['last_signal', 'prediction', 'last_error'],
|
|
71
|
+
target='error',
|
|
72
|
+
frames_per_sample=15,
|
|
73
|
+
feature_history=2,
|
|
74
|
+
feature_lookahead=2,
|
|
75
|
+
lpc_gamma=1):
|
|
76
|
+
|
|
77
|
+
super(LPCNetDataset, self).__init__()
|
|
78
|
+
|
|
79
|
+
# load dataset info
|
|
80
|
+
self.path_to_dataset = path_to_dataset
|
|
81
|
+
with open(os.path.join(path_to_dataset, 'info.yml'), 'r') as f:
|
|
82
|
+
dataset = yaml.load(f, yaml.FullLoader)
|
|
83
|
+
|
|
84
|
+
# dataset version
|
|
85
|
+
self.version = dataset['version']
|
|
86
|
+
if self.version == 1:
|
|
87
|
+
self.getitem = self.getitem_v1
|
|
88
|
+
elif self.version == 2:
|
|
89
|
+
self.getitem = self.getitem_v2
|
|
90
|
+
else:
|
|
91
|
+
raise ValueError(f"dataset version {self.version} unknown")
|
|
92
|
+
|
|
93
|
+
# features
|
|
94
|
+
self.feature_history = feature_history
|
|
95
|
+
self.feature_lookahead = feature_lookahead
|
|
96
|
+
self.frame_offset = 1 + self.feature_history
|
|
97
|
+
self.frames_per_sample = frames_per_sample
|
|
98
|
+
self.input_features = features
|
|
99
|
+
self.feature_frame_layout = dataset['feature_frame_layout']
|
|
100
|
+
self.lpc_gamma = lpc_gamma
|
|
101
|
+
|
|
102
|
+
# load feature file
|
|
103
|
+
self.feature_file = os.path.join(path_to_dataset, dataset['feature_file'])
|
|
104
|
+
self.features = np.memmap(self.feature_file, dtype=dataset['feature_dtype'])
|
|
105
|
+
self.feature_frame_length = dataset['feature_frame_length']
|
|
106
|
+
|
|
107
|
+
assert len(self.features) % self.feature_frame_length == 0
|
|
108
|
+
self.features = self.features.reshape((-1, self.feature_frame_length))
|
|
109
|
+
|
|
110
|
+
# derive number of samples is dataset
|
|
111
|
+
self.dataset_length = (len(self.features) - self.frame_offset - self.feature_lookahead - 1) // self.frames_per_sample
|
|
112
|
+
|
|
113
|
+
# signals
|
|
114
|
+
self.frame_length = dataset['frame_length']
|
|
115
|
+
self.signal_frame_layout = dataset['signal_frame_layout']
|
|
116
|
+
self.input_signals = input_signals
|
|
117
|
+
self.target = target
|
|
118
|
+
|
|
119
|
+
# load signals
|
|
120
|
+
self.signal_file = os.path.join(path_to_dataset, dataset['signal_file'])
|
|
121
|
+
self.signals = np.memmap(self.signal_file, dtype=dataset['signal_dtype'])
|
|
122
|
+
self.signal_frame_length = dataset['signal_frame_length']
|
|
123
|
+
self.signals = self.signals.reshape((-1, self.signal_frame_length))
|
|
124
|
+
assert len(self.signals) == len(self.features) * self.frame_length
|
|
125
|
+
|
|
126
|
+
def __getitem__(self, index):
|
|
127
|
+
return self.getitem(index)
|
|
128
|
+
|
|
129
|
+
def getitem_v2(self, index):
|
|
130
|
+
sample = dict()
|
|
131
|
+
|
|
132
|
+
# extract features
|
|
133
|
+
frame_start = self.frame_offset + index * self.frames_per_sample - self.feature_history
|
|
134
|
+
frame_stop = self.frame_offset + (index + 1) * self.frames_per_sample + self.feature_lookahead
|
|
135
|
+
|
|
136
|
+
for feature in self.input_features:
|
|
137
|
+
feature_start, feature_stop = self.feature_frame_layout[feature]
|
|
138
|
+
sample[feature] = self.features[frame_start : frame_stop, feature_start : feature_stop]
|
|
139
|
+
|
|
140
|
+
# convert periods
|
|
141
|
+
if 'periods' in self.input_features:
|
|
142
|
+
sample['periods'] = (0.1 + 50 * sample['periods'] + 100).astype('int16')
|
|
143
|
+
|
|
144
|
+
signal_start = (self.frame_offset + index * self.frames_per_sample) * self.frame_length
|
|
145
|
+
signal_stop = (self.frame_offset + (index + 1) * self.frames_per_sample) * self.frame_length
|
|
146
|
+
|
|
147
|
+
# last_signal and signal are always expected to be there
|
|
148
|
+
sample['last_signal'] = self.signals[signal_start : signal_stop, self.signal_frame_layout['last_signal']]
|
|
149
|
+
sample['signal'] = self.signals[signal_start : signal_stop, self.signal_frame_layout['signal']]
|
|
150
|
+
|
|
151
|
+
# calculate prediction and error if lpc coefficients present and prediction not given
|
|
152
|
+
if 'lpc' in self.feature_frame_layout and 'prediction' not in self.signal_frame_layout:
|
|
153
|
+
# lpc coefficients with one frame lookahead
|
|
154
|
+
# frame positions (start one frame early for past excitation)
|
|
155
|
+
frame_start = self.frame_offset + self.frames_per_sample * index - 1
|
|
156
|
+
frame_stop = self.frame_offset + self.frames_per_sample * (index + 1)
|
|
157
|
+
|
|
158
|
+
# feature positions
|
|
159
|
+
lpc_start, lpc_stop = self.feature_frame_layout['lpc']
|
|
160
|
+
lpc_order = lpc_stop - lpc_start
|
|
161
|
+
lpcs = self.features[frame_start : frame_stop, lpc_start : lpc_stop]
|
|
162
|
+
|
|
163
|
+
# LPC weighting
|
|
164
|
+
lpc_order = lpc_stop - lpc_start
|
|
165
|
+
weights = np.array([self.lpc_gamma ** (i + 1) for i in range(lpc_order)])
|
|
166
|
+
lpcs = lpcs * weights
|
|
167
|
+
|
|
168
|
+
# signal position (lpc_order samples as history)
|
|
169
|
+
signal_start = frame_start * self.frame_length - lpc_order + 1
|
|
170
|
+
signal_stop = frame_stop * self.frame_length + 1
|
|
171
|
+
noisy_signal = self.signals[signal_start : signal_stop, self.signal_frame_layout['last_signal']]
|
|
172
|
+
clean_signal = self.signals[signal_start - 1 : signal_stop - 1, self.signal_frame_layout['signal']]
|
|
173
|
+
|
|
174
|
+
noisy_prediction, noisy_error = run_lpc(noisy_signal, lpcs, frame_length=self.frame_length)
|
|
175
|
+
|
|
176
|
+
# extract signals
|
|
177
|
+
offset = self.frame_length
|
|
178
|
+
sample['prediction'] = noisy_prediction[offset : offset + self.frame_length * self.frames_per_sample]
|
|
179
|
+
sample['last_error'] = noisy_error[offset - 1 : offset - 1 + self.frame_length * self.frames_per_sample]
|
|
180
|
+
# calculate error between real signal and noisy prediction
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
sample['error'] = sample['signal'] - sample['prediction']
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
# concatenate features
|
|
187
|
+
feature_keys = [key for key in self.input_features if not key.startswith("periods")]
|
|
188
|
+
features = torch.concat([torch.FloatTensor(sample[key]) for key in feature_keys], dim=-1)
|
|
189
|
+
signals = torch.cat([torch.LongTensor(lin2ulaw(sample[key])).unsqueeze(-1) for key in self.input_signals], dim=-1)
|
|
190
|
+
target = torch.LongTensor(lin2ulaw(sample[self.target]))
|
|
191
|
+
periods = torch.LongTensor(sample['periods'])
|
|
192
|
+
|
|
193
|
+
return {'features' : features, 'periods' : periods, 'signals' : signals, 'target' : target}
|
|
194
|
+
|
|
195
|
+
def getitem_v1(self, index):
|
|
196
|
+
sample = dict()
|
|
197
|
+
|
|
198
|
+
# extract features
|
|
199
|
+
frame_start = self.frame_offset + index * self.frames_per_sample - self.feature_history
|
|
200
|
+
frame_stop = self.frame_offset + (index + 1) * self.frames_per_sample + self.feature_lookahead
|
|
201
|
+
|
|
202
|
+
for feature in self.input_features:
|
|
203
|
+
feature_start, feature_stop = self.feature_frame_layout[feature]
|
|
204
|
+
sample[feature] = self.features[frame_start : frame_stop, feature_start : feature_stop]
|
|
205
|
+
|
|
206
|
+
# convert periods
|
|
207
|
+
if 'periods' in self.input_features:
|
|
208
|
+
sample['periods'] = (0.1 + 50 * sample['periods'] + 100).astype('int16')
|
|
209
|
+
|
|
210
|
+
signal_start = (self.frame_offset + index * self.frames_per_sample) * self.frame_length
|
|
211
|
+
signal_stop = (self.frame_offset + (index + 1) * self.frames_per_sample) * self.frame_length
|
|
212
|
+
|
|
213
|
+
# last_signal and signal are always expected to be there
|
|
214
|
+
for signal_name, index in self.signal_frame_layout.items():
|
|
215
|
+
sample[signal_name] = self.signals[signal_start : signal_stop, index]
|
|
216
|
+
|
|
217
|
+
# concatenate features
|
|
218
|
+
feature_keys = [key for key in self.input_features if not key.startswith("periods")]
|
|
219
|
+
features = torch.concat([torch.FloatTensor(sample[key]) for key in feature_keys], dim=-1)
|
|
220
|
+
signals = torch.cat([torch.LongTensor(sample[key]).unsqueeze(-1) for key in self.input_signals], dim=-1)
|
|
221
|
+
target = torch.LongTensor(sample[self.target])
|
|
222
|
+
periods = torch.LongTensor(sample['periods'])
|
|
223
|
+
|
|
224
|
+
return {'features' : features, 'periods' : periods, 'signals' : signals, 'target' : target}
|
|
225
|
+
|
|
226
|
+
def __len__(self):
|
|
227
|
+
return self.dataset_length
|
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
from tqdm import tqdm
|
|
32
|
+
import sys
|
|
33
|
+
|
|
34
|
+
def train_one_epoch(model, criterion, optimizer, dataloader, device, scheduler, log_interval=10):
|
|
35
|
+
|
|
36
|
+
model.to(device)
|
|
37
|
+
model.train()
|
|
38
|
+
|
|
39
|
+
running_loss = 0
|
|
40
|
+
previous_running_loss = 0
|
|
41
|
+
|
|
42
|
+
# gru states
|
|
43
|
+
gru_a_state = torch.zeros(1, dataloader.batch_size, model.gru_a_units, device=device).to(device)
|
|
44
|
+
gru_b_state = torch.zeros(1, dataloader.batch_size, model.gru_b_units, device=device).to(device)
|
|
45
|
+
gru_states = [gru_a_state, gru_b_state]
|
|
46
|
+
|
|
47
|
+
with tqdm(dataloader, unit='batch', file=sys.stdout) as tepoch:
|
|
48
|
+
|
|
49
|
+
for i, batch in enumerate(tepoch):
|
|
50
|
+
|
|
51
|
+
# set gradients to zero
|
|
52
|
+
optimizer.zero_grad()
|
|
53
|
+
|
|
54
|
+
# zero out initial gru states
|
|
55
|
+
gru_a_state.zero_()
|
|
56
|
+
gru_b_state.zero_()
|
|
57
|
+
|
|
58
|
+
# push batch to device
|
|
59
|
+
for key in batch:
|
|
60
|
+
batch[key] = batch[key].to(device)
|
|
61
|
+
|
|
62
|
+
target = batch['target']
|
|
63
|
+
|
|
64
|
+
# calculate model output
|
|
65
|
+
output = model(batch['features'], batch['periods'], batch['signals'], gru_states)
|
|
66
|
+
|
|
67
|
+
# calculate loss
|
|
68
|
+
loss = criterion(output.permute(0, 2, 1), target)
|
|
69
|
+
|
|
70
|
+
# calculate gradients
|
|
71
|
+
loss.backward()
|
|
72
|
+
|
|
73
|
+
# update weights
|
|
74
|
+
optimizer.step()
|
|
75
|
+
|
|
76
|
+
# update learning rate
|
|
77
|
+
scheduler.step()
|
|
78
|
+
|
|
79
|
+
# call sparsifier
|
|
80
|
+
model.sparsify()
|
|
81
|
+
|
|
82
|
+
# update running loss
|
|
83
|
+
running_loss += float(loss.cpu())
|
|
84
|
+
|
|
85
|
+
# update status bar
|
|
86
|
+
if i % log_interval == 0:
|
|
87
|
+
tepoch.set_postfix(running_loss=f"{running_loss/(i + 1):8.7f}", current_loss=f"{(running_loss - previous_running_loss)/log_interval:8.7f}")
|
|
88
|
+
previous_running_loss = running_loss
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
running_loss /= len(dataloader)
|
|
92
|
+
|
|
93
|
+
return running_loss
|
|
94
|
+
|
|
95
|
+
def evaluate(model, criterion, dataloader, device, log_interval=10):
|
|
96
|
+
|
|
97
|
+
model.to(device)
|
|
98
|
+
model.eval()
|
|
99
|
+
|
|
100
|
+
running_loss = 0
|
|
101
|
+
previous_running_loss = 0
|
|
102
|
+
|
|
103
|
+
# gru states
|
|
104
|
+
gru_a_state = torch.zeros(1, dataloader.batch_size, model.gru_a_units, device=device).to(device)
|
|
105
|
+
gru_b_state = torch.zeros(1, dataloader.batch_size, model.gru_b_units, device=device).to(device)
|
|
106
|
+
gru_states = [gru_a_state, gru_b_state]
|
|
107
|
+
|
|
108
|
+
with torch.no_grad():
|
|
109
|
+
with tqdm(dataloader, unit='batch', file=sys.stdout) as tepoch:
|
|
110
|
+
|
|
111
|
+
for i, batch in enumerate(tepoch):
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
# zero out initial gru states
|
|
115
|
+
gru_a_state.zero_()
|
|
116
|
+
gru_b_state.zero_()
|
|
117
|
+
|
|
118
|
+
# push batch to device
|
|
119
|
+
for key in batch:
|
|
120
|
+
batch[key] = batch[key].to(device)
|
|
121
|
+
|
|
122
|
+
target = batch['target']
|
|
123
|
+
|
|
124
|
+
# calculate model output
|
|
125
|
+
output = model(batch['features'], batch['periods'], batch['signals'], gru_states)
|
|
126
|
+
|
|
127
|
+
# calculate loss
|
|
128
|
+
loss = criterion(output.permute(0, 2, 1), target)
|
|
129
|
+
|
|
130
|
+
# update running loss
|
|
131
|
+
running_loss += float(loss.cpu())
|
|
132
|
+
|
|
133
|
+
# update status bar
|
|
134
|
+
if i % log_interval == 0:
|
|
135
|
+
tepoch.set_postfix(running_loss=f"{running_loss/(i + 1):8.7f}", current_loss=f"{(running_loss - previous_running_loss)/log_interval:8.7f}")
|
|
136
|
+
previous_running_loss = running_loss
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
running_loss /= len(dataloader)
|
|
140
|
+
|
|
141
|
+
return running_loss
|