nkululeko 0.81.2__tar.gz → 0.81.4__tar.gz

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.
Files changed (166) hide show
  1. {nkululeko-0.81.2 → nkululeko-0.81.4}/CHANGELOG.md +9 -0
  2. {nkululeko-0.81.2/nkululeko.egg-info → nkululeko-0.81.4}/PKG-INFO +12 -1
  3. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/constants.py +1 -1
  4. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/data/dataset.py +2 -2
  5. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/experiment.py +2 -2
  6. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_agender_agender.py +5 -4
  7. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_audmodel_dim.py +8 -4
  8. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feinberg_praat.py +114 -116
  9. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/modelrunner.py +2 -2
  10. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model.py +13 -13
  11. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_cnn.py +1 -1
  12. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_mlp.py +1 -1
  13. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_mlp_regression.py +13 -9
  14. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_svm.py +5 -2
  15. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/predict.py +3 -1
  16. {nkululeko-0.81.2/nkululeko → nkululeko-0.81.4/nkululeko/reporting}/reporter.py +86 -51
  17. {nkululeko-0.81.2/nkululeko → nkululeko-0.81.4/nkululeko/reporting}/result.py +5 -0
  18. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/runmanager.py +1 -1
  19. {nkululeko-0.81.2 → nkululeko-0.81.4/nkululeko.egg-info}/PKG-INFO +12 -1
  20. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko.egg-info/SOURCES.txt +2 -2
  21. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko.egg-info/requires.txt +2 -0
  22. {nkululeko-0.81.2 → nkululeko-0.81.4}/setup.cfg +2 -0
  23. {nkululeko-0.81.2 → nkululeko-0.81.4}/LICENSE +0 -0
  24. {nkululeko-0.81.2 → nkululeko-0.81.4}/README.md +0 -0
  25. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/aesdd/process_database.py +0 -0
  26. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/androids/process_database.py +0 -0
  27. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/androids_orig/process_database.py +0 -0
  28. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/androids_test/process_database.py +0 -0
  29. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/ased/process_database.py +0 -0
  30. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/asvp-esd/process_database.py +0 -0
  31. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/baved/process_database.py +0 -0
  32. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/cafe/process_database.py +0 -0
  33. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/clac/process_database.py +0 -0
  34. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/cmu-mosei/process_database.py +0 -0
  35. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/crema-d/process_database.py +0 -0
  36. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/demos/process_database.py +0 -0
  37. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/ekorpus/process_database.py +0 -0
  38. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/emns/process_database.py +0 -0
  39. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/emofilm/convert_to_16k.py +0 -0
  40. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/emofilm/process_database.py +0 -0
  41. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/emorynlp/process_database.py +0 -0
  42. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/emov-db/process_database.py +0 -0
  43. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/emovo/process_database.py +0 -0
  44. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/emozionalmente/create.py +0 -0
  45. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/enterface/process_database.py +0 -0
  46. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/esd/process_database.py +0 -0
  47. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/gerparas/process_database.py +0 -0
  48. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/iemocap/process_database.py +0 -0
  49. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/jl/process_database.py +0 -0
  50. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/jtes/process_database.py +0 -0
  51. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/meld/process_database.py +0 -0
  52. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/mesd/process_database.py +0 -0
  53. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/mess/process_database.py +0 -0
  54. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/mlendsnd/process_database.py +0 -0
  55. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/msp-improv/process_database2.py +0 -0
  56. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/msp-podcast/process_database.py +0 -0
  57. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/oreau2/process_database.py +0 -0
  58. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/portuguese/process_database.py +0 -0
  59. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/ravdess/process_database.py +0 -0
  60. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/ravdess/process_database_speaker.py +0 -0
  61. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/savee/process_database.py +0 -0
  62. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/shemo/process_database.py +0 -0
  63. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/subesco/process_database.py +0 -0
  64. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/tess/process_database.py +0 -0
  65. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/thorsten-emotional/process_database.py +0 -0
  66. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/urdu/process_database.py +0 -0
  67. {nkululeko-0.81.2 → nkululeko-0.81.4}/data/vivae/process_database.py +0 -0
  68. {nkululeko-0.81.2 → nkululeko-0.81.4}/docs/source/conf.py +0 -0
  69. {nkululeko-0.81.2 → nkululeko-0.81.4}/meta/demos/demo_best_model.py +0 -0
  70. {nkululeko-0.81.2 → nkululeko-0.81.4}/meta/demos/multiple_exeriments/do_experiments.py +0 -0
  71. {nkululeko-0.81.2 → nkululeko-0.81.4}/meta/demos/multiple_exeriments/parse_nkulu.py +0 -0
  72. {nkululeko-0.81.2 → nkululeko-0.81.4}/meta/demos/my_experiment.py +0 -0
  73. {nkululeko-0.81.2 → nkululeko-0.81.4}/meta/demos/my_experiment_local.py +0 -0
  74. {nkululeko-0.81.2 → nkululeko-0.81.4}/meta/demos/plot_faster_anim.py +0 -0
  75. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/__init__.py +0 -0
  76. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/aug_train.py +0 -0
  77. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/augment.py +0 -0
  78. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/augmenting/__init__.py +0 -0
  79. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/augmenting/augmenter.py +0 -0
  80. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/augmenting/randomsplicer.py +0 -0
  81. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/augmenting/randomsplicing.py +0 -0
  82. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/augmenting/resampler.py +0 -0
  83. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/__init__.py +0 -0
  84. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_age.py +0 -0
  85. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_arousal.py +0 -0
  86. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_dominance.py +0 -0
  87. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_gender.py +0 -0
  88. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_mos.py +0 -0
  89. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_pesq.py +0 -0
  90. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_sdr.py +0 -0
  91. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_snr.py +0 -0
  92. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_stoi.py +0 -0
  93. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/ap_valence.py +0 -0
  94. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/autopredict/estimate_snr.py +0 -0
  95. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/cacheddataset.py +0 -0
  96. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/data/__init__.py +0 -0
  97. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/data/dataset_csv.py +0 -0
  98. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/demo.py +0 -0
  99. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/demo_feats.py +0 -0
  100. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/demo_predictor.py +0 -0
  101. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/explore.py +0 -0
  102. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/export.py +0 -0
  103. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/__init__.py +0 -0
  104. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_agender.py +0 -0
  105. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_analyser.py +0 -0
  106. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_audmodel.py +0 -0
  107. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_clap.py +0 -0
  108. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_hubert.py +0 -0
  109. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_import.py +0 -0
  110. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_mld.py +0 -0
  111. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_mos.py +0 -0
  112. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_opensmile.py +0 -0
  113. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_oxbow.py +0 -0
  114. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_praat.py +0 -0
  115. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_snr.py +0 -0
  116. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_spectra.py +0 -0
  117. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_spkrec.py +0 -0
  118. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_squim.py +0 -0
  119. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_trill.py +0 -0
  120. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_wav2vec2.py +0 -0
  121. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/feats_wavlm.py +0 -0
  122. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feat_extract/featureset.py +0 -0
  123. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/feature_extractor.py +0 -0
  124. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/file_checker.py +0 -0
  125. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/filter_data.py +0 -0
  126. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/glob_conf.py +0 -0
  127. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/losses/__init__.py +0 -0
  128. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/losses/loss_ccc.py +0 -0
  129. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/losses/loss_softf1loss.py +0 -0
  130. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/__init__.py +0 -0
  131. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_bayes.py +0 -0
  132. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_gmm.py +0 -0
  133. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_knn.py +0 -0
  134. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_knn_reg.py +0 -0
  135. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_lin_reg.py +0 -0
  136. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_svr.py +0 -0
  137. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_tree.py +0 -0
  138. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_tree_reg.py +0 -0
  139. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_xgb.py +0 -0
  140. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/models/model_xgr.py +0 -0
  141. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/multidb.py +0 -0
  142. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/nkululeko.py +0 -0
  143. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/plots.py +0 -0
  144. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/reporting/__init__.py +0 -0
  145. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/reporting/defines.py +0 -0
  146. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/reporting/latex_writer.py +0 -0
  147. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/reporting/report.py +0 -0
  148. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/reporting/report_item.py +0 -0
  149. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/resample.py +0 -0
  150. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/scaler.py +0 -0
  151. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/segment.py +0 -0
  152. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/segmenting/__init__.py +0 -0
  153. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/segmenting/seg_inaspeechsegmenter.py +0 -0
  154. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/segmenting/seg_silero.py +0 -0
  155. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/syllable_nuclei.py +0 -0
  156. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/test.py +0 -0
  157. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/test_predictor.py +0 -0
  158. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/utils/__init__.py +0 -0
  159. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/utils/files.py +0 -0
  160. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/utils/stats.py +0 -0
  161. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko/utils/util.py +0 -0
  162. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko.egg-info/dependency_links.txt +0 -0
  163. {nkululeko-0.81.2 → nkululeko-0.81.4}/nkululeko.egg-info/top_level.txt +0 -0
  164. {nkululeko-0.81.2 → nkululeko-0.81.4}/pyproject.toml +0 -0
  165. {nkululeko-0.81.2 → nkululeko-0.81.4}/setup.py +0 -0
  166. {nkululeko-0.81.2 → nkululeko-0.81.4}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,15 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 0.81.4
5
+ --------------
6
+ * fixed bug in demo module
7
+ * removed [MODEL] save
8
+
9
+ Version 0.81.3
10
+ --------------
11
+ * added confidence intervals to result reporting
12
+
4
13
  Version 0.81.2
5
14
  --------------
6
15
  * added a parselmouth.Praat error if pitch out of range
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nkululeko
3
- Version: 0.81.2
3
+ Version: 0.81.4
4
4
  Summary: Machine learning audio prediction experiments based on templates
5
5
  Home-page: https://github.com/felixbur/nkululeko
6
6
  Author: Felix Burkhardt
@@ -18,7 +18,9 @@ Requires-Dist: audformat
18
18
  Requires-Dist: audinterface
19
19
  Requires-Dist: audiofile
20
20
  Requires-Dist: audiomentations
21
+ Requires-Dist: audmetric
21
22
  Requires-Dist: audonnx
23
+ Requires-Dist: confidence_intervals
22
24
  Requires-Dist: datasets
23
25
  Requires-Dist: imageio
24
26
  Requires-Dist: laion-clap
@@ -321,6 +323,15 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
321
323
  Changelog
322
324
  =========
323
325
 
326
+ Version 0.81.4
327
+ --------------
328
+ * fixed bug in demo module
329
+ * removed [MODEL] save
330
+
331
+ Version 0.81.3
332
+ --------------
333
+ * added confidence intervals to result reporting
334
+
324
335
  Version 0.81.2
325
336
  --------------
326
337
  * added a parselmouth.Praat error if pitch out of range
@@ -1,2 +1,2 @@
1
- VERSION="0.81.2"
1
+ VERSION="0.81.4"
2
2
  SAMPLING_RATE = 16000
@@ -96,8 +96,8 @@ class Dataset:
96
96
  """Load the dataframe with files, speakers and task labels"""
97
97
  # store the dataframe
98
98
  store = self.util.get_path("store")
99
- store_file = f"{store}{self.name}"
100
99
  store_format = self.util.config_val("FEATS", "store_format", "pkl")
100
+ store_file = f"{store}{self.name}.{store_format}"
101
101
  self.root = self._load_db()
102
102
  if not self.start_fresh and os.path.isfile(store_file):
103
103
  self.util.debug(f"{self.name}: reusing previously stored file {store_file}")
@@ -241,7 +241,7 @@ class Dataset:
241
241
  # store the dataframe
242
242
  store = self.util.get_path("store")
243
243
  store_format = self.util.config_val("FEATS", "store_format", "pkl")
244
- store_file = f"{store}{self.name}"
244
+ store_file = f"{store}{self.name}.{store_format}"
245
245
  self.util.write_store(self.df, store_file, store_format)
246
246
 
247
247
  def _get_df_for_lists(self, db, df_files):
@@ -685,7 +685,7 @@ class Experiment:
685
685
  glob_conf.set_labels(self.labels)
686
686
 
687
687
  def save(self, filename):
688
- if self.runmgr.modelrunner.model.is_ANN():
688
+ if self.runmgr.modelrunner.model.is_ann():
689
689
  self.runmgr.modelrunner.model = None
690
690
  self.util.warn(
691
691
  f"Save experiment: Can't pickle the learning model so saving without it."
@@ -708,7 +708,7 @@ class Experiment:
708
708
  def save_onnx(self, filename):
709
709
  # export the model to onnx
710
710
  model = self.runmgr.get_best_model()
711
- if model.is_ANN():
711
+ if model.is_ann():
712
712
  print("converting to onnx from torch")
713
713
  else:
714
714
  from skl2onnx import to_onnx
@@ -32,10 +32,11 @@ class AgenderAgenderSet(Featureset):
32
32
  audeer.extract_archive(archive_path, model_root)
33
33
  device = self.util.config_val("MODEL", "device", "cpu")
34
34
  self.model = audonnx.load(model_root, device=device)
35
- pytorch_total_params = sum(p.numel() for p in self.model.parameters())
36
- self.util.debug(
37
- f"initialized agender model with {pytorch_total_params} parameters in total"
38
- )
35
+ # pytorch_total_params = sum(p.numel() for p in self.model.parameters())
36
+ # self.util.debug(
37
+ # f"initialized agender model with {pytorch_total_params} parameters in total"
38
+ # )
39
+ self.util.debug("initialized agender model")
39
40
  self.model_loaded = True
40
41
 
41
42
  def extract(self):
@@ -1,12 +1,16 @@
1
1
  # feats_audmodel_dim.py
2
- from nkululeko.feat_extract.featureset import Featureset
3
2
  import os
3
+
4
+ import numpy as np
4
5
  import pandas as pd
6
+ import torch
7
+
5
8
  import audeer
6
- import nkululeko.glob_conf as glob_conf
7
- import audonnx
8
- import numpy as np
9
9
  import audinterface
10
+ import audonnx
11
+
12
+ from nkululeko.feat_extract.featureset import Featureset
13
+ import nkululeko.glob_conf as glob_conf
10
14
 
11
15
 
12
16
  class AudModelDimSet(Featureset):
@@ -1,47 +1,46 @@
1
- """
2
- This is a copy of David R. Feinberg's Praat scripts
1
+ """This is a copy of David R. Feinberg's Praat scripts.
3
2
  https://github.com/drfeinberg/PraatScripts
4
- taken June 23rd 2022
3
+ taken June 23rd 2022.
5
4
  """
6
5
 
7
6
  #!/usr/bin/env python3
7
+ import math
8
+ import statistics
9
+
8
10
  import numpy as np
9
11
  import pandas as pd
10
- import math
11
- from tqdm import tqdm
12
12
  import parselmouth
13
- import statistics
14
- from nkululeko.utils.util import Util
15
- import audiofile
16
13
  from parselmouth.praat import call
17
14
  from scipy.stats.mstats import zscore
18
15
  from sklearn.decomposition import PCA
19
- from sklearn.preprocessing import StandardScaler
16
+ from tqdm import tqdm
17
+
18
+ import audiofile
20
19
 
21
20
 
22
21
  # This is the function to measure source acoustics using default male parameters.
23
22
 
24
23
 
25
- def measurePitch(voiceID, f0min, f0max, unit):
26
- sound = parselmouth.Sound(voiceID) # read the sound
24
+ def measure_pitch(voice_id, f0min, f0max, unit):
25
+ sound = parselmouth.Sound(voice_id) # read the sound
27
26
  duration = call(sound, "Get total duration") # duration
28
27
  pitch = call(sound, "To Pitch", 0.0, f0min, f0max) # create a praat pitch object
29
- meanF0 = call(pitch, "Get mean", 0, 0, unit) # get mean pitch
30
- stdevF0 = call(
28
+ mean_f0 = call(pitch, "Get mean", 0, 0, unit) # get mean pitch
29
+ stdev_f0 = call(
31
30
  pitch, "Get standard deviation", 0, 0, unit
32
31
  ) # get standard deviation
33
32
  harmonicity = call(sound, "To Harmonicity (cc)", 0.01, f0min, 0.1, 1.0)
34
33
  hnr = call(harmonicity, "Get mean", 0, 0)
35
- pointProcess = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
36
- localJitter = call(pointProcess, "Get jitter (local)", 0, 0, 0.0001, 0.02, 1.3)
37
- localabsoluteJitter = call(
38
- pointProcess, "Get jitter (local, absolute)", 0, 0, 0.0001, 0.02, 1.3
34
+ point_process = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
35
+ local_jitter = call(point_process, "Get jitter (local)", 0, 0, 0.0001, 0.02, 1.3)
36
+ localabsolute_jitter = call(
37
+ point_process, "Get jitter (local, absolute)", 0, 0, 0.0001, 0.02, 1.3
39
38
  )
40
- rapJitter = call(pointProcess, "Get jitter (rap)", 0, 0, 0.0001, 0.02, 1.3)
41
- ppq5Jitter = call(pointProcess, "Get jitter (ppq5)", 0, 0, 0.0001, 0.02, 1.3)
42
- ddpJitter = call(pointProcess, "Get jitter (ddp)", 0, 0, 0.0001, 0.02, 1.3)
43
- localShimmer = call(
44
- [sound, pointProcess],
39
+ rap_jitter = call(point_process, "Get jitter (rap)", 0, 0, 0.0001, 0.02, 1.3)
40
+ ppq5_jitter = call(point_process, "Get jitter (ppq5)", 0, 0, 0.0001, 0.02, 1.3)
41
+ ddp_jitter = call(point_process, "Get jitter (ddp)", 0, 0, 0.0001, 0.02, 1.3)
42
+ local_shimmer = call(
43
+ [sound, point_process],
45
44
  "Get shimmer (local)",
46
45
  0,
47
46
  0,
@@ -50,8 +49,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
50
49
  1.3,
51
50
  1.6,
52
51
  )
53
- localdbShimmer = call(
54
- [sound, pointProcess],
52
+ localdb_shimmer = call(
53
+ [sound, point_process],
55
54
  "Get shimmer (local_dB)",
56
55
  0,
57
56
  0,
@@ -60,8 +59,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
60
59
  1.3,
61
60
  1.6,
62
61
  )
63
- apq3Shimmer = call(
64
- [sound, pointProcess],
62
+ apq3_shimmer = call(
63
+ [sound, point_process],
65
64
  "Get shimmer (apq3)",
66
65
  0,
67
66
  0,
@@ -70,8 +69,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
70
69
  1.3,
71
70
  1.6,
72
71
  )
73
- aqpq5Shimmer = call(
74
- [sound, pointProcess],
72
+ aqpq5_shimmer = call(
73
+ [sound, point_process],
75
74
  "Get shimmer (apq5)",
76
75
  0,
77
76
  0,
@@ -80,8 +79,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
80
79
  1.3,
81
80
  1.6,
82
81
  )
83
- apq11Shimmer = call(
84
- [sound, pointProcess],
82
+ apq11_shimmer = call(
83
+ [sound, point_process],
85
84
  "Get shimmer (apq11)",
86
85
  0,
87
86
  0,
@@ -90,26 +89,26 @@ def measurePitch(voiceID, f0min, f0max, unit):
90
89
  1.3,
91
90
  1.6,
92
91
  )
93
- ddaShimmer = call(
94
- [sound, pointProcess], "Get shimmer (dda)", 0, 0, 0.0001, 0.02, 1.3, 1.6
92
+ dda_shimmer = call(
93
+ [sound, point_process], "Get shimmer (dda)", 0, 0, 0.0001, 0.02, 1.3, 1.6
95
94
  )
96
95
 
97
96
  return (
98
97
  duration,
99
- meanF0,
100
- stdevF0,
98
+ mean_f0,
99
+ stdev_f0,
101
100
  hnr,
102
- localJitter,
103
- localabsoluteJitter,
104
- rapJitter,
105
- ppq5Jitter,
106
- ddpJitter,
107
- localShimmer,
108
- localdbShimmer,
109
- apq3Shimmer,
110
- aqpq5Shimmer,
111
- apq11Shimmer,
112
- ddaShimmer,
101
+ local_jitter,
102
+ localabsolute_jitter,
103
+ rap_jitter,
104
+ ppq5_jitter,
105
+ ddp_jitter,
106
+ local_shimmer,
107
+ localdb_shimmer,
108
+ apq3_shimmer,
109
+ aqpq5_shimmer,
110
+ apq11_shimmer,
111
+ dda_shimmer,
113
112
  )
114
113
 
115
114
 
@@ -120,13 +119,13 @@ def measurePitch(voiceID, f0min, f0max, unit):
120
119
  # Adapted from: DOI 10.17605/OSF.IO/K2BHS
121
120
  # This function measures formants using Formant Position formula
122
121
  # def measureFormants(sound, wave_file, f0min,f0max):
123
- def measureFormants(sound, f0min, f0max):
122
+ def measure_formants(sound, f0min, f0max):
124
123
  sound = parselmouth.Sound(sound) # read the sound
125
124
  # pitch = call(sound, "To Pitch (cc)", 0, f0min, 15, 'no', 0.03, 0.45, 0.01, 0.35, 0.14, f0max)
126
- pointProcess = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
125
+ point_process = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
127
126
 
128
127
  formants = call(sound, "To Formant (burg)", 0.0025, 5, 5000, 0.025, 50)
129
- numPoints = call(pointProcess, "Get number of points")
128
+ num_points = call(point_process, "Get number of points")
130
129
 
131
130
  f1_list = []
132
131
  f2_list = []
@@ -134,9 +133,9 @@ def measureFormants(sound, f0min, f0max):
134
133
  f4_list = []
135
134
 
136
135
  # Measure formants only at glottal pulses
137
- for point in range(0, numPoints):
136
+ for point in range(0, num_points):
138
137
  point += 1
139
- t = call(pointProcess, "Get time from index", point)
138
+ t = call(point_process, "Get time from index", point)
140
139
  f1 = call(formants, "Get value at time", 1, t, "Hertz", "Linear")
141
140
  f2 = call(formants, "Get value at time", 2, t, "Hertz", "Linear")
142
141
  f3 = call(formants, "Get value at time", 3, t, "Hertz", "Linear")
@@ -179,7 +178,7 @@ def measureFormants(sound, f0min, f0max):
179
178
  # ## This function runs a 2-factor Principle Components Analysis (PCA) on Jitter and Shimmer
180
179
 
181
180
 
182
- def runPCA(df):
181
+ def run_pca(df):
183
182
  # z-score the Jitter and Shimmer measurements
184
183
  measures = [
185
184
  "localJitter",
@@ -211,19 +210,19 @@ def runPCA(df):
211
210
  # PCA
212
211
  pca = PCA(n_components=2)
213
212
  try:
214
- principalComponents = pca.fit_transform(x)
215
- if np.any(np.isnan(principalComponents)):
213
+ principal_components = pca.fit_transform(x)
214
+ if np.any(np.isnan(principal_components)):
216
215
  print("pc is nan")
217
- print(f"count: {np.count_nonzero(np.isnan(principalComponents))}")
218
- print(principalComponents)
219
- principalComponents = np.nan_to_num(principalComponents)
216
+ print(f"count: {np.count_nonzero(np.isnan(principal_components))}")
217
+ print(principal_components)
218
+ principal_components = np.nan_to_num(principal_components)
220
219
  except ValueError:
221
220
  print("need more than one file for pca")
222
- principalComponents = [[0, 0]]
223
- principalDf = pd.DataFrame(
224
- data=principalComponents, columns=["JitterPCA", "ShimmerPCA"]
221
+ principal_components = [[0, 0]]
222
+ principal_df = pd.DataFrame(
223
+ data=principal_components, columns=["JitterPCA", "ShimmerPCA"]
225
224
  )
226
- return principalDf
225
+ return principal_df
227
226
 
228
227
 
229
228
  # ## This block of code runs the above functions on all of the '.wav' files in the /audio folder
@@ -231,22 +230,21 @@ def runPCA(df):
231
230
 
232
231
  def compute_features(file_index):
233
232
  # create lists to put the results
234
- file_list = []
235
233
  duration_list = []
236
- mean_F0_list = []
237
- sd_F0_list = []
234
+ mean_f0_list = []
235
+ sd_f0_list = []
238
236
  hnr_list = []
239
- localJitter_list = []
240
- localabsoluteJitter_list = []
241
- rapJitter_list = []
242
- ppq5Jitter_list = []
243
- ddpJitter_list = []
244
- localShimmer_list = []
245
- localdbShimmer_list = []
246
- apq3Shimmer_list = []
247
- aqpq5Shimmer_list = []
248
- apq11Shimmer_list = []
249
- ddaShimmer_list = []
237
+ local_jitter_list = []
238
+ localabsolute_jitter_list = []
239
+ rap_jitter_list = []
240
+ ppq5_jitter_list = []
241
+ ddp_jitter_list = []
242
+ local_shimmer_list = []
243
+ localdb_shimmer_list = []
244
+ apq3_shimmer_list = []
245
+ aqpq5_shimmer_list = []
246
+ apq11_shimmer_list = []
247
+ dda_shimmer_list = []
250
248
  f1_mean_list = []
251
249
  f2_mean_list = []
252
250
  f3_mean_list = []
@@ -268,21 +266,21 @@ def compute_features(file_index):
268
266
  sound = parselmouth.Sound(values=signal, sampling_frequency=sampling_rate)
269
267
  (
270
268
  duration,
271
- meanF0,
272
- stdevF0,
269
+ mean_f0,
270
+ stdev_f0,
273
271
  hnr,
274
- localJitter,
275
- localabsoluteJitter,
276
- rapJitter,
277
- ppq5Jitter,
278
- ddpJitter,
279
- localShimmer,
280
- localdbShimmer,
281
- apq3Shimmer,
282
- aqpq5Shimmer,
283
- apq11Shimmer,
284
- ddaShimmer,
285
- ) = measurePitch(sound, 75, 300, "Hertz")
272
+ local_jitter,
273
+ localabsolute_jitter,
274
+ rap_jitter,
275
+ ppq5_jitter,
276
+ ddp_jitter,
277
+ local_shimmer,
278
+ localdb_shimmer,
279
+ apq3_shimmer,
280
+ aqpq5_shimmer,
281
+ apq11_shimmer,
282
+ dda_shimmer,
283
+ ) = measure_pitch(sound, 75, 300, "Hertz")
286
284
  (
287
285
  f1_mean,
288
286
  f2_mean,
@@ -292,28 +290,28 @@ def compute_features(file_index):
292
290
  f2_median,
293
291
  f3_median,
294
292
  f4_median,
295
- ) = measureFormants(sound, 75, 300)
293
+ ) = measure_formants(sound, 75, 300)
296
294
  # file_list.append(wave_file) # make an ID list
297
295
  except (statistics.StatisticsError, parselmouth.PraatError) as errors:
298
296
  print(f"error on file {wave_file}: {errors}")
299
297
 
300
298
  duration_list.append(duration) # make duration list
301
- mean_F0_list.append(meanF0) # make a mean F0 list
302
- sd_F0_list.append(stdevF0) # make a sd F0 list
299
+ mean_f0_list.append(mean_f0) # make a mean F0 list
300
+ sd_f0_list.append(stdev_f0) # make a sd F0 list
303
301
  hnr_list.append(hnr) # add HNR data
304
302
 
305
303
  # add raw jitter and shimmer measures
306
- localJitter_list.append(localJitter)
307
- localabsoluteJitter_list.append(localabsoluteJitter)
308
- rapJitter_list.append(rapJitter)
309
- ppq5Jitter_list.append(ppq5Jitter)
310
- ddpJitter_list.append(ddpJitter)
311
- localShimmer_list.append(localShimmer)
312
- localdbShimmer_list.append(localdbShimmer)
313
- apq3Shimmer_list.append(apq3Shimmer)
314
- aqpq5Shimmer_list.append(aqpq5Shimmer)
315
- apq11Shimmer_list.append(apq11Shimmer)
316
- ddaShimmer_list.append(ddaShimmer)
304
+ local_jitter_list.append(local_jitter)
305
+ localabsolute_jitter_list.append(localabsolute_jitter)
306
+ rap_jitter_list.append(rap_jitter)
307
+ ppq5_jitter_list.append(ppq5_jitter)
308
+ ddp_jitter_list.append(ddp_jitter)
309
+ local_shimmer_list.append(local_shimmer)
310
+ localdb_shimmer_list.append(localdb_shimmer)
311
+ apq3_shimmer_list.append(apq3_shimmer)
312
+ aqpq5_shimmer_list.append(aqpq5_shimmer)
313
+ apq11_shimmer_list.append(apq11_shimmer)
314
+ dda_shimmer_list.append(dda_shimmer)
317
315
 
318
316
  # add the formant data
319
317
  f1_mean_list.append(f1_mean)
@@ -330,20 +328,20 @@ def compute_features(file_index):
330
328
  np.column_stack(
331
329
  [
332
330
  duration_list,
333
- mean_F0_list,
334
- sd_F0_list,
331
+ mean_f0_list,
332
+ sd_f0_list,
335
333
  hnr_list,
336
- localJitter_list,
337
- localabsoluteJitter_list,
338
- rapJitter_list,
339
- ppq5Jitter_list,
340
- ddpJitter_list,
341
- localShimmer_list,
342
- localdbShimmer_list,
343
- apq3Shimmer_list,
344
- aqpq5Shimmer_list,
345
- apq11Shimmer_list,
346
- ddaShimmer_list,
334
+ local_jitter_list,
335
+ localabsolute_jitter_list,
336
+ rap_jitter_list,
337
+ ppq5_jitter_list,
338
+ ddp_jitter_list,
339
+ local_shimmer_list,
340
+ localdb_shimmer_list,
341
+ apq3_shimmer_list,
342
+ aqpq5_shimmer_list,
343
+ apq11_shimmer_list,
344
+ dda_shimmer_list,
347
345
  f1_mean_list,
348
346
  f2_mean_list,
349
347
  f3_mean_list,
@@ -382,7 +380,7 @@ def compute_features(file_index):
382
380
  )
383
381
 
384
382
  # add pca data
385
- pcaData = runPCA(df) # Run jitter and shimmer PCA
383
+ pcaData = run_pca(df) # Run jitter and shimmer PCA
386
384
  df = pd.concat([df, pcaData], axis=1) # Add PCA data
387
385
  # reload the data so it's all numbers
388
386
  df.to_csv("processed_results.csv", index=False)
@@ -39,7 +39,7 @@ class Modelrunner:
39
39
  plot_epochs = self.util.config_val("PLOT", "epochs", False)
40
40
  only_test = self.util.config_val("MODEL", "only_test", False)
41
41
  epoch_num = int(self.util.config_val("EXP", "epochs", 1))
42
- if not self.model.is_ANN() and epoch_num > 1:
42
+ if not self.model.is_ann() and epoch_num > 1:
43
43
  self.util.warn(f"setting epoch num to 1 (was {epoch_num}) if model not ANN")
44
44
  epoch_num = 1
45
45
  glob_conf.config["EXP"]["epochs"] = "1"
@@ -69,7 +69,7 @@ class Modelrunner:
69
69
  if plot_epochs:
70
70
  self.util.debug(f"plotting conf matrix to {plot_name}")
71
71
  report.plot_confmatrix(plot_name, epoch)
72
- store_models = self.util.config_val("MODEL", "save", False)
72
+ store_models = self.util.config_val("EXP", "save", False)
73
73
  plot_best_model = self.util.config_val("PLOT", "best_model", False)
74
74
  if (store_models or plot_best_model) and (
75
75
  not only_test
@@ -1,23 +1,25 @@
1
1
  # model.py
2
- from nkululeko.utils.util import Util
3
- import pandas as pd
4
- import numpy as np
5
- import nkululeko.glob_conf as glob_conf
6
- import sklearn.utils
7
- from nkululeko.reporter import Reporter
8
2
  import ast
9
- from sklearn.model_selection import GridSearchCV
10
3
  import pickle
11
4
  import random
5
+
6
+ import numpy as np
7
+ import pandas as pd
8
+ from sklearn.model_selection import GridSearchCV
12
9
  from sklearn.model_selection import LeaveOneGroupOut
13
10
  from sklearn.model_selection import StratifiedKFold
11
+ import sklearn.utils
12
+
13
+ import nkululeko.glob_conf as glob_conf
14
+ from nkululeko.reporting.reporter import Reporter
15
+ from nkululeko.utils.util import Util
14
16
 
15
17
 
16
18
  class Model:
17
- """Generic model class for linear (non-neural) algorithms"""
19
+ """Generic model class for linear (non-neural) algorithms."""
18
20
 
19
21
  def __init__(self, df_train, df_test, feats_train, feats_test):
20
- """Constructor taking the configuration and all dataframes"""
22
+ """Constructor taking the configuration and all dataframes."""
21
23
  self.df_train, self.df_test, self.feats_train, self.feats_test = (
22
24
  df_train,
23
25
  df_test,
@@ -35,7 +37,7 @@ class Model:
35
37
  def set_model_type(self, type):
36
38
  self.model_type = type
37
39
 
38
- def is_ANN(self):
40
+ def is_ann(self):
39
41
  if self.model_type == "ann":
40
42
  return True
41
43
  else:
@@ -277,8 +279,6 @@ class Model:
277
279
  prediction = {}
278
280
  if self.util.exp_is_classification():
279
281
  # get the class probabilities
280
- if not self.get_type() == "xgb":
281
- features = [features]
282
282
  predictions = self.clf.predict_proba(features)
283
283
  # pred = self.clf.predict(features)
284
284
  for i in range(len(self.clf.classes_)):
@@ -302,7 +302,7 @@ class Model:
302
302
  self.clf = pickle.load(handle)
303
303
  except FileNotFoundError as fe:
304
304
  self.util.error(
305
- f"did you forget to store your models? needs: \n[MODEL]\nsave=True\n{fe}"
305
+ f"Did you forget to store your models? needs: \n[MODEL]\nsave=True\n{fe}"
306
306
  )
307
307
 
308
308
  def load_path(self, path, run, epoch):
@@ -20,7 +20,7 @@ from PIL import Image
20
20
  from nkululeko.utils.util import Util
21
21
  import nkululeko.glob_conf as glob_conf
22
22
  from nkululeko.models.model import Model
23
- from nkululeko.reporter import Reporter
23
+ from nkululeko.reporting.reporter import Reporter
24
24
  from nkululeko.losses.loss_softf1loss import SoftF1Loss
25
25
 
26
26
 
@@ -2,7 +2,7 @@
2
2
  from nkululeko.utils.util import Util
3
3
  import nkululeko.glob_conf as glob_conf
4
4
  from nkululeko.models.model import Model
5
- from nkululeko.reporter import Reporter
5
+ from nkululeko.reporting.reporter import Reporter
6
6
  import torch
7
7
  import ast
8
8
  import numpy as np
@@ -1,16 +1,20 @@
1
1
  # model_mlp.py
2
- from nkululeko.utils.util import Util
3
- import nkululeko.glob_conf as glob_conf
4
- from nkululeko.models.model import Model
5
- from nkululeko.reporter import Reporter
6
- import torch
7
2
  import ast
8
- import numpy as np
9
- from sklearn.metrics import mean_squared_error, mean_absolute_error
10
3
  from collections import OrderedDict
11
- from nkululeko.losses.loss_ccc import ConcordanceCorCoeff
12
4
  import os
13
5
 
6
+ import numpy as np
7
+ import torch
8
+
9
+ from audmetric import concordance_cc
10
+ from audmetric import mean_absolute_error
11
+ from audmetric import mean_squared_error
12
+
13
+ import nkululeko.glob_conf as glob_conf
14
+ from nkululeko.losses.loss_ccc import ConcordanceCorCoeff
15
+ from nkululeko.models.model import Model
16
+ from nkululeko.reporting.reporter import Reporter
17
+
14
18
 
15
19
  class MLP_Reg_model(Model):
16
20
  """MLP = multi layer perceptron"""
@@ -201,7 +205,7 @@ class MLP_Reg_model(Model):
201
205
  elif measure == "mae":
202
206
  result = mean_absolute_error(targets.numpy(), predictions.numpy())
203
207
  elif measure == "ccc":
204
- result = Reporter.ccc(targets.numpy(), predictions.numpy())
208
+ result = concordance_cc(targets.numpy(), predictions.numpy())
205
209
  else:
206
210
  self.util.error(f"unknown measure: {measure}")
207
211
  return result, targets, predictions
@@ -25,6 +25,9 @@ class SVM_model(Model):
25
25
  class_weight=class_weight,
26
26
  ) # set up the classifier
27
27
 
28
- def set_C(self, c):
29
- """Set the C parameter"""
28
+ def set_c(self, c):
29
+ """Set the C parameter."""
30
30
  self.clf.C = c
31
+
32
+ def get_type(self):
33
+ return "svm"
@@ -28,7 +28,9 @@ def main(src_dir):
28
28
  config.read(config_file)
29
29
  # create a new experiment
30
30
  expr = Experiment(config)
31
- util = Util("predict")
31
+ module = "predict"
32
+ expr.set_module(module)
33
+ util = Util(module)
32
34
  util.debug(
33
35
  f"running {expr.name} from config {config_file}, nkululeko version"
34
36
  f" {VERSION}"