nkululeko 0.83.1__tar.gz → 0.83.3__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 (165) hide show
  1. {nkululeko-0.83.1 → nkululeko-0.83.3}/CHANGELOG.md +8 -0
  2. {nkululeko-0.83.1/nkululeko.egg-info → nkululeko-0.83.3}/PKG-INFO +9 -1
  3. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/constants.py +1 -1
  4. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/experiment.py +15 -8
  5. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_agender_agender.py +4 -2
  6. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_squim.py +8 -3
  7. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_trill.py +31 -31
  8. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_wav2vec2.py +8 -7
  9. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_whisper.py +6 -3
  10. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_cnn.py +14 -6
  11. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_mlp.py +16 -7
  12. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_mlp_regression.py +15 -7
  13. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/plots.py +30 -15
  14. {nkululeko-0.83.1 → nkululeko-0.83.3/nkululeko.egg-info}/PKG-INFO +9 -1
  15. {nkululeko-0.83.1 → nkululeko-0.83.3}/LICENSE +0 -0
  16. {nkululeko-0.83.1 → nkululeko-0.83.3}/README.md +0 -0
  17. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/aesdd/process_database.py +0 -0
  18. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/androids/process_database.py +0 -0
  19. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/androids_orig/process_database.py +0 -0
  20. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/androids_test/process_database.py +0 -0
  21. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/ased/process_database.py +0 -0
  22. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/asvp-esd/process_database.py +0 -0
  23. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/baved/process_database.py +0 -0
  24. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/cafe/process_database.py +0 -0
  25. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/clac/process_database.py +0 -0
  26. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/cmu-mosei/process_database.py +0 -0
  27. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/demos/process_database.py +0 -0
  28. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/ekorpus/process_database.py +0 -0
  29. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/emns/process_database.py +0 -0
  30. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/emofilm/convert_to_16k.py +0 -0
  31. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/emofilm/process_database.py +0 -0
  32. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/emorynlp/process_database.py +0 -0
  33. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/emov-db/process_database.py +0 -0
  34. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/emovo/process_database.py +0 -0
  35. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/emozionalmente/create.py +0 -0
  36. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/enterface/process_database.py +0 -0
  37. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/esd/process_database.py +0 -0
  38. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/gerparas/process_database.py +0 -0
  39. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/iemocap/process_database.py +0 -0
  40. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/jl/process_database.py +0 -0
  41. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/jtes/process_database.py +0 -0
  42. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/meld/process_database.py +0 -0
  43. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/mesd/process_database.py +0 -0
  44. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/mess/process_database.py +0 -0
  45. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/mlendsnd/process_database.py +0 -0
  46. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/msp-improv/process_database2.py +0 -0
  47. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/msp-podcast/process_database.py +0 -0
  48. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/oreau2/process_database.py +0 -0
  49. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/portuguese/process_database.py +0 -0
  50. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/ravdess/process_database.py +0 -0
  51. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/ravdess/process_database_speaker.py +0 -0
  52. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/savee/process_database.py +0 -0
  53. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/shemo/process_database.py +0 -0
  54. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/subesco/process_database.py +0 -0
  55. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/tess/process_database.py +0 -0
  56. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/thorsten-emotional/process_database.py +0 -0
  57. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/urdu/process_database.py +0 -0
  58. {nkululeko-0.83.1 → nkululeko-0.83.3}/data/vivae/process_database.py +0 -0
  59. {nkululeko-0.83.1 → nkululeko-0.83.3}/docs/source/conf.py +0 -0
  60. {nkululeko-0.83.1 → nkululeko-0.83.3}/meta/demos/demo_best_model.py +0 -0
  61. {nkululeko-0.83.1 → nkululeko-0.83.3}/meta/demos/my_experiment.py +0 -0
  62. {nkululeko-0.83.1 → nkululeko-0.83.3}/meta/demos/my_experiment_local.py +0 -0
  63. {nkululeko-0.83.1 → nkululeko-0.83.3}/meta/demos/plot_faster_anim.py +0 -0
  64. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/__init__.py +0 -0
  65. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/aug_train.py +0 -0
  66. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/augment.py +0 -0
  67. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/augmenting/__init__.py +0 -0
  68. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/augmenting/augmenter.py +0 -0
  69. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/augmenting/randomsplicer.py +0 -0
  70. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/augmenting/randomsplicing.py +0 -0
  71. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/augmenting/resampler.py +0 -0
  72. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/__init__.py +0 -0
  73. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_age.py +0 -0
  74. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_arousal.py +0 -0
  75. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_dominance.py +0 -0
  76. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_gender.py +0 -0
  77. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_mos.py +0 -0
  78. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_pesq.py +0 -0
  79. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_sdr.py +0 -0
  80. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_snr.py +0 -0
  81. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_stoi.py +0 -0
  82. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/ap_valence.py +0 -0
  83. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/autopredict/estimate_snr.py +0 -0
  84. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/cacheddataset.py +0 -0
  85. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/data/__init__.py +0 -0
  86. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/data/dataset.py +0 -0
  87. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/data/dataset_csv.py +0 -0
  88. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/demo.py +0 -0
  89. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/demo_feats.py +0 -0
  90. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/demo_predictor.py +0 -0
  91. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/explore.py +0 -0
  92. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/export.py +0 -0
  93. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/__init__.py +0 -0
  94. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_agender.py +0 -0
  95. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_analyser.py +0 -0
  96. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_auddim.py +0 -0
  97. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_audmodel.py +0 -0
  98. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_clap.py +0 -0
  99. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_hubert.py +0 -0
  100. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_import.py +0 -0
  101. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_mld.py +0 -0
  102. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_mos.py +0 -0
  103. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_opensmile.py +0 -0
  104. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_oxbow.py +0 -0
  105. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_praat.py +0 -0
  106. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_snr.py +0 -0
  107. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_spectra.py +0 -0
  108. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_spkrec.py +0 -0
  109. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feats_wavlm.py +0 -0
  110. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/featureset.py +0 -0
  111. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feat_extract/feinberg_praat.py +0 -0
  112. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/feature_extractor.py +0 -0
  113. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/file_checker.py +0 -0
  114. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/filter_data.py +0 -0
  115. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/glob_conf.py +0 -0
  116. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/losses/__init__.py +0 -0
  117. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/losses/loss_ccc.py +0 -0
  118. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/losses/loss_softf1loss.py +0 -0
  119. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/modelrunner.py +0 -0
  120. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/__init__.py +0 -0
  121. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model.py +0 -0
  122. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_bayes.py +0 -0
  123. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_gmm.py +0 -0
  124. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_knn.py +0 -0
  125. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_knn_reg.py +0 -0
  126. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_lin_reg.py +0 -0
  127. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_svm.py +0 -0
  128. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_svr.py +0 -0
  129. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_tree.py +0 -0
  130. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_tree_reg.py +0 -0
  131. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_xgb.py +0 -0
  132. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/models/model_xgr.py +0 -0
  133. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/multidb.py +0 -0
  134. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/nkuluflag.py +0 -0
  135. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/nkululeko.py +0 -0
  136. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/predict.py +0 -0
  137. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/reporting/__init__.py +0 -0
  138. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/reporting/defines.py +0 -0
  139. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/reporting/latex_writer.py +0 -0
  140. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/reporting/report.py +0 -0
  141. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/reporting/report_item.py +0 -0
  142. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/reporting/reporter.py +0 -0
  143. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/reporting/result.py +0 -0
  144. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/resample.py +0 -0
  145. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/runmanager.py +0 -0
  146. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/scaler.py +0 -0
  147. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/segment.py +0 -0
  148. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/segmenting/__init__.py +0 -0
  149. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/segmenting/seg_inaspeechsegmenter.py +0 -0
  150. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/segmenting/seg_silero.py +0 -0
  151. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/syllable_nuclei.py +0 -0
  152. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/test.py +0 -0
  153. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/test_predictor.py +0 -0
  154. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/utils/__init__.py +0 -0
  155. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/utils/files.py +0 -0
  156. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/utils/stats.py +0 -0
  157. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko/utils/util.py +0 -0
  158. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko.egg-info/SOURCES.txt +0 -0
  159. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko.egg-info/dependency_links.txt +0 -0
  160. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko.egg-info/requires.txt +0 -0
  161. {nkululeko-0.83.1 → nkululeko-0.83.3}/nkululeko.egg-info/top_level.txt +0 -0
  162. {nkululeko-0.83.1 → nkululeko-0.83.3}/pyproject.toml +0 -0
  163. {nkululeko-0.83.1 → nkululeko-0.83.3}/setup.cfg +0 -0
  164. {nkululeko-0.83.1 → nkululeko-0.83.3}/setup.py +0 -0
  165. {nkululeko-0.83.1 → nkululeko-0.83.3}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,14 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 0.83.3
5
+ --------------
6
+ * fixed a naming error in trill features that prevented storage of experiment
7
+
8
+ Version 0.83.2
9
+ --------------
10
+ * added default cuda if present and not stated
11
+
4
12
  Version 0.83.1
5
13
  --------------
6
14
  * add test module to nkuluflag
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nkululeko
3
- Version: 0.83.1
3
+ Version: 0.83.3
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
@@ -333,6 +333,14 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
333
333
  Changelog
334
334
  =========
335
335
 
336
+ Version 0.83.3
337
+ --------------
338
+ * fixed a naming error in trill features that prevented storage of experiment
339
+
340
+ Version 0.83.2
341
+ --------------
342
+ * added default cuda if present and not stated
343
+
336
344
  Version 0.83.1
337
345
  --------------
338
346
  * add test module to nkuluflag
@@ -1,2 +1,2 @@
1
- VERSION="0.83.1"
1
+ VERSION="0.83.3"
2
2
  SAMPLING_RATE = 16000
@@ -679,9 +679,12 @@ class Experiment:
679
679
  return result
680
680
 
681
681
  def load(self, filename):
682
- f = open(filename, "rb")
683
- tmp_dict = pickle.load(f)
684
- f.close()
682
+ try:
683
+ f = open(filename, "rb")
684
+ tmp_dict = pickle.load(f)
685
+ f.close()
686
+ except EOFError as eof:
687
+ self.util.error(f"can't open file {filename}: {eof}")
685
688
  self.__dict__.update(tmp_dict)
686
689
  glob_conf.set_labels(self.labels)
687
690
 
@@ -689,22 +692,26 @@ class Experiment:
689
692
  if self.runmgr.modelrunner.model.is_ann():
690
693
  self.runmgr.modelrunner.model = None
691
694
  self.util.warn(
692
- f"Save experiment: Can't pickle the learning model so saving without it."
695
+ "Save experiment: Can't pickle the learning model so saving without it."
693
696
  )
694
697
  try:
695
698
  f = open(filename, "wb")
696
699
  pickle.dump(self.__dict__, f)
697
700
  f.close()
698
- except TypeError:
701
+ except (TypeError, AttributeError) as error:
699
702
  self.feature_extractor.feat_extractor.model = None
700
703
  f = open(filename, "wb")
701
704
  pickle.dump(self.__dict__, f)
702
705
  f.close()
703
706
  self.util.warn(
704
- f"Save experiment: Can't pickle the feature extraction model so saving without it."
707
+ "Save experiment: Can't pickle the feature extraction model so saving without it."
708
+ + f"{type(error).__name__} {error}"
709
+ )
710
+ except RuntimeError as error:
711
+ self.util.warn(
712
+ "Save experiment: Can't pickle local object, NOT saving: "
713
+ + f"{type(error).__name__} {error}"
705
714
  )
706
- except (AttributeError, RuntimeError) as error:
707
- self.util.warn(f"Save experiment: Can't pickle local object: {error}")
708
715
 
709
716
  def save_onnx(self, filename):
710
717
  # export the model to onnx
@@ -28,9 +28,11 @@ class AgenderAgenderSet(Featureset):
28
28
  if not os.path.isdir(model_root):
29
29
  cache_root = audeer.mkdir("cache")
30
30
  model_root = audeer.mkdir(model_root)
31
- archive_path = audeer.download_url(model_url, cache_root, verbose=True)
31
+ archive_path = audeer.download_url(
32
+ model_url, cache_root, verbose=True)
32
33
  audeer.extract_archive(archive_path, model_root)
33
- device = self.util.config_val("MODEL", "device", "cpu")
34
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
35
+ device = self.util.config_val("MODEL", "device", cuda)
34
36
  self.model = audonnx.load(model_root, device=device)
35
37
  # pytorch_total_params = sum(p.numel() for p in self.model.parameters())
36
38
  # self.util.debug(
@@ -28,12 +28,17 @@ from nkululeko.utils.util import Util
28
28
 
29
29
 
30
30
  class SquimSet(Featureset):
31
- """Class to predict SQUIM features"""
31
+ """Class to predict SQUIM features."""
32
32
 
33
33
  def __init__(self, name, data_df, feats_type):
34
- """Constructor. is_train is needed to distinguish from test/dev sets, because they use the codebook from the training"""
34
+ """Constructor.
35
+
36
+ Is_train is needed to distinguish from test/dev sets,
37
+ because they use the codebook from the training.
38
+ """
35
39
  super().__init__(name, data_df, feats_type)
36
- self.device = self.util.config_val("MODEL", "device", "cpu")
40
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
41
+ self.device = self.util.config_val("MODEL", "device", cuda)
37
42
  self.model_initialized = False
38
43
 
39
44
  def init_model(self):
@@ -1,35 +1,39 @@
1
1
  # feats_trill.py
2
- import tensorflow_hub as hub
3
2
  import os
3
+
4
+ import pandas as pd
4
5
  import tensorflow as tf
5
- from numpy.core.numeric import tensordot
6
+ import tensorflow_hub as hub
6
7
  from tqdm import tqdm
7
- import pandas as pd
8
+
8
9
  import audiofile as af
9
- from nkululeko.utils.util import Util
10
- import nkululeko.glob_conf as glob_conf
10
+
11
11
  from nkululeko.feat_extract.featureset import Featureset
12
+ import nkululeko.glob_conf as glob_conf
13
+ from nkululeko.utils.util import Util
14
+
12
15
 
13
16
  # Import TF 2.X and make sure we're running eager.
14
17
  assert tf.executing_eagerly()
15
18
 
16
19
 
17
20
  class TRILLset(Featureset):
18
- """A feature extractor for the Google TRILL embeddings"""
21
+ """A feature extractor for the Google TRILL embeddings.
19
22
 
20
- """https://ai.googleblog.com/2020/06/improving-speech-representations-and.html"""
23
+ See https://ai.googleblog.com/2020/06/improving-speech-representations-and.html.
24
+ """
21
25
 
22
26
  # Initialization of the class
23
27
  def __init__(self, name, data_df, feats_type):
24
- """
25
- Initialize the class with name, data and Util instance
26
- Also loads the model from hub
28
+ """Initialize the class with name, data and Util instance.
27
29
 
28
- :param name: Name of the class
29
- :type name: str
30
- :param data_df: Data of the class
31
- :type data_df: DataFrame
32
- :return: None
30
+ Also loads the model from hub
31
+ Args:
32
+ :param name: Name of the class
33
+ :type name: str
34
+ :param data_df: Data of the class
35
+ :type data_df: DataFrame
36
+ :return: None
33
37
  """
34
38
  super().__init__(name, data_df, feats_type)
35
39
  # Load the model from the configured path
@@ -38,25 +42,21 @@ class TRILLset(Featureset):
38
42
  "trill.model",
39
43
  "https://tfhub.dev/google/nonsemantic-speech-benchmark/trill/3",
40
44
  )
41
- self.module = hub.load(model_path)
45
+ self.model = hub.load(model_path)
42
46
  self.feats_type = feats_type
43
47
 
44
48
  def extract(self):
45
49
  store = self.util.get_path("store")
46
50
  storage = f"{store}{self.name}.pkl"
47
- extract = self.util.config_val(
48
- "FEATS", "needs_feature_extraction", False)
51
+ extract = self.util.config_val("FEATS", "needs_feature_extraction", False)
49
52
  no_reuse = eval(self.util.config_val("FEATS", "no_reuse", "False"))
50
53
  if extract or no_reuse or not os.path.isfile(storage):
51
- self.util.debug(
52
- "extracting TRILL embeddings, this might take a while...")
54
+ self.util.debug("extracting TRILL embeddings, this might take a while...")
53
55
  emb_series = pd.Series(index=self.data_df.index, dtype=object)
54
- length = len(self.data_df.index)
55
56
  for idx, file in enumerate(tqdm(self.data_df.index.get_level_values(0))):
56
- emb = self.getEmbeddings(file)
57
- emb_series[idx] = emb
58
- self.df = pd.DataFrame(
59
- emb_series.values.tolist(), index=self.data_df.index)
57
+ emb = self.get_embeddings(file)
58
+ emb_series.iloc[idx] = emb
59
+ self.df = pd.DataFrame(emb_series.values.tolist(), index=self.data_df.index)
60
60
  self.df.to_pickle(storage)
61
61
  try:
62
62
  glob_conf.config["DATA"]["needs_feature_extraction"] = "false"
@@ -70,15 +70,15 @@ class TRILLset(Featureset):
70
70
  if len(wav.shape) > 1:
71
71
  wav = tf.reduce_mean(wav, axis=0)
72
72
 
73
- emb_dict = self.module(samples=wav, sample_rate=tf.constant(16000))
73
+ emb_dict = self.model(samples=wav, sample_rate=tf.constant(16000))
74
74
  return emb_dict["embedding"]
75
75
 
76
- def getEmbeddings(self, file):
76
+ def get_embeddings(self, file):
77
77
  wav = af.read(file)[0]
78
- emb_short = self.getEmbeddings_signal(wav, 16000)
78
+ emb_short = self.get_embeddings_signal(wav, 16000)
79
79
  return emb_short
80
80
 
81
- def getEmbeddings_signal(self, signal, sr):
81
+ def get_embeddings_signal(self, signal, sr):
82
82
  wav = tf.convert_to_tensor(signal)
83
83
  emb_short = self.embed_wav(wav)
84
84
  # you get one embedding per frame, we use the mean for all the frames
@@ -86,7 +86,7 @@ class TRILLset(Featureset):
86
86
  return emb_short
87
87
 
88
88
  def extract_sample(self, signal, sr):
89
- if self.module == None:
89
+ if self.model == None:
90
90
  self.__init__("na", None)
91
- feats = self.getEmbeddings_signal(signal, sr)
91
+ feats = self.get_embeddings_signal(signal, sr)
92
92
  return feats
@@ -21,7 +21,11 @@ class Wav2vec2(Featureset):
21
21
  """Class to extract wav2vec2 embeddings"""
22
22
 
23
23
  def __init__(self, name, data_df, feat_type):
24
- """Constructor. is_train is needed to distinguish from test/dev sets, because they use the codebook from the training"""
24
+ """Constructor.
25
+
26
+ If_train is needed to distinguish from test/dev sets,
27
+ because they use the codebook from the training
28
+ """
25
29
  super().__init__(name, data_df, feat_type)
26
30
  cuda = "cuda" if torch.cuda.is_available() else "cpu"
27
31
  self.device = self.util.config_val("MODEL", "device", cuda)
@@ -39,8 +43,7 @@ class Wav2vec2(Featureset):
39
43
  )
40
44
  config = transformers.AutoConfig.from_pretrained(model_path)
41
45
  layer_num = config.num_hidden_layers
42
- hidden_layer = int(self.util.config_val(
43
- "FEATS", "wav2vec2.layer", "0"))
46
+ hidden_layer = int(self.util.config_val("FEATS", "wav2vec2.layer", "0"))
44
47
  config.num_hidden_layers = layer_num - hidden_layer
45
48
  self.util.debug(f"using hidden layer #{config.num_hidden_layers}")
46
49
  self.processor = Wav2Vec2FeatureExtractor.from_pretrained(model_path)
@@ -55,8 +58,7 @@ class Wav2vec2(Featureset):
55
58
  """Extract the features or load them from disk if present."""
56
59
  store = self.util.get_path("store")
57
60
  storage = f"{store}{self.name}.pkl"
58
- extract = self.util.config_val(
59
- "FEATS", "needs_feature_extraction", False)
61
+ extract = self.util.config_val("FEATS", "needs_feature_extraction", False)
60
62
  no_reuse = eval(self.util.config_val("FEATS", "no_reuse", "False"))
61
63
  if extract or no_reuse or not os.path.isfile(storage):
62
64
  if not self.model_initialized:
@@ -77,8 +79,7 @@ class Wav2vec2(Featureset):
77
79
  emb = self.get_embeddings(signal, sampling_rate, file)
78
80
  emb_series[idx] = emb
79
81
  # print(f"emb_series shape: {emb_series.shape}")
80
- self.df = pd.DataFrame(
81
- emb_series.values.tolist(), index=self.data_df.index)
82
+ self.df = pd.DataFrame(emb_series.values.tolist(), index=self.data_df.index)
82
83
  # print(f"df shape: {self.df.shape}")
83
84
  self.df.to_pickle(storage)
84
85
  try:
@@ -32,19 +32,22 @@ class Whisper(Featureset):
32
32
  model_name = f"openai/{self.feat_type}"
33
33
  self.model = WhisperModel.from_pretrained(model_name).to(self.device)
34
34
  print(f"intialized Whisper model on {self.device}")
35
- self.feature_extractor = AutoFeatureExtractor.from_pretrained(model_name)
35
+ self.feature_extractor = AutoFeatureExtractor.from_pretrained(
36
+ model_name)
36
37
  self.model_initialized = True
37
38
 
38
39
  def extract(self):
39
40
  """Extract the features or load them from disk if present."""
40
41
  store = self.util.get_path("store")
41
42
  storage = f"{store}{self.name}.pkl"
42
- extract = self.util.config_val("FEATS", "needs_feature_extraction", False)
43
+ extract = self.util.config_val(
44
+ "FEATS", "needs_feature_extraction", False)
43
45
  no_reuse = eval(self.util.config_val("FEATS", "no_reuse", "False"))
44
46
  if extract or no_reuse or not os.path.isfile(storage):
45
47
  if not self.model_initialized:
46
48
  self.init_model()
47
- self.util.debug("extracting whisper embeddings, this might take a while...")
49
+ self.util.debug(
50
+ "extracting whisper embeddings, this might take a while...")
48
51
  emb_series = []
49
52
  for (file, start, end), _ in audeer.progress_bar(
50
53
  self.data_df.iterrows(),
@@ -16,6 +16,7 @@ import numpy as np
16
16
  from sklearn.metrics import recall_score
17
17
  from collections import OrderedDict
18
18
  from PIL import Image
19
+ from traitlets import default
19
20
 
20
21
  from nkululeko.utils.util import Util
21
22
  import nkululeko.glob_conf as glob_conf
@@ -48,6 +49,7 @@ class CNN_model(Model):
48
49
  self.util.error(f"unknown loss function: {criterion}")
49
50
  self.util.debug(f"using model with cross entropy loss function")
50
51
  # set up the model
52
+ # cuda = "cuda" if torch.cuda.is_available() else "cpu"
51
53
  self.device = self.util.config_val("MODEL", "device", "cpu")
52
54
  try:
53
55
  layers_string = glob_conf.config["MODEL"]["layers"]
@@ -84,7 +86,8 @@ class CNN_model(Model):
84
86
  train_set = self.Dataset_image(
85
87
  feats_train, df_train, self.target, transformations
86
88
  )
87
- test_set = self.Dataset_image(feats_test, df_test, self.target, transformations)
89
+ test_set = self.Dataset_image(
90
+ feats_test, df_test, self.target, transformations)
88
91
  # Define data loaders
89
92
  self.trainloader = torch.utils.data.DataLoader(
90
93
  train_set,
@@ -137,7 +140,8 @@ class CNN_model(Model):
137
140
  losses = []
138
141
  for images, labels in self.trainloader:
139
142
  logits = self.model(images.to(self.device))
140
- loss = self.criterion(logits, labels.to(self.device, dtype=torch.int64))
143
+ loss = self.criterion(logits, labels.to(
144
+ self.device, dtype=torch.int64))
141
145
  losses.append(loss.item())
142
146
  self.optimizer.zero_grad()
143
147
  loss.backward()
@@ -165,14 +169,16 @@ class CNN_model(Model):
165
169
 
166
170
  self.loss_eval = (np.asarray(losses)).mean()
167
171
  predictions = logits.argmax(dim=1)
168
- uar = recall_score(targets.numpy(), predictions.numpy(), average="macro")
172
+ uar = recall_score(
173
+ targets.numpy(), predictions.numpy(), average="macro")
169
174
  return uar, targets, predictions
170
175
 
171
176
  def predict(self):
172
177
  _, truths, predictions = self.evaluate_model(
173
178
  self.model, self.testloader, self.device
174
179
  )
175
- uar, _, _ = self.evaluate_model(self.model, self.trainloader, self.device)
180
+ uar, _, _ = self.evaluate_model(
181
+ self.model, self.trainloader, self.device)
176
182
  report = Reporter(truths, predictions, self.run, self.epoch)
177
183
  try:
178
184
  report.result.loss = self.loss
@@ -209,7 +215,8 @@ class CNN_model(Model):
209
215
  dir = self.util.get_path("model_dir")
210
216
  # name = f'{self.util.get_exp_name()}_{run}_{epoch:03d}.model'
211
217
  name = f"{self.util.get_exp_name(only_train=True)}_{self.run}_{self.epoch:03d}.model"
212
- self.device = self.util.config_val("MODEL", "device", "cpu")
218
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
219
+ self.device = self.util.config_val("MODEL", "device", cuda)
213
220
  layers = ast.literal_eval(glob_conf.config["MODEL"]["layers"])
214
221
  self.store_path = dir + name
215
222
  drop = self.util.config_val("MODEL", "drop", False)
@@ -222,7 +229,8 @@ class CNN_model(Model):
222
229
  def load_path(self, path, run, epoch):
223
230
  self.set_id(run, epoch)
224
231
  with open(path, "rb") as handle:
225
- self.device = self.util.config_val("MODEL", "device", "cpu")
232
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
233
+ self.device = self.util.config_val("MODEL", "device", cuda)
226
234
  layers = ast.literal_eval(glob_conf.config["MODEL"]["layers"])
227
235
  self.store_path = path
228
236
  drop = self.util.config_val("MODEL", "drop", False)
@@ -34,8 +34,9 @@ class MLP_model(Model):
34
34
  else:
35
35
  self.util.error(f"unknown loss function: {criterion}")
36
36
  self.util.debug(f"using model with cross entropy loss function")
37
- # set up the model
38
- self.device = self.util.config_val("MODEL", "device", "cpu")
37
+ # set up the model, use GPU if availabe
38
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
39
+ self.device = self.util.config_val("MODEL", "device", cuda)
39
40
  try:
40
41
  layers_string = glob_conf.config["MODEL"]["layers"]
41
42
  except KeyError as ke:
@@ -86,7 +87,8 @@ class MLP_model(Model):
86
87
  losses = []
87
88
  for features, labels in self.trainloader:
88
89
  logits = self.model(features.to(self.device))
89
- loss = self.criterion(logits, labels.to(self.device, dtype=torch.int64))
90
+ loss = self.criterion(logits, labels.to(
91
+ self.device, dtype=torch.int64))
90
92
  losses.append(loss.item())
91
93
  self.optimizer.zero_grad()
92
94
  loss.backward()
@@ -114,14 +116,16 @@ class MLP_model(Model):
114
116
 
115
117
  self.loss_eval = (np.asarray(losses)).mean()
116
118
  predictions = logits.argmax(dim=1)
117
- uar = recall_score(targets.numpy(), predictions.numpy(), average="macro")
119
+ uar = recall_score(
120
+ targets.numpy(), predictions.numpy(), average="macro")
118
121
  return uar, targets, predictions
119
122
 
120
123
  def predict(self):
121
124
  _, truths, predictions = self.evaluate_model(
122
125
  self.model, self.testloader, self.device
123
126
  )
124
- uar, _, _ = self.evaluate_model(self.model, self.trainloader, self.device)
127
+ uar, _, _ = self.evaluate_model(
128
+ self.model, self.trainloader, self.device)
125
129
  report = Reporter(truths, predictions, self.run, self.epoch)
126
130
  try:
127
131
  report.result.loss = self.loss
@@ -179,6 +183,9 @@ class MLP_model(Model):
179
183
  features = np.reshape(features, (-1, 1)).T
180
184
  logits = self.model(features.to(self.device))
181
185
  # logits = self.model(features)
186
+ # if tensor conver to cpu
187
+ if isinstance(logits, torch.Tensor):
188
+ logits = logits.cpu()
182
189
  a = logits.numpy()
183
190
  res = {}
184
191
  for i in range(len(a[0])):
@@ -196,7 +203,8 @@ class MLP_model(Model):
196
203
  dir = self.util.get_path("model_dir")
197
204
  # name = f'{self.util.get_exp_name()}_{run}_{epoch:03d}.model'
198
205
  name = f"{self.util.get_exp_name(only_train=True)}_{self.run}_{self.epoch:03d}.model"
199
- self.device = self.util.config_val("MODEL", "device", "cpu")
206
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
207
+ self.device = self.util.config_val("MODEL", "device", cuda)
200
208
  layers = ast.literal_eval(glob_conf.config["MODEL"]["layers"])
201
209
  self.store_path = dir + name
202
210
  drop = self.util.config_val("MODEL", "drop", False)
@@ -211,7 +219,8 @@ class MLP_model(Model):
211
219
  def load_path(self, path, run, epoch):
212
220
  self.set_id(run, epoch)
213
221
  with open(path, "rb") as handle:
214
- self.device = self.util.config_val("MODEL", "device", "cpu")
222
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
223
+ self.device = self.util.config_val("MODEL", "device", cuda)
215
224
  layers = ast.literal_eval(glob_conf.config["MODEL"]["layers"])
216
225
  self.store_path = path
217
226
  drop = self.util.config_val("MODEL", "drop", False)
@@ -9,6 +9,7 @@ import torch
9
9
  from audmetric import concordance_cc
10
10
  from audmetric import mean_absolute_error
11
11
  from audmetric import mean_squared_error
12
+ from traitlets import default
12
13
 
13
14
  import nkululeko.glob_conf as glob_conf
14
15
  from nkululeko.losses.loss_ccc import ConcordanceCorCoeff
@@ -40,7 +41,8 @@ class MLP_Reg_model(Model):
40
41
  self.util.error(f"unknown loss function: {criterion}")
41
42
  self.util.debug(f"training model with {criterion} loss function")
42
43
  # set up the model
43
- self.device = self.util.config_val("MODEL", "device", "cpu")
44
+ cuda = "cuda" if torch.cuda.is_available() else "cpu"
45
+ self.device = self.util.config_val("MODEL", "device", cuda)
44
46
  layers_string = glob_conf.config["MODEL"]["layers"]
45
47
  self.util.debug(f"using layers {layers_string}")
46
48
  try:
@@ -50,7 +52,8 @@ class MLP_Reg_model(Model):
50
52
  drop = self.util.config_val("MODEL", "drop", False)
51
53
  if drop:
52
54
  self.util.debug(f"training with dropout: {drop}")
53
- self.model = self.MLP(feats_train.shape[1], layers, 1, drop).to(self.device)
55
+ self.model = self.MLP(
56
+ feats_train.shape[1], layers, 1, drop).to(self.device)
54
57
  self.learning_rate = float(
55
58
  self.util.config_val("MODEL", "learning_rate", 0.0001)
56
59
  )
@@ -93,8 +96,10 @@ class MLP_Reg_model(Model):
93
96
  _, truths, predictions = self.evaluate_model(
94
97
  self.model, self.testloader, self.device
95
98
  )
96
- result, _, _ = self.evaluate_model(self.model, self.trainloader, self.device)
97
- report = Reporter(truths.numpy(), predictions.numpy(), self.run, self.epoch)
99
+ result, _, _ = self.evaluate_model(
100
+ self.model, self.trainloader, self.device)
101
+ report = Reporter(truths.numpy(), predictions.numpy(),
102
+ self.run, self.epoch)
98
103
  try:
99
104
  report.result.loss = self.loss
100
105
  except AttributeError: # if the model was loaded from disk the loss is unknown
@@ -128,9 +133,11 @@ class MLP_Reg_model(Model):
128
133
 
129
134
  def __getitem__(self, item):
130
135
  index = self.df.index[item]
131
- features = self.df_features.loc[index, :].values.astype("float32").squeeze()
136
+ features = self.df_features.loc[index, :].values.astype(
137
+ "float32").squeeze()
132
138
  labels = (
133
- np.array([self.df.loc[index, self.label]]).astype("float32").squeeze()
139
+ np.array([self.df.loc[index, self.label]]
140
+ ).astype("float32").squeeze()
134
141
  )
135
142
  return features, labels
136
143
 
@@ -187,7 +194,8 @@ class MLP_Reg_model(Model):
187
194
  end_index = (index + 1) * loader.batch_size
188
195
  if end_index > len(loader.dataset):
189
196
  end_index = len(loader.dataset)
190
- logits[start_index:end_index] = model(features.to(device)).reshape(-1)
197
+ logits[start_index:end_index] = model(
198
+ features.to(device)).reshape(-1)
191
199
  targets[start_index:end_index] = labels
192
200
  loss = self.criterion(
193
201
  logits[start_index:end_index].to(