nkululeko 0.59.1__py3-none-any.whl → 0.61.0__py3-none-any.whl
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.
- nkululeko/constants.py +1 -1
- nkululeko/experiment.py +43 -43
- nkululeko/feature_extractor.py +101 -58
- nkululeko/modelrunner.py +14 -14
- nkululeko/plots.py +11 -0
- nkululeko/segment.py +23 -27
- nkululeko/test_predictor.py +1 -1
- {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/METADATA +13 -1
- nkululeko-0.61.0.dist-info/RECORD +31 -0
- {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/WHEEL +1 -1
- nkululeko/ap_age.py +0 -31
- nkululeko/ap_arousal.py +0 -30
- nkululeko/ap_dominance.py +0 -29
- nkululeko/ap_gender.py +0 -29
- nkululeko/ap_mos.py +0 -35
- nkululeko/ap_pesq.py +0 -35
- nkululeko/ap_sdr.py +0 -36
- nkululeko/ap_snr.py +0 -35
- nkululeko/ap_stoi.py +0 -34
- nkululeko/ap_valence.py +0 -30
- nkululeko/augmenter.py +0 -64
- nkululeko/dataset.py +0 -415
- nkululeko/dataset_csv.py +0 -49
- nkululeko/dataset_ravdess.py +0 -19
- nkululeko/estimate_snr.py +0 -89
- nkululeko/feats_agender.py +0 -63
- nkululeko/feats_agender_agender.py +0 -65
- nkululeko/feats_analyser.py +0 -87
- nkululeko/feats_audmodel.py +0 -63
- nkululeko/feats_audmodel_dim.py +0 -63
- nkululeko/feats_clap.py +0 -74
- nkululeko/feats_import.py +0 -44
- nkululeko/feats_mld.py +0 -47
- nkululeko/feats_mos.py +0 -92
- nkululeko/feats_opensmile.py +0 -84
- nkululeko/feats_oxbow.py +0 -87
- nkululeko/feats_praat.py +0 -72
- nkululeko/feats_snr.py +0 -63
- nkululeko/feats_squim.py +0 -99
- nkululeko/feats_trill.py +0 -74
- nkululeko/feats_wav2vec2.py +0 -94
- nkululeko/featureset.py +0 -41
- nkululeko/feinberg_praat.py +0 -430
- nkululeko/loss_ccc.py +0 -28
- nkululeko/loss_softf1loss.py +0 -40
- nkululeko/model.py +0 -256
- nkululeko/model_bayes.py +0 -14
- nkululeko/model_cnn.py +0 -118
- nkululeko/model_gmm.py +0 -16
- nkululeko/model_knn.py +0 -16
- nkululeko/model_knn_reg.py +0 -16
- nkululeko/model_mlp.py +0 -175
- nkululeko/model_mlp_regression.py +0 -197
- nkululeko/model_svm.py +0 -18
- nkululeko/model_svr.py +0 -18
- nkululeko/model_tree.py +0 -14
- nkululeko/model_tree_reg.py +0 -14
- nkululeko/model_xgb.py +0 -12
- nkululeko/model_xgr.py +0 -12
- nkululeko/randomsplicer.py +0 -76
- nkululeko/randomsplicing.py +0 -74
- nkululeko-0.59.1.dist-info/RECORD +0 -82
- {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/LICENSE +0 -0
- {nkululeko-0.59.1.dist-info → nkululeko-0.61.0.dist-info}/top_level.txt +0 -0
@@ -1,197 +0,0 @@
|
|
1
|
-
# model_mlp.py
|
2
|
-
from nkululeko.util import Util
|
3
|
-
import nkululeko.glob_conf as glob_conf
|
4
|
-
from nkululeko.model import Model
|
5
|
-
from nkululeko.reporter import Reporter
|
6
|
-
import torch
|
7
|
-
import ast
|
8
|
-
import numpy as np
|
9
|
-
from sklearn.metrics import mean_squared_error
|
10
|
-
from collections import OrderedDict
|
11
|
-
from nkululeko.loss_ccc import ConcordanceCorCoeff
|
12
|
-
import os
|
13
|
-
|
14
|
-
class MLP_Reg_model(Model):
|
15
|
-
"""MLP = multi layer perceptron"""
|
16
|
-
|
17
|
-
is_classifier = False
|
18
|
-
|
19
|
-
def __init__(self, df_train, df_test, feats_train, feats_test):
|
20
|
-
"""Constructor taking the configuration and all dataframes"""
|
21
|
-
super().__init__(df_train, df_test, feats_train, feats_test)
|
22
|
-
self.target = glob_conf.config['DATA']['target']
|
23
|
-
labels = ast.literal_eval(glob_conf.config['DATA']['labels'])
|
24
|
-
self.class_num = len(labels)
|
25
|
-
# set up loss criterion
|
26
|
-
criterion = self.util.config_val('MODEL', 'loss', 'mse')
|
27
|
-
if criterion == 'mse':
|
28
|
-
self.criterion = torch.nn.MSELoss()
|
29
|
-
elif criterion == '1-ccc':
|
30
|
-
self.criterion = ConcordanceCorCoeff()
|
31
|
-
else:
|
32
|
-
self.util.error(f'unknown loss function: {criterion}')
|
33
|
-
self.util.debug(f'training model with {criterion} loss function')
|
34
|
-
# set up the model
|
35
|
-
self.device = self.util.config_val('MODEL', 'device', 'cpu')
|
36
|
-
layers_string = glob_conf.config['MODEL']['layers']
|
37
|
-
self.util.debug(f'using layers {layers_string}')
|
38
|
-
layers = ast.literal_eval(layers_string)
|
39
|
-
drop = self.util.config_val('MODEL', 'drop', False)
|
40
|
-
if drop:
|
41
|
-
self.util.debug(f'training with dropout: {drop}')
|
42
|
-
self.model = self.MLP(feats_train.shape[1], layers, 1, drop).to(self.device)
|
43
|
-
self.learning_rate = float(self.util.config_val('MODEL', 'learning_rate', 0.0001))
|
44
|
-
# set up regularization
|
45
|
-
self.optimizer = torch.optim.Adam(self.model.parameters(), lr=self.learning_rate)
|
46
|
-
# batch size
|
47
|
-
self.batch_size = int(self.util.config_val('MODEL', 'batch_size', 8))
|
48
|
-
# number of parallel processes
|
49
|
-
self.num_workers = int(self.util.config_val('MODEL', 'num_workers', 5))
|
50
|
-
# set up the data_loaders
|
51
|
-
if feats_train.isna().to_numpy().any():
|
52
|
-
self.util.debug(f'Model, train: replacing {feats_train.isna().sum().sum()} NANs with 0')
|
53
|
-
feats_train = feats_train.fillna(0)
|
54
|
-
if feats_test.isna().to_numpy().any():
|
55
|
-
self.util.debug(f'Model, test: replacing {feats_test.isna().sum().sum()} NANs with 0')
|
56
|
-
feats_test = feats_test.fillna(0)
|
57
|
-
self.trainloader = self.get_loader(feats_train, df_train, True)
|
58
|
-
self.testloader = self.get_loader(feats_test, df_test, False)
|
59
|
-
|
60
|
-
def set_testdata(self, data_df, feats_df):
|
61
|
-
self.testloader = self.get_loader(feats_df, data_df, False)
|
62
|
-
|
63
|
-
def train(self):
|
64
|
-
loss = self.train_epoch(self.model, self.trainloader, self.device, self.optimizer, self.criterion)
|
65
|
-
return loss
|
66
|
-
|
67
|
-
def predict(self):
|
68
|
-
_, truths, predictions = self.evaluate_model(self.model, self.testloader, self.device)
|
69
|
-
result, _, _ = self.evaluate_model(self.model, self.trainloader, self.device)
|
70
|
-
report = Reporter(truths.numpy(), predictions.numpy(), self.run, self.epoch)
|
71
|
-
try:
|
72
|
-
report.result.loss = self.loss
|
73
|
-
except AttributeError: # if the model was loaded from disk the loss is unknown
|
74
|
-
pass
|
75
|
-
report.result.train = result
|
76
|
-
return report
|
77
|
-
|
78
|
-
def get_loader(self, df_x, df_y, shuffle):
|
79
|
-
data_set = self.Dataset(df_y, df_x, self.target)
|
80
|
-
loader = torch.utils.data.DataLoader(
|
81
|
-
dataset=data_set,
|
82
|
-
batch_size=self.batch_size,
|
83
|
-
shuffle=shuffle,
|
84
|
-
num_workers=self.num_workers
|
85
|
-
)
|
86
|
-
return loader
|
87
|
-
|
88
|
-
class Dataset(torch.utils.data.Dataset):
|
89
|
-
def __init__(self, df, features,
|
90
|
-
label: str):
|
91
|
-
super().__init__()
|
92
|
-
self.df = df
|
93
|
-
self.df_features = features
|
94
|
-
self.label = label
|
95
|
-
def __len__(self):
|
96
|
-
return len(self.df)
|
97
|
-
|
98
|
-
def __getitem__(self, item):
|
99
|
-
index = self.df.index[item]
|
100
|
-
features = self.df_features.loc[index, :].values.astype('float32').squeeze()
|
101
|
-
labels = np.array([self.df.loc[index, self.label]]).astype('float32').squeeze()
|
102
|
-
return features, labels
|
103
|
-
|
104
|
-
|
105
|
-
class MLP(torch.nn.Module):
|
106
|
-
def __init__(self, i, layers, o, drop):
|
107
|
-
super().__init__()
|
108
|
-
sorted_layers = sorted(layers.items(), key=lambda x: x[1])
|
109
|
-
layers = OrderedDict()
|
110
|
-
layers['0'] = torch.nn.Linear(i, sorted_layers[0][1])
|
111
|
-
layers['0_r'] = torch.nn.ReLU()
|
112
|
-
for i in range(0, len(sorted_layers)-1):
|
113
|
-
layers[str(i+1)] = torch.nn.Linear(sorted_layers[i][1], sorted_layers[i+1][1])
|
114
|
-
if drop:
|
115
|
-
layers[str(i)+'_d'] = torch.nn.Dropout(float(drop))
|
116
|
-
layers[str(i)+'_r'] = torch.nn.ReLU()
|
117
|
-
layers[str(len(sorted_layers)+1)] = torch.nn.Linear(sorted_layers[-1][1], o)
|
118
|
-
self.linear = torch.nn.Sequential(layers)
|
119
|
-
def forward(self, x):
|
120
|
-
# x: (batch_size, channels, samples)
|
121
|
-
x = x.squeeze(dim=1).float()
|
122
|
-
return self.linear(x)
|
123
|
-
|
124
|
-
|
125
|
-
def train_epoch(self, model, loader, device, optimizer, criterion):
|
126
|
-
# first check if the model already has been trained
|
127
|
-
# if os.path.isfile(self.store_path):
|
128
|
-
# self.load(self.run, self.epoch)
|
129
|
-
# self.util.debug(f'reusing model: {self.store_path}')
|
130
|
-
# return
|
131
|
-
self.model.train()
|
132
|
-
losses = []
|
133
|
-
for features, labels in loader:
|
134
|
-
logits = model(features.to(device)).reshape(-1)
|
135
|
-
loss = criterion(logits, labels.to(device))
|
136
|
-
#print(f'loss: {loss.item()}')
|
137
|
-
losses.append(loss.item())
|
138
|
-
optimizer.zero_grad()
|
139
|
-
loss.backward()
|
140
|
-
optimizer.step()
|
141
|
-
self.loss = (np.asarray(losses)).mean()
|
142
|
-
|
143
|
-
def evaluate_model(self, model, loader, device):
|
144
|
-
logits = torch.zeros(len(loader.dataset))
|
145
|
-
targets = torch.zeros(len(loader.dataset))
|
146
|
-
model.eval()
|
147
|
-
with torch.no_grad():
|
148
|
-
for index, (features, labels) in enumerate(loader):
|
149
|
-
start_index = index * loader.batch_size
|
150
|
-
end_index = (index + 1) * loader.batch_size
|
151
|
-
if end_index > len(loader.dataset):
|
152
|
-
end_index = len(loader.dataset)
|
153
|
-
logits[start_index:end_index] = model(features.to(device)).reshape(-1)
|
154
|
-
targets[start_index:end_index] = labels
|
155
|
-
|
156
|
-
predictions = logits
|
157
|
-
measure = self.util.config_val('MODEL', 'measure', 'mse')
|
158
|
-
if measure == 'mse':
|
159
|
-
result = mean_squared_error(targets.numpy(), predictions.numpy())
|
160
|
-
elif measure == 'ccc':
|
161
|
-
result = Reporter.ccc(targets.numpy(), predictions.numpy())
|
162
|
-
else:
|
163
|
-
self.util.error(f'unknown measure: {measure}')
|
164
|
-
return result, targets, predictions
|
165
|
-
|
166
|
-
def store(self):
|
167
|
-
torch.save(self.model.state_dict(), self.store_path)
|
168
|
-
|
169
|
-
def load(self, run, epoch):
|
170
|
-
self.set_id(run, epoch)
|
171
|
-
dir = self.util.get_path('model_dir')
|
172
|
-
name = f'{self.util.get_exp_name(only_train=True)}_{run}_{epoch:03d}.model'
|
173
|
-
self.store_path = dir+name
|
174
|
-
self.device = self.util.config_val('MODEL', 'device', 'cpu')
|
175
|
-
layers = ast.literal_eval(glob_conf.config['MODEL']['layers'])
|
176
|
-
drop = self.util.config_val('MODEL', 'drop', False)
|
177
|
-
if drop:
|
178
|
-
self.util.debug(f'training with dropout: {drop}')
|
179
|
-
self.model = self.MLP(self.feats_train.shape[1], layers, 1, drop).to(self.device)
|
180
|
-
self.model.load_state_dict(torch.load(dir+name))
|
181
|
-
self.model.eval()
|
182
|
-
|
183
|
-
def load_path(self, path, run, epoch):
|
184
|
-
self.set_id(run, epoch)
|
185
|
-
with open(path, 'rb') as handle:
|
186
|
-
self.device = self.util.config_val('MODEL', 'device', 'cpu')
|
187
|
-
layers = ast.literal_eval(glob_conf.config['MODEL']['layers'])
|
188
|
-
self.store_path = path
|
189
|
-
drop = self.util.config_val('MODEL', 'drop', False)
|
190
|
-
if drop:
|
191
|
-
self.util.debug(f'training with dropout: {drop}')
|
192
|
-
self.model = self.MLP(self.feats_train.shape[1], layers, self.class_num, drop).to(self.device)
|
193
|
-
self.model.load_state_dict(torch.load(self.store_path))
|
194
|
-
self.model.eval()
|
195
|
-
def predict_sample(self, features):
|
196
|
-
"""Predict one sample"""
|
197
|
-
self.util.error('model_mlp_regression: predicting one sample not implemented yet')
|
nkululeko/model_svm.py
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# model_svm.py
|
2
|
-
|
3
|
-
from sklearn import svm
|
4
|
-
from nkululeko.model import Model
|
5
|
-
|
6
|
-
class SVM_model(Model):
|
7
|
-
"""An SVM model"""
|
8
|
-
|
9
|
-
is_classifier = True
|
10
|
-
|
11
|
-
def __init__(self, df_train, df_test, feats_train, feats_test):
|
12
|
-
super().__init__(df_train, df_test, feats_train, feats_test)
|
13
|
-
c = float(self.util.config_val('MODEL', 'C_val', '0.001'))
|
14
|
-
self.clf = svm.SVC(kernel='linear', C=c, gamma='auto') # set up the classifier
|
15
|
-
|
16
|
-
def set_C(self, c):
|
17
|
-
"""Set the C parameter"""
|
18
|
-
self.clf.C = c
|
nkululeko/model_svr.py
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# svrmodel.py
|
2
|
-
|
3
|
-
from sklearn import svm
|
4
|
-
from nkululeko.model import Model
|
5
|
-
|
6
|
-
class SVR_model(Model):
|
7
|
-
"""An SVR model"""
|
8
|
-
|
9
|
-
is_classifier = False
|
10
|
-
|
11
|
-
def __init__(self, df_train, df_test, feats_train, feats_test):
|
12
|
-
super().__init__(df_train, df_test, feats_train, feats_test)
|
13
|
-
c = float(self.util.config_val('MODEL', 'C_val', '0.001'))
|
14
|
-
self.clf = svm.SVR(kernel='rbf', C=c) # set up the classifier
|
15
|
-
|
16
|
-
def set_C(self, c):
|
17
|
-
"""Set the C parameter"""
|
18
|
-
self.clf.C = c
|
nkululeko/model_tree.py
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# model_tree.py
|
2
|
-
|
3
|
-
from sklearn.tree import DecisionTreeClassifier
|
4
|
-
from nkululeko.model import Model
|
5
|
-
|
6
|
-
class Tree_model(Model):
|
7
|
-
"""An Tree model"""
|
8
|
-
|
9
|
-
is_classifier = True
|
10
|
-
|
11
|
-
def __init__(self, df_train, df_test, feats_train, feats_test):
|
12
|
-
super().__init__(df_train, df_test, feats_train, feats_test)
|
13
|
-
self.clf = DecisionTreeClassifier() # set up the classifier
|
14
|
-
|
nkululeko/model_tree_reg.py
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# model_tree_reg.py
|
2
|
-
|
3
|
-
from sklearn.tree import DecisionTreeRegressor
|
4
|
-
from nkululeko.model import Model
|
5
|
-
|
6
|
-
class Tree_reg_model(Model):
|
7
|
-
|
8
|
-
is_classifier = False
|
9
|
-
|
10
|
-
"""An Tree model"""
|
11
|
-
def __init__(self, df_train, df_test, feats_train, feats_test):
|
12
|
-
super().__init__(df_train, df_test, feats_train, feats_test)
|
13
|
-
self.clf = DecisionTreeRegressor() # set up the classifier
|
14
|
-
|
nkululeko/model_xgb.py
DELETED
nkululeko/model_xgr.py
DELETED
nkululeko/randomsplicer.py
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
# randomsplicer.py
|
2
|
-
|
3
|
-
"""
|
4
|
-
Code originally by Oliver Pauly
|
5
|
-
|
6
|
-
Based on an idea by Klaus Scherer
|
7
|
-
|
8
|
-
K. R. Scherer, “Randomized splicing: A note on a simple technique for masking speech content”
|
9
|
-
Journal of Experimental Research in Personality, vol. 5, pp. 155–159, 1971.
|
10
|
-
|
11
|
-
Evaluated in:
|
12
|
-
F. Burkhardt, Anna Derington, Matthias Kahlau, Klaus Scherer, Florian Eyben and Björn Schuller: Masking Speech Contents by Random Splicing: is Emotional Expression Preserved?, Proc. ICASSP, 2023
|
13
|
-
|
14
|
-
"""
|
15
|
-
|
16
|
-
import pandas as pd
|
17
|
-
from nkululeko.util import Util
|
18
|
-
import nkululeko.randomsplicing as rsp
|
19
|
-
import numpy as np
|
20
|
-
import audiofile as af
|
21
|
-
import os
|
22
|
-
from audformat.utils import map_file_path
|
23
|
-
import audeer
|
24
|
-
|
25
|
-
class Randomsplicer:
|
26
|
-
"""
|
27
|
-
augmenting the train split
|
28
|
-
"""
|
29
|
-
def __init__(self, df):
|
30
|
-
self.df = df
|
31
|
-
self.util = Util('randomsplicer')
|
32
|
-
|
33
|
-
def changepath(self, fp, np):
|
34
|
-
fullpath = os.path.dirname(fp)
|
35
|
-
return fp.replace(fullpath, np)
|
36
|
-
|
37
|
-
def run(self, sample_selection):
|
38
|
-
"""
|
39
|
-
random splice the selected samples and return a dataframe with new files index.
|
40
|
-
adjustable parameters:
|
41
|
-
* p_reverse: probability of some samples to be in reverse order (default: 0.3)
|
42
|
-
* top_db: top db level for silence to be recognized (default: 12)
|
43
|
-
"""
|
44
|
-
|
45
|
-
p_reverse=0.3
|
46
|
-
top_db=12
|
47
|
-
|
48
|
-
files = self.df.index.get_level_values(0).values
|
49
|
-
store = self.util.get_path('store')
|
50
|
-
filepath = f'{store}randomspliced/'
|
51
|
-
audeer.mkdir(filepath)
|
52
|
-
self.util.debug(f'random splicing {sample_selection} samples to {filepath}')
|
53
|
-
newpath = ''
|
54
|
-
for i, f in enumerate(files):
|
55
|
-
signal, sr = af.read(f)
|
56
|
-
filename = os.path.basename(f)
|
57
|
-
parent = os.path.dirname(f).split('/')[-1]
|
58
|
-
sig_new = rsp.random_splicing(
|
59
|
-
signal, sr,
|
60
|
-
p_reverse=p_reverse,
|
61
|
-
top_db=top_db,
|
62
|
-
)
|
63
|
-
|
64
|
-
newpath = f'{filepath}/{parent}/'
|
65
|
-
audeer.mkdir(newpath)
|
66
|
-
af.write(f'{newpath}{filename}', signal=sig_new, sampling_rate=sr)
|
67
|
-
if i%10==0:
|
68
|
-
print(f'random spliced {i} of {len(files)}')
|
69
|
-
df_ret = self.df.copy()
|
70
|
-
df_ret = df_ret.set_index(map_file_path(df_ret.index, lambda x: self.changepath(x, newpath)))
|
71
|
-
db_filename = self.util.config_val('DATA', 'random_splice_result', 'random_spliced.csv')
|
72
|
-
target = self.util.config_val('DATA', 'target', 'emotion')
|
73
|
-
df_ret[target] = df_ret['class_label']
|
74
|
-
df_ret = df_ret.drop(columns=['class_label'])
|
75
|
-
df_ret.to_csv(db_filename)
|
76
|
-
return df_ret
|
nkululeko/randomsplicing.py
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Code originally by Oliver Pauly
|
3
|
-
|
4
|
-
Based on an idea by Klaus Scherer
|
5
|
-
|
6
|
-
K. R. Scherer, “Randomized splicing: A note on a simple technique for masking speech content”
|
7
|
-
Journal of Experimental Research in Personality, vol. 5, pp. 155–159, 1971.
|
8
|
-
|
9
|
-
Evaluated in:
|
10
|
-
F. Burkhardt, Anna Derington, Matthias Kahlau, Klaus Scherer, Florian Eyben and Björn Schuller: Masking Speech Contents by Random Splicing: is Emotional Expression Preserved?, Proc. ICASSP, 2023
|
11
|
-
|
12
|
-
"""
|
13
|
-
import numpy as np
|
14
|
-
import librosa
|
15
|
-
import audiofile as af
|
16
|
-
|
17
|
-
def random_splicing(
|
18
|
-
signal, sr,
|
19
|
-
p_reverse=0.0,
|
20
|
-
top_db=12,
|
21
|
-
):
|
22
|
-
"""
|
23
|
-
randomly splice the signal and re-arrange.
|
24
|
-
|
25
|
-
p_reverse: probability of some samples to be in reverse order
|
26
|
-
top_db: top db level for silence to be recognized
|
27
|
-
|
28
|
-
"""
|
29
|
-
signal /= np.max(abs(signal))
|
30
|
-
|
31
|
-
indices = split_wav_naive(signal, top_db=top_db)
|
32
|
-
|
33
|
-
np.random.shuffle(indices)
|
34
|
-
|
35
|
-
wav_spliced = remix_random_reverse(signal, indices, p_reverse=p_reverse)
|
36
|
-
|
37
|
-
return wav_spliced
|
38
|
-
|
39
|
-
|
40
|
-
def split_wav_naive(wav, top_db=12):
|
41
|
-
|
42
|
-
indices = librosa.effects.split(wav, top_db=top_db)
|
43
|
-
|
44
|
-
indices = np.array(indices)
|
45
|
-
# (re)add the silence-segments
|
46
|
-
indices = indices.repeat(2)[1:-1].reshape((-1, 2))
|
47
|
-
# add first segment
|
48
|
-
indices = np.vstack(((0, indices[0][0]), indices))
|
49
|
-
# add last segment
|
50
|
-
indices = np.vstack((indices, [indices[-1][-1], wav.shape[0]]))
|
51
|
-
|
52
|
-
return indices
|
53
|
-
|
54
|
-
|
55
|
-
def remix_random_reverse(wav, indices, p_reverse=0):
|
56
|
-
|
57
|
-
import random
|
58
|
-
|
59
|
-
wav_remix = []
|
60
|
-
|
61
|
-
for seg in indices:
|
62
|
-
|
63
|
-
start = seg[0]
|
64
|
-
end = seg[1]
|
65
|
-
wav_seg = wav[start:end]
|
66
|
-
|
67
|
-
if np.random.rand(1)[0] <= p_reverse:
|
68
|
-
wav_seg = wav_seg[::-1]
|
69
|
-
|
70
|
-
wav_remix.append(wav_seg)
|
71
|
-
|
72
|
-
wav_remix = np.hstack(wav_remix)
|
73
|
-
|
74
|
-
return wav_remix
|
@@ -1,82 +0,0 @@
|
|
1
|
-
nkululeko/__init__.py,sha256=62f8HiEzJ8rG2QlTFJXUCMpvuH3fKI33DoJSj33mscc,63
|
2
|
-
nkululeko/ap_age.py,sha256=ZpWtNpfqseK2JwD2ZeRXdEtXm9EKmaeYwdQ-r-e0FcM,1054
|
3
|
-
nkululeko/ap_arousal.py,sha256=mYVHBdX4wmAjEZ9DvKBiVONJuDiiGN0Zn8HintV6OUQ,997
|
4
|
-
nkululeko/ap_dominance.py,sha256=gwsQ8OMSTgY9oG26L9wk4qfgGjR_gyo66yiDNQ9PY5I,1006
|
5
|
-
nkululeko/ap_gender.py,sha256=MfySaQNQEpV9GZCJm1vas_SIcXrCh7O5Q4X6AXVcQDE,983
|
6
|
-
nkululeko/ap_mos.py,sha256=GByXFm4IpHDyxUHqF5hmqnZbX4LfdH2quHjxzcrlzg0,1079
|
7
|
-
nkululeko/ap_pesq.py,sha256=5qKMnisQOrKiKqB_G2--KULoDPvyBKiJ69LIBmAnlTo,1112
|
8
|
-
nkululeko/ap_sdr.py,sha256=eclDh9wzXYDiuqy5deIRB_h16wBnJ_J438UyZEC4Ejo,1160
|
9
|
-
nkululeko/ap_snr.py,sha256=X5Pnl9PDOw-w1cJSmzKaPtCMEiQhko6pWd0YAGeGYjQ,1082
|
10
|
-
nkululeko/ap_stoi.py,sha256=sx2KSGSjCsjgUvZPFlKALhbZlVg2aTdGmvil-iNSqVk,1157
|
11
|
-
nkululeko/ap_valence.py,sha256=cyFrKRy68EU5gDiVg0_HxiwaKGbAJ9UuwuiXgVTalAU,997
|
12
|
-
nkululeko/augment.py,sha256=ebv5QebGD8wLzXInvusjn4kFlET6-yXkYoF132BrubQ,1750
|
13
|
-
nkululeko/augmenter.py,sha256=nOJPb7Ut4wLlEcla1JaUiLntksrZqfvq1mFOCexpT7Y,2584
|
14
|
-
nkululeko/balancer.py,sha256=64ftZN68sMDfkvuovCDHpAHmSJgCO6Kdk9bwmpSisec,12
|
15
|
-
nkululeko/cacheddataset.py,sha256=bSJ_SDg7TxL89YL_pJXp-sFvdUXJtHuBTd5KSTE4AkQ,955
|
16
|
-
nkululeko/constants.py,sha256=BqCvUlzgpeRIc5r6IurUVStV5rCCTTLE18mSY_9KmDM,18
|
17
|
-
nkululeko/dataset.py,sha256=pI4UYyR-H5ZeZBGXZqIOh1vGzPvzfp6yQx_cpQ-JIn8,20458
|
18
|
-
nkululeko/dataset_csv.py,sha256=vsefSiAz_zodxoatvpX_H7l9GFdA8jDeRcRZX8yl4Vw,2120
|
19
|
-
nkululeko/dataset_ravdess.py,sha256=pTt98sr4_egdUCv2fWepkZTlkQ6x3A2YshO_n302DNg,537
|
20
|
-
nkululeko/demo.py,sha256=nGP3fUDXuW1ZF12AzMpzRWXct0rdqYRJVNgA9B_QWwA,1821
|
21
|
-
nkululeko/demo_predictor.py,sha256=VVxE2lf5lTkAP5qElG5U2bK6SdDzQ2Jmf0Vn_yHpSro,2302
|
22
|
-
nkululeko/estimate_snr.py,sha256=m3JZSRGXr2M9yVgovTSZ63rpho9hIUfHOXfAVRAHf1k,4186
|
23
|
-
nkululeko/experiment.py,sha256=x_JACYeR1-OQtVi8sUTBPYTX8ONk2s6l51CVYgGn_hc,24872
|
24
|
-
nkululeko/explore.py,sha256=aemOk5XYw7axQEJQfdABEUxN3img0NYSb8l6W-nDzZY,2090
|
25
|
-
nkululeko/feats_agender.py,sha256=46DmyXVHKL7wH77j1W82ualUmPic93t8OAIL5q_yMXI,2750
|
26
|
-
nkululeko/feats_agender_agender.py,sha256=Vwt3fynWHwmTMJtHu5ltDQhtW_VO3ImKqwGMNoxhIyI,2832
|
27
|
-
nkululeko/feats_analyser.py,sha256=u11ZvuoKFqytGi1TNGEhnagLplNXX-wvqmB5Cb_tUIY,3837
|
28
|
-
nkululeko/feats_audmodel.py,sha256=B1u4BMftKYHbtzf8kIAx2uQzzVcqpVJGIuH3S1hjU_c,2750
|
29
|
-
nkululeko/feats_audmodel_dim.py,sha256=Pd_LXvjJTGb3MAuXiFo0_50BABJnm3IdxUVkRYLEY6c,2741
|
30
|
-
nkululeko/feats_clap.py,sha256=CHOkNzdMNK5vDld69EsBeBTkyxn_hY1d3LyU2lO3mR0,3250
|
31
|
-
nkululeko/feats_import.py,sha256=Gm-svzwNY8Qvdv91VjgjmAudroAi32v2gCC56USJtKA,2045
|
32
|
-
nkululeko/feats_mld.py,sha256=6ErExKzDpfwoLwzBBNMeIZ2G5D2ovHA7UvKRqVdF-bo,1909
|
33
|
-
nkululeko/feats_mos.py,sha256=xp51EWetc7d4pMrUP3z0j_9hErDNLMo5GetNDiItOMA,3887
|
34
|
-
nkululeko/feats_opensmile.py,sha256=bp5f3iDzvw3XgB458dFHwqLuCL_WbZk8FOx41CWzyo0,3812
|
35
|
-
nkululeko/feats_oxbow.py,sha256=lZLPXcUk7IcexM3O5kw-ekkYodfXE6QpS2QSHU1D6F8,4425
|
36
|
-
nkululeko/feats_praat.py,sha256=BbjgpIO-dJ2GuVxQdaTtu8rRuaJ0dmFm9F3g_z_5SCA,3024
|
37
|
-
nkululeko/feats_snr.py,sha256=BOhO0kDxyfnSTLA6gxSYilNkRGiXhamShZJNron8Z6g,2605
|
38
|
-
nkululeko/feats_squim.py,sha256=9dzKVyuoN-VVetlFqs62BsV4xjrCQK-wtQ6Mek-NB3M,4029
|
39
|
-
nkululeko/feats_trill.py,sha256=dydoLTVZnWeps_Ur0xWNhGdAw3PxA9yFCg6exTi2zhs,2934
|
40
|
-
nkululeko/feats_wav2vec2.py,sha256=S63QmTiGlyEalO4HjacAh9KxOAVO80vZntG-Alk91WU,4005
|
41
|
-
nkululeko/feature_extractor.py,sha256=AxPqhXFU9o42g6BGkjVWK7ZOXyKiTW8NJ6_QbT-dTPA,5115
|
42
|
-
nkululeko/featureset.py,sha256=8zYafHU_nDYV89AukfNobltCxBuoIvvRIGEXPm0PCI0,1331
|
43
|
-
nkululeko/feinberg_praat.py,sha256=fUrdVo1aJNitdG1L0sZRfIvGMJJdQwG3BXoAV5xjh5o,19472
|
44
|
-
nkululeko/file_checker.py,sha256=Nw05SIp7Ez1U9ZeFhNGz0XivwKr43hHg1WsfzKsrFPQ,3510
|
45
|
-
nkululeko/filter_data.py,sha256=g7giEShbA-dr2ekVycW5WurFG-UaopJvDZWylKNZtpM,6717
|
46
|
-
nkululeko/glob_conf.py,sha256=2Tl0NZQeVeydDO8T2tuJC2lCv99wvaTVRX9Dy1Mq_L4,237
|
47
|
-
nkululeko/loss_ccc.py,sha256=BM2I6j_rjKlpua5gKbo81EAS3hhZK-ClBTqJHot9Ils,939
|
48
|
-
nkululeko/loss_softf1loss.py,sha256=OPBH-HvHf6saZ9-W85qhi4hH6jj2E-wwKq2Jt_el8pI,1329
|
49
|
-
nkululeko/model.py,sha256=wh8wd_5_Nk2y8onNrAA59AxGCoupLD6piVMKEXuYHco,10594
|
50
|
-
nkululeko/model_bayes.py,sha256=C7MdZqsHVXGbL6pfTuLClOherhiWtxa61dtptEyDrxY,432
|
51
|
-
nkululeko/model_cnn.py,sha256=vMGpNfsVYWddwAEjWtTwY9gPg1Ji_B_skvBFa4ZWe8U,5029
|
52
|
-
nkululeko/model_gmm.py,sha256=2544Gwu-9swNJuJ7ah9-2ZUyXZvVqx_k2h8iDS6Ry4Q,603
|
53
|
-
nkululeko/model_knn.py,sha256=2jNPK_GcA0bYxUfnDQ2ZapApvewS72j5-IOsu9sC3eo,544
|
54
|
-
nkululeko/model_knn_reg.py,sha256=jF62r0M9lGx2tbvGHwoPGk4c8ex5j2hxKAT_1Kx3IBo,551
|
55
|
-
nkululeko/model_mlp.py,sha256=QZomFOUKIuyg7aSBX23rNWWgthRuZ5c3yEBSilstCpw,7976
|
56
|
-
nkululeko/model_mlp_regression.py,sha256=K_5_DSBiJqxuIBJMvhKAYkyEZN98w6X8co0RtZUBNYI,8750
|
57
|
-
nkululeko/model_svm.py,sha256=eESHYUjIgNnx5hH4AgOXERImXA-eTjVaE2Fqkrlcjzk,522
|
58
|
-
nkululeko/model_svr.py,sha256=hDF7TTNQOCp9uaA1d45bCnXZOrkyFC-IcVc4FLxkCbw,505
|
59
|
-
nkululeko/model_tree.py,sha256=mskYf83CeaIUg6OdZINBVLtzWTJqMOB26wn-GRmG748,382
|
60
|
-
nkululeko/model_tree_reg.py,sha256=0Eouaw7BHxdMMGPEBTr9-ZoU9CBU0unaPWgGH7glvvo,389
|
61
|
-
nkululeko/model_xgb.py,sha256=Gd0piVg-7r4e3JNVhpLB6DcTibZGjIHo0ct1Ve6A97U,236
|
62
|
-
nkululeko/model_xgr.py,sha256=rOJ3QZjTLIpxHh6GqyCo-ewG9IUL35Fd-0jRDNuM_bk,242
|
63
|
-
nkululeko/modelrunner.py,sha256=IKvPcrvJS0voUfoFAyNAGlEhONZVb70ZEBH79hwWh_I,5380
|
64
|
-
nkululeko/nkululeko.py,sha256=O2Zw7u-Mb7VP9MPxAlhdTkXV2lW2kETIuSJp7mfj_Tc,1671
|
65
|
-
nkululeko/plots.py,sha256=rr4Fa0kckRNw5-mz9clikiB5ul8XJ9U4_1OebCUiNWw,10924
|
66
|
-
nkululeko/predict.py,sha256=3ei4wn2by0p9Vkv7cllMcszmEjSM2vX0T6x_5rlgT28,1851
|
67
|
-
nkululeko/randomsplicer.py,sha256=ZILsLHabKWbBB14l2UT9d0-b4lyuHkvvl9osHklbsoY,2674
|
68
|
-
nkululeko/randomsplicing.py,sha256=MOLwxFTM0omsVBmKAN82PmGkD4zNnxwDYoWS4WQnuVU,1867
|
69
|
-
nkululeko/reporter.py,sha256=359aeQWt0ZGLseaJnOfafYG8BrwumiM2Q58DWiaoyWQ,10177
|
70
|
-
nkululeko/result.py,sha256=Ey5FPsAyfnQVtzO_J6_4hkOAZ191YWmF_vXxlgNjCdc,406
|
71
|
-
nkululeko/runmanager.py,sha256=ll04dEu5Y1nOi8QOtmSiw3oxzcXeASdQsg0t-vxCny8,6765
|
72
|
-
nkululeko/scaler.py,sha256=6NQHbSQZO9HIfhYNlliuDRywjaEH_FVKHRskTJ2xr90,3021
|
73
|
-
nkululeko/segment.py,sha256=xmkZrA3iEsro7vaBwWdey_pIleS1tYyjTFe-EfMUQHQ,4399
|
74
|
-
nkululeko/syllable_nuclei.py,sha256=vK9dj5deqRnyEmlZmhFtKPzqKVGNCgTnWaG8UDITKNg,9913
|
75
|
-
nkululeko/test.py,sha256=BbHGliDChAXqMe2oA579dJpyZSlPGAm5997lX_POboQ,1372
|
76
|
-
nkululeko/test_predictor.py,sha256=7hbUhF09YqI7ixMp3gtVVnAO3prLF3J5tHH9mv125pM,2405
|
77
|
-
nkululeko/util.py,sha256=gZrNTF4C7hKkEMCC_hoNkEAhAViWzWebP8LsHRew7s4,9731
|
78
|
-
nkululeko-0.59.1.dist-info/LICENSE,sha256=0zGP5B_W35yAcGfHPS18Q2B8UhvLRY3dQq1MhpsJU_U,1076
|
79
|
-
nkululeko-0.59.1.dist-info/METADATA,sha256=GczosYJcXJGLfEajloeb8Xm05z6K5-cSFOyqE0Prhmc,21494
|
80
|
-
nkululeko-0.59.1.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
|
81
|
-
nkululeko-0.59.1.dist-info/top_level.txt,sha256=DPFNNSHPjUeVKj44dVANAjuVGRCC3MusJ08lc2a8xFA,10
|
82
|
-
nkululeko-0.59.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|