├── .gitignore ├── .pre-commit-config.yaml ├── .pylintrc ├── LICENSE ├── Makefile ├── README.md ├── cpc ├── .DS_Store ├── __init__.py ├── model.py └── train.py ├── data ├── emotion_set.txt ├── metadata.json ├── single.dbl ├── test.dbl ├── test.ordered.dbl ├── train.dbl ├── train.ordered.dbl ├── val.dbl └── val.ordered.dbl ├── dataloader └── audio.py ├── emotion_id ├── __init__.py ├── decode.py ├── model.py ├── score.py ├── train.py └── wavenet.py ├── parse_emotion_dataset.py ├── pyproject.toml ├── requirements.txt └── util.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | .pytest_cache/ 3 | .ipynb_checkpoints 4 | *.ipynb 5 | venv/ 6 | models/ 7 | cpc/scripts 8 | emotion_id/scripts 9 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/ambv/black 3 | rev: stable 4 | hooks: 5 | - id: black 6 | language_version: python3 -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [MESSAGES CONTROL] 2 | disable=C, W, F, R, 3 | print-statement, 4 | parameter-unpacking, 5 | unpacking-in-except, 6 | old-raise-syntax, 7 | backtick, 8 | long-suffix, 9 | old-ne-operator, 10 | old-octal-literal, 11 | import-star-module-level, 12 | non-ascii-bytes-literal, 13 | raw-checker-failed, 14 | bad-inline-option, 15 | locally-disabled, 16 | locally-enabled, 17 | file-ignored, 18 | suppressed-message, 19 | useless-suppression, 20 | deprecated-pragma, 21 | use-symbolic-message-instead, 22 | apply-builtin, 23 | basestring-builtin, 24 | buffer-builtin, 25 | cmp-builtin, 26 | coerce-builtin, 27 | execfile-builtin, 28 | file-builtin, 29 | long-builtin, 30 | raw_input-builtin, 31 | reduce-builtin, 32 | standarderror-builtin, 33 | unicode-builtin, 34 | xrange-builtin, 35 | coerce-method, 36 | delslice-method, 37 | getslice-method, 38 | setslice-method, 39 | no-absolute-import, 40 | old-division, 41 | dict-iter-method, 42 | dict-view-method, 43 | next-method-called, 44 | metaclass-assignment, 45 | indexing-exception, 46 | raising-string, 47 | reload-builtin, 48 | oct-method, 49 | hex-method, 50 | nonzero-method, 51 | cmp-method, 52 | input-builtin, 53 | round-builtin, 54 | intern-builtin, 55 | unichr-builtin, 56 | map-builtin-not-iterating, 57 | zip-builtin-not-iterating, 58 | range-builtin-not-iterating, 59 | filter-builtin-not-iterating, 60 | using-cmp-argument, 61 | eq-without-hash, 62 | div-method, 63 | idiv-method, 64 | rdiv-method, 65 | exception-message-attribute, 66 | invalid-str-codec, 67 | sys-max-int, 68 | bad-python3-import, 69 | deprecated-string-function, 70 | deprecated-str-translate-call, 71 | deprecated-itertools-function, 72 | deprecated-types-field, 73 | next-method-defined, 74 | dict-items-not-iterating, 75 | dict-keys-not-iterating, 76 | dict-values-not-iterating, 77 | deprecated-operator-function, 78 | deprecated-urllib-function, 79 | xreadlines-attribute, 80 | deprecated-sys-function, 81 | exception-escape, 82 | comprehension-escape, 83 | missing-docstring, 84 | unsubscriptable-object, 85 | no-member, 86 | not-callable -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Speechmatics 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | includes="cpc dataloader emotion_id *.py" 2 | excludes="*.ipynb_checkpoints venv" 3 | ignores="E203, W503, E712" 4 | 5 | extensions="@aquirdturtle/collapsible_headings @jupyterlab/toc @wallneradam/output_auto_scroll @wallneradam/run_all_buttons" 6 | 7 | check: 8 | black --check "${includes}" 9 | flake8 --exclude=${excludes} --ignore=${ignores} --max-line-length=100 "${includes}" 10 | pylint "${includes}" 11 | clean: 12 | find . -name '*.pyc' -delete 13 | find . -name __pycache__ -delete 14 | deps: 15 | pip3 install --upgrade pip 16 | pip3 install -r requirements.txt 17 | [ -d .git ] && pre-commit install || echo "no git repo to install hooks" 18 | jupyter: 19 | jupyter labextension install "${extensions}" 20 | jupyter labextension update "${extensions}" 21 | jupyter lab build 22 | format: 23 | black "${includes}" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # emotion_detection_cpc 2 | This repo provides the code for an emotion recognition system using speech as an input. The performance is boosted using self-supervised representations trained with Contrastive Predictive Coding (CPC). Results have improved from a baseline of 71% to 80% accuracy when using CPC which is a significant relative reduction in error of 30%. 3 | 4 | Blog here: https://medium.com/speechmatics/boosting-emotion-recognition-performance-in-speech-using-cpc-ce6b23a05759 5 | 6 | 7 | ## Initial setup 8 | ### Install dependencies 9 | ``` 10 | virtualenv -p python3.7 venv 11 | source venv/bin/activate 12 | make deps 13 | ``` 14 | 15 | ### Download data 16 | ``` 17 | wget https://zenodo.org/record/1188976/files/Audio_Speech_Actors_01-24.zip $HOME/RAVDESS/Audio_Speech_Actors_01-24.zip 18 | unzip $HOME/RAVDESS/Audio_Speech_Actors_01-24.zip 19 | ``` 20 | 21 | ### Create train, val and test datasets 22 | ``` 23 | ./parse_emotion_dataset.py -j -d $HOME/RAVDESS/Audio_Speech_Actors_01-24 -o ./data 24 | ``` 25 | 26 | 27 | ## Run CPC pretraining example 28 | ``` 29 | python3.7 -m cpc.train \ 30 | --train_data=$librispeech_path/train.dbl \ 31 | --val_data=$librispeech_path/val.dbl \ 32 | --expdir=$HOME/exp/cpc_fbank \ 33 | --features_in=fbank \ 34 | --batch_size=16 \ 35 | --window_size=128 \ 36 | --steps=500000 \ 37 | --hidden_size=512 \ 38 | --out_size=256 \ 39 | --timestep=12 40 | ``` 41 | 42 | 43 | ## Run emotion recognition example 44 | ### Training 45 | ``` 46 | python3.7 -m emotion_id.train \ 47 | --expdir=$HOME/exp/emotion_id \ 48 | --cpc_path=$HOME/exp/cpc_fbank/model.pt \ 49 | --train_data=data/train.dbl \ 50 | --val_data=data/val.dbl \ 51 | --window_size=1024 \ 52 | --model=rnn_bi \ 53 | --batch_size=8 \ 54 | --steps=40000 \ 55 | --lr=1e-4 \ 56 | --hidden_size=512 \ 57 | --dropout_prob=0.1 \ 58 | --emotion_set_path=data/emotion_set.txt 59 | ``` 60 | 61 | ### Decoding and scoring 62 | ``` 63 | python3.7 -m emotion_id.decode \ 64 | --eval_file_path=data/test.dbl \ 65 | --cpc_path=$HOME/exp/cpc_fbank/model.pt \ 66 | --model_path=$HOME/exp/emotion_id/model.pt \ 67 | --output_dir=$HOME/exp/emotion_id/predictions \ 68 | --window_size=1024 \ 69 | 70 | python3.7 -m emotion_id.score \ 71 | --emotion_set_path=data/emotion_set.txt \ 72 | --ref data/test.dbl \ 73 | --pred $HOME/exp/emotion_id/predictions/score.dbl \ 74 | --output $HOME/exp/emotion_id/score 75 | 76 | grep "accuracy" $HOME/exp/emotion_id/score/score_results.json 77 | ``` 78 | 79 | --- 80 | 81 | License: [MIT](LICENSE.txt) 82 | -------------------------------------------------------------------------------- /cpc/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jplhughes/emotion_detection_cpc/0eb2d4a2ec4c98f8303482dc0dec53b467c4831a/cpc/.DS_Store -------------------------------------------------------------------------------- /cpc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jplhughes/emotion_detection_cpc/0eb2d4a2ec4c98f8303482dc0dec53b467c4831a/cpc/__init__.py -------------------------------------------------------------------------------- /cpc/model.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | from util import mu_law_encoding, BatchNorm, device 4 | 5 | 6 | class FeatureEncoder(nn.Module): 7 | """ 8 | Fully connected 3 layer Encoder that operates on downsampled features 9 | """ 10 | 11 | def __init__(self, feat_dim=80, hidden_size=512, batch_norm_on=True): 12 | 13 | super().__init__() 14 | 15 | self.blocks = nn.Sequential( 16 | nn.Linear(feat_dim, hidden_size), 17 | BatchNorm(hidden_size, batch_norm_on), 18 | nn.ReLU(inplace=True), 19 | nn.Linear(hidden_size, hidden_size), 20 | BatchNorm(hidden_size, batch_norm_on), 21 | nn.ReLU(inplace=True), 22 | nn.Linear(hidden_size, hidden_size), 23 | BatchNorm(hidden_size, batch_norm_on), 24 | nn.ReLU(inplace=True), 25 | ) 26 | 27 | def forward(self, x): 28 | return self.blocks(x) 29 | 30 | 31 | class RawEncoder(nn.Module): 32 | """ 33 | Encoder that downsamples raw audio by a factor of 160 34 | """ 35 | 36 | def __init__(self, hidden_size=512): 37 | 38 | super().__init__() 39 | 40 | self.blocks = nn.Sequential( 41 | nn.Conv1d(1, hidden_size, kernel_size=10, stride=5, padding=3, bias=False), 42 | nn.BatchNorm1d(hidden_size), 43 | nn.ReLU(inplace=True), 44 | nn.Conv1d(hidden_size, hidden_size, kernel_size=8, stride=4, padding=2, bias=False), 45 | nn.BatchNorm1d(hidden_size), 46 | nn.ReLU(inplace=True), 47 | nn.Conv1d(hidden_size, hidden_size, kernel_size=4, stride=2, padding=1, bias=False), 48 | nn.BatchNorm1d(hidden_size), 49 | nn.ReLU(inplace=True), 50 | nn.Conv1d(hidden_size, hidden_size, kernel_size=4, stride=2, padding=1, bias=False), 51 | nn.BatchNorm1d(hidden_size), 52 | nn.ReLU(inplace=True), 53 | nn.Conv1d(hidden_size, hidden_size, kernel_size=4, stride=2, padding=1, bias=False), 54 | nn.BatchNorm1d(hidden_size), 55 | nn.ReLU(inplace=True), 56 | ) 57 | 58 | def forward(self, x): 59 | return self.blocks(x) 60 | 61 | 62 | class CPCModel(nn.Module): 63 | """ 64 | CPCModel: base model from the paper: 'Representation Learning with Contrastive 65 | Predictive Coding' 66 | """ 67 | 68 | def __init__( 69 | self, 70 | features_in, 71 | timestep, 72 | batch_size, 73 | window_size, 74 | hidden_size=512, 75 | out_size=256, 76 | no_gru_layers=1, 77 | ): 78 | 79 | super(CPCModel, self).__init__() 80 | self.features_in = features_in 81 | self.batch_size = batch_size 82 | self.timestep = timestep 83 | self.hidden_size = hidden_size 84 | self.out_size = out_size 85 | if features_in == "raw": 86 | self.encoder = RawEncoder(hidden_size) 87 | self.seq_len = window_size // 160 88 | elif features_in == "fbank": 89 | self.encoder = FeatureEncoder(feat_dim=80, hidden_size=hidden_size) 90 | self.seq_len = window_size 91 | self.gru = nn.GRU( 92 | hidden_size, 93 | out_size, 94 | num_layers=no_gru_layers, 95 | bidirectional=False, 96 | batch_first=True, 97 | ) 98 | self.Wk = nn.ModuleList([nn.Linear(out_size, hidden_size) for i in range(timestep)]) 99 | self.softmax = nn.Softmax(dim=1) 100 | self.lsoftmax = nn.LogSoftmax(dim=1) 101 | 102 | def _weights_init(m): 103 | if isinstance(m, nn.Linear): 104 | nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") 105 | if isinstance(m, nn.Conv1d): 106 | nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") 107 | elif isinstance(m, nn.BatchNorm1d): 108 | nn.init.constant_(m.weight, 1) 109 | nn.init.constant_(m.bias, 0) 110 | 111 | # initialize gru 112 | for layer_p in self.gru._all_weights: 113 | for p in layer_p: 114 | if "weight" in p: 115 | nn.init.kaiming_normal_( 116 | self.gru.__getattr__(p), mode="fan_out", nonlinearity="relu" 117 | ) 118 | 119 | self.apply(_weights_init) 120 | 121 | def forward(self, x, hidden): 122 | # raw: N*C*L, e.g. 8*1*20480, fbank: N*L*C, e.g. 8*128*80 123 | z = self.encoder(x) 124 | 125 | # z: N*L*C, e.g. 8*128*512 126 | # reshape to N*L*C for GRU if raw input 127 | if self.features_in == "raw": 128 | z = z.transpose(1, 2) 129 | 130 | # pass z into gru to get c 131 | if hidden is not None: 132 | hidden = hidden.detach() 133 | c, hidden = self.gru(z, hidden) # e.g. 8*128*256 134 | 135 | return z, c, hidden 136 | 137 | def get_cpc_loss(self, z, c, t): 138 | # take representation at time t 139 | c_t = c[:, t, :] # e.g. 8*256 140 | 141 | # infer z_{t+k} for each step in the future: c_t*Wk, where 1 <= k <= timestep 142 | pred = torch.stack([self.Wk[k](c_t) for k in range(self.timestep)]) # e.g. 12x8*512 143 | 144 | # pick the target z values timestep number of samples after t 145 | z_samples = z[:, t + 1 : t + 1 + self.timestep, :].permute(1, 0, 2) # e.g. 12*8*512 146 | 147 | nce = 0 148 | correct = 0 149 | for k in range(self.timestep): 150 | # calculate the log density ratio: log(f_k) = z_{t+k}^T * W_k * c_t 151 | log_density_ratio = torch.mm(z_samples[k], pred[k].transpose(0, 1)) # e.g. size 8*8 152 | 153 | # positive samples will be from the same batch 154 | # therefore, correct if highest probability is in the diagonal 155 | positive_batch_pred = torch.argmax(self.softmax(log_density_ratio), dim=0) 156 | positive_batch_actual = torch.arange(0, self.batch_size).to(device) 157 | correct = ( 158 | correct + torch.sum(torch.eq(positive_batch_pred, positive_batch_actual)).item() 159 | ) 160 | 161 | # calculate NCE loss 162 | nce = nce + torch.sum(torch.diag(self.lsoftmax(log_density_ratio))) 163 | 164 | # average over timestep and batch 165 | nce = nce / (-1.0 * self.batch_size * self.timestep) 166 | accuracy = correct / (1.0 * self.batch_size * self.timestep) 167 | return accuracy, nce 168 | 169 | def predict(self, x, hidden): 170 | # raw: N*C*L, e.g. 8*1*20480, fbank: N*L*C, e.g. 8*128*80 171 | z = self.encoder(x) 172 | # z: N*L*C, e.g. 8*128*512 173 | # reshape to N*L*C for GRU if raw input 174 | if self.features_in == "raw": 175 | z = z.transpose(1, 2) 176 | output, hidden = self.gru(z, hidden) # e.g. 8*128*256 177 | return output, hidden 178 | 179 | 180 | class TrainedCPC(nn.Module): 181 | """ 182 | Body wrapper class to wrap a trained cpc body for benchmarking 183 | """ 184 | 185 | def __init__(self, cpc_model): 186 | 187 | super().__init__() 188 | self.feat_dim = cpc_model.out_size 189 | self.data_class = cpc_model.features_in 190 | 191 | self.cpc_model = cpc_model 192 | self.hidden_state = None 193 | 194 | def forward(self, x): 195 | with torch.no_grad(): 196 | if self.features_in == "raw": 197 | x = mu_law_encoding(x).unsqueeze(1) 198 | 199 | x = self.cpc_model.encoder(x) 200 | 201 | if self.features_in == "raw": 202 | x = x.transpose(1, 2) 203 | 204 | x, self.hidden_state = self.cpc_model.gru(x, self.hidden_state) 205 | return x 206 | 207 | def stash_state(self): 208 | if self.hidden_state is None: 209 | self.state_stash = None 210 | else: 211 | self.state_stash = self.hidden_state.detach().clone() 212 | self.reset_state() 213 | 214 | def reset_state(self): 215 | self.hidden_state = None 216 | 217 | def pop_state(self): 218 | self.hidden_state = self.state_stash 219 | self.state_stash = None 220 | 221 | 222 | class NoCPC(nn.Module): 223 | def __init__(self, feat_dim=80, data_class="fbank"): 224 | super().__init__() 225 | self.feat_dim = feat_dim 226 | self.data_class = data_class 227 | 228 | def forward(self, inp): 229 | return inp 230 | 231 | def stash_state(self): 232 | pass 233 | 234 | def pop_state(self): 235 | pass 236 | 237 | def reset_state(self): 238 | pass 239 | -------------------------------------------------------------------------------- /cpc/train.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | import torch 4 | from absl import flags, logging, app 5 | from torch.utils.tensorboard import SummaryWriter 6 | from torch.optim.lr_scheduler import CosineAnnealingLR 7 | 8 | from cpc.model import CPCModel, TrainedCPC 9 | from dataloader.audio import AudioDataset, AudioDataLoader 10 | from util import ( 11 | set_seeds, 12 | FixedRandomState, 13 | device, 14 | RAdam, 15 | mu_law_encoding, 16 | ) 17 | 18 | FLAGS = flags.FLAGS 19 | flags.DEFINE_string("train_data", None, "path to train dbl") 20 | flags.DEFINE_string("val_data", None, "path to validation dbl") 21 | flags.DEFINE_string("expdir", None, "directory to write all experiment data to") 22 | flags.DEFINE_string("model_out", None, "path to where to save trained model") 23 | flags.DEFINE_string("features_in", "raw", "type of features to run cpc on") 24 | flags.DEFINE_float("lr", 4e-4, "learning rate") 25 | flags.DEFINE_integer("steps", 100000, "number of steps to take over streaming dataset") 26 | flags.DEFINE_integer("val_steps", None, "number of steps to take in validation") 27 | flags.DEFINE_integer("batch_size", 32, "batch size, num parallel streams to train on at once") 28 | flags.DEFINE_integer("window_size", 20480, "num frames to push into model at once") 29 | flags.DEFINE_integer("timestep", 12, "the number of frames ahead to predict") 30 | flags.DEFINE_integer("hidden_size", 512, "the hidden layer size of the encoder") 31 | flags.DEFINE_integer("out_size", 256, "the hidden layer size of the gru") 32 | flags.DEFINE_integer("no_gru_layers", 1, "the number of layers in the gru") 33 | 34 | flags.DEFINE_integer("val_every", None, "how often to perform validation") 35 | flags.DEFINE_integer("save_every", None, "save every n steps") 36 | flags.DEFINE_integer("log_every", 10, "append to log file every n steps") 37 | flags.DEFINE_integer("log_tb_every", 50, "save tb scalars every n steps") 38 | flags.DEFINE_integer("num_workers", 8, "number of workers for dataloader") 39 | 40 | flags.mark_flag_as_required("train_data") 41 | flags.mark_flag_as_required("val_data") 42 | flags.mark_flag_as_required("expdir") 43 | 44 | 45 | def validation(model, val_dataloader, val_steps, features_in): 46 | model.eval() 47 | losses = [] 48 | accuracies = [] 49 | hidden = None 50 | with FixedRandomState(42): 51 | for step, val_batch in enumerate(val_dataloader): 52 | data = val_batch["data"].to(device) 53 | if features_in == "raw": 54 | data = mu_law_encoding(data.unsqueeze(1)) 55 | with torch.no_grad(): 56 | 57 | z, c, hidden = model(data, hidden) 58 | 59 | possible_t_range = int(model.seq_len - model.timestep) 60 | for t in range(0, possible_t_range, model.timestep): 61 | acc, nce_loss = model.get_cpc_loss(z, c, t) 62 | losses.append(nce_loss.item()) 63 | accuracies.append(acc) 64 | if step >= val_steps: 65 | break 66 | 67 | loss_mean = np.mean(losses) 68 | acc_mean = np.mean(accuracies) 69 | 70 | model.train() 71 | return acc_mean, loss_mean 72 | 73 | 74 | def save_models(model, model_out, ext, data=None): 75 | torch.save(model, model_out + ext) 76 | 77 | trained_model = TrainedCPC(model).to(device) 78 | torch.save(trained_model, model_out + ext + ".trained") 79 | 80 | # ensure data goes through without errors 81 | if data is not None: 82 | _ = trained_model(data) 83 | 84 | 85 | def train(model, optimizer, scheduler, train_dataloader, val_dataloader, FLAGS): 86 | model.train() 87 | 88 | tb_logger = SummaryWriter(FLAGS.expdir, flush_secs=10) 89 | best_loss = np.inf 90 | hidden = None 91 | sampling_rate = train_dataloader.sampling_rate 92 | 93 | for step, train_batch in enumerate(train_dataloader): 94 | data = train_batch["data"].to(device) 95 | if FLAGS.features_in == "raw": 96 | data = mu_law_encoding(data.unsqueeze(1)) 97 | 98 | z, c, hidden = model(data, hidden) 99 | 100 | loss = 0 101 | accuracy = 0 102 | possible_t_range = int(model.seq_len - model.timestep) 103 | for num, t in enumerate(range(0, possible_t_range, model.timestep)): 104 | acc, nce_loss = model.get_cpc_loss(z, c, t) 105 | loss = loss + nce_loss 106 | accuracy = accuracy + acc 107 | 108 | loss = loss / (num + 1) 109 | accuracy = accuracy / (num + 1) 110 | 111 | model.zero_grad() 112 | loss.backward() 113 | torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) 114 | optimizer.step() 115 | scheduler.step() 116 | 117 | global_step = (step + 1) * (num + 1) 118 | 119 | if step % FLAGS.log_every == 0: 120 | audio_seen_hr = ( 121 | (step + 1) * FLAGS.batch_size * FLAGS.window_size / (sampling_rate * 3600) 122 | ) 123 | logging.info( 124 | ( 125 | f"step {step}, global_step {global_step}, " 126 | f"loss {loss.item():.6f}, acc {accuracy:.4f}, " 127 | f"lr {scheduler.get_lr()[0]:.6f}, " 128 | f"seen {audio_seen_hr:.3f} hours" 129 | ) 130 | ) 131 | 132 | if step % FLAGS.log_tb_every == 0: 133 | tb_logger.add_scalar("train/loss", loss.item(), global_step) 134 | tb_logger.add_scalar("train/acc", accuracy, global_step) 135 | tb_logger.add_scalar("train/lr", scheduler.get_lr()[0], global_step) 136 | tb_logger.add_scalar("train/audio_seen", audio_seen_hr, global_step) 137 | 138 | if step % FLAGS.val_every == 0 and step != 0: 139 | val_acc, val_loss = validation( 140 | model, val_dataloader, FLAGS.val_steps, FLAGS.features_in 141 | ) 142 | logging.info(f"val loss {val_loss:.6f}, val acc {val_acc:.4f}") 143 | tb_logger.add_scalar("valid/loss", val_loss, global_step) 144 | tb_logger.add_scalar("valid/acc", val_acc, global_step) 145 | 146 | if val_loss < best_loss: 147 | ext = ".bestloss" 148 | test_data = train_batch["data"].to(device) 149 | save_models(model, FLAGS.model_out, ext, data=test_data) 150 | logging.info("New best loss validation model saved.") 151 | best_loss = val_loss 152 | 153 | if step % FLAGS.save_every == 0 and step != 0: 154 | ext = ".step" + str(step) 155 | torch.save(model, FLAGS.model_out + ext) 156 | 157 | if step >= FLAGS.steps: 158 | ext = "" 159 | save_models(model, FLAGS.model_out, ext) 160 | break 161 | 162 | 163 | def run_cpc(unused_argv): 164 | 165 | # setup logging 166 | set_seeds(FLAGS.seed) 167 | 168 | # initialise unset flags 169 | if not FLAGS.model_out: 170 | FLAGS.model_out = FLAGS.expdir + "/model.pt" 171 | if not FLAGS.val_every: 172 | FLAGS.val_every = max(100, FLAGS.steps // 50) 173 | if not FLAGS.val_steps: 174 | FLAGS.val_steps = max(20, FLAGS.steps // FLAGS.batch_size // 50) 175 | if not FLAGS.save_every: 176 | FLAGS.save_every = FLAGS.val_every 177 | logging.info(f"model_out {FLAGS.model_out}") 178 | logging.info(f"steps {FLAGS.steps}") 179 | logging.info(f"val_steps {FLAGS.val_steps}") 180 | logging.info(f"log_every {FLAGS.log_every}") 181 | logging.info(f"log_tb_every {FLAGS.log_tb_every}") 182 | logging.info(f"val_every {FLAGS.val_every}") 183 | logging.info(f"save_every {FLAGS.save_every}") 184 | 185 | # model and optimization 186 | model = CPCModel( 187 | FLAGS.features_in, 188 | FLAGS.timestep, 189 | FLAGS.batch_size, 190 | FLAGS.window_size, 191 | FLAGS.hidden_size, 192 | FLAGS.out_size, 193 | FLAGS.no_gru_layers, 194 | ).to(device) 195 | logging.info(f"param count {sum(p.numel() for p in model.parameters() if p.requires_grad)}") 196 | optimizer = RAdam(model.parameters(), lr=4e-4) 197 | scheduler = CosineAnnealingLR(optimizer, FLAGS.steps, eta_min=1e-6) 198 | 199 | # dataloaders 200 | train_dataset = AudioDataset(FLAGS.train_data) 201 | train_dataloader = AudioDataLoader( 202 | train_dataset, 203 | window_size=FLAGS.window_size, 204 | batch_size=FLAGS.batch_size, 205 | feature_transform=FLAGS.features_in, 206 | num_workers=FLAGS.num_workers, 207 | shuffle=True, 208 | drop_last=True, 209 | ) 210 | 211 | val_dataset = AudioDataset(FLAGS.val_data) 212 | val_dataloader = AudioDataLoader( 213 | val_dataset, 214 | window_size=FLAGS.window_size, 215 | batch_size=FLAGS.batch_size, 216 | feature_transform=FLAGS.features_in, 217 | num_workers=FLAGS.num_workers, 218 | shuffle=False, 219 | drop_last=True, 220 | ) 221 | 222 | # start training 223 | train(model, optimizer, scheduler, train_dataloader, val_dataloader, FLAGS) 224 | 225 | 226 | if __name__ == "__main__": 227 | app.run(run_cpc) 228 | -------------------------------------------------------------------------------- /data/emotion_set.txt: -------------------------------------------------------------------------------- 1 | neutral 2 | calm 3 | happy 4 | sad 5 | angry 6 | fearful 7 | disgust 8 | surprised 9 | -------------------------------------------------------------------------------- /data/single.dbl: -------------------------------------------------------------------------------- 1 | /data/RAVDESS/Actor_02/03-01-02-02-01-01-02.wav calm 2 | -------------------------------------------------------------------------------- /data/test.dbl: -------------------------------------------------------------------------------- 1 | /data/RAVDESS/Actor_07/03-01-03-02-01-02-07.wav happy 2 | /data/RAVDESS/Actor_20/03-01-07-01-01-02-20.wav disgust 3 | /data/RAVDESS/Actor_24/03-01-08-01-02-02-24.wav surprised 4 | /data/RAVDESS/Actor_23/03-01-07-02-02-01-23.wav disgust 5 | /data/RAVDESS/Actor_23/03-01-05-01-02-02-23.wav angry 6 | /data/RAVDESS/Actor_01/03-01-03-01-01-02-01.wav happy 7 | /data/RAVDESS/Actor_23/03-01-05-01-01-01-23.wav angry 8 | /data/RAVDESS/Actor_07/03-01-01-01-02-01-07.wav neutral 9 | /data/RAVDESS/Actor_08/03-01-02-01-02-02-08.wav calm 10 | /data/RAVDESS/Actor_23/03-01-06-01-02-01-23.wav fearful 11 | /data/RAVDESS/Actor_23/03-01-05-02-02-01-23.wav angry 12 | /data/RAVDESS/Actor_06/03-01-03-01-02-02-06.wav happy 13 | /data/RAVDESS/Actor_23/03-01-02-01-01-02-23.wav calm 14 | /data/RAVDESS/Actor_21/03-01-04-01-02-01-21.wav sad 15 | /data/RAVDESS/Actor_24/03-01-04-02-02-02-24.wav sad 16 | /data/RAVDESS/Actor_24/03-01-04-02-01-02-24.wav sad 17 | /data/RAVDESS/Actor_23/03-01-04-02-02-02-23.wav sad 18 | /data/RAVDESS/Actor_07/03-01-02-01-02-02-07.wav calm 19 | /data/RAVDESS/Actor_24/03-01-05-02-02-02-24.wav angry 20 | /data/RAVDESS/Actor_07/03-01-06-01-02-01-07.wav fearful 21 | /data/RAVDESS/Actor_18/03-01-04-01-01-02-18.wav sad 22 | /data/RAVDESS/Actor_24/03-01-02-02-02-02-24.wav calm 23 | /data/RAVDESS/Actor_16/03-01-07-02-01-01-16.wav disgust 24 | /data/RAVDESS/Actor_21/03-01-07-02-02-02-21.wav disgust 25 | /data/RAVDESS/Actor_07/03-01-03-01-01-02-07.wav happy 26 | /data/RAVDESS/Actor_18/03-01-03-02-02-01-18.wav happy 27 | /data/RAVDESS/Actor_23/03-01-06-02-01-02-23.wav fearful 28 | /data/RAVDESS/Actor_24/03-01-05-01-01-01-24.wav angry 29 | /data/RAVDESS/Actor_04/03-01-08-02-02-01-04.wav surprised 30 | /data/RAVDESS/Actor_24/03-01-02-02-02-01-24.wav calm 31 | /data/RAVDESS/Actor_23/03-01-02-01-02-02-23.wav calm 32 | /data/RAVDESS/Actor_12/03-01-07-02-01-02-12.wav disgust 33 | /data/RAVDESS/Actor_04/03-01-06-01-01-02-04.wav fearful 34 | /data/RAVDESS/Actor_17/03-01-06-01-01-02-17.wav fearful 35 | /data/RAVDESS/Actor_12/03-01-03-02-01-02-12.wav happy 36 | /data/RAVDESS/Actor_20/03-01-06-02-02-01-20.wav fearful 37 | /data/RAVDESS/Actor_05/03-01-06-02-01-02-05.wav fearful 38 | /data/RAVDESS/Actor_23/03-01-03-01-01-02-23.wav happy 39 | /data/RAVDESS/Actor_06/03-01-06-02-01-01-06.wav fearful 40 | /data/RAVDESS/Actor_19/03-01-04-01-02-01-19.wav sad 41 | /data/RAVDESS/Actor_23/03-01-08-01-01-01-23.wav surprised 42 | /data/RAVDESS/Actor_22/03-01-07-01-01-01-22.wav disgust 43 | /data/RAVDESS/Actor_24/03-01-05-01-01-02-24.wav angry 44 | /data/RAVDESS/Actor_18/03-01-05-02-02-02-18.wav angry 45 | /data/RAVDESS/Actor_21/03-01-01-01-01-02-21.wav neutral 46 | /data/RAVDESS/Actor_04/03-01-08-02-01-01-04.wav surprised 47 | /data/RAVDESS/Actor_06/03-01-05-01-02-02-06.wav angry 48 | /data/RAVDESS/Actor_21/03-01-08-02-02-02-21.wav surprised 49 | /data/RAVDESS/Actor_20/03-01-07-02-02-02-20.wav disgust 50 | /data/RAVDESS/Actor_10/03-01-02-01-01-01-10.wav calm 51 | /data/RAVDESS/Actor_19/03-01-08-01-02-02-19.wav surprised 52 | /data/RAVDESS/Actor_18/03-01-04-01-01-01-18.wav sad 53 | /data/RAVDESS/Actor_24/03-01-04-01-02-01-24.wav sad 54 | /data/RAVDESS/Actor_04/03-01-06-02-02-01-04.wav fearful 55 | /data/RAVDESS/Actor_24/03-01-04-02-01-01-24.wav sad 56 | /data/RAVDESS/Actor_23/03-01-04-02-01-02-23.wav sad 57 | /data/RAVDESS/Actor_02/03-01-07-01-02-01-02.wav disgust 58 | /data/RAVDESS/Actor_24/03-01-04-01-01-01-24.wav sad 59 | /data/RAVDESS/Actor_22/03-01-02-01-02-01-22.wav calm 60 | /data/RAVDESS/Actor_06/03-01-03-01-02-01-06.wav happy 61 | /data/RAVDESS/Actor_24/03-01-07-02-02-01-24.wav disgust 62 | /data/RAVDESS/Actor_24/03-01-05-02-01-01-24.wav angry 63 | /data/RAVDESS/Actor_24/03-01-07-01-01-01-24.wav disgust 64 | /data/RAVDESS/Actor_04/03-01-07-01-01-02-04.wav disgust 65 | /data/RAVDESS/Actor_13/03-01-08-02-01-01-13.wav surprised 66 | /data/RAVDESS/Actor_05/03-01-02-01-02-02-05.wav calm 67 | /data/RAVDESS/Actor_23/03-01-03-01-02-02-23.wav happy 68 | /data/RAVDESS/Actor_23/03-01-02-02-01-01-23.wav calm 69 | /data/RAVDESS/Actor_22/03-01-08-02-01-01-22.wav surprised 70 | /data/RAVDESS/Actor_16/03-01-08-02-02-02-16.wav surprised 71 | /data/RAVDESS/Actor_22/03-01-06-01-02-02-22.wav fearful 72 | /data/RAVDESS/Actor_14/03-01-03-01-02-02-14.wav happy 73 | /data/RAVDESS/Actor_23/03-01-04-02-01-01-23.wav sad 74 | /data/RAVDESS/Actor_05/03-01-07-01-01-01-05.wav disgust 75 | /data/RAVDESS/Actor_24/03-01-08-01-01-02-24.wav surprised 76 | /data/RAVDESS/Actor_23/03-01-07-02-01-01-23.wav disgust 77 | /data/RAVDESS/Actor_04/03-01-04-02-02-02-04.wav sad 78 | /data/RAVDESS/Actor_01/03-01-01-01-01-01-01.wav neutral 79 | /data/RAVDESS/Actor_19/03-01-05-01-02-02-19.wav angry 80 | /data/RAVDESS/Actor_13/03-01-05-01-01-01-13.wav angry 81 | /data/RAVDESS/Actor_14/03-01-02-02-01-02-14.wav calm 82 | /data/RAVDESS/Actor_03/03-01-02-02-02-01-03.wav calm 83 | /data/RAVDESS/Actor_05/03-01-03-02-02-01-05.wav happy 84 | /data/RAVDESS/Actor_19/03-01-07-01-01-02-19.wav disgust 85 | /data/RAVDESS/Actor_08/03-01-04-02-02-01-08.wav sad 86 | /data/RAVDESS/Actor_24/03-01-03-02-01-02-24.wav happy 87 | /data/RAVDESS/Actor_10/03-01-07-02-02-01-10.wav disgust 88 | /data/RAVDESS/Actor_10/03-01-05-02-02-01-10.wav angry 89 | /data/RAVDESS/Actor_13/03-01-04-01-01-02-13.wav sad 90 | /data/RAVDESS/Actor_14/03-01-07-02-02-02-14.wav disgust 91 | /data/RAVDESS/Actor_23/03-01-02-01-01-01-23.wav calm 92 | /data/RAVDESS/Actor_24/03-01-03-01-01-01-24.wav happy 93 | /data/RAVDESS/Actor_24/03-01-03-02-01-01-24.wav happy 94 | /data/RAVDESS/Actor_13/03-01-04-01-01-01-13.wav sad 95 | /data/RAVDESS/Actor_12/03-01-03-01-02-02-12.wav happy 96 | /data/RAVDESS/Actor_20/03-01-02-01-02-01-20.wav calm 97 | /data/RAVDESS/Actor_23/03-01-03-02-01-02-23.wav happy 98 | /data/RAVDESS/Actor_05/03-01-04-01-02-02-05.wav sad 99 | /data/RAVDESS/Actor_19/03-01-01-01-02-02-19.wav neutral 100 | /data/RAVDESS/Actor_18/03-01-03-01-02-01-18.wav happy 101 | /data/RAVDESS/Actor_20/03-01-02-02-01-02-20.wav calm 102 | /data/RAVDESS/Actor_13/03-01-06-01-02-02-13.wav fearful 103 | /data/RAVDESS/Actor_24/03-01-03-01-02-02-24.wav happy 104 | /data/RAVDESS/Actor_23/03-01-03-01-02-01-23.wav happy 105 | /data/RAVDESS/Actor_23/03-01-07-02-02-02-23.wav disgust 106 | /data/RAVDESS/Actor_02/03-01-05-01-01-02-02.wav angry 107 | /data/RAVDESS/Actor_21/03-01-08-01-01-02-21.wav surprised 108 | /data/RAVDESS/Actor_16/03-01-05-01-01-01-16.wav angry 109 | /data/RAVDESS/Actor_19/03-01-07-01-02-01-19.wav disgust 110 | /data/RAVDESS/Actor_17/03-01-03-02-02-01-17.wav happy 111 | /data/RAVDESS/Actor_16/03-01-02-01-02-02-16.wav calm 112 | /data/RAVDESS/Actor_10/03-01-06-01-02-01-10.wav fearful 113 | /data/RAVDESS/Actor_04/03-01-08-01-01-02-04.wav surprised 114 | /data/RAVDESS/Actor_16/03-01-03-02-01-01-16.wav happy 115 | /data/RAVDESS/Actor_23/03-01-05-01-02-01-23.wav angry 116 | /data/RAVDESS/Actor_23/03-01-03-02-02-01-23.wav happy 117 | /data/RAVDESS/Actor_15/03-01-05-01-01-01-15.wav angry 118 | /data/RAVDESS/Actor_14/03-01-04-02-02-02-14.wav sad 119 | /data/RAVDESS/Actor_24/03-01-02-01-01-01-24.wav calm 120 | /data/RAVDESS/Actor_23/03-01-02-02-02-02-23.wav calm 121 | /data/RAVDESS/Actor_24/03-01-07-01-01-02-24.wav disgust 122 | /data/RAVDESS/Actor_08/03-01-05-02-01-01-08.wav angry 123 | /data/RAVDESS/Actor_09/03-01-02-01-01-02-09.wav calm 124 | /data/RAVDESS/Actor_24/03-01-06-02-02-01-24.wav fearful 125 | /data/RAVDESS/Actor_23/03-01-03-02-01-01-23.wav happy 126 | /data/RAVDESS/Actor_07/03-01-07-02-01-01-07.wav disgust 127 | /data/RAVDESS/Actor_24/03-01-01-01-01-01-24.wav neutral 128 | /data/RAVDESS/Actor_24/03-01-06-02-01-02-24.wav fearful 129 | /data/RAVDESS/Actor_15/03-01-04-01-02-02-15.wav sad 130 | /data/RAVDESS/Actor_04/03-01-04-01-02-01-04.wav sad 131 | /data/RAVDESS/Actor_23/03-01-04-01-02-02-23.wav sad 132 | /data/RAVDESS/Actor_05/03-01-03-02-01-02-05.wav happy 133 | /data/RAVDESS/Actor_13/03-01-01-01-02-01-13.wav neutral 134 | /data/RAVDESS/Actor_23/03-01-07-01-01-01-23.wav disgust 135 | /data/RAVDESS/Actor_14/03-01-02-02-02-02-14.wav calm 136 | /data/RAVDESS/Actor_21/03-01-01-01-02-01-21.wav neutral 137 | /data/RAVDESS/Actor_02/03-01-06-02-02-01-02.wav fearful 138 | /data/RAVDESS/Actor_10/03-01-01-01-01-02-10.wav neutral 139 | /data/RAVDESS/Actor_23/03-01-05-01-01-02-23.wav angry 140 | /data/RAVDESS/Actor_07/03-01-04-01-02-01-07.wav sad 141 | /data/RAVDESS/Actor_22/03-01-07-02-01-02-22.wav disgust 142 | /data/RAVDESS/Actor_04/03-01-07-02-01-02-04.wav disgust 143 | /data/RAVDESS/Actor_15/03-01-02-02-02-01-15.wav calm 144 | /data/RAVDESS/Actor_06/03-01-05-01-01-02-06.wav angry 145 | /data/RAVDESS/Actor_23/03-01-08-02-02-01-23.wav surprised 146 | /data/RAVDESS/Actor_07/03-01-06-01-01-02-07.wav fearful 147 | /data/RAVDESS/Actor_24/03-01-06-01-02-01-24.wav fearful 148 | /data/RAVDESS/Actor_07/03-01-05-01-01-01-07.wav angry 149 | /data/RAVDESS/Actor_13/03-01-08-02-02-02-13.wav surprised 150 | /data/RAVDESS/Actor_13/03-01-08-02-01-02-13.wav surprised 151 | /data/RAVDESS/Actor_23/03-01-02-02-02-01-23.wav calm 152 | /data/RAVDESS/Actor_09/03-01-08-01-01-01-09.wav surprised 153 | /data/RAVDESS/Actor_23/03-01-07-02-01-02-23.wav disgust 154 | /data/RAVDESS/Actor_01/03-01-08-01-02-01-01.wav surprised 155 | /data/RAVDESS/Actor_23/03-01-06-01-02-02-23.wav fearful 156 | /data/RAVDESS/Actor_16/03-01-05-02-01-01-16.wav angry 157 | /data/RAVDESS/Actor_01/03-01-05-02-02-02-01.wav angry 158 | /data/RAVDESS/Actor_21/03-01-02-01-02-01-21.wav calm 159 | /data/RAVDESS/Actor_20/03-01-03-02-02-01-20.wav happy 160 | /data/RAVDESS/Actor_23/03-01-08-01-01-02-23.wav surprised 161 | -------------------------------------------------------------------------------- /data/test.ordered.dbl: -------------------------------------------------------------------------------- 1 | /data/RAVDESS/Actor_02/03-01-07-01-02-01-02.wav disgust 2 | /data/RAVDESS/Actor_02/03-01-05-01-01-02-02.wav angry 3 | /data/RAVDESS/Actor_02/03-01-06-02-02-01-02.wav fearful 4 | /data/RAVDESS/Actor_15/03-01-02-02-02-01-15.wav calm 5 | /data/RAVDESS/Actor_15/03-01-04-01-02-02-15.wav sad 6 | /data/RAVDESS/Actor_15/03-01-05-01-01-01-15.wav angry 7 | /data/RAVDESS/Actor_12/03-01-03-01-02-02-12.wav happy 8 | /data/RAVDESS/Actor_12/03-01-03-02-01-02-12.wav happy 9 | /data/RAVDESS/Actor_12/03-01-07-02-01-02-12.wav disgust 10 | /data/RAVDESS/Actor_14/03-01-07-02-02-02-14.wav disgust 11 | /data/RAVDESS/Actor_14/03-01-04-02-02-02-14.wav sad 12 | /data/RAVDESS/Actor_14/03-01-02-02-02-02-14.wav calm 13 | /data/RAVDESS/Actor_14/03-01-02-02-01-02-14.wav calm 14 | /data/RAVDESS/Actor_14/03-01-03-01-02-02-14.wav happy 15 | /data/RAVDESS/Actor_13/03-01-04-01-01-02-13.wav sad 16 | /data/RAVDESS/Actor_13/03-01-04-01-01-01-13.wav sad 17 | /data/RAVDESS/Actor_13/03-01-05-01-01-01-13.wav angry 18 | /data/RAVDESS/Actor_13/03-01-08-02-02-02-13.wav surprised 19 | /data/RAVDESS/Actor_13/03-01-08-02-01-01-13.wav surprised 20 | /data/RAVDESS/Actor_13/03-01-08-02-01-02-13.wav surprised 21 | /data/RAVDESS/Actor_13/03-01-06-01-02-02-13.wav fearful 22 | /data/RAVDESS/Actor_13/03-01-01-01-02-01-13.wav neutral 23 | /data/RAVDESS/Actor_03/03-01-02-02-02-01-03.wav calm 24 | /data/RAVDESS/Actor_24/03-01-02-02-02-02-24.wav calm 25 | /data/RAVDESS/Actor_24/03-01-05-01-01-01-24.wav angry 26 | /data/RAVDESS/Actor_24/03-01-03-01-02-02-24.wav happy 27 | /data/RAVDESS/Actor_24/03-01-08-01-02-02-24.wav surprised 28 | /data/RAVDESS/Actor_24/03-01-06-02-01-02-24.wav fearful 29 | /data/RAVDESS/Actor_24/03-01-04-02-02-02-24.wav sad 30 | /data/RAVDESS/Actor_24/03-01-04-01-02-01-24.wav sad 31 | /data/RAVDESS/Actor_24/03-01-06-02-02-01-24.wav fearful 32 | /data/RAVDESS/Actor_24/03-01-04-02-01-01-24.wav sad 33 | /data/RAVDESS/Actor_24/03-01-03-02-01-02-24.wav happy 34 | /data/RAVDESS/Actor_24/03-01-07-01-01-01-24.wav disgust 35 | /data/RAVDESS/Actor_24/03-01-07-01-01-02-24.wav disgust 36 | /data/RAVDESS/Actor_24/03-01-04-01-01-01-24.wav sad 37 | /data/RAVDESS/Actor_24/03-01-03-02-01-01-24.wav happy 38 | /data/RAVDESS/Actor_24/03-01-07-02-02-01-24.wav disgust 39 | /data/RAVDESS/Actor_24/03-01-06-01-02-01-24.wav fearful 40 | /data/RAVDESS/Actor_24/03-01-05-02-02-02-24.wav angry 41 | /data/RAVDESS/Actor_24/03-01-01-01-01-01-24.wav neutral 42 | /data/RAVDESS/Actor_24/03-01-02-01-01-01-24.wav calm 43 | /data/RAVDESS/Actor_24/03-01-05-01-01-02-24.wav angry 44 | /data/RAVDESS/Actor_24/03-01-04-02-01-02-24.wav sad 45 | /data/RAVDESS/Actor_24/03-01-02-02-02-01-24.wav calm 46 | /data/RAVDESS/Actor_24/03-01-03-01-01-01-24.wav happy 47 | /data/RAVDESS/Actor_24/03-01-08-01-01-02-24.wav surprised 48 | /data/RAVDESS/Actor_24/03-01-05-02-01-01-24.wav angry 49 | /data/RAVDESS/Actor_20/03-01-07-02-02-02-20.wav disgust 50 | /data/RAVDESS/Actor_20/03-01-03-02-02-01-20.wav happy 51 | /data/RAVDESS/Actor_20/03-01-02-02-01-02-20.wav calm 52 | /data/RAVDESS/Actor_20/03-01-02-01-02-01-20.wav calm 53 | /data/RAVDESS/Actor_20/03-01-07-01-01-02-20.wav disgust 54 | /data/RAVDESS/Actor_20/03-01-06-02-02-01-20.wav fearful 55 | /data/RAVDESS/Actor_06/03-01-03-01-02-02-06.wav happy 56 | /data/RAVDESS/Actor_06/03-01-06-02-01-01-06.wav fearful 57 | /data/RAVDESS/Actor_06/03-01-05-01-02-02-06.wav angry 58 | /data/RAVDESS/Actor_06/03-01-03-01-02-01-06.wav happy 59 | /data/RAVDESS/Actor_06/03-01-05-01-01-02-06.wav angry 60 | /data/RAVDESS/Actor_16/03-01-07-02-01-01-16.wav disgust 61 | /data/RAVDESS/Actor_16/03-01-08-02-02-02-16.wav surprised 62 | /data/RAVDESS/Actor_16/03-01-05-01-01-01-16.wav angry 63 | /data/RAVDESS/Actor_16/03-01-02-01-02-02-16.wav calm 64 | /data/RAVDESS/Actor_16/03-01-05-02-01-01-16.wav angry 65 | /data/RAVDESS/Actor_16/03-01-03-02-01-01-16.wav happy 66 | /data/RAVDESS/Actor_07/03-01-01-01-02-01-07.wav neutral 67 | /data/RAVDESS/Actor_07/03-01-03-01-01-02-07.wav happy 68 | /data/RAVDESS/Actor_07/03-01-05-01-01-01-07.wav angry 69 | /data/RAVDESS/Actor_07/03-01-06-01-02-01-07.wav fearful 70 | /data/RAVDESS/Actor_07/03-01-03-02-01-02-07.wav happy 71 | /data/RAVDESS/Actor_07/03-01-04-01-02-01-07.wav sad 72 | /data/RAVDESS/Actor_07/03-01-02-01-02-02-07.wav calm 73 | /data/RAVDESS/Actor_07/03-01-07-02-01-01-07.wav disgust 74 | /data/RAVDESS/Actor_07/03-01-06-01-01-02-07.wav fearful 75 | /data/RAVDESS/Actor_22/03-01-07-01-01-01-22.wav disgust 76 | /data/RAVDESS/Actor_22/03-01-07-02-01-02-22.wav disgust 77 | /data/RAVDESS/Actor_22/03-01-06-01-02-02-22.wav fearful 78 | /data/RAVDESS/Actor_22/03-01-08-02-01-01-22.wav surprised 79 | /data/RAVDESS/Actor_22/03-01-02-01-02-01-22.wav calm 80 | /data/RAVDESS/Actor_19/03-01-01-01-02-02-19.wav neutral 81 | /data/RAVDESS/Actor_19/03-01-08-01-02-02-19.wav surprised 82 | /data/RAVDESS/Actor_19/03-01-07-01-01-02-19.wav disgust 83 | /data/RAVDESS/Actor_19/03-01-07-01-02-01-19.wav disgust 84 | /data/RAVDESS/Actor_19/03-01-04-01-02-01-19.wav sad 85 | /data/RAVDESS/Actor_19/03-01-05-01-02-02-19.wav angry 86 | /data/RAVDESS/Actor_01/03-01-08-01-02-01-01.wav surprised 87 | /data/RAVDESS/Actor_01/03-01-01-01-01-01-01.wav neutral 88 | /data/RAVDESS/Actor_01/03-01-03-01-01-02-01.wav happy 89 | /data/RAVDESS/Actor_01/03-01-05-02-02-02-01.wav angry 90 | /data/RAVDESS/Actor_18/03-01-04-01-01-01-18.wav sad 91 | /data/RAVDESS/Actor_18/03-01-03-02-02-01-18.wav happy 92 | /data/RAVDESS/Actor_18/03-01-03-01-02-01-18.wav happy 93 | /data/RAVDESS/Actor_18/03-01-05-02-02-02-18.wav angry 94 | /data/RAVDESS/Actor_18/03-01-04-01-01-02-18.wav sad 95 | /data/RAVDESS/Actor_17/03-01-03-02-02-01-17.wav happy 96 | /data/RAVDESS/Actor_17/03-01-06-01-01-02-17.wav fearful 97 | /data/RAVDESS/Actor_23/03-01-02-01-01-02-23.wav calm 98 | /data/RAVDESS/Actor_23/03-01-06-02-01-02-23.wav fearful 99 | /data/RAVDESS/Actor_23/03-01-03-02-01-02-23.wav happy 100 | /data/RAVDESS/Actor_23/03-01-05-01-02-01-23.wav angry 101 | /data/RAVDESS/Actor_23/03-01-03-01-02-01-23.wav happy 102 | /data/RAVDESS/Actor_23/03-01-06-01-02-01-23.wav fearful 103 | /data/RAVDESS/Actor_23/03-01-02-02-02-01-23.wav calm 104 | /data/RAVDESS/Actor_23/03-01-05-02-02-01-23.wav angry 105 | /data/RAVDESS/Actor_23/03-01-05-01-01-02-23.wav angry 106 | /data/RAVDESS/Actor_23/03-01-08-01-01-01-23.wav surprised 107 | /data/RAVDESS/Actor_23/03-01-04-02-02-02-23.wav sad 108 | /data/RAVDESS/Actor_23/03-01-07-02-02-01-23.wav disgust 109 | /data/RAVDESS/Actor_23/03-01-03-01-01-02-23.wav happy 110 | /data/RAVDESS/Actor_23/03-01-05-01-01-01-23.wav angry 111 | /data/RAVDESS/Actor_23/03-01-05-01-02-02-23.wav angry 112 | /data/RAVDESS/Actor_23/03-01-06-01-02-02-23.wav fearful 113 | /data/RAVDESS/Actor_23/03-01-07-02-01-01-23.wav disgust 114 | /data/RAVDESS/Actor_23/03-01-07-02-02-02-23.wav disgust 115 | /data/RAVDESS/Actor_23/03-01-02-02-02-02-23.wav calm 116 | /data/RAVDESS/Actor_23/03-01-03-01-02-02-23.wav happy 117 | /data/RAVDESS/Actor_23/03-01-07-02-01-02-23.wav disgust 118 | /data/RAVDESS/Actor_23/03-01-07-01-01-01-23.wav disgust 119 | /data/RAVDESS/Actor_23/03-01-02-02-01-01-23.wav calm 120 | /data/RAVDESS/Actor_23/03-01-04-01-02-02-23.wav sad 121 | /data/RAVDESS/Actor_23/03-01-03-02-02-01-23.wav happy 122 | /data/RAVDESS/Actor_23/03-01-02-01-02-02-23.wav calm 123 | /data/RAVDESS/Actor_23/03-01-02-01-01-01-23.wav calm 124 | /data/RAVDESS/Actor_23/03-01-04-02-01-02-23.wav sad 125 | /data/RAVDESS/Actor_23/03-01-08-01-01-02-23.wav surprised 126 | /data/RAVDESS/Actor_23/03-01-08-02-02-01-23.wav surprised 127 | /data/RAVDESS/Actor_23/03-01-04-02-01-01-23.wav sad 128 | /data/RAVDESS/Actor_23/03-01-03-02-01-01-23.wav happy 129 | /data/RAVDESS/Actor_05/03-01-07-01-01-01-05.wav disgust 130 | /data/RAVDESS/Actor_05/03-01-04-01-02-02-05.wav sad 131 | /data/RAVDESS/Actor_05/03-01-03-02-01-02-05.wav happy 132 | /data/RAVDESS/Actor_05/03-01-02-01-02-02-05.wav calm 133 | /data/RAVDESS/Actor_05/03-01-03-02-02-01-05.wav happy 134 | /data/RAVDESS/Actor_05/03-01-06-02-01-02-05.wav fearful 135 | /data/RAVDESS/Actor_21/03-01-01-01-01-02-21.wav neutral 136 | /data/RAVDESS/Actor_21/03-01-07-02-02-02-21.wav disgust 137 | /data/RAVDESS/Actor_21/03-01-08-01-01-02-21.wav surprised 138 | /data/RAVDESS/Actor_21/03-01-02-01-02-01-21.wav calm 139 | /data/RAVDESS/Actor_21/03-01-01-01-02-01-21.wav neutral 140 | /data/RAVDESS/Actor_21/03-01-04-01-02-01-21.wav sad 141 | /data/RAVDESS/Actor_21/03-01-08-02-02-02-21.wav surprised 142 | /data/RAVDESS/Actor_10/03-01-01-01-01-02-10.wav neutral 143 | /data/RAVDESS/Actor_10/03-01-05-02-02-01-10.wav angry 144 | /data/RAVDESS/Actor_10/03-01-06-01-02-01-10.wav fearful 145 | /data/RAVDESS/Actor_10/03-01-07-02-02-01-10.wav disgust 146 | /data/RAVDESS/Actor_10/03-01-02-01-01-01-10.wav calm 147 | /data/RAVDESS/Actor_09/03-01-02-01-01-02-09.wav calm 148 | /data/RAVDESS/Actor_09/03-01-08-01-01-01-09.wav surprised 149 | /data/RAVDESS/Actor_08/03-01-04-02-02-01-08.wav sad 150 | /data/RAVDESS/Actor_08/03-01-02-01-02-02-08.wav calm 151 | /data/RAVDESS/Actor_08/03-01-05-02-01-01-08.wav angry 152 | /data/RAVDESS/Actor_04/03-01-08-01-01-02-04.wav surprised 153 | /data/RAVDESS/Actor_04/03-01-08-02-02-01-04.wav surprised 154 | /data/RAVDESS/Actor_04/03-01-04-01-02-01-04.wav sad 155 | /data/RAVDESS/Actor_04/03-01-08-02-01-01-04.wav surprised 156 | /data/RAVDESS/Actor_04/03-01-07-01-01-02-04.wav disgust 157 | /data/RAVDESS/Actor_04/03-01-04-02-02-02-04.wav sad 158 | /data/RAVDESS/Actor_04/03-01-07-02-01-02-04.wav disgust 159 | /data/RAVDESS/Actor_04/03-01-06-02-02-01-04.wav fearful 160 | /data/RAVDESS/Actor_04/03-01-06-01-01-02-04.wav fearful 161 | -------------------------------------------------------------------------------- /data/train.dbl: -------------------------------------------------------------------------------- 1 | /data/RAVDESS/Actor_02/03-01-02-02-01-01-02.wav calm 2 | /data/RAVDESS/Actor_08/03-01-05-02-02-01-08.wav angry 3 | /data/RAVDESS/Actor_07/03-01-05-01-02-01-07.wav angry 4 | /data/RAVDESS/Actor_12/03-01-08-02-02-02-12.wav surprised 5 | /data/RAVDESS/Actor_15/03-01-01-01-01-02-15.wav neutral 6 | /data/RAVDESS/Actor_20/03-01-04-02-02-02-20.wav sad 7 | /data/RAVDESS/Actor_05/03-01-08-02-02-01-05.wav surprised 8 | /data/RAVDESS/Actor_04/03-01-07-02-02-01-04.wav disgust 9 | /data/RAVDESS/Actor_02/03-01-02-01-02-02-02.wav calm 10 | /data/RAVDESS/Actor_17/03-01-05-02-02-02-17.wav angry 11 | /data/RAVDESS/Actor_09/03-01-04-01-01-01-09.wav sad 12 | /data/RAVDESS/Actor_20/03-01-06-01-01-01-20.wav fearful 13 | /data/RAVDESS/Actor_15/03-01-02-01-01-01-15.wav calm 14 | /data/RAVDESS/Actor_05/03-01-04-02-02-01-05.wav sad 15 | /data/RAVDESS/Actor_09/03-01-07-01-01-02-09.wav disgust 16 | /data/RAVDESS/Actor_19/03-01-01-01-01-02-19.wav neutral 17 | /data/RAVDESS/Actor_10/03-01-05-02-01-02-10.wav angry 18 | /data/RAVDESS/Actor_11/03-01-02-01-01-02-11.wav calm 19 | /data/RAVDESS/Actor_01/03-01-02-01-02-01-01.wav calm 20 | /data/RAVDESS/Actor_08/03-01-01-01-02-01-08.wav neutral 21 | /data/RAVDESS/Actor_16/03-01-01-01-02-01-16.wav neutral 22 | /data/RAVDESS/Actor_18/03-01-05-02-01-02-18.wav angry 23 | /data/RAVDESS/Actor_03/03-01-02-01-02-01-03.wav calm 24 | /data/RAVDESS/Actor_22/03-01-06-02-01-01-22.wav fearful 25 | /data/RAVDESS/Actor_02/03-01-03-02-01-01-02.wav happy 26 | /data/RAVDESS/Actor_11/03-01-05-01-02-01-11.wav angry 27 | /data/RAVDESS/Actor_12/03-01-03-02-01-01-12.wav happy 28 | /data/RAVDESS/Actor_21/03-01-03-02-02-02-21.wav happy 29 | /data/RAVDESS/Actor_22/03-01-05-01-01-02-22.wav angry 30 | /data/RAVDESS/Actor_19/03-01-05-02-01-01-19.wav angry 31 | /data/RAVDESS/Actor_09/03-01-03-01-02-01-09.wav happy 32 | /data/RAVDESS/Actor_07/03-01-04-02-01-02-07.wav sad 33 | /data/RAVDESS/Actor_12/03-01-03-02-02-01-12.wav happy 34 | /data/RAVDESS/Actor_18/03-01-07-02-02-02-18.wav disgust 35 | /data/RAVDESS/Actor_13/03-01-05-01-02-01-13.wav angry 36 | /data/RAVDESS/Actor_10/03-01-02-02-02-02-10.wav calm 37 | /data/RAVDESS/Actor_22/03-01-03-02-02-02-22.wav happy 38 | /data/RAVDESS/Actor_19/03-01-05-02-01-02-19.wav angry 39 | /data/RAVDESS/Actor_01/03-01-02-01-01-01-01.wav calm 40 | /data/RAVDESS/Actor_18/03-01-05-01-01-01-18.wav angry 41 | /data/RAVDESS/Actor_04/03-01-02-01-02-01-04.wav calm 42 | /data/RAVDESS/Actor_19/03-01-06-02-02-02-19.wav fearful 43 | /data/RAVDESS/Actor_17/03-01-04-02-02-01-17.wav sad 44 | /data/RAVDESS/Actor_21/03-01-07-01-02-02-21.wav disgust 45 | /data/RAVDESS/Actor_12/03-01-06-01-01-01-12.wav fearful 46 | /data/RAVDESS/Actor_13/03-01-04-01-02-01-13.wav sad 47 | /data/RAVDESS/Actor_01/03-01-08-02-02-01-01.wav surprised 48 | /data/RAVDESS/Actor_02/03-01-05-01-02-02-02.wav angry 49 | /data/RAVDESS/Actor_21/03-01-06-02-01-02-21.wav fearful 50 | /data/RAVDESS/Actor_17/03-01-04-01-02-01-17.wav sad 51 | /data/RAVDESS/Actor_07/03-01-01-01-02-02-07.wav neutral 52 | /data/RAVDESS/Actor_17/03-01-08-01-02-01-17.wav surprised 53 | /data/RAVDESS/Actor_03/03-01-06-02-01-01-03.wav fearful 54 | /data/RAVDESS/Actor_04/03-01-01-01-02-02-04.wav neutral 55 | /data/RAVDESS/Actor_06/03-01-02-01-02-01-06.wav calm 56 | /data/RAVDESS/Actor_08/03-01-01-01-01-01-08.wav neutral 57 | /data/RAVDESS/Actor_21/03-01-05-02-01-01-21.wav angry 58 | /data/RAVDESS/Actor_18/03-01-06-02-02-01-18.wav fearful 59 | /data/RAVDESS/Actor_06/03-01-06-02-02-02-06.wav fearful 60 | /data/RAVDESS/Actor_04/03-01-03-01-02-01-04.wav happy 61 | /data/RAVDESS/Actor_10/03-01-03-02-02-01-10.wav happy 62 | /data/RAVDESS/Actor_17/03-01-06-02-02-02-17.wav fearful 63 | /data/RAVDESS/Actor_08/03-01-03-02-02-02-08.wav happy 64 | /data/RAVDESS/Actor_07/03-01-06-01-01-01-07.wav fearful 65 | /data/RAVDESS/Actor_04/03-01-01-01-01-02-04.wav neutral 66 | /data/RAVDESS/Actor_19/03-01-03-01-01-01-19.wav happy 67 | /data/RAVDESS/Actor_10/03-01-03-01-01-02-10.wav happy 68 | /data/RAVDESS/Actor_14/03-01-08-02-01-02-14.wav surprised 69 | /data/RAVDESS/Actor_19/03-01-08-01-01-01-19.wav surprised 70 | /data/RAVDESS/Actor_02/03-01-07-02-01-02-02.wav disgust 71 | /data/RAVDESS/Actor_15/03-01-07-01-01-02-15.wav disgust 72 | /data/RAVDESS/Actor_10/03-01-08-01-02-02-10.wav surprised 73 | /data/RAVDESS/Actor_14/03-01-03-02-02-02-14.wav happy 74 | /data/RAVDESS/Actor_08/03-01-08-02-01-02-08.wav surprised 75 | /data/RAVDESS/Actor_19/03-01-07-02-02-01-19.wav disgust 76 | /data/RAVDESS/Actor_16/03-01-05-02-02-01-16.wav angry 77 | /data/RAVDESS/Actor_19/03-01-03-02-01-01-19.wav happy 78 | /data/RAVDESS/Actor_15/03-01-03-02-01-02-15.wav happy 79 | /data/RAVDESS/Actor_05/03-01-03-01-02-02-05.wav happy 80 | /data/RAVDESS/Actor_21/03-01-02-02-01-02-21.wav calm 81 | /data/RAVDESS/Actor_10/03-01-05-01-02-01-10.wav angry 82 | /data/RAVDESS/Actor_13/03-01-03-02-02-02-13.wav happy 83 | /data/RAVDESS/Actor_12/03-01-08-02-01-02-12.wav surprised 84 | /data/RAVDESS/Actor_09/03-01-08-01-02-01-09.wav surprised 85 | /data/RAVDESS/Actor_03/03-01-03-01-01-01-03.wav happy 86 | /data/RAVDESS/Actor_03/03-01-05-01-01-02-03.wav angry 87 | /data/RAVDESS/Actor_09/03-01-08-02-01-02-09.wav surprised 88 | /data/RAVDESS/Actor_11/03-01-07-01-01-02-11.wav disgust 89 | /data/RAVDESS/Actor_09/03-01-04-02-01-02-09.wav sad 90 | /data/RAVDESS/Actor_18/03-01-02-01-02-01-18.wav calm 91 | /data/RAVDESS/Actor_13/03-01-03-01-01-02-13.wav happy 92 | /data/RAVDESS/Actor_01/03-01-03-02-01-02-01.wav happy 93 | /data/RAVDESS/Actor_17/03-01-02-02-02-01-17.wav calm 94 | /data/RAVDESS/Actor_10/03-01-06-01-01-01-10.wav fearful 95 | /data/RAVDESS/Actor_10/03-01-07-01-02-02-10.wav disgust 96 | /data/RAVDESS/Actor_15/03-01-08-02-01-01-15.wav surprised 97 | /data/RAVDESS/Actor_01/03-01-08-02-01-01-01.wav surprised 98 | /data/RAVDESS/Actor_03/03-01-08-02-02-02-03.wav surprised 99 | /data/RAVDESS/Actor_12/03-01-04-02-02-02-12.wav sad 100 | /data/RAVDESS/Actor_06/03-01-04-01-01-01-06.wav sad 101 | /data/RAVDESS/Actor_19/03-01-06-01-02-01-19.wav fearful 102 | /data/RAVDESS/Actor_14/03-01-08-01-01-02-14.wav surprised 103 | /data/RAVDESS/Actor_18/03-01-08-01-02-02-18.wav surprised 104 | /data/RAVDESS/Actor_05/03-01-03-01-01-01-05.wav happy 105 | /data/RAVDESS/Actor_17/03-01-05-01-01-02-17.wav angry 106 | /data/RAVDESS/Actor_15/03-01-02-02-01-01-15.wav calm 107 | /data/RAVDESS/Actor_20/03-01-05-02-02-01-20.wav angry 108 | /data/RAVDESS/Actor_07/03-01-03-02-02-01-07.wav happy 109 | /data/RAVDESS/Actor_16/03-01-07-01-01-01-16.wav disgust 110 | /data/RAVDESS/Actor_18/03-01-04-02-01-02-18.wav sad 111 | /data/RAVDESS/Actor_08/03-01-02-01-02-01-08.wav calm 112 | /data/RAVDESS/Actor_18/03-01-06-01-01-02-18.wav fearful 113 | /data/RAVDESS/Actor_17/03-01-07-02-01-02-17.wav disgust 114 | /data/RAVDESS/Actor_13/03-01-06-02-02-02-13.wav fearful 115 | /data/RAVDESS/Actor_06/03-01-02-01-01-01-06.wav calm 116 | /data/RAVDESS/Actor_09/03-01-04-01-02-01-09.wav sad 117 | /data/RAVDESS/Actor_01/03-01-04-01-01-01-01.wav sad 118 | /data/RAVDESS/Actor_02/03-01-04-01-01-01-02.wav sad 119 | /data/RAVDESS/Actor_03/03-01-01-01-02-02-03.wav neutral 120 | /data/RAVDESS/Actor_05/03-01-05-02-02-01-05.wav angry 121 | /data/RAVDESS/Actor_11/03-01-06-01-01-01-11.wav fearful 122 | /data/RAVDESS/Actor_17/03-01-03-02-02-02-17.wav happy 123 | /data/RAVDESS/Actor_19/03-01-03-02-01-02-19.wav happy 124 | /data/RAVDESS/Actor_22/03-01-06-01-02-01-22.wav fearful 125 | /data/RAVDESS/Actor_03/03-01-02-02-01-02-03.wav calm 126 | /data/RAVDESS/Actor_04/03-01-02-02-01-01-04.wav calm 127 | /data/RAVDESS/Actor_09/03-01-05-01-01-02-09.wav angry 128 | /data/RAVDESS/Actor_15/03-01-04-02-01-01-15.wav sad 129 | /data/RAVDESS/Actor_09/03-01-02-01-01-01-09.wav calm 130 | /data/RAVDESS/Actor_16/03-01-06-02-02-01-16.wav fearful 131 | /data/RAVDESS/Actor_11/03-01-07-01-01-01-11.wav disgust 132 | /data/RAVDESS/Actor_13/03-01-07-01-02-02-13.wav disgust 133 | /data/RAVDESS/Actor_09/03-01-02-02-02-01-09.wav calm 134 | /data/RAVDESS/Actor_01/03-01-04-01-02-01-01.wav sad 135 | /data/RAVDESS/Actor_18/03-01-06-01-02-02-18.wav fearful 136 | /data/RAVDESS/Actor_03/03-01-07-02-02-01-03.wav disgust 137 | /data/RAVDESS/Actor_17/03-01-02-01-01-01-17.wav calm 138 | /data/RAVDESS/Actor_16/03-01-03-02-02-02-16.wav happy 139 | /data/RAVDESS/Actor_07/03-01-06-01-02-02-07.wav fearful 140 | /data/RAVDESS/Actor_14/03-01-08-02-02-02-14.wav surprised 141 | /data/RAVDESS/Actor_08/03-01-06-02-02-02-08.wav fearful 142 | /data/RAVDESS/Actor_19/03-01-04-02-02-01-19.wav sad 143 | /data/RAVDESS/Actor_20/03-01-03-02-01-02-20.wav happy 144 | /data/RAVDESS/Actor_15/03-01-08-02-02-02-15.wav surprised 145 | /data/RAVDESS/Actor_03/03-01-06-01-01-02-03.wav fearful 146 | /data/RAVDESS/Actor_20/03-01-03-01-02-01-20.wav happy 147 | /data/RAVDESS/Actor_02/03-01-07-01-01-01-02.wav disgust 148 | /data/RAVDESS/Actor_02/03-01-04-02-02-01-02.wav sad 149 | /data/RAVDESS/Actor_04/03-01-04-02-01-01-04.wav sad 150 | /data/RAVDESS/Actor_05/03-01-06-02-02-02-05.wav fearful 151 | /data/RAVDESS/Actor_21/03-01-04-02-01-02-21.wav sad 152 | /data/RAVDESS/Actor_07/03-01-06-02-01-02-07.wav fearful 153 | /data/RAVDESS/Actor_16/03-01-02-01-01-01-16.wav calm 154 | /data/RAVDESS/Actor_15/03-01-07-01-02-01-15.wav disgust 155 | /data/RAVDESS/Actor_20/03-01-07-01-02-02-20.wav disgust 156 | /data/RAVDESS/Actor_18/03-01-05-01-01-02-18.wav angry 157 | /data/RAVDESS/Actor_05/03-01-06-01-02-01-05.wav fearful 158 | /data/RAVDESS/Actor_20/03-01-02-02-02-01-20.wav calm 159 | /data/RAVDESS/Actor_15/03-01-06-01-02-02-15.wav fearful 160 | /data/RAVDESS/Actor_11/03-01-06-02-02-01-11.wav fearful 161 | /data/RAVDESS/Actor_05/03-01-06-01-01-02-05.wav fearful 162 | /data/RAVDESS/Actor_17/03-01-03-02-01-02-17.wav happy 163 | /data/RAVDESS/Actor_01/03-01-07-02-01-01-01.wav disgust 164 | /data/RAVDESS/Actor_20/03-01-06-02-01-02-20.wav fearful 165 | /data/RAVDESS/Actor_17/03-01-02-01-02-01-17.wav calm 166 | /data/RAVDESS/Actor_01/03-01-06-01-02-01-01.wav fearful 167 | /data/RAVDESS/Actor_12/03-01-02-01-02-01-12.wav calm 168 | /data/RAVDESS/Actor_07/03-01-02-02-01-01-07.wav calm 169 | /data/RAVDESS/Actor_21/03-01-06-02-02-02-21.wav fearful 170 | /data/RAVDESS/Actor_16/03-01-04-02-02-02-16.wav sad 171 | /data/RAVDESS/Actor_12/03-01-04-01-01-02-12.wav sad 172 | /data/RAVDESS/Actor_06/03-01-03-02-01-02-06.wav happy 173 | /data/RAVDESS/Actor_19/03-01-02-02-01-01-19.wav calm 174 | /data/RAVDESS/Actor_08/03-01-07-02-02-02-08.wav disgust 175 | /data/RAVDESS/Actor_07/03-01-04-02-01-01-07.wav sad 176 | /data/RAVDESS/Actor_04/03-01-05-02-02-02-04.wav angry 177 | /data/RAVDESS/Actor_07/03-01-07-01-02-02-07.wav disgust 178 | /data/RAVDESS/Actor_04/03-01-07-01-02-01-04.wav disgust 179 | /data/RAVDESS/Actor_20/03-01-03-01-02-02-20.wav happy 180 | /data/RAVDESS/Actor_07/03-01-08-02-01-01-07.wav surprised 181 | /data/RAVDESS/Actor_09/03-01-03-02-02-01-09.wav happy 182 | /data/RAVDESS/Actor_01/03-01-08-01-01-01-01.wav surprised 183 | /data/RAVDESS/Actor_21/03-01-08-01-02-01-21.wav surprised 184 | /data/RAVDESS/Actor_09/03-01-07-01-02-01-09.wav disgust 185 | /data/RAVDESS/Actor_05/03-01-02-01-01-02-05.wav calm 186 | /data/RAVDESS/Actor_20/03-01-03-02-01-01-20.wav happy 187 | /data/RAVDESS/Actor_12/03-01-06-02-02-02-12.wav fearful 188 | /data/RAVDESS/Actor_08/03-01-05-01-02-01-08.wav angry 189 | /data/RAVDESS/Actor_10/03-01-05-01-01-02-10.wav angry 190 | /data/RAVDESS/Actor_19/03-01-01-01-01-01-19.wav neutral 191 | /data/RAVDESS/Actor_04/03-01-05-02-01-02-04.wav angry 192 | /data/RAVDESS/Actor_13/03-01-02-01-02-01-13.wav calm 193 | /data/RAVDESS/Actor_12/03-01-05-01-01-02-12.wav angry 194 | /data/RAVDESS/Actor_04/03-01-03-02-02-01-04.wav happy 195 | /data/RAVDESS/Actor_02/03-01-06-01-02-02-02.wav fearful 196 | /data/RAVDESS/Actor_13/03-01-02-02-01-02-13.wav calm 197 | /data/RAVDESS/Actor_07/03-01-03-02-01-01-07.wav happy 198 | /data/RAVDESS/Actor_21/03-01-07-02-01-01-21.wav disgust 199 | /data/RAVDESS/Actor_15/03-01-06-02-01-02-15.wav fearful 200 | /data/RAVDESS/Actor_12/03-01-05-01-02-02-12.wav angry 201 | /data/RAVDESS/Actor_06/03-01-08-01-01-02-06.wav surprised 202 | /data/RAVDESS/Actor_08/03-01-06-01-02-02-08.wav fearful 203 | /data/RAVDESS/Actor_20/03-01-08-01-01-02-20.wav surprised 204 | /data/RAVDESS/Actor_10/03-01-06-01-01-02-10.wav fearful 205 | /data/RAVDESS/Actor_22/03-01-02-02-02-02-22.wav calm 206 | /data/RAVDESS/Actor_22/03-01-03-02-01-01-22.wav happy 207 | /data/RAVDESS/Actor_12/03-01-04-02-01-02-12.wav sad 208 | /data/RAVDESS/Actor_01/03-01-04-02-02-01-01.wav sad 209 | /data/RAVDESS/Actor_04/03-01-03-01-01-01-04.wav happy 210 | /data/RAVDESS/Actor_20/03-01-03-02-02-02-20.wav happy 211 | /data/RAVDESS/Actor_18/03-01-07-02-01-02-18.wav disgust 212 | /data/RAVDESS/Actor_19/03-01-06-01-02-02-19.wav fearful 213 | /data/RAVDESS/Actor_10/03-01-02-01-01-02-10.wav calm 214 | /data/RAVDESS/Actor_06/03-01-02-02-02-02-06.wav calm 215 | /data/RAVDESS/Actor_05/03-01-05-01-02-01-05.wav angry 216 | /data/RAVDESS/Actor_03/03-01-04-02-01-01-03.wav sad 217 | /data/RAVDESS/Actor_15/03-01-07-02-01-02-15.wav disgust 218 | /data/RAVDESS/Actor_11/03-01-03-01-01-02-11.wav happy 219 | /data/RAVDESS/Actor_13/03-01-07-01-01-02-13.wav disgust 220 | /data/RAVDESS/Actor_15/03-01-06-01-02-01-15.wav fearful 221 | /data/RAVDESS/Actor_22/03-01-02-01-02-02-22.wav calm 222 | /data/RAVDESS/Actor_10/03-01-02-01-02-01-10.wav calm 223 | /data/RAVDESS/Actor_19/03-01-04-01-02-02-19.wav sad 224 | /data/RAVDESS/Actor_06/03-01-08-02-01-01-06.wav surprised 225 | /data/RAVDESS/Actor_20/03-01-08-02-02-01-20.wav surprised 226 | /data/RAVDESS/Actor_14/03-01-04-02-01-01-14.wav sad 227 | /data/RAVDESS/Actor_16/03-01-08-01-02-01-16.wav surprised 228 | /data/RAVDESS/Actor_03/03-01-01-01-01-01-03.wav neutral 229 | /data/RAVDESS/Actor_10/03-01-05-01-02-02-10.wav angry 230 | /data/RAVDESS/Actor_02/03-01-02-01-01-01-02.wav calm 231 | /data/RAVDESS/Actor_01/03-01-05-02-01-02-01.wav angry 232 | /data/RAVDESS/Actor_08/03-01-06-01-01-02-08.wav fearful 233 | /data/RAVDESS/Actor_04/03-01-06-01-01-01-04.wav fearful 234 | /data/RAVDESS/Actor_22/03-01-07-01-01-02-22.wav disgust 235 | /data/RAVDESS/Actor_11/03-01-05-02-01-02-11.wav angry 236 | /data/RAVDESS/Actor_11/03-01-02-02-02-01-11.wav calm 237 | /data/RAVDESS/Actor_19/03-01-03-02-02-01-19.wav happy 238 | /data/RAVDESS/Actor_04/03-01-03-02-01-01-04.wav happy 239 | /data/RAVDESS/Actor_05/03-01-05-02-02-02-05.wav angry 240 | /data/RAVDESS/Actor_05/03-01-03-01-02-01-05.wav happy 241 | /data/RAVDESS/Actor_05/03-01-04-01-02-01-05.wav sad 242 | /data/RAVDESS/Actor_15/03-01-08-02-01-02-15.wav surprised 243 | /data/RAVDESS/Actor_09/03-01-08-02-01-01-09.wav surprised 244 | /data/RAVDESS/Actor_22/03-01-05-02-02-01-22.wav angry 245 | /data/RAVDESS/Actor_18/03-01-07-01-01-02-18.wav disgust 246 | /data/RAVDESS/Actor_01/03-01-07-02-02-02-01.wav disgust 247 | /data/RAVDESS/Actor_06/03-01-04-02-01-02-06.wav sad 248 | /data/RAVDESS/Actor_20/03-01-08-02-02-02-20.wav surprised 249 | /data/RAVDESS/Actor_01/03-01-01-01-02-02-01.wav neutral 250 | /data/RAVDESS/Actor_17/03-01-08-02-02-02-17.wav surprised 251 | /data/RAVDESS/Actor_03/03-01-06-01-02-02-03.wav fearful 252 | /data/RAVDESS/Actor_17/03-01-03-01-01-01-17.wav happy 253 | /data/RAVDESS/Actor_11/03-01-05-02-02-01-11.wav angry 254 | /data/RAVDESS/Actor_17/03-01-04-02-01-01-17.wav sad 255 | /data/RAVDESS/Actor_22/03-01-07-02-01-01-22.wav disgust 256 | /data/RAVDESS/Actor_04/03-01-02-01-02-02-04.wav calm 257 | /data/RAVDESS/Actor_12/03-01-06-01-01-02-12.wav fearful 258 | /data/RAVDESS/Actor_07/03-01-02-02-01-02-07.wav calm 259 | /data/RAVDESS/Actor_14/03-01-02-02-02-01-14.wav calm 260 | /data/RAVDESS/Actor_20/03-01-08-01-01-01-20.wav surprised 261 | /data/RAVDESS/Actor_14/03-01-05-01-02-02-14.wav angry 262 | /data/RAVDESS/Actor_15/03-01-03-01-01-01-15.wav happy 263 | /data/RAVDESS/Actor_13/03-01-05-02-02-02-13.wav angry 264 | /data/RAVDESS/Actor_12/03-01-08-01-02-01-12.wav surprised 265 | /data/RAVDESS/Actor_02/03-01-08-02-02-02-02.wav surprised 266 | /data/RAVDESS/Actor_15/03-01-04-01-02-01-15.wav sad 267 | /data/RAVDESS/Actor_22/03-01-08-01-01-02-22.wav surprised 268 | /data/RAVDESS/Actor_12/03-01-08-01-02-02-12.wav surprised 269 | /data/RAVDESS/Actor_18/03-01-02-01-01-01-18.wav calm 270 | /data/RAVDESS/Actor_08/03-01-05-02-01-02-08.wav angry 271 | /data/RAVDESS/Actor_04/03-01-06-01-02-01-04.wav fearful 272 | /data/RAVDESS/Actor_17/03-01-04-01-01-01-17.wav sad 273 | /data/RAVDESS/Actor_01/03-01-02-02-01-02-01.wav calm 274 | /data/RAVDESS/Actor_10/03-01-07-02-01-02-10.wav disgust 275 | /data/RAVDESS/Actor_05/03-01-06-01-01-01-05.wav fearful 276 | /data/RAVDESS/Actor_22/03-01-02-02-01-01-22.wav calm 277 | /data/RAVDESS/Actor_20/03-01-08-01-02-02-20.wav surprised 278 | /data/RAVDESS/Actor_01/03-01-08-01-01-02-01.wav surprised 279 | /data/RAVDESS/Actor_19/03-01-07-02-01-01-19.wav disgust 280 | /data/RAVDESS/Actor_11/03-01-03-02-01-01-11.wav happy 281 | /data/RAVDESS/Actor_14/03-01-06-02-01-01-14.wav fearful 282 | /data/RAVDESS/Actor_09/03-01-05-01-02-01-09.wav angry 283 | /data/RAVDESS/Actor_16/03-01-01-01-01-02-16.wav neutral 284 | /data/RAVDESS/Actor_19/03-01-05-02-02-02-19.wav angry 285 | /data/RAVDESS/Actor_11/03-01-08-02-02-01-11.wav surprised 286 | /data/RAVDESS/Actor_12/03-01-02-01-01-02-12.wav calm 287 | /data/RAVDESS/Actor_18/03-01-04-01-02-01-18.wav sad 288 | /data/RAVDESS/Actor_22/03-01-06-02-02-01-22.wav fearful 289 | /data/RAVDESS/Actor_09/03-01-04-02-02-01-09.wav sad 290 | /data/RAVDESS/Actor_15/03-01-01-01-02-01-15.wav neutral 291 | /data/RAVDESS/Actor_17/03-01-06-01-01-01-17.wav fearful 292 | /data/RAVDESS/Actor_07/03-01-03-02-02-02-07.wav happy 293 | /data/RAVDESS/Actor_16/03-01-02-02-02-01-16.wav calm 294 | /data/RAVDESS/Actor_09/03-01-03-02-02-02-09.wav happy 295 | /data/RAVDESS/Actor_11/03-01-06-02-01-02-11.wav fearful 296 | /data/RAVDESS/Actor_21/03-01-03-02-02-01-21.wav happy 297 | /data/RAVDESS/Actor_05/03-01-02-02-02-01-05.wav calm 298 | /data/RAVDESS/Actor_08/03-01-07-01-02-01-08.wav disgust 299 | /data/RAVDESS/Actor_03/03-01-07-01-01-02-03.wav disgust 300 | /data/RAVDESS/Actor_14/03-01-03-02-02-01-14.wav happy 301 | /data/RAVDESS/Actor_14/03-01-08-02-02-01-14.wav surprised 302 | /data/RAVDESS/Actor_22/03-01-08-02-01-02-22.wav surprised 303 | /data/RAVDESS/Actor_05/03-01-02-01-02-01-05.wav calm 304 | /data/RAVDESS/Actor_07/03-01-08-01-02-02-07.wav surprised 305 | /data/RAVDESS/Actor_11/03-01-07-02-02-02-11.wav disgust 306 | /data/RAVDESS/Actor_13/03-01-01-01-01-01-13.wav neutral 307 | /data/RAVDESS/Actor_02/03-01-01-01-01-01-02.wav neutral 308 | /data/RAVDESS/Actor_01/03-01-02-02-02-02-01.wav calm 309 | /data/RAVDESS/Actor_19/03-01-08-02-01-01-19.wav surprised 310 | /data/RAVDESS/Actor_22/03-01-04-02-02-01-22.wav sad 311 | /data/RAVDESS/Actor_03/03-01-07-02-01-01-03.wav disgust 312 | /data/RAVDESS/Actor_17/03-01-07-02-01-01-17.wav disgust 313 | /data/RAVDESS/Actor_08/03-01-04-02-01-02-08.wav sad 314 | /data/RAVDESS/Actor_01/03-01-06-01-02-02-01.wav fearful 315 | /data/RAVDESS/Actor_03/03-01-05-02-02-01-03.wav angry 316 | /data/RAVDESS/Actor_08/03-01-02-02-02-02-08.wav calm 317 | /data/RAVDESS/Actor_21/03-01-04-02-01-01-21.wav sad 318 | /data/RAVDESS/Actor_16/03-01-05-02-02-02-16.wav angry 319 | /data/RAVDESS/Actor_02/03-01-08-01-02-02-02.wav surprised 320 | /data/RAVDESS/Actor_02/03-01-08-02-01-02-02.wav surprised 321 | /data/RAVDESS/Actor_08/03-01-08-02-02-01-08.wav surprised 322 | /data/RAVDESS/Actor_05/03-01-02-02-01-02-05.wav calm 323 | /data/RAVDESS/Actor_03/03-01-04-02-02-01-03.wav sad 324 | /data/RAVDESS/Actor_09/03-01-07-01-01-01-09.wav disgust 325 | /data/RAVDESS/Actor_16/03-01-07-01-02-01-16.wav disgust 326 | /data/RAVDESS/Actor_19/03-01-03-01-01-02-19.wav happy 327 | /data/RAVDESS/Actor_12/03-01-08-01-01-01-12.wav surprised 328 | /data/RAVDESS/Actor_18/03-01-02-02-01-02-18.wav calm 329 | /data/RAVDESS/Actor_18/03-01-02-02-02-02-18.wav calm 330 | /data/RAVDESS/Actor_07/03-01-05-01-01-02-07.wav angry 331 | /data/RAVDESS/Actor_20/03-01-04-01-01-01-20.wav sad 332 | /data/RAVDESS/Actor_07/03-01-07-02-02-01-07.wav disgust 333 | /data/RAVDESS/Actor_02/03-01-05-02-01-01-02.wav angry 334 | /data/RAVDESS/Actor_15/03-01-07-02-02-02-15.wav disgust 335 | /data/RAVDESS/Actor_21/03-01-05-01-02-02-21.wav angry 336 | /data/RAVDESS/Actor_02/03-01-03-01-02-02-02.wav happy 337 | /data/RAVDESS/Actor_20/03-01-04-02-01-01-20.wav sad 338 | /data/RAVDESS/Actor_08/03-01-05-01-01-02-08.wav angry 339 | /data/RAVDESS/Actor_11/03-01-07-02-02-01-11.wav disgust 340 | /data/RAVDESS/Actor_03/03-01-08-02-01-01-03.wav surprised 341 | /data/RAVDESS/Actor_11/03-01-04-02-01-01-11.wav sad 342 | /data/RAVDESS/Actor_11/03-01-04-02-02-02-11.wav sad 343 | /data/RAVDESS/Actor_08/03-01-08-02-02-02-08.wav surprised 344 | /data/RAVDESS/Actor_08/03-01-04-02-01-01-08.wav sad 345 | /data/RAVDESS/Actor_11/03-01-04-02-01-02-11.wav sad 346 | /data/RAVDESS/Actor_20/03-01-02-02-01-01-20.wav calm 347 | /data/RAVDESS/Actor_20/03-01-05-01-02-02-20.wav angry 348 | /data/RAVDESS/Actor_01/03-01-01-01-02-01-01.wav neutral 349 | /data/RAVDESS/Actor_15/03-01-01-01-01-01-15.wav neutral 350 | /data/RAVDESS/Actor_18/03-01-08-01-01-02-18.wav surprised 351 | /data/RAVDESS/Actor_03/03-01-03-01-01-02-03.wav happy 352 | /data/RAVDESS/Actor_01/03-01-05-02-02-01-01.wav angry 353 | /data/RAVDESS/Actor_06/03-01-03-02-02-01-06.wav happy 354 | /data/RAVDESS/Actor_20/03-01-05-02-01-01-20.wav angry 355 | /data/RAVDESS/Actor_21/03-01-06-01-02-02-21.wav fearful 356 | /data/RAVDESS/Actor_13/03-01-02-01-01-02-13.wav calm 357 | /data/RAVDESS/Actor_08/03-01-07-01-01-02-08.wav disgust 358 | /data/RAVDESS/Actor_15/03-01-03-01-02-02-15.wav happy 359 | /data/RAVDESS/Actor_09/03-01-04-01-01-02-09.wav sad 360 | /data/RAVDESS/Actor_18/03-01-07-01-01-01-18.wav disgust 361 | /data/RAVDESS/Actor_06/03-01-01-01-02-01-06.wav neutral 362 | /data/RAVDESS/Actor_02/03-01-01-01-02-02-02.wav neutral 363 | /data/RAVDESS/Actor_21/03-01-02-02-02-02-21.wav calm 364 | /data/RAVDESS/Actor_20/03-01-08-02-01-01-20.wav surprised 365 | /data/RAVDESS/Actor_08/03-01-02-01-01-02-08.wav calm 366 | /data/RAVDESS/Actor_06/03-01-02-02-01-02-06.wav calm 367 | /data/RAVDESS/Actor_09/03-01-04-02-02-02-09.wav sad 368 | /data/RAVDESS/Actor_14/03-01-03-01-02-01-14.wav happy 369 | /data/RAVDESS/Actor_13/03-01-04-02-01-01-13.wav sad 370 | /data/RAVDESS/Actor_03/03-01-03-01-02-02-03.wav happy 371 | /data/RAVDESS/Actor_04/03-01-08-01-02-02-04.wav surprised 372 | /data/RAVDESS/Actor_10/03-01-04-02-02-01-10.wav sad 373 | /data/RAVDESS/Actor_05/03-01-07-02-02-01-05.wav disgust 374 | /data/RAVDESS/Actor_14/03-01-08-01-02-01-14.wav surprised 375 | /data/RAVDESS/Actor_12/03-01-04-01-02-01-12.wav sad 376 | /data/RAVDESS/Actor_05/03-01-08-01-02-02-05.wav surprised 377 | /data/RAVDESS/Actor_21/03-01-03-01-02-01-21.wav happy 378 | /data/RAVDESS/Actor_13/03-01-03-02-02-01-13.wav happy 379 | /data/RAVDESS/Actor_21/03-01-01-01-01-01-21.wav neutral 380 | /data/RAVDESS/Actor_11/03-01-03-02-02-01-11.wav happy 381 | /data/RAVDESS/Actor_01/03-01-03-02-01-01-01.wav happy 382 | /data/RAVDESS/Actor_19/03-01-08-01-02-01-19.wav surprised 383 | /data/RAVDESS/Actor_11/03-01-04-02-02-01-11.wav sad 384 | /data/RAVDESS/Actor_17/03-01-08-01-01-01-17.wav surprised 385 | /data/RAVDESS/Actor_16/03-01-08-01-01-01-16.wav surprised 386 | /data/RAVDESS/Actor_14/03-01-05-01-02-01-14.wav angry 387 | /data/RAVDESS/Actor_10/03-01-08-02-02-02-10.wav surprised 388 | /data/RAVDESS/Actor_16/03-01-01-01-02-02-16.wav neutral 389 | /data/RAVDESS/Actor_10/03-01-06-01-02-02-10.wav fearful 390 | /data/RAVDESS/Actor_14/03-01-05-02-02-01-14.wav angry 391 | /data/RAVDESS/Actor_13/03-01-04-02-02-02-13.wav sad 392 | /data/RAVDESS/Actor_21/03-01-05-01-01-02-21.wav angry 393 | /data/RAVDESS/Actor_17/03-01-02-02-01-01-17.wav calm 394 | /data/RAVDESS/Actor_05/03-01-02-02-02-02-05.wav calm 395 | /data/RAVDESS/Actor_13/03-01-06-01-01-02-13.wav fearful 396 | /data/RAVDESS/Actor_13/03-01-03-01-02-01-13.wav happy 397 | /data/RAVDESS/Actor_22/03-01-06-01-01-02-22.wav fearful 398 | /data/RAVDESS/Actor_15/03-01-07-02-02-01-15.wav disgust 399 | /data/RAVDESS/Actor_04/03-01-02-02-02-01-04.wav calm 400 | /data/RAVDESS/Actor_08/03-01-07-02-01-02-08.wav disgust 401 | /data/RAVDESS/Actor_01/03-01-04-02-01-02-01.wav sad 402 | /data/RAVDESS/Actor_21/03-01-05-02-02-02-21.wav angry 403 | /data/RAVDESS/Actor_07/03-01-06-02-02-02-07.wav fearful 404 | /data/RAVDESS/Actor_12/03-01-07-02-02-01-12.wav disgust 405 | /data/RAVDESS/Actor_12/03-01-03-01-02-01-12.wav happy 406 | /data/RAVDESS/Actor_03/03-01-04-01-01-01-03.wav sad 407 | /data/RAVDESS/Actor_13/03-01-06-02-02-01-13.wav fearful 408 | /data/RAVDESS/Actor_10/03-01-06-02-01-01-10.wav fearful 409 | /data/RAVDESS/Actor_22/03-01-04-01-01-01-22.wav sad 410 | /data/RAVDESS/Actor_01/03-01-07-01-01-02-01.wav disgust 411 | /data/RAVDESS/Actor_05/03-01-07-02-01-01-05.wav disgust 412 | /data/RAVDESS/Actor_20/03-01-05-01-01-01-20.wav angry 413 | /data/RAVDESS/Actor_20/03-01-04-01-02-02-20.wav sad 414 | /data/RAVDESS/Actor_11/03-01-05-02-01-01-11.wav angry 415 | /data/RAVDESS/Actor_03/03-01-08-01-02-02-03.wav surprised 416 | /data/RAVDESS/Actor_07/03-01-05-01-02-02-07.wav angry 417 | /data/RAVDESS/Actor_14/03-01-06-01-01-01-14.wav fearful 418 | /data/RAVDESS/Actor_03/03-01-04-02-01-02-03.wav sad 419 | /data/RAVDESS/Actor_13/03-01-07-01-01-01-13.wav disgust 420 | /data/RAVDESS/Actor_20/03-01-02-01-01-02-20.wav calm 421 | /data/RAVDESS/Actor_15/03-01-05-02-01-02-15.wav angry 422 | /data/RAVDESS/Actor_09/03-01-01-01-02-02-09.wav neutral 423 | /data/RAVDESS/Actor_06/03-01-08-01-01-01-06.wav surprised 424 | /data/RAVDESS/Actor_04/03-01-06-02-01-01-04.wav fearful 425 | /data/RAVDESS/Actor_09/03-01-07-02-01-02-09.wav disgust 426 | /data/RAVDESS/Actor_11/03-01-06-01-02-02-11.wav fearful 427 | /data/RAVDESS/Actor_02/03-01-04-01-01-02-02.wav sad 428 | /data/RAVDESS/Actor_02/03-01-05-02-02-01-02.wav angry 429 | /data/RAVDESS/Actor_22/03-01-05-01-02-01-22.wav angry 430 | /data/RAVDESS/Actor_03/03-01-01-01-01-02-03.wav neutral 431 | /data/RAVDESS/Actor_15/03-01-05-01-02-01-15.wav angry 432 | /data/RAVDESS/Actor_05/03-01-01-01-02-02-05.wav neutral 433 | /data/RAVDESS/Actor_19/03-01-04-01-01-02-19.wav sad 434 | /data/RAVDESS/Actor_20/03-01-06-02-02-02-20.wav fearful 435 | /data/RAVDESS/Actor_17/03-01-08-02-01-02-17.wav surprised 436 | /data/RAVDESS/Actor_17/03-01-04-02-01-02-17.wav sad 437 | /data/RAVDESS/Actor_13/03-01-04-02-01-02-13.wav sad 438 | /data/RAVDESS/Actor_09/03-01-02-01-02-02-09.wav calm 439 | /data/RAVDESS/Actor_10/03-01-06-02-02-02-10.wav fearful 440 | /data/RAVDESS/Actor_16/03-01-04-01-02-02-16.wav sad 441 | /data/RAVDESS/Actor_20/03-01-04-01-02-01-20.wav sad 442 | /data/RAVDESS/Actor_16/03-01-05-01-02-02-16.wav angry 443 | /data/RAVDESS/Actor_22/03-01-05-02-01-01-22.wav angry 444 | /data/RAVDESS/Actor_09/03-01-03-01-01-01-09.wav happy 445 | /data/RAVDESS/Actor_14/03-01-08-01-02-02-14.wav surprised 446 | /data/RAVDESS/Actor_12/03-01-07-01-02-01-12.wav disgust 447 | /data/RAVDESS/Actor_15/03-01-02-02-01-02-15.wav calm 448 | /data/RAVDESS/Actor_01/03-01-05-01-02-02-01.wav angry 449 | /data/RAVDESS/Actor_11/03-01-08-02-02-02-11.wav surprised 450 | /data/RAVDESS/Actor_12/03-01-02-01-02-02-12.wav calm 451 | /data/RAVDESS/Actor_17/03-01-03-01-02-01-17.wav happy 452 | /data/RAVDESS/Actor_04/03-01-04-01-01-01-04.wav sad 453 | /data/RAVDESS/Actor_12/03-01-05-02-01-01-12.wav angry 454 | /data/RAVDESS/Actor_19/03-01-08-01-01-02-19.wav surprised 455 | /data/RAVDESS/Actor_17/03-01-07-01-02-02-17.wav disgust 456 | /data/RAVDESS/Actor_02/03-01-07-01-02-02-02.wav disgust 457 | /data/RAVDESS/Actor_13/03-01-07-01-02-01-13.wav disgust 458 | /data/RAVDESS/Actor_04/03-01-04-01-02-02-04.wav sad 459 | /data/RAVDESS/Actor_22/03-01-02-02-02-01-22.wav calm 460 | /data/RAVDESS/Actor_11/03-01-06-01-02-01-11.wav fearful 461 | /data/RAVDESS/Actor_17/03-01-03-02-01-01-17.wav happy 462 | /data/RAVDESS/Actor_17/03-01-08-01-01-02-17.wav surprised 463 | /data/RAVDESS/Actor_02/03-01-06-02-01-01-02.wav fearful 464 | /data/RAVDESS/Actor_08/03-01-06-01-02-01-08.wav fearful 465 | /data/RAVDESS/Actor_11/03-01-06-02-02-02-11.wav fearful 466 | /data/RAVDESS/Actor_16/03-01-04-02-01-01-16.wav sad 467 | /data/RAVDESS/Actor_06/03-01-08-02-01-02-06.wav surprised 468 | /data/RAVDESS/Actor_13/03-01-07-02-01-01-13.wav disgust 469 | /data/RAVDESS/Actor_15/03-01-03-01-01-02-15.wav happy 470 | /data/RAVDESS/Actor_20/03-01-06-01-02-02-20.wav fearful 471 | /data/RAVDESS/Actor_20/03-01-03-01-01-02-20.wav happy 472 | /data/RAVDESS/Actor_09/03-01-02-02-02-02-09.wav calm 473 | /data/RAVDESS/Actor_13/03-01-08-01-02-01-13.wav surprised 474 | /data/RAVDESS/Actor_11/03-01-03-02-01-02-11.wav happy 475 | /data/RAVDESS/Actor_22/03-01-07-01-02-01-22.wav disgust 476 | /data/RAVDESS/Actor_17/03-01-02-01-02-02-17.wav calm 477 | /data/RAVDESS/Actor_12/03-01-03-02-02-02-12.wav happy 478 | /data/RAVDESS/Actor_03/03-01-04-01-01-02-03.wav sad 479 | /data/RAVDESS/Actor_08/03-01-04-01-01-01-08.wav sad 480 | /data/RAVDESS/Actor_20/03-01-01-01-01-01-20.wav neutral 481 | /data/RAVDESS/Actor_19/03-01-02-02-02-02-19.wav calm 482 | /data/RAVDESS/Actor_02/03-01-06-01-01-01-02.wav fearful 483 | /data/RAVDESS/Actor_05/03-01-05-01-02-02-05.wav angry 484 | /data/RAVDESS/Actor_03/03-01-06-02-02-01-03.wav fearful 485 | /data/RAVDESS/Actor_17/03-01-06-02-01-01-17.wav fearful 486 | /data/RAVDESS/Actor_11/03-01-01-01-02-01-11.wav neutral 487 | /data/RAVDESS/Actor_05/03-01-07-02-01-02-05.wav disgust 488 | /data/RAVDESS/Actor_12/03-01-06-01-02-01-12.wav fearful 489 | /data/RAVDESS/Actor_18/03-01-08-02-01-02-18.wav surprised 490 | /data/RAVDESS/Actor_16/03-01-06-01-02-01-16.wav fearful 491 | /data/RAVDESS/Actor_07/03-01-04-01-01-02-07.wav sad 492 | /data/RAVDESS/Actor_09/03-01-05-02-02-01-09.wav angry 493 | /data/RAVDESS/Actor_09/03-01-05-02-01-02-09.wav angry 494 | /data/RAVDESS/Actor_17/03-01-07-01-01-01-17.wav disgust 495 | /data/RAVDESS/Actor_16/03-01-04-01-02-01-16.wav sad 496 | /data/RAVDESS/Actor_14/03-01-05-01-01-01-14.wav angry 497 | /data/RAVDESS/Actor_01/03-01-03-01-02-02-01.wav happy 498 | /data/RAVDESS/Actor_21/03-01-03-02-01-01-21.wav happy 499 | /data/RAVDESS/Actor_21/03-01-06-02-02-01-21.wav fearful 500 | /data/RAVDESS/Actor_04/03-01-05-01-02-01-04.wav angry 501 | /data/RAVDESS/Actor_17/03-01-08-02-02-01-17.wav surprised 502 | /data/RAVDESS/Actor_07/03-01-03-01-02-01-07.wav happy 503 | /data/RAVDESS/Actor_22/03-01-04-02-02-02-22.wav sad 504 | /data/RAVDESS/Actor_03/03-01-07-02-01-02-03.wav disgust 505 | /data/RAVDESS/Actor_06/03-01-07-01-01-02-06.wav disgust 506 | /data/RAVDESS/Actor_21/03-01-08-02-01-01-21.wav surprised 507 | /data/RAVDESS/Actor_03/03-01-05-01-02-02-03.wav angry 508 | /data/RAVDESS/Actor_17/03-01-06-01-02-02-17.wav fearful 509 | /data/RAVDESS/Actor_20/03-01-07-01-01-01-20.wav disgust 510 | /data/RAVDESS/Actor_02/03-01-06-01-02-01-02.wav fearful 511 | /data/RAVDESS/Actor_01/03-01-02-02-01-01-01.wav calm 512 | /data/RAVDESS/Actor_01/03-01-05-01-01-02-01.wav angry 513 | /data/RAVDESS/Actor_01/03-01-08-01-02-02-01.wav surprised 514 | /data/RAVDESS/Actor_12/03-01-04-02-01-01-12.wav sad 515 | /data/RAVDESS/Actor_01/03-01-07-01-02-02-01.wav disgust 516 | /data/RAVDESS/Actor_10/03-01-08-02-01-02-10.wav surprised 517 | /data/RAVDESS/Actor_03/03-01-03-02-01-01-03.wav happy 518 | /data/RAVDESS/Actor_13/03-01-06-02-01-02-13.wav fearful 519 | /data/RAVDESS/Actor_22/03-01-04-01-01-02-22.wav sad 520 | /data/RAVDESS/Actor_14/03-01-03-02-01-02-14.wav happy 521 | /data/RAVDESS/Actor_07/03-01-06-02-01-01-07.wav fearful 522 | /data/RAVDESS/Actor_14/03-01-04-02-01-02-14.wav sad 523 | /data/RAVDESS/Actor_12/03-01-05-01-02-01-12.wav angry 524 | /data/RAVDESS/Actor_17/03-01-08-01-02-02-17.wav surprised 525 | /data/RAVDESS/Actor_12/03-01-06-02-01-02-12.wav fearful 526 | /data/RAVDESS/Actor_02/03-01-05-02-02-02-02.wav angry 527 | /data/RAVDESS/Actor_03/03-01-05-01-01-01-03.wav angry 528 | /data/RAVDESS/Actor_03/03-01-07-01-02-02-03.wav disgust 529 | /data/RAVDESS/Actor_01/03-01-06-02-02-01-01.wav fearful 530 | /data/RAVDESS/Actor_10/03-01-04-01-02-01-10.wav sad 531 | /data/RAVDESS/Actor_19/03-01-05-01-02-01-19.wav angry 532 | /data/RAVDESS/Actor_19/03-01-08-02-02-02-19.wav surprised 533 | /data/RAVDESS/Actor_06/03-01-07-02-02-02-06.wav disgust 534 | /data/RAVDESS/Actor_20/03-01-06-02-01-01-20.wav fearful 535 | /data/RAVDESS/Actor_02/03-01-04-01-02-02-02.wav sad 536 | /data/RAVDESS/Actor_11/03-01-08-01-02-02-11.wav surprised 537 | /data/RAVDESS/Actor_14/03-01-07-02-01-02-14.wav disgust 538 | /data/RAVDESS/Actor_11/03-01-03-01-01-01-11.wav happy 539 | /data/RAVDESS/Actor_20/03-01-04-01-01-02-20.wav sad 540 | /data/RAVDESS/Actor_19/03-01-03-01-02-01-19.wav happy 541 | /data/RAVDESS/Actor_16/03-01-08-02-02-01-16.wav surprised 542 | /data/RAVDESS/Actor_17/03-01-05-01-01-01-17.wav angry 543 | /data/RAVDESS/Actor_06/03-01-06-01-02-02-06.wav fearful 544 | /data/RAVDESS/Actor_20/03-01-08-01-02-01-20.wav surprised 545 | /data/RAVDESS/Actor_05/03-01-05-01-01-01-05.wav angry 546 | /data/RAVDESS/Actor_09/03-01-07-01-02-02-09.wav disgust 547 | /data/RAVDESS/Actor_02/03-01-06-02-02-02-02.wav fearful 548 | /data/RAVDESS/Actor_11/03-01-04-01-02-02-11.wav sad 549 | /data/RAVDESS/Actor_08/03-01-03-01-02-01-08.wav happy 550 | /data/RAVDESS/Actor_12/03-01-05-02-01-02-12.wav angry 551 | /data/RAVDESS/Actor_12/03-01-08-02-01-01-12.wav surprised 552 | /data/RAVDESS/Actor_20/03-01-05-01-02-01-20.wav angry 553 | /data/RAVDESS/Actor_17/03-01-01-01-01-01-17.wav neutral 554 | /data/RAVDESS/Actor_06/03-01-04-01-02-02-06.wav sad 555 | /data/RAVDESS/Actor_07/03-01-02-01-01-02-07.wav calm 556 | /data/RAVDESS/Actor_03/03-01-02-01-02-02-03.wav calm 557 | /data/RAVDESS/Actor_21/03-01-03-01-02-02-21.wav happy 558 | /data/RAVDESS/Actor_14/03-01-07-01-01-01-14.wav disgust 559 | /data/RAVDESS/Actor_09/03-01-01-01-01-02-09.wav neutral 560 | /data/RAVDESS/Actor_20/03-01-05-02-01-02-20.wav angry 561 | /data/RAVDESS/Actor_03/03-01-08-02-01-02-03.wav surprised 562 | /data/RAVDESS/Actor_07/03-01-06-02-02-01-07.wav fearful 563 | /data/RAVDESS/Actor_09/03-01-08-02-02-02-09.wav surprised 564 | /data/RAVDESS/Actor_08/03-01-03-02-02-01-08.wav happy 565 | /data/RAVDESS/Actor_12/03-01-01-01-01-02-12.wav neutral 566 | /data/RAVDESS/Actor_13/03-01-05-02-02-01-13.wav angry 567 | /data/RAVDESS/Actor_04/03-01-05-01-01-02-04.wav angry 568 | /data/RAVDESS/Actor_19/03-01-05-02-02-01-19.wav angry 569 | /data/RAVDESS/Actor_15/03-01-07-01-02-02-15.wav disgust 570 | /data/RAVDESS/Actor_02/03-01-07-02-02-02-02.wav disgust 571 | /data/RAVDESS/Actor_07/03-01-08-02-01-02-07.wav surprised 572 | /data/RAVDESS/Actor_05/03-01-02-01-01-01-05.wav calm 573 | /data/RAVDESS/Actor_01/03-01-08-02-01-02-01.wav surprised 574 | /data/RAVDESS/Actor_02/03-01-07-02-01-01-02.wav disgust 575 | /data/RAVDESS/Actor_02/03-01-07-01-01-02-02.wav disgust 576 | /data/RAVDESS/Actor_07/03-01-08-01-01-01-07.wav surprised 577 | /data/RAVDESS/Actor_10/03-01-02-02-02-01-10.wav calm 578 | /data/RAVDESS/Actor_06/03-01-04-01-01-02-06.wav sad 579 | /data/RAVDESS/Actor_01/03-01-04-02-02-02-01.wav sad 580 | /data/RAVDESS/Actor_06/03-01-05-02-02-01-06.wav angry 581 | /data/RAVDESS/Actor_09/03-01-08-01-02-02-09.wav surprised 582 | /data/RAVDESS/Actor_08/03-01-05-02-02-02-08.wav angry 583 | /data/RAVDESS/Actor_10/03-01-04-02-01-01-10.wav sad 584 | /data/RAVDESS/Actor_22/03-01-08-01-01-01-22.wav surprised 585 | /data/RAVDESS/Actor_13/03-01-04-02-02-01-13.wav sad 586 | /data/RAVDESS/Actor_21/03-01-02-01-02-02-21.wav calm 587 | /data/RAVDESS/Actor_02/03-01-02-02-02-02-02.wav calm 588 | /data/RAVDESS/Actor_19/03-01-07-02-02-02-19.wav disgust 589 | /data/RAVDESS/Actor_20/03-01-07-02-01-02-20.wav disgust 590 | /data/RAVDESS/Actor_15/03-01-02-01-02-02-15.wav calm 591 | /data/RAVDESS/Actor_12/03-01-02-02-01-01-12.wav calm 592 | /data/RAVDESS/Actor_01/03-01-04-01-02-02-01.wav sad 593 | /data/RAVDESS/Actor_12/03-01-04-01-02-02-12.wav sad 594 | /data/RAVDESS/Actor_09/03-01-06-02-01-02-09.wav fearful 595 | /data/RAVDESS/Actor_14/03-01-01-01-01-01-14.wav neutral 596 | /data/RAVDESS/Actor_18/03-01-06-02-01-02-18.wav fearful 597 | /data/RAVDESS/Actor_19/03-01-02-02-02-01-19.wav calm 598 | /data/RAVDESS/Actor_11/03-01-08-01-01-02-11.wav surprised 599 | /data/RAVDESS/Actor_15/03-01-04-02-02-01-15.wav sad 600 | /data/RAVDESS/Actor_18/03-01-03-02-02-02-18.wav happy 601 | /data/RAVDESS/Actor_02/03-01-04-02-01-01-02.wav sad 602 | /data/RAVDESS/Actor_02/03-01-06-02-01-02-02.wav fearful 603 | /data/RAVDESS/Actor_18/03-01-04-01-02-02-18.wav sad 604 | /data/RAVDESS/Actor_01/03-01-05-01-01-01-01.wav angry 605 | /data/RAVDESS/Actor_15/03-01-05-02-01-01-15.wav angry 606 | /data/RAVDESS/Actor_09/03-01-06-01-02-01-09.wav fearful 607 | /data/RAVDESS/Actor_08/03-01-02-02-01-01-08.wav calm 608 | /data/RAVDESS/Actor_22/03-01-04-01-02-01-22.wav sad 609 | /data/RAVDESS/Actor_10/03-01-08-01-02-01-10.wav surprised 610 | /data/RAVDESS/Actor_21/03-01-05-01-01-01-21.wav angry 611 | /data/RAVDESS/Actor_13/03-01-03-02-01-02-13.wav happy 612 | /data/RAVDESS/Actor_01/03-01-08-02-02-02-01.wav surprised 613 | /data/RAVDESS/Actor_12/03-01-06-02-02-01-12.wav fearful 614 | /data/RAVDESS/Actor_22/03-01-02-01-01-02-22.wav calm 615 | /data/RAVDESS/Actor_22/03-01-03-02-02-01-22.wav happy 616 | /data/RAVDESS/Actor_05/03-01-04-02-01-01-05.wav sad 617 | /data/RAVDESS/Actor_02/03-01-02-01-01-02-02.wav calm 618 | /data/RAVDESS/Actor_11/03-01-08-01-02-01-11.wav surprised 619 | /data/RAVDESS/Actor_15/03-01-06-02-02-01-15.wav fearful 620 | /data/RAVDESS/Actor_05/03-01-04-02-01-02-05.wav sad 621 | /data/RAVDESS/Actor_19/03-01-05-01-01-01-19.wav angry 622 | /data/RAVDESS/Actor_04/03-01-05-01-02-02-04.wav angry 623 | /data/RAVDESS/Actor_06/03-01-07-01-01-01-06.wav disgust 624 | /data/RAVDESS/Actor_17/03-01-04-01-02-02-17.wav sad 625 | /data/RAVDESS/Actor_10/03-01-08-01-01-02-10.wav surprised 626 | /data/RAVDESS/Actor_13/03-01-05-01-01-02-13.wav angry 627 | /data/RAVDESS/Actor_07/03-01-01-01-01-02-07.wav neutral 628 | /data/RAVDESS/Actor_11/03-01-08-02-01-02-11.wav surprised 629 | /data/RAVDESS/Actor_21/03-01-07-02-01-02-21.wav disgust 630 | /data/RAVDESS/Actor_21/03-01-08-02-01-02-21.wav surprised 631 | /data/RAVDESS/Actor_09/03-01-05-02-01-01-09.wav angry 632 | /data/RAVDESS/Actor_06/03-01-01-01-02-02-06.wav neutral 633 | /data/RAVDESS/Actor_21/03-01-07-01-01-02-21.wav disgust 634 | /data/RAVDESS/Actor_18/03-01-03-01-01-01-18.wav happy 635 | /data/RAVDESS/Actor_12/03-01-03-01-01-01-12.wav happy 636 | /data/RAVDESS/Actor_01/03-01-05-01-02-01-01.wav angry 637 | /data/RAVDESS/Actor_12/03-01-03-01-01-02-12.wav happy 638 | /data/RAVDESS/Actor_10/03-01-05-02-01-01-10.wav angry 639 | /data/RAVDESS/Actor_18/03-01-07-01-02-01-18.wav disgust 640 | /data/RAVDESS/Actor_21/03-01-01-01-02-02-21.wav neutral 641 | /data/RAVDESS/Actor_18/03-01-08-02-02-01-18.wav surprised 642 | /data/RAVDESS/Actor_18/03-01-07-02-02-01-18.wav disgust 643 | /data/RAVDESS/Actor_01/03-01-06-02-01-02-01.wav fearful 644 | /data/RAVDESS/Actor_09/03-01-06-02-02-02-09.wav fearful 645 | /data/RAVDESS/Actor_17/03-01-05-02-01-01-17.wav angry 646 | /data/RAVDESS/Actor_01/03-01-01-01-01-02-01.wav neutral 647 | /data/RAVDESS/Actor_06/03-01-02-02-02-01-06.wav calm 648 | /data/RAVDESS/Actor_03/03-01-02-01-01-01-03.wav calm 649 | /data/RAVDESS/Actor_10/03-01-03-02-02-02-10.wav happy 650 | /data/RAVDESS/Actor_04/03-01-03-01-01-02-04.wav happy 651 | /data/RAVDESS/Actor_10/03-01-01-01-02-01-10.wav neutral 652 | /data/RAVDESS/Actor_11/03-01-06-02-01-01-11.wav fearful 653 | /data/RAVDESS/Actor_22/03-01-02-02-01-02-22.wav calm 654 | /data/RAVDESS/Actor_10/03-01-04-01-01-01-10.wav sad 655 | /data/RAVDESS/Actor_05/03-01-07-01-02-01-05.wav disgust 656 | /data/RAVDESS/Actor_19/03-01-06-02-01-01-19.wav fearful 657 | /data/RAVDESS/Actor_03/03-01-08-02-02-01-03.wav surprised 658 | /data/RAVDESS/Actor_14/03-01-06-01-02-02-14.wav fearful 659 | /data/RAVDESS/Actor_02/03-01-08-02-02-01-02.wav surprised 660 | /data/RAVDESS/Actor_19/03-01-03-02-02-02-19.wav happy 661 | /data/RAVDESS/Actor_08/03-01-07-01-02-02-08.wav disgust 662 | /data/RAVDESS/Actor_03/03-01-06-02-02-02-03.wav fearful 663 | /data/RAVDESS/Actor_04/03-01-08-01-01-01-04.wav surprised 664 | /data/RAVDESS/Actor_11/03-01-03-01-02-02-11.wav happy 665 | /data/RAVDESS/Actor_08/03-01-02-01-01-01-08.wav calm 666 | /data/RAVDESS/Actor_07/03-01-01-01-01-01-07.wav neutral 667 | /data/RAVDESS/Actor_04/03-01-02-02-02-02-04.wav calm 668 | /data/RAVDESS/Actor_01/03-01-07-02-02-01-01.wav disgust 669 | /data/RAVDESS/Actor_12/03-01-07-02-01-01-12.wav disgust 670 | /data/RAVDESS/Actor_20/03-01-05-02-02-02-20.wav angry 671 | /data/RAVDESS/Actor_14/03-01-02-01-02-01-14.wav calm 672 | /data/RAVDESS/Actor_09/03-01-06-01-01-01-09.wav fearful 673 | /data/RAVDESS/Actor_08/03-01-07-02-02-01-08.wav disgust 674 | /data/RAVDESS/Actor_03/03-01-06-01-01-01-03.wav fearful 675 | /data/RAVDESS/Actor_05/03-01-02-02-01-01-05.wav calm 676 | /data/RAVDESS/Actor_15/03-01-02-02-02-02-15.wav calm 677 | /data/RAVDESS/Actor_04/03-01-07-01-01-01-04.wav disgust 678 | /data/RAVDESS/Actor_15/03-01-03-02-02-01-15.wav happy 679 | /data/RAVDESS/Actor_05/03-01-03-02-01-01-05.wav happy 680 | /data/RAVDESS/Actor_20/03-01-06-01-01-02-20.wav fearful 681 | /data/RAVDESS/Actor_16/03-01-03-01-01-01-16.wav happy 682 | /data/RAVDESS/Actor_05/03-01-04-01-01-02-05.wav sad 683 | /data/RAVDESS/Actor_07/03-01-02-02-02-02-07.wav calm 684 | /data/RAVDESS/Actor_06/03-01-08-02-02-01-06.wav surprised 685 | /data/RAVDESS/Actor_03/03-01-07-01-02-01-03.wav disgust 686 | /data/RAVDESS/Actor_02/03-01-08-01-01-01-02.wav surprised 687 | /data/RAVDESS/Actor_08/03-01-06-02-02-01-08.wav fearful 688 | /data/RAVDESS/Actor_12/03-01-06-02-01-01-12.wav fearful 689 | /data/RAVDESS/Actor_06/03-01-07-02-01-01-06.wav disgust 690 | /data/RAVDESS/Actor_13/03-01-07-02-02-01-13.wav disgust 691 | /data/RAVDESS/Actor_11/03-01-04-01-01-02-11.wav sad 692 | /data/RAVDESS/Actor_05/03-01-01-01-01-01-05.wav neutral 693 | /data/RAVDESS/Actor_20/03-01-02-01-01-01-20.wav calm 694 | /data/RAVDESS/Actor_14/03-01-07-01-02-01-14.wav disgust 695 | /data/RAVDESS/Actor_10/03-01-08-01-01-01-10.wav surprised 696 | /data/RAVDESS/Actor_05/03-01-01-01-02-01-05.wav neutral 697 | /data/RAVDESS/Actor_08/03-01-03-02-01-02-08.wav happy 698 | /data/RAVDESS/Actor_18/03-01-01-01-01-01-18.wav neutral 699 | /data/RAVDESS/Actor_05/03-01-08-01-01-02-05.wav surprised 700 | /data/RAVDESS/Actor_11/03-01-02-01-02-01-11.wav calm 701 | /data/RAVDESS/Actor_03/03-01-07-02-02-02-03.wav disgust 702 | /data/RAVDESS/Actor_20/03-01-06-01-02-01-20.wav fearful 703 | /data/RAVDESS/Actor_19/03-01-04-02-02-02-19.wav sad 704 | /data/RAVDESS/Actor_12/03-01-04-01-01-01-12.wav sad 705 | /data/RAVDESS/Actor_21/03-01-06-01-01-02-21.wav fearful 706 | /data/RAVDESS/Actor_19/03-01-02-01-01-01-19.wav calm 707 | /data/RAVDESS/Actor_18/03-01-05-02-02-01-18.wav angry 708 | /data/RAVDESS/Actor_12/03-01-07-01-02-02-12.wav disgust 709 | /data/RAVDESS/Actor_06/03-01-05-02-01-02-06.wav angry 710 | /data/RAVDESS/Actor_05/03-01-06-01-02-02-05.wav fearful 711 | /data/RAVDESS/Actor_08/03-01-04-02-02-02-08.wav sad 712 | /data/RAVDESS/Actor_16/03-01-04-01-01-01-16.wav sad 713 | /data/RAVDESS/Actor_15/03-01-05-02-02-02-15.wav angry 714 | /data/RAVDESS/Actor_15/03-01-08-02-02-01-15.wav surprised 715 | /data/RAVDESS/Actor_16/03-01-05-01-01-02-16.wav angry 716 | /data/RAVDESS/Actor_22/03-01-06-02-02-02-22.wav fearful 717 | /data/RAVDESS/Actor_22/03-01-01-01-02-02-22.wav neutral 718 | /data/RAVDESS/Actor_02/03-01-02-02-02-01-02.wav calm 719 | /data/RAVDESS/Actor_19/03-01-04-02-01-02-19.wav sad 720 | /data/RAVDESS/Actor_12/03-01-01-01-02-02-12.wav neutral 721 | /data/RAVDESS/Actor_19/03-01-07-01-01-01-19.wav disgust 722 | /data/RAVDESS/Actor_15/03-01-06-02-01-01-15.wav fearful 723 | /data/RAVDESS/Actor_15/03-01-08-01-02-01-15.wav surprised 724 | /data/RAVDESS/Actor_06/03-01-04-02-02-01-06.wav sad 725 | /data/RAVDESS/Actor_16/03-01-07-02-02-02-16.wav disgust 726 | /data/RAVDESS/Actor_13/03-01-05-02-01-01-13.wav angry 727 | /data/RAVDESS/Actor_06/03-01-05-01-02-01-06.wav angry 728 | /data/RAVDESS/Actor_01/03-01-04-02-01-01-01.wav sad 729 | /data/RAVDESS/Actor_02/03-01-01-01-01-02-02.wav neutral 730 | /data/RAVDESS/Actor_07/03-01-03-01-02-02-07.wav happy 731 | /data/RAVDESS/Actor_08/03-01-08-01-02-02-08.wav surprised 732 | /data/RAVDESS/Actor_06/03-01-01-01-01-01-06.wav neutral 733 | /data/RAVDESS/Actor_07/03-01-07-01-02-01-07.wav disgust 734 | /data/RAVDESS/Actor_09/03-01-01-01-02-01-09.wav neutral 735 | /data/RAVDESS/Actor_06/03-01-03-01-01-02-06.wav happy 736 | /data/RAVDESS/Actor_11/03-01-01-01-01-02-11.wav neutral 737 | /data/RAVDESS/Actor_03/03-01-03-01-02-01-03.wav happy 738 | /data/RAVDESS/Actor_05/03-01-05-02-01-01-05.wav angry 739 | /data/RAVDESS/Actor_07/03-01-04-01-01-01-07.wav sad 740 | /data/RAVDESS/Actor_11/03-01-02-01-02-02-11.wav calm 741 | /data/RAVDESS/Actor_11/03-01-08-02-01-01-11.wav surprised 742 | /data/RAVDESS/Actor_01/03-01-07-02-01-02-01.wav disgust 743 | /data/RAVDESS/Actor_09/03-01-07-02-02-02-09.wav disgust 744 | /data/RAVDESS/Actor_02/03-01-07-02-02-01-02.wav disgust 745 | /data/RAVDESS/Actor_15/03-01-08-01-01-01-15.wav surprised 746 | /data/RAVDESS/Actor_04/03-01-01-01-02-01-04.wav neutral 747 | /data/RAVDESS/Actor_18/03-01-03-01-01-02-18.wav happy 748 | /data/RAVDESS/Actor_21/03-01-02-01-01-02-21.wav calm 749 | /data/RAVDESS/Actor_18/03-01-05-01-02-01-18.wav angry 750 | /data/RAVDESS/Actor_14/03-01-02-01-02-02-14.wav calm 751 | /data/RAVDESS/Actor_22/03-01-04-02-01-02-22.wav sad 752 | /data/RAVDESS/Actor_03/03-01-04-02-02-02-03.wav sad 753 | /data/RAVDESS/Actor_14/03-01-07-02-02-01-14.wav disgust 754 | /data/RAVDESS/Actor_01/03-01-06-02-01-01-01.wav fearful 755 | /data/RAVDESS/Actor_08/03-01-03-01-02-02-08.wav happy 756 | /data/RAVDESS/Actor_16/03-01-07-02-01-02-16.wav disgust 757 | /data/RAVDESS/Actor_22/03-01-07-02-02-02-22.wav disgust 758 | /data/RAVDESS/Actor_17/03-01-07-02-02-02-17.wav disgust 759 | /data/RAVDESS/Actor_13/03-01-03-01-01-01-13.wav happy 760 | /data/RAVDESS/Actor_10/03-01-07-02-01-01-10.wav disgust 761 | /data/RAVDESS/Actor_12/03-01-02-02-01-02-12.wav calm 762 | /data/RAVDESS/Actor_09/03-01-07-02-02-01-09.wav disgust 763 | /data/RAVDESS/Actor_03/03-01-03-02-02-01-03.wav happy 764 | /data/RAVDESS/Actor_12/03-01-08-01-01-02-12.wav surprised 765 | /data/RAVDESS/Actor_11/03-01-02-02-02-02-11.wav calm 766 | /data/RAVDESS/Actor_16/03-01-05-02-01-02-16.wav angry 767 | /data/RAVDESS/Actor_15/03-01-08-01-01-02-15.wav surprised 768 | /data/RAVDESS/Actor_20/03-01-01-01-02-01-20.wav neutral 769 | /data/RAVDESS/Actor_06/03-01-06-02-02-01-06.wav fearful 770 | /data/RAVDESS/Actor_21/03-01-04-02-02-02-21.wav sad 771 | /data/RAVDESS/Actor_20/03-01-04-02-02-01-20.wav sad 772 | /data/RAVDESS/Actor_16/03-01-02-02-01-01-16.wav calm 773 | /data/RAVDESS/Actor_21/03-01-06-02-01-01-21.wav fearful 774 | /data/RAVDESS/Actor_21/03-01-08-01-02-02-21.wav surprised 775 | /data/RAVDESS/Actor_10/03-01-03-01-01-01-10.wav happy 776 | /data/RAVDESS/Actor_06/03-01-06-01-01-02-06.wav fearful 777 | /data/RAVDESS/Actor_10/03-01-07-01-01-02-10.wav disgust 778 | /data/RAVDESS/Actor_15/03-01-05-01-02-02-15.wav angry 779 | /data/RAVDESS/Actor_17/03-01-05-02-02-01-17.wav angry 780 | /data/RAVDESS/Actor_17/03-01-01-01-01-02-17.wav neutral 781 | /data/RAVDESS/Actor_07/03-01-03-01-01-01-07.wav happy 782 | /data/RAVDESS/Actor_07/03-01-05-02-02-01-07.wav angry 783 | /data/RAVDESS/Actor_21/03-01-06-01-02-01-21.wav fearful 784 | /data/RAVDESS/Actor_06/03-01-06-01-02-01-06.wav fearful 785 | /data/RAVDESS/Actor_08/03-01-01-01-01-02-08.wav neutral 786 | /data/RAVDESS/Actor_17/03-01-08-02-01-01-17.wav surprised 787 | /data/RAVDESS/Actor_22/03-01-06-01-01-01-22.wav fearful 788 | /data/RAVDESS/Actor_12/03-01-05-01-01-01-12.wav angry 789 | /data/RAVDESS/Actor_22/03-01-03-01-02-02-22.wav happy 790 | /data/RAVDESS/Actor_07/03-01-07-01-01-01-07.wav disgust 791 | /data/RAVDESS/Actor_14/03-01-02-01-01-01-14.wav calm 792 | /data/RAVDESS/Actor_10/03-01-04-01-02-02-10.wav sad 793 | /data/RAVDESS/Actor_08/03-01-06-02-01-01-08.wav fearful 794 | /data/RAVDESS/Actor_07/03-01-05-02-01-01-07.wav angry 795 | /data/RAVDESS/Actor_21/03-01-03-01-01-01-21.wav happy 796 | /data/RAVDESS/Actor_15/03-01-07-01-01-01-15.wav disgust 797 | /data/RAVDESS/Actor_10/03-01-02-01-02-02-10.wav calm 798 | /data/RAVDESS/Actor_09/03-01-05-02-02-02-09.wav angry 799 | /data/RAVDESS/Actor_13/03-01-02-02-02-02-13.wav calm 800 | /data/RAVDESS/Actor_18/03-01-02-02-02-01-18.wav calm 801 | /data/RAVDESS/Actor_16/03-01-01-01-01-01-16.wav neutral 802 | /data/RAVDESS/Actor_06/03-01-08-01-02-01-06.wav surprised 803 | /data/RAVDESS/Actor_21/03-01-05-02-02-01-21.wav angry 804 | /data/RAVDESS/Actor_19/03-01-08-02-02-01-19.wav surprised 805 | /data/RAVDESS/Actor_16/03-01-03-01-02-01-16.wav happy 806 | /data/RAVDESS/Actor_22/03-01-07-02-02-01-22.wav disgust 807 | /data/RAVDESS/Actor_13/03-01-08-01-01-02-13.wav surprised 808 | /data/RAVDESS/Actor_04/03-01-01-01-01-01-04.wav neutral 809 | /data/RAVDESS/Actor_11/03-01-06-01-01-02-11.wav fearful 810 | /data/RAVDESS/Actor_11/03-01-05-01-02-02-11.wav angry 811 | /data/RAVDESS/Actor_10/03-01-07-02-02-02-10.wav disgust 812 | /data/RAVDESS/Actor_02/03-01-08-01-02-01-02.wav surprised 813 | /data/RAVDESS/Actor_17/03-01-06-02-01-02-17.wav fearful 814 | /data/RAVDESS/Actor_18/03-01-06-02-01-01-18.wav fearful 815 | /data/RAVDESS/Actor_19/03-01-02-01-01-02-19.wav calm 816 | /data/RAVDESS/Actor_18/03-01-02-02-01-01-18.wav calm 817 | /data/RAVDESS/Actor_04/03-01-08-02-01-02-04.wav surprised 818 | /data/RAVDESS/Actor_17/03-01-01-01-02-01-17.wav neutral 819 | /data/RAVDESS/Actor_17/03-01-07-01-01-02-17.wav disgust 820 | /data/RAVDESS/Actor_14/03-01-02-01-01-02-14.wav calm 821 | /data/RAVDESS/Actor_07/03-01-08-01-02-01-07.wav surprised 822 | /data/RAVDESS/Actor_19/03-01-06-01-01-01-19.wav fearful 823 | /data/RAVDESS/Actor_19/03-01-03-01-02-02-19.wav happy 824 | /data/RAVDESS/Actor_14/03-01-06-02-02-02-14.wav fearful 825 | /data/RAVDESS/Actor_10/03-01-08-02-01-01-10.wav surprised 826 | /data/RAVDESS/Actor_04/03-01-06-02-02-02-04.wav fearful 827 | /data/RAVDESS/Actor_04/03-01-03-02-01-02-04.wav happy 828 | /data/RAVDESS/Actor_21/03-01-04-01-01-02-21.wav sad 829 | /data/RAVDESS/Actor_22/03-01-06-02-01-02-22.wav fearful 830 | /data/RAVDESS/Actor_03/03-01-04-01-02-01-03.wav sad 831 | /data/RAVDESS/Actor_03/03-01-05-01-02-01-03.wav angry 832 | /data/RAVDESS/Actor_02/03-01-03-02-01-02-02.wav happy 833 | /data/RAVDESS/Actor_12/03-01-02-02-02-01-12.wav calm 834 | /data/RAVDESS/Actor_18/03-01-08-02-02-02-18.wav surprised 835 | /data/RAVDESS/Actor_13/03-01-02-02-01-01-13.wav calm 836 | /data/RAVDESS/Actor_10/03-01-04-01-01-02-10.wav sad 837 | /data/RAVDESS/Actor_18/03-01-08-01-02-01-18.wav surprised 838 | /data/RAVDESS/Actor_19/03-01-05-01-01-02-19.wav angry 839 | /data/RAVDESS/Actor_06/03-01-04-02-01-01-06.wav sad 840 | /data/RAVDESS/Actor_16/03-01-06-02-01-01-16.wav fearful 841 | /data/RAVDESS/Actor_09/03-01-04-01-02-02-09.wav sad 842 | /data/RAVDESS/Actor_06/03-01-02-01-02-02-06.wav calm 843 | /data/RAVDESS/Actor_15/03-01-04-02-02-02-15.wav sad 844 | /data/RAVDESS/Actor_04/03-01-08-01-02-01-04.wav surprised 845 | /data/RAVDESS/Actor_13/03-01-06-02-01-01-13.wav fearful 846 | /data/RAVDESS/Actor_06/03-01-06-02-01-02-06.wav fearful 847 | /data/RAVDESS/Actor_06/03-01-07-02-01-02-06.wav disgust 848 | /data/RAVDESS/Actor_21/03-01-02-01-01-01-21.wav calm 849 | /data/RAVDESS/Actor_09/03-01-02-02-01-01-09.wav calm 850 | /data/RAVDESS/Actor_07/03-01-02-01-02-01-07.wav calm 851 | /data/RAVDESS/Actor_11/03-01-02-01-01-01-11.wav calm 852 | /data/RAVDESS/Actor_01/03-01-05-02-01-01-01.wav angry 853 | /data/RAVDESS/Actor_22/03-01-03-01-02-01-22.wav happy 854 | /data/RAVDESS/Actor_10/03-01-02-02-01-02-10.wav calm 855 | /data/RAVDESS/Actor_15/03-01-01-01-02-02-15.wav neutral 856 | /data/RAVDESS/Actor_01/03-01-03-01-02-01-01.wav happy 857 | /data/RAVDESS/Actor_07/03-01-04-02-02-02-07.wav sad 858 | /data/RAVDESS/Actor_16/03-01-02-01-01-02-16.wav calm 859 | /data/RAVDESS/Actor_06/03-01-06-01-01-01-06.wav fearful 860 | /data/RAVDESS/Actor_08/03-01-08-01-02-01-08.wav surprised 861 | /data/RAVDESS/Actor_14/03-01-08-01-01-01-14.wav surprised 862 | /data/RAVDESS/Actor_15/03-01-04-01-01-02-15.wav sad 863 | /data/RAVDESS/Actor_08/03-01-05-01-02-02-08.wav angry 864 | /data/RAVDESS/Actor_06/03-01-05-02-02-02-06.wav angry 865 | /data/RAVDESS/Actor_02/03-01-03-01-01-01-02.wav happy 866 | /data/RAVDESS/Actor_20/03-01-04-02-01-02-20.wav sad 867 | /data/RAVDESS/Actor_08/03-01-06-01-01-01-08.wav fearful 868 | /data/RAVDESS/Actor_22/03-01-08-02-02-01-22.wav surprised 869 | /data/RAVDESS/Actor_16/03-01-06-01-01-01-16.wav fearful 870 | /data/RAVDESS/Actor_05/03-01-01-01-01-02-05.wav neutral 871 | /data/RAVDESS/Actor_10/03-01-07-01-01-01-10.wav disgust 872 | /data/RAVDESS/Actor_11/03-01-01-01-01-01-11.wav neutral 873 | /data/RAVDESS/Actor_14/03-01-03-01-01-01-14.wav happy 874 | /data/RAVDESS/Actor_09/03-01-06-01-01-02-09.wav fearful 875 | /data/RAVDESS/Actor_18/03-01-02-01-01-02-18.wav calm 876 | /data/RAVDESS/Actor_15/03-01-04-02-01-02-15.wav sad 877 | /data/RAVDESS/Actor_17/03-01-04-01-01-02-17.wav sad 878 | /data/RAVDESS/Actor_19/03-01-04-01-01-01-19.wav sad 879 | /data/RAVDESS/Actor_19/03-01-07-02-01-02-19.wav disgust 880 | /data/RAVDESS/Actor_03/03-01-08-01-01-01-03.wav surprised 881 | /data/RAVDESS/Actor_22/03-01-04-02-01-01-22.wav sad 882 | /data/RAVDESS/Actor_02/03-01-08-02-01-01-02.wav surprised 883 | /data/RAVDESS/Actor_14/03-01-01-01-02-02-14.wav neutral 884 | /data/RAVDESS/Actor_01/03-01-03-01-01-01-01.wav happy 885 | /data/RAVDESS/Actor_22/03-01-05-02-01-02-22.wav angry 886 | /data/RAVDESS/Actor_13/03-01-02-02-02-01-13.wav calm 887 | /data/RAVDESS/Actor_01/03-01-03-02-02-02-01.wav happy 888 | /data/RAVDESS/Actor_06/03-01-03-01-01-01-06.wav happy 889 | /data/RAVDESS/Actor_14/03-01-07-02-01-01-14.wav disgust 890 | /data/RAVDESS/Actor_05/03-01-05-01-01-02-05.wav angry 891 | /data/RAVDESS/Actor_02/03-01-05-01-02-01-02.wav angry 892 | /data/RAVDESS/Actor_21/03-01-05-02-01-02-21.wav angry 893 | /data/RAVDESS/Actor_02/03-01-03-02-02-02-02.wav happy 894 | /data/RAVDESS/Actor_10/03-01-03-02-01-02-10.wav happy 895 | /data/RAVDESS/Actor_17/03-01-03-01-01-02-17.wav happy 896 | /data/RAVDESS/Actor_01/03-01-06-01-01-01-01.wav fearful 897 | /data/RAVDESS/Actor_13/03-01-07-02-02-02-13.wav disgust 898 | /data/RAVDESS/Actor_12/03-01-01-01-01-01-12.wav neutral 899 | /data/RAVDESS/Actor_05/03-01-04-01-01-01-05.wav sad 900 | /data/RAVDESS/Actor_10/03-01-02-02-01-01-10.wav calm 901 | /data/RAVDESS/Actor_07/03-01-05-02-01-02-07.wav angry 902 | /data/RAVDESS/Actor_04/03-01-08-02-02-02-04.wav surprised 903 | /data/RAVDESS/Actor_19/03-01-02-01-02-01-19.wav calm 904 | /data/RAVDESS/Actor_03/03-01-08-01-01-02-03.wav surprised 905 | /data/RAVDESS/Actor_17/03-01-03-01-02-02-17.wav happy 906 | /data/RAVDESS/Actor_02/03-01-04-02-02-02-02.wav sad 907 | /data/RAVDESS/Actor_17/03-01-07-02-02-01-17.wav disgust 908 | /data/RAVDESS/Actor_15/03-01-03-02-01-01-15.wav happy 909 | /data/RAVDESS/Actor_03/03-01-05-02-02-02-03.wav angry 910 | /data/RAVDESS/Actor_05/03-01-08-02-01-02-05.wav surprised 911 | /data/RAVDESS/Actor_05/03-01-06-02-01-01-05.wav fearful 912 | /data/RAVDESS/Actor_08/03-01-08-01-01-01-08.wav surprised 913 | /data/RAVDESS/Actor_06/03-01-01-01-01-02-06.wav neutral 914 | /data/RAVDESS/Actor_10/03-01-04-02-02-02-10.wav sad 915 | /data/RAVDESS/Actor_02/03-01-02-02-01-02-02.wav calm 916 | /data/RAVDESS/Actor_15/03-01-05-02-02-01-15.wav angry 917 | /data/RAVDESS/Actor_16/03-01-08-01-02-02-16.wav surprised 918 | /data/RAVDESS/Actor_10/03-01-03-02-01-01-10.wav happy 919 | /data/RAVDESS/Actor_16/03-01-07-01-02-02-16.wav disgust 920 | /data/RAVDESS/Actor_06/03-01-04-02-02-02-06.wav sad 921 | /data/RAVDESS/Actor_04/03-01-04-02-02-01-04.wav sad 922 | /data/RAVDESS/Actor_12/03-01-06-01-02-02-12.wav fearful 923 | /data/RAVDESS/Actor_06/03-01-03-02-02-02-06.wav happy 924 | /data/RAVDESS/Actor_18/03-01-07-02-01-01-18.wav disgust 925 | /data/RAVDESS/Actor_18/03-01-06-02-02-02-18.wav fearful 926 | /data/RAVDESS/Actor_22/03-01-08-01-02-02-22.wav surprised 927 | /data/RAVDESS/Actor_21/03-01-07-01-02-01-21.wav disgust 928 | /data/RAVDESS/Actor_20/03-01-01-01-01-02-20.wav neutral 929 | /data/RAVDESS/Actor_17/03-01-02-01-01-02-17.wav calm 930 | /data/RAVDESS/Actor_01/03-01-07-01-01-01-01.wav disgust 931 | /data/RAVDESS/Actor_03/03-01-01-01-02-01-03.wav neutral 932 | /data/RAVDESS/Actor_06/03-01-07-01-02-01-06.wav disgust 933 | /data/RAVDESS/Actor_15/03-01-05-01-01-02-15.wav angry 934 | /data/RAVDESS/Actor_11/03-01-03-01-02-01-11.wav happy 935 | /data/RAVDESS/Actor_08/03-01-04-01-02-01-08.wav sad 936 | /data/RAVDESS/Actor_16/03-01-02-01-02-01-16.wav calm 937 | /data/RAVDESS/Actor_14/03-01-07-01-01-02-14.wav disgust 938 | /data/RAVDESS/Actor_01/03-01-06-01-01-02-01.wav fearful 939 | /data/RAVDESS/Actor_02/03-01-08-01-01-02-02.wav surprised 940 | /data/RAVDESS/Actor_22/03-01-08-02-02-02-22.wav surprised 941 | /data/RAVDESS/Actor_05/03-01-03-01-01-02-05.wav happy 942 | /data/RAVDESS/Actor_06/03-01-04-01-02-01-06.wav sad 943 | /data/RAVDESS/Actor_13/03-01-06-01-02-01-13.wav fearful 944 | /data/RAVDESS/Actor_15/03-01-07-02-01-01-15.wav disgust 945 | /data/RAVDESS/Actor_04/03-01-05-02-02-01-04.wav angry 946 | /data/RAVDESS/Actor_10/03-01-01-01-02-02-10.wav neutral 947 | /data/RAVDESS/Actor_04/03-01-06-01-02-02-04.wav fearful 948 | /data/RAVDESS/Actor_16/03-01-03-02-01-02-16.wav happy 949 | /data/RAVDESS/Actor_08/03-01-04-01-02-02-08.wav sad 950 | /data/RAVDESS/Actor_16/03-01-04-02-01-02-16.wav sad 951 | /data/RAVDESS/Actor_17/03-01-06-02-02-01-17.wav fearful 952 | /data/RAVDESS/Actor_16/03-01-06-01-01-02-16.wav fearful 953 | /data/RAVDESS/Actor_22/03-01-01-01-01-02-22.wav neutral 954 | /data/RAVDESS/Actor_16/03-01-04-01-01-02-16.wav sad 955 | /data/RAVDESS/Actor_18/03-01-03-02-01-01-18.wav happy 956 | /data/RAVDESS/Actor_08/03-01-02-02-02-01-08.wav calm 957 | /data/RAVDESS/Actor_11/03-01-07-01-02-01-11.wav disgust 958 | /data/RAVDESS/Actor_10/03-01-05-02-02-02-10.wav angry 959 | /data/RAVDESS/Actor_14/03-01-04-01-01-01-14.wav sad 960 | /data/RAVDESS/Actor_15/03-01-06-01-01-01-15.wav fearful 961 | /data/RAVDESS/Actor_19/03-01-08-02-01-02-19.wav surprised 962 | /data/RAVDESS/Actor_03/03-01-07-01-01-01-03.wav disgust 963 | /data/RAVDESS/Actor_19/03-01-02-02-01-02-19.wav calm 964 | /data/RAVDESS/Actor_07/03-01-08-02-02-01-07.wav surprised 965 | /data/RAVDESS/Actor_09/03-01-03-02-01-02-09.wav happy 966 | /data/RAVDESS/Actor_04/03-01-05-01-01-01-04.wav angry 967 | /data/RAVDESS/Actor_18/03-01-08-02-01-01-18.wav surprised 968 | /data/RAVDESS/Actor_05/03-01-04-02-02-02-05.wav sad 969 | /data/RAVDESS/Actor_18/03-01-07-01-02-02-18.wav disgust 970 | /data/RAVDESS/Actor_11/03-01-07-02-01-02-11.wav disgust 971 | /data/RAVDESS/Actor_21/03-01-08-01-01-01-21.wav surprised 972 | /data/RAVDESS/Actor_20/03-01-01-01-02-02-20.wav neutral 973 | /data/RAVDESS/Actor_13/03-01-03-01-02-02-13.wav happy 974 | /data/RAVDESS/Actor_22/03-01-01-01-02-01-22.wav neutral 975 | /data/RAVDESS/Actor_13/03-01-03-02-01-01-13.wav happy 976 | /data/RAVDESS/Actor_10/03-01-06-02-01-02-10.wav fearful 977 | /data/RAVDESS/Actor_04/03-01-03-02-02-02-04.wav happy 978 | /data/RAVDESS/Actor_03/03-01-03-02-01-02-03.wav happy 979 | /data/RAVDESS/Actor_03/03-01-05-02-01-02-03.wav angry 980 | /data/RAVDESS/Actor_07/03-01-02-02-02-01-07.wav calm 981 | /data/RAVDESS/Actor_20/03-01-07-02-02-01-20.wav disgust 982 | /data/RAVDESS/Actor_18/03-01-05-02-01-01-18.wav angry 983 | /data/RAVDESS/Actor_20/03-01-03-01-01-01-20.wav happy 984 | /data/RAVDESS/Actor_10/03-01-01-01-01-01-10.wav neutral 985 | /data/RAVDESS/Actor_18/03-01-04-02-01-01-18.wav sad 986 | /data/RAVDESS/Actor_17/03-01-05-01-02-01-17.wav angry 987 | /data/RAVDESS/Actor_08/03-01-04-01-01-02-08.wav sad 988 | /data/RAVDESS/Actor_05/03-01-07-01-01-02-05.wav disgust 989 | /data/RAVDESS/Actor_07/03-01-05-02-02-02-07.wav angry 990 | /data/RAVDESS/Actor_18/03-01-03-01-02-02-18.wav happy 991 | /data/RAVDESS/Actor_17/03-01-01-01-02-02-17.wav neutral 992 | /data/RAVDESS/Actor_01/03-01-06-02-02-02-01.wav fearful 993 | /data/RAVDESS/Actor_15/03-01-08-01-02-02-15.wav surprised 994 | /data/RAVDESS/Actor_12/03-01-04-02-02-01-12.wav sad 995 | /data/RAVDESS/Actor_13/03-01-01-01-02-02-13.wav neutral 996 | /data/RAVDESS/Actor_14/03-01-04-01-02-02-14.wav sad 997 | /data/RAVDESS/Actor_16/03-01-08-02-01-01-16.wav surprised 998 | /data/RAVDESS/Actor_11/03-01-08-01-01-01-11.wav surprised 999 | /data/RAVDESS/Actor_16/03-01-03-02-02-01-16.wav happy 1000 | /data/RAVDESS/Actor_13/03-01-04-01-02-02-13.wav sad 1001 | /data/RAVDESS/Actor_06/03-01-05-02-01-01-06.wav angry 1002 | /data/RAVDESS/Actor_18/03-01-06-01-02-01-18.wav fearful 1003 | /data/RAVDESS/Actor_14/03-01-05-02-02-02-14.wav angry 1004 | /data/RAVDESS/Actor_05/03-01-03-02-02-02-05.wav happy 1005 | /data/RAVDESS/Actor_18/03-01-06-01-01-01-18.wav fearful 1006 | /data/RAVDESS/Actor_15/03-01-04-01-01-01-15.wav sad 1007 | /data/RAVDESS/Actor_16/03-01-03-01-01-02-16.wav happy 1008 | /data/RAVDESS/Actor_06/03-01-02-01-01-02-06.wav calm 1009 | /data/RAVDESS/Actor_03/03-01-02-02-02-02-03.wav calm 1010 | /data/RAVDESS/Actor_08/03-01-03-01-01-01-08.wav happy 1011 | /data/RAVDESS/Actor_17/03-01-04-02-02-02-17.wav sad 1012 | /data/RAVDESS/Actor_19/03-01-06-01-01-02-19.wav fearful 1013 | /data/RAVDESS/Actor_18/03-01-04-02-02-01-18.wav sad 1014 | /data/RAVDESS/Actor_08/03-01-08-01-01-02-08.wav surprised 1015 | /data/RAVDESS/Actor_12/03-01-01-01-02-01-12.wav neutral 1016 | /data/RAVDESS/Actor_08/03-01-08-02-01-01-08.wav surprised 1017 | /data/RAVDESS/Actor_07/03-01-07-02-02-02-07.wav disgust 1018 | /data/RAVDESS/Actor_05/03-01-08-02-01-01-05.wav surprised 1019 | /data/RAVDESS/Actor_06/03-01-07-01-02-02-06.wav disgust 1020 | /data/RAVDESS/Actor_22/03-01-07-01-02-02-22.wav disgust 1021 | /data/RAVDESS/Actor_05/03-01-07-01-02-02-05.wav disgust 1022 | /data/RAVDESS/Actor_16/03-01-06-02-02-02-16.wav fearful 1023 | /data/RAVDESS/Actor_21/03-01-06-01-01-01-21.wav fearful 1024 | /data/RAVDESS/Actor_03/03-01-02-02-01-01-03.wav calm 1025 | /data/RAVDESS/Actor_13/03-01-02-01-02-02-13.wav calm 1026 | /data/RAVDESS/Actor_04/03-01-02-01-01-02-04.wav calm 1027 | /data/RAVDESS/Actor_08/03-01-01-01-02-02-08.wav neutral 1028 | /data/RAVDESS/Actor_05/03-01-08-01-02-01-05.wav surprised 1029 | /data/RAVDESS/Actor_15/03-01-06-02-02-02-15.wav fearful 1030 | /data/RAVDESS/Actor_04/03-01-07-02-01-01-04.wav disgust 1031 | /data/RAVDESS/Actor_07/03-01-07-02-01-02-07.wav disgust 1032 | /data/RAVDESS/Actor_02/03-01-04-02-01-02-02.wav sad 1033 | /data/RAVDESS/Actor_11/03-01-03-02-02-02-11.wav happy 1034 | /data/RAVDESS/Actor_22/03-01-03-01-01-01-22.wav happy 1035 | /data/RAVDESS/Actor_21/03-01-03-02-01-02-21.wav happy 1036 | /data/RAVDESS/Actor_04/03-01-02-01-01-01-04.wav calm 1037 | /data/RAVDESS/Actor_22/03-01-03-01-01-02-22.wav happy 1038 | /data/RAVDESS/Actor_02/03-01-05-02-01-02-02.wav angry 1039 | /data/RAVDESS/Actor_18/03-01-04-02-02-02-18.wav sad 1040 | /data/RAVDESS/Actor_19/03-01-07-01-02-02-19.wav disgust 1041 | /data/RAVDESS/Actor_16/03-01-08-01-01-02-16.wav surprised 1042 | /data/RAVDESS/Actor_17/03-01-02-02-01-02-17.wav calm 1043 | /data/RAVDESS/Actor_18/03-01-03-02-01-02-18.wav happy 1044 | /data/RAVDESS/Actor_14/03-01-07-01-02-02-14.wav disgust 1045 | /data/RAVDESS/Actor_11/03-01-05-01-01-02-11.wav angry 1046 | /data/RAVDESS/Actor_13/03-01-08-01-01-01-13.wav surprised 1047 | /data/RAVDESS/Actor_03/03-01-08-01-02-01-03.wav surprised 1048 | /data/RAVDESS/Actor_16/03-01-03-01-02-02-16.wav happy 1049 | /data/RAVDESS/Actor_08/03-01-02-02-01-02-08.wav calm 1050 | /data/RAVDESS/Actor_02/03-01-01-01-02-01-02.wav neutral 1051 | /data/RAVDESS/Actor_19/03-01-06-02-01-02-19.wav fearful 1052 | /data/RAVDESS/Actor_13/03-01-05-01-02-02-13.wav angry 1053 | /data/RAVDESS/Actor_18/03-01-02-01-02-02-18.wav calm 1054 | /data/RAVDESS/Actor_22/03-01-01-01-01-01-22.wav neutral 1055 | /data/RAVDESS/Actor_09/03-01-04-02-01-01-09.wav sad 1056 | /data/RAVDESS/Actor_18/03-01-08-01-01-01-18.wav surprised 1057 | /data/RAVDESS/Actor_13/03-01-06-01-01-01-13.wav fearful 1058 | /data/RAVDESS/Actor_14/03-01-01-01-02-01-14.wav neutral 1059 | /data/RAVDESS/Actor_03/03-01-05-02-01-01-03.wav angry 1060 | /data/RAVDESS/Actor_15/03-01-02-01-01-02-15.wav calm 1061 | /data/RAVDESS/Actor_14/03-01-05-01-01-02-14.wav angry 1062 | /data/RAVDESS/Actor_22/03-01-08-01-02-01-22.wav surprised 1063 | /data/RAVDESS/Actor_11/03-01-02-02-01-01-11.wav calm 1064 | /data/RAVDESS/Actor_09/03-01-06-02-02-01-09.wav fearful 1065 | /data/RAVDESS/Actor_14/03-01-01-01-01-02-14.wav neutral 1066 | /data/RAVDESS/Actor_21/03-01-07-01-01-01-21.wav disgust 1067 | /data/RAVDESS/Actor_16/03-01-02-02-02-02-16.wav calm 1068 | /data/RAVDESS/Actor_02/03-01-03-01-02-01-02.wav happy 1069 | /data/RAVDESS/Actor_10/03-01-07-01-02-01-10.wav disgust 1070 | /data/RAVDESS/Actor_20/03-01-07-02-01-01-20.wav disgust 1071 | /data/RAVDESS/Actor_08/03-01-05-01-01-01-08.wav angry 1072 | /data/RAVDESS/Actor_20/03-01-08-02-01-02-20.wav surprised 1073 | /data/RAVDESS/Actor_13/03-01-08-01-02-02-13.wav surprised 1074 | /data/RAVDESS/Actor_04/03-01-05-02-01-01-04.wav angry 1075 | /data/RAVDESS/Actor_22/03-01-05-02-02-02-22.wav angry 1076 | /data/RAVDESS/Actor_14/03-01-04-01-01-02-14.wav sad 1077 | /data/RAVDESS/Actor_13/03-01-07-02-01-02-13.wav disgust 1078 | /data/RAVDESS/Actor_01/03-01-07-01-02-01-01.wav disgust 1079 | /data/RAVDESS/Actor_06/03-01-08-02-02-02-06.wav surprised 1080 | /data/RAVDESS/Actor_09/03-01-03-01-01-02-09.wav happy 1081 | /data/RAVDESS/Actor_02/03-01-05-01-01-01-02.wav angry 1082 | /data/RAVDESS/Actor_12/03-01-05-02-02-01-12.wav angry 1083 | /data/RAVDESS/Actor_14/03-01-06-02-01-02-14.wav fearful 1084 | /data/RAVDESS/Actor_03/03-01-06-02-01-02-03.wav fearful 1085 | /data/RAVDESS/Actor_14/03-01-03-02-01-01-14.wav happy 1086 | /data/RAVDESS/Actor_16/03-01-08-02-01-02-16.wav surprised 1087 | /data/RAVDESS/Actor_09/03-01-05-01-01-01-09.wav angry 1088 | /data/RAVDESS/Actor_13/03-01-08-02-02-01-13.wav surprised 1089 | /data/RAVDESS/Actor_03/03-01-02-01-01-02-03.wav calm 1090 | /data/RAVDESS/Actor_11/03-01-04-01-01-01-11.wav sad 1091 | /data/RAVDESS/Actor_09/03-01-02-01-02-01-09.wav calm 1092 | /data/RAVDESS/Actor_05/03-01-07-02-02-02-05.wav disgust 1093 | /data/RAVDESS/Actor_22/03-01-05-01-02-02-22.wav angry 1094 | /data/RAVDESS/Actor_07/03-01-04-02-02-01-07.wav sad 1095 | /data/RAVDESS/Actor_21/03-01-08-02-02-01-21.wav surprised 1096 | /data/RAVDESS/Actor_07/03-01-08-02-02-02-07.wav surprised 1097 | /data/RAVDESS/Actor_05/03-01-05-02-01-02-05.wav angry 1098 | /data/RAVDESS/Actor_11/03-01-07-02-01-01-11.wav disgust 1099 | /data/RAVDESS/Actor_19/03-01-02-01-02-02-19.wav calm 1100 | /data/RAVDESS/Actor_12/03-01-05-02-02-02-12.wav angry 1101 | /data/RAVDESS/Actor_20/03-01-07-01-02-01-20.wav disgust 1102 | /data/RAVDESS/Actor_09/03-01-08-02-02-01-09.wav surprised 1103 | /data/RAVDESS/Actor_06/03-01-05-01-01-01-06.wav angry 1104 | /data/RAVDESS/Actor_10/03-01-08-02-02-01-10.wav surprised 1105 | /data/RAVDESS/Actor_18/03-01-01-01-02-02-18.wav neutral 1106 | /data/RAVDESS/Actor_18/03-01-01-01-02-01-18.wav neutral 1107 | /data/RAVDESS/Actor_02/03-01-04-01-02-01-02.wav sad 1108 | /data/RAVDESS/Actor_09/03-01-03-01-02-02-09.wav happy 1109 | /data/RAVDESS/Actor_11/03-01-07-01-02-02-11.wav disgust 1110 | /data/RAVDESS/Actor_11/03-01-02-02-01-02-11.wav calm 1111 | /data/RAVDESS/Actor_12/03-01-07-02-02-02-12.wav disgust 1112 | /data/RAVDESS/Actor_16/03-01-06-02-01-02-16.wav fearful 1113 | /data/RAVDESS/Actor_05/03-01-06-02-02-01-05.wav fearful 1114 | /data/RAVDESS/Actor_03/03-01-06-01-02-01-03.wav fearful 1115 | /data/RAVDESS/Actor_08/03-01-06-02-01-02-08.wav fearful 1116 | /data/RAVDESS/Actor_08/03-01-03-01-01-02-08.wav happy 1117 | /data/RAVDESS/Actor_22/03-01-04-01-02-02-22.wav sad 1118 | /data/RAVDESS/Actor_12/03-01-08-02-02-01-12.wav surprised 1119 | /data/RAVDESS/Actor_11/03-01-04-01-02-01-11.wav sad 1120 | /data/RAVDESS/Actor_04/03-01-06-02-01-02-04.wav fearful 1121 | /data/RAVDESS/Actor_17/03-01-02-02-02-02-17.wav calm 1122 | /data/RAVDESS/Actor_14/03-01-04-01-02-01-14.wav sad 1123 | /data/RAVDESS/Actor_01/03-01-02-01-02-02-01.wav calm 1124 | /data/RAVDESS/Actor_04/03-01-02-02-01-02-04.wav calm 1125 | /data/RAVDESS/Actor_08/03-01-03-02-01-01-08.wav happy 1126 | /data/RAVDESS/Actor_04/03-01-04-02-01-02-04.wav sad 1127 | /data/RAVDESS/Actor_10/03-01-04-02-01-02-10.wav sad 1128 | /data/RAVDESS/Actor_17/03-01-06-01-02-01-17.wav fearful 1129 | /data/RAVDESS/Actor_14/03-01-06-02-02-01-14.wav fearful 1130 | /data/RAVDESS/Actor_08/03-01-07-01-01-01-08.wav disgust 1131 | /data/RAVDESS/Actor_03/03-01-03-02-02-02-03.wav happy 1132 | /data/RAVDESS/Actor_16/03-01-02-02-01-02-16.wav calm 1133 | /data/RAVDESS/Actor_12/03-01-02-02-02-02-12.wav calm 1134 | /data/RAVDESS/Actor_15/03-01-06-01-01-02-15.wav fearful 1135 | /data/RAVDESS/Actor_09/03-01-06-02-01-01-09.wav fearful 1136 | /data/RAVDESS/Actor_13/03-01-02-01-01-01-13.wav calm 1137 | /data/RAVDESS/Actor_07/03-01-07-01-01-02-07.wav disgust 1138 | /data/RAVDESS/Actor_16/03-01-04-02-02-01-16.wav sad 1139 | /data/RAVDESS/Actor_09/03-01-01-01-01-01-09.wav neutral 1140 | /data/RAVDESS/Actor_16/03-01-05-01-02-01-16.wav angry 1141 | /data/RAVDESS/Actor_20/03-01-02-02-02-02-20.wav calm 1142 | /data/RAVDESS/Actor_18/03-01-05-01-02-02-18.wav angry 1143 | /data/RAVDESS/Actor_19/03-01-01-01-02-01-19.wav neutral 1144 | /data/RAVDESS/Actor_14/03-01-04-02-02-01-14.wav sad 1145 | /data/RAVDESS/Actor_08/03-01-07-02-01-01-08.wav disgust 1146 | /data/RAVDESS/Actor_10/03-01-05-01-01-01-10.wav angry 1147 | -------------------------------------------------------------------------------- /data/val.dbl: -------------------------------------------------------------------------------- 1 | /data/RAVDESS/Actor_17/03-01-05-02-01-02-17.wav angry 2 | /data/RAVDESS/Actor_06/03-01-07-02-02-01-06.wav disgust 3 | /data/RAVDESS/Actor_23/03-01-08-02-02-02-23.wav surprised 4 | /data/RAVDESS/Actor_24/03-01-02-01-02-01-24.wav calm 5 | /data/RAVDESS/Actor_24/03-01-06-02-02-02-24.wav fearful 6 | /data/RAVDESS/Actor_09/03-01-06-01-02-02-09.wav fearful 7 | /data/RAVDESS/Actor_24/03-01-07-01-02-01-24.wav disgust 8 | /data/RAVDESS/Actor_24/03-01-03-01-01-02-24.wav happy 9 | /data/RAVDESS/Actor_23/03-01-05-02-01-01-23.wav angry 10 | /data/RAVDESS/Actor_12/03-01-07-01-01-01-12.wav disgust 11 | /data/RAVDESS/Actor_14/03-01-08-02-01-01-14.wav surprised 12 | /data/RAVDESS/Actor_13/03-01-01-01-01-02-13.wav neutral 13 | /data/RAVDESS/Actor_09/03-01-08-01-01-02-09.wav surprised 14 | /data/RAVDESS/Actor_19/03-01-04-02-01-01-19.wav sad 15 | /data/RAVDESS/Actor_21/03-01-04-01-02-02-21.wav sad 16 | /data/RAVDESS/Actor_23/03-01-03-02-02-02-23.wav happy 17 | /data/RAVDESS/Actor_14/03-01-06-01-02-01-14.wav fearful 18 | /data/RAVDESS/Actor_15/03-01-03-01-02-01-15.wav happy 19 | /data/RAVDESS/Actor_16/03-01-06-01-02-02-16.wav fearful 20 | /data/RAVDESS/Actor_24/03-01-07-02-01-01-24.wav disgust 21 | /data/RAVDESS/Actor_24/03-01-08-02-01-01-24.wav surprised 22 | /data/RAVDESS/Actor_21/03-01-04-01-01-01-21.wav sad 23 | /data/RAVDESS/Actor_23/03-01-06-02-01-01-23.wav fearful 24 | /data/RAVDESS/Actor_24/03-01-07-02-01-02-24.wav disgust 25 | /data/RAVDESS/Actor_23/03-01-01-01-01-01-23.wav neutral 26 | /data/RAVDESS/Actor_01/03-01-03-02-02-01-01.wav happy 27 | /data/RAVDESS/Actor_05/03-01-08-01-01-01-05.wav surprised 28 | /data/RAVDESS/Actor_16/03-01-07-01-01-02-16.wav disgust 29 | /data/RAVDESS/Actor_03/03-01-04-01-02-02-03.wav sad 30 | /data/RAVDESS/Actor_11/03-01-01-01-02-02-11.wav neutral 31 | /data/RAVDESS/Actor_15/03-01-03-02-02-02-15.wav happy 32 | /data/RAVDESS/Actor_23/03-01-02-01-02-01-23.wav calm 33 | /data/RAVDESS/Actor_14/03-01-05-02-01-01-14.wav angry 34 | /data/RAVDESS/Actor_23/03-01-05-02-02-02-23.wav angry 35 | /data/RAVDESS/Actor_21/03-01-05-01-02-01-21.wav angry 36 | /data/RAVDESS/Actor_23/03-01-04-01-01-01-23.wav sad 37 | /data/RAVDESS/Actor_02/03-01-03-02-02-01-02.wav happy 38 | /data/RAVDESS/Actor_02/03-01-03-01-01-02-02.wav happy 39 | /data/RAVDESS/Actor_23/03-01-04-02-02-01-23.wav sad 40 | /data/RAVDESS/Actor_24/03-01-03-02-02-01-24.wav happy 41 | /data/RAVDESS/Actor_24/03-01-08-01-02-01-24.wav surprised 42 | /data/RAVDESS/Actor_13/03-01-05-02-01-02-13.wav angry 43 | /data/RAVDESS/Actor_23/03-01-08-01-02-02-23.wav surprised 44 | /data/RAVDESS/Actor_23/03-01-05-02-01-02-23.wav angry 45 | /data/RAVDESS/Actor_12/03-01-02-01-01-01-12.wav calm 46 | /data/RAVDESS/Actor_23/03-01-08-02-01-02-23.wav surprised 47 | /data/RAVDESS/Actor_22/03-01-02-01-01-01-22.wav calm 48 | /data/RAVDESS/Actor_24/03-01-01-01-01-02-24.wav neutral 49 | /data/RAVDESS/Actor_06/03-01-03-02-01-01-06.wav happy 50 | /data/RAVDESS/Actor_23/03-01-02-02-01-02-23.wav calm 51 | /data/RAVDESS/Actor_14/03-01-05-02-01-02-14.wav angry 52 | /data/RAVDESS/Actor_23/03-01-04-01-02-01-23.wav sad 53 | /data/RAVDESS/Actor_04/03-01-07-01-02-02-04.wav disgust 54 | /data/RAVDESS/Actor_24/03-01-05-01-02-02-24.wav angry 55 | /data/RAVDESS/Actor_23/03-01-07-01-02-02-23.wav disgust 56 | /data/RAVDESS/Actor_23/03-01-04-01-01-02-23.wav sad 57 | /data/RAVDESS/Actor_24/03-01-01-01-02-01-24.wav neutral 58 | /data/RAVDESS/Actor_24/03-01-08-02-01-02-24.wav surprised 59 | /data/RAVDESS/Actor_20/03-01-05-01-01-02-20.wav angry 60 | /data/RAVDESS/Actor_06/03-01-02-02-01-01-06.wav calm 61 | /data/RAVDESS/Actor_15/03-01-02-01-02-01-15.wav calm 62 | /data/RAVDESS/Actor_24/03-01-06-02-01-01-24.wav fearful 63 | /data/RAVDESS/Actor_10/03-01-03-01-02-02-10.wav happy 64 | /data/RAVDESS/Actor_24/03-01-04-02-02-01-24.wav sad 65 | /data/RAVDESS/Actor_14/03-01-06-01-01-02-14.wav fearful 66 | /data/RAVDESS/Actor_17/03-01-05-01-02-02-17.wav angry 67 | /data/RAVDESS/Actor_09/03-01-05-01-02-02-09.wav angry 68 | /data/RAVDESS/Actor_24/03-01-05-02-01-02-24.wav angry 69 | /data/RAVDESS/Actor_23/03-01-08-01-02-01-23.wav surprised 70 | /data/RAVDESS/Actor_19/03-01-06-02-02-01-19.wav fearful 71 | /data/RAVDESS/Actor_02/03-01-02-01-02-01-02.wav calm 72 | /data/RAVDESS/Actor_04/03-01-03-01-02-02-04.wav happy 73 | /data/RAVDESS/Actor_24/03-01-02-01-02-02-24.wav calm 74 | /data/RAVDESS/Actor_09/03-01-07-02-01-01-09.wav disgust 75 | /data/RAVDESS/Actor_23/03-01-03-01-01-01-23.wav happy 76 | /data/RAVDESS/Actor_24/03-01-08-02-02-01-24.wav surprised 77 | /data/RAVDESS/Actor_18/03-01-01-01-01-02-18.wav neutral 78 | /data/RAVDESS/Actor_24/03-01-02-02-01-02-24.wav calm 79 | /data/RAVDESS/Actor_24/03-01-06-01-02-02-24.wav fearful 80 | /data/RAVDESS/Actor_02/03-01-06-01-01-02-02.wav fearful 81 | /data/RAVDESS/Actor_23/03-01-06-02-02-01-23.wav fearful 82 | /data/RAVDESS/Actor_24/03-01-08-02-02-02-24.wav surprised 83 | /data/RAVDESS/Actor_06/03-01-08-01-02-02-06.wav surprised 84 | /data/RAVDESS/Actor_12/03-01-07-01-01-02-12.wav disgust 85 | /data/RAVDESS/Actor_21/03-01-03-01-01-02-21.wav happy 86 | /data/RAVDESS/Actor_10/03-01-03-01-02-01-10.wav happy 87 | /data/RAVDESS/Actor_11/03-01-05-01-01-01-11.wav angry 88 | /data/RAVDESS/Actor_24/03-01-04-01-01-02-24.wav sad 89 | /data/RAVDESS/Actor_04/03-01-04-01-01-02-04.wav sad 90 | /data/RAVDESS/Actor_21/03-01-02-02-01-01-21.wav calm 91 | /data/RAVDESS/Actor_07/03-01-04-01-02-02-07.wav sad 92 | /data/RAVDESS/Actor_22/03-01-03-02-01-02-22.wav happy 93 | /data/RAVDESS/Actor_23/03-01-01-01-01-02-23.wav neutral 94 | /data/RAVDESS/Actor_23/03-01-06-01-01-02-23.wav fearful 95 | /data/RAVDESS/Actor_23/03-01-07-01-01-02-23.wav disgust 96 | /data/RAVDESS/Actor_24/03-01-07-01-02-02-24.wav disgust 97 | /data/RAVDESS/Actor_23/03-01-08-02-01-01-23.wav surprised 98 | /data/RAVDESS/Actor_24/03-01-04-01-02-02-24.wav sad 99 | /data/RAVDESS/Actor_21/03-01-07-02-02-01-21.wav disgust 100 | /data/RAVDESS/Actor_24/03-01-05-01-02-01-24.wav angry 101 | /data/RAVDESS/Actor_24/03-01-02-01-01-02-24.wav calm 102 | /data/RAVDESS/Actor_01/03-01-02-01-01-02-01.wav calm 103 | /data/RAVDESS/Actor_23/03-01-01-01-02-01-23.wav neutral 104 | /data/RAVDESS/Actor_24/03-01-06-01-01-02-24.wav fearful 105 | /data/RAVDESS/Actor_07/03-01-02-01-01-01-07.wav calm 106 | /data/RAVDESS/Actor_10/03-01-06-02-02-01-10.wav fearful 107 | /data/RAVDESS/Actor_24/03-01-07-02-02-02-24.wav disgust 108 | /data/RAVDESS/Actor_09/03-01-02-02-01-02-09.wav calm 109 | /data/RAVDESS/Actor_24/03-01-01-01-02-02-24.wav neutral 110 | /data/RAVDESS/Actor_24/03-01-03-01-02-01-24.wav happy 111 | /data/RAVDESS/Actor_23/03-01-06-01-01-01-23.wav fearful 112 | /data/RAVDESS/Actor_24/03-01-08-01-01-01-24.wav surprised 113 | /data/RAVDESS/Actor_14/03-01-02-02-01-01-14.wav calm 114 | /data/RAVDESS/Actor_21/03-01-04-02-02-01-21.wav sad 115 | /data/RAVDESS/Actor_14/03-01-03-01-01-02-14.wav happy 116 | /data/RAVDESS/Actor_16/03-01-07-02-02-01-16.wav disgust 117 | /data/RAVDESS/Actor_23/03-01-01-01-02-02-23.wav neutral 118 | /data/RAVDESS/Actor_07/03-01-08-01-01-02-07.wav surprised 119 | /data/RAVDESS/Actor_24/03-01-06-01-01-01-24.wav fearful 120 | /data/RAVDESS/Actor_09/03-01-03-02-01-01-09.wav happy 121 | /data/RAVDESS/Actor_17/03-01-07-01-02-01-17.wav disgust 122 | /data/RAVDESS/Actor_24/03-01-03-02-02-02-24.wav happy 123 | /data/RAVDESS/Actor_05/03-01-08-02-02-02-05.wav surprised 124 | /data/RAVDESS/Actor_01/03-01-04-01-01-02-01.wav sad 125 | /data/RAVDESS/Actor_01/03-01-02-02-02-01-01.wav calm 126 | /data/RAVDESS/Actor_23/03-01-07-01-02-01-23.wav disgust 127 | /data/RAVDESS/Actor_23/03-01-06-02-02-02-23.wav fearful 128 | /data/RAVDESS/Actor_11/03-01-05-02-02-02-11.wav angry 129 | /data/RAVDESS/Actor_24/03-01-05-02-02-01-24.wav angry 130 | /data/RAVDESS/Actor_24/03-01-02-02-01-01-24.wav calm 131 | /data/RAVDESS/Actor_20/03-01-02-01-02-02-20.wav calm 132 | /data/RAVDESS/Actor_04/03-01-07-02-02-02-04.wav disgust 133 | /data/RAVDESS/Actor_22/03-01-05-01-01-01-22.wav angry 134 | /data/RAVDESS/Actor_21/03-01-02-02-02-01-21.wav calm 135 | -------------------------------------------------------------------------------- /data/val.ordered.dbl: -------------------------------------------------------------------------------- 1 | /data/RAVDESS/Actor_02/03-01-03-02-02-01-02.wav happy 2 | /data/RAVDESS/Actor_02/03-01-03-01-01-02-02.wav happy 3 | /data/RAVDESS/Actor_02/03-01-06-01-01-02-02.wav fearful 4 | /data/RAVDESS/Actor_02/03-01-02-01-02-01-02.wav calm 5 | /data/RAVDESS/Actor_15/03-01-03-02-02-02-15.wav happy 6 | /data/RAVDESS/Actor_15/03-01-03-01-02-01-15.wav happy 7 | /data/RAVDESS/Actor_15/03-01-02-01-02-01-15.wav calm 8 | /data/RAVDESS/Actor_11/03-01-05-01-01-01-11.wav angry 9 | /data/RAVDESS/Actor_11/03-01-05-02-02-02-11.wav angry 10 | /data/RAVDESS/Actor_11/03-01-01-01-02-02-11.wav neutral 11 | /data/RAVDESS/Actor_12/03-01-07-01-01-01-12.wav disgust 12 | /data/RAVDESS/Actor_12/03-01-02-01-01-01-12.wav calm 13 | /data/RAVDESS/Actor_12/03-01-07-01-01-02-12.wav disgust 14 | /data/RAVDESS/Actor_14/03-01-06-01-02-01-14.wav fearful 15 | /data/RAVDESS/Actor_14/03-01-05-02-01-02-14.wav angry 16 | /data/RAVDESS/Actor_14/03-01-06-01-01-02-14.wav fearful 17 | /data/RAVDESS/Actor_14/03-01-08-02-01-01-14.wav surprised 18 | /data/RAVDESS/Actor_14/03-01-05-02-01-01-14.wav angry 19 | /data/RAVDESS/Actor_14/03-01-03-01-01-02-14.wav happy 20 | /data/RAVDESS/Actor_14/03-01-02-02-01-01-14.wav calm 21 | /data/RAVDESS/Actor_13/03-01-01-01-01-02-13.wav neutral 22 | /data/RAVDESS/Actor_13/03-01-05-02-01-02-13.wav angry 23 | /data/RAVDESS/Actor_03/03-01-04-01-02-02-03.wav sad 24 | /data/RAVDESS/Actor_24/03-01-07-01-02-01-24.wav disgust 25 | /data/RAVDESS/Actor_24/03-01-06-02-01-01-24.wav fearful 26 | /data/RAVDESS/Actor_24/03-01-05-01-02-02-24.wav angry 27 | /data/RAVDESS/Actor_24/03-01-04-01-01-02-24.wav sad 28 | /data/RAVDESS/Actor_24/03-01-01-01-01-02-24.wav neutral 29 | /data/RAVDESS/Actor_24/03-01-02-01-02-02-24.wav calm 30 | /data/RAVDESS/Actor_24/03-01-03-01-02-01-24.wav happy 31 | /data/RAVDESS/Actor_24/03-01-01-01-02-02-24.wav neutral 32 | /data/RAVDESS/Actor_24/03-01-05-02-02-01-24.wav angry 33 | /data/RAVDESS/Actor_24/03-01-08-02-02-02-24.wav surprised 34 | /data/RAVDESS/Actor_24/03-01-08-02-01-02-24.wav surprised 35 | /data/RAVDESS/Actor_24/03-01-01-01-02-01-24.wav neutral 36 | /data/RAVDESS/Actor_24/03-01-04-01-02-02-24.wav sad 37 | /data/RAVDESS/Actor_24/03-01-07-01-02-02-24.wav disgust 38 | /data/RAVDESS/Actor_24/03-01-06-01-01-01-24.wav fearful 39 | /data/RAVDESS/Actor_24/03-01-02-02-01-02-24.wav calm 40 | /data/RAVDESS/Actor_24/03-01-07-02-02-02-24.wav disgust 41 | /data/RAVDESS/Actor_24/03-01-06-01-01-02-24.wav fearful 42 | /data/RAVDESS/Actor_24/03-01-08-01-02-01-24.wav surprised 43 | /data/RAVDESS/Actor_24/03-01-06-01-02-02-24.wav fearful 44 | /data/RAVDESS/Actor_24/03-01-08-02-02-01-24.wav surprised 45 | /data/RAVDESS/Actor_24/03-01-05-01-02-01-24.wav angry 46 | /data/RAVDESS/Actor_24/03-01-07-02-01-01-24.wav disgust 47 | /data/RAVDESS/Actor_24/03-01-03-02-02-01-24.wav happy 48 | /data/RAVDESS/Actor_24/03-01-04-02-02-01-24.wav sad 49 | /data/RAVDESS/Actor_24/03-01-03-02-02-02-24.wav happy 50 | /data/RAVDESS/Actor_24/03-01-08-01-01-01-24.wav surprised 51 | /data/RAVDESS/Actor_24/03-01-05-02-01-02-24.wav angry 52 | /data/RAVDESS/Actor_24/03-01-07-02-01-02-24.wav disgust 53 | /data/RAVDESS/Actor_24/03-01-02-01-02-01-24.wav calm 54 | /data/RAVDESS/Actor_24/03-01-03-01-01-02-24.wav happy 55 | /data/RAVDESS/Actor_24/03-01-02-01-01-02-24.wav calm 56 | /data/RAVDESS/Actor_24/03-01-06-02-02-02-24.wav fearful 57 | /data/RAVDESS/Actor_24/03-01-02-02-01-01-24.wav calm 58 | /data/RAVDESS/Actor_24/03-01-08-02-01-01-24.wav surprised 59 | /data/RAVDESS/Actor_20/03-01-05-01-01-02-20.wav angry 60 | /data/RAVDESS/Actor_20/03-01-02-01-02-02-20.wav calm 61 | /data/RAVDESS/Actor_06/03-01-07-02-02-01-06.wav disgust 62 | /data/RAVDESS/Actor_06/03-01-03-02-01-01-06.wav happy 63 | /data/RAVDESS/Actor_06/03-01-02-02-01-01-06.wav calm 64 | /data/RAVDESS/Actor_06/03-01-08-01-02-02-06.wav surprised 65 | /data/RAVDESS/Actor_16/03-01-07-01-01-02-16.wav disgust 66 | /data/RAVDESS/Actor_16/03-01-07-02-02-01-16.wav disgust 67 | /data/RAVDESS/Actor_16/03-01-06-01-02-02-16.wav fearful 68 | /data/RAVDESS/Actor_07/03-01-08-01-01-02-07.wav surprised 69 | /data/RAVDESS/Actor_07/03-01-04-01-02-02-07.wav sad 70 | /data/RAVDESS/Actor_07/03-01-02-01-01-01-07.wav calm 71 | /data/RAVDESS/Actor_22/03-01-02-01-01-01-22.wav calm 72 | /data/RAVDESS/Actor_22/03-01-05-01-01-01-22.wav angry 73 | /data/RAVDESS/Actor_22/03-01-03-02-01-02-22.wav happy 74 | /data/RAVDESS/Actor_19/03-01-04-02-01-01-19.wav sad 75 | /data/RAVDESS/Actor_19/03-01-06-02-02-01-19.wav fearful 76 | /data/RAVDESS/Actor_01/03-01-03-02-02-01-01.wav happy 77 | /data/RAVDESS/Actor_01/03-01-02-02-02-01-01.wav calm 78 | /data/RAVDESS/Actor_01/03-01-02-01-01-02-01.wav calm 79 | /data/RAVDESS/Actor_01/03-01-04-01-01-02-01.wav sad 80 | /data/RAVDESS/Actor_18/03-01-01-01-01-02-18.wav neutral 81 | /data/RAVDESS/Actor_17/03-01-05-02-01-02-17.wav angry 82 | /data/RAVDESS/Actor_17/03-01-07-01-02-01-17.wav disgust 83 | /data/RAVDESS/Actor_17/03-01-05-01-02-02-17.wav angry 84 | /data/RAVDESS/Actor_23/03-01-04-01-01-02-23.wav sad 85 | /data/RAVDESS/Actor_23/03-01-07-01-02-01-23.wav disgust 86 | /data/RAVDESS/Actor_23/03-01-01-01-02-01-23.wav neutral 87 | /data/RAVDESS/Actor_23/03-01-07-01-01-02-23.wav disgust 88 | /data/RAVDESS/Actor_23/03-01-08-01-02-02-23.wav surprised 89 | /data/RAVDESS/Actor_23/03-01-01-01-01-02-23.wav neutral 90 | /data/RAVDESS/Actor_23/03-01-08-01-02-01-23.wav surprised 91 | /data/RAVDESS/Actor_23/03-01-02-02-01-02-23.wav calm 92 | /data/RAVDESS/Actor_23/03-01-05-02-01-02-23.wav angry 93 | /data/RAVDESS/Actor_23/03-01-01-01-01-01-23.wav neutral 94 | /data/RAVDESS/Actor_23/03-01-06-01-01-01-23.wav fearful 95 | /data/RAVDESS/Actor_23/03-01-01-01-02-02-23.wav neutral 96 | /data/RAVDESS/Actor_23/03-01-04-01-01-01-23.wav sad 97 | /data/RAVDESS/Actor_23/03-01-05-02-02-02-23.wav angry 98 | /data/RAVDESS/Actor_23/03-01-02-01-02-01-23.wav calm 99 | /data/RAVDESS/Actor_23/03-01-06-02-01-01-23.wav fearful 100 | /data/RAVDESS/Actor_23/03-01-03-02-02-02-23.wav happy 101 | /data/RAVDESS/Actor_23/03-01-04-02-02-01-23.wav sad 102 | /data/RAVDESS/Actor_23/03-01-07-01-02-02-23.wav disgust 103 | /data/RAVDESS/Actor_23/03-01-03-01-01-01-23.wav happy 104 | /data/RAVDESS/Actor_23/03-01-04-01-02-01-23.wav sad 105 | /data/RAVDESS/Actor_23/03-01-05-02-01-01-23.wav angry 106 | /data/RAVDESS/Actor_23/03-01-06-02-02-02-23.wav fearful 107 | /data/RAVDESS/Actor_23/03-01-06-02-02-01-23.wav fearful 108 | /data/RAVDESS/Actor_23/03-01-08-02-01-01-23.wav surprised 109 | /data/RAVDESS/Actor_23/03-01-08-02-02-02-23.wav surprised 110 | /data/RAVDESS/Actor_23/03-01-08-02-01-02-23.wav surprised 111 | /data/RAVDESS/Actor_23/03-01-06-01-01-02-23.wav fearful 112 | /data/RAVDESS/Actor_05/03-01-08-02-02-02-05.wav surprised 113 | /data/RAVDESS/Actor_05/03-01-08-01-01-01-05.wav surprised 114 | /data/RAVDESS/Actor_21/03-01-03-01-01-02-21.wav happy 115 | /data/RAVDESS/Actor_21/03-01-02-02-02-01-21.wav calm 116 | /data/RAVDESS/Actor_21/03-01-04-01-01-01-21.wav sad 117 | /data/RAVDESS/Actor_21/03-01-05-01-02-01-21.wav angry 118 | /data/RAVDESS/Actor_21/03-01-04-02-02-01-21.wav sad 119 | /data/RAVDESS/Actor_21/03-01-04-01-02-02-21.wav sad 120 | /data/RAVDESS/Actor_21/03-01-02-02-01-01-21.wav calm 121 | /data/RAVDESS/Actor_21/03-01-07-02-02-01-21.wav disgust 122 | /data/RAVDESS/Actor_10/03-01-03-01-02-01-10.wav happy 123 | /data/RAVDESS/Actor_10/03-01-03-01-02-02-10.wav happy 124 | /data/RAVDESS/Actor_10/03-01-06-02-02-01-10.wav fearful 125 | /data/RAVDESS/Actor_09/03-01-07-02-01-01-09.wav disgust 126 | /data/RAVDESS/Actor_09/03-01-03-02-01-01-09.wav happy 127 | /data/RAVDESS/Actor_09/03-01-05-01-02-02-09.wav angry 128 | /data/RAVDESS/Actor_09/03-01-08-01-01-02-09.wav surprised 129 | /data/RAVDESS/Actor_09/03-01-06-01-02-02-09.wav fearful 130 | /data/RAVDESS/Actor_09/03-01-02-02-01-02-09.wav calm 131 | /data/RAVDESS/Actor_04/03-01-07-02-02-02-04.wav disgust 132 | /data/RAVDESS/Actor_04/03-01-07-01-02-02-04.wav disgust 133 | /data/RAVDESS/Actor_04/03-01-03-01-02-02-04.wav happy 134 | /data/RAVDESS/Actor_04/03-01-04-01-01-02-04.wav sad 135 | -------------------------------------------------------------------------------- /dataloader/audio.py: -------------------------------------------------------------------------------- 1 | import random 2 | from functools import partial 3 | 4 | import torch 5 | import torchaudio 6 | 7 | from torch.utils.data import DataLoader, Dataset 8 | from util import is_non_empty_file 9 | 10 | RAW_SAMPLING_RATE = 16000 11 | FRAME_LENGTH_MS = 25.0 12 | FRAME_SHIFT_MS = 10.0 13 | 14 | transform_to_sampling_rate = { 15 | "mfcc": int(1000 / FRAME_SHIFT_MS), 16 | "fbank": int(1000 / FRAME_SHIFT_MS), 17 | "raw": RAW_SAMPLING_RATE, 18 | } 19 | 20 | 21 | class AudioDataLoader(DataLoader): 22 | def __init__( 23 | self, 24 | *args, 25 | window_size=2, 26 | feature_transform="mfcc", 27 | **kwargs, 28 | ): 29 | if kwargs["num_workers"] != 0: 30 | if "timeout" not in kwargs: 31 | kwargs["timeout"] = 300 32 | super().__init__(*args, **kwargs) 33 | self.collate_fn = partial( 34 | self._collate_fn, 35 | window_size=window_size, 36 | feature_transform=feature_transform, 37 | train=self.dataset.train, 38 | ) 39 | 40 | self.sampling_rate = transform_to_sampling_rate[feature_transform] 41 | 42 | @staticmethod 43 | def _collate_fn( 44 | batch, window_size=256, feature_transform="mfcc", normalization=True, train=True 45 | ): 46 | feats, labels, files, positions = [], [], [], [] 47 | for path, label in batch: 48 | start_idx = 0 49 | audio_tensor, sample_rate = torchaudio.load(path, normalization=normalization) 50 | if sample_rate != RAW_SAMPLING_RATE: 51 | audio_tensor = torchaudio.transforms.Resample(sample_rate, RAW_SAMPLING_RATE)( 52 | audio_tensor 53 | ) 54 | # if training slice audio up into window size chunks 55 | if train: 56 | # find raw audio window size to give correct feature window size 57 | if feature_transform != "raw": 58 | seconds_requested = window_size / 100 59 | frame_shift_samples = int((FRAME_SHIFT_MS / 1000.0) * RAW_SAMPLING_RATE) # 160 60 | frame_length_samples = int( 61 | (FRAME_LENGTH_MS / 1000.0) * RAW_SAMPLING_RATE 62 | ) # 400 63 | buffer_size = frame_length_samples - frame_shift_samples # 240 64 | raw_window_size = frame_shift_samples * window_size + buffer_size 65 | else: 66 | seconds_requested = window_size / RAW_SAMPLING_RATE 67 | raw_window_size = window_size 68 | 69 | # pad or splice depending on number on window size 70 | channels, num_samples = audio_tensor.shape 71 | if num_samples < raw_window_size: 72 | difference = raw_window_size - num_samples 73 | print( 74 | f"requested {seconds_requested}s but only have " 75 | f"{num_samples/RAW_SAMPLING_RATE}s, adding {difference} zero frames" 76 | ) 77 | padding = torch.zeros((channels, difference)) 78 | audio_tensor = torch.cat([audio_tensor, padding], 1) 79 | else: 80 | # TODO this is far from efficient, look into iterable dataset in future 81 | start_idx = random.randint(0, num_samples - raw_window_size) 82 | audio_tensor = audio_tensor.narrow(1, start_idx, raw_window_size) 83 | # if testing do not slice up 84 | else: 85 | assert len(batch) == 1 86 | 87 | feat = feature_fn(audio_tensor, feature_transform, RAW_SAMPLING_RATE) 88 | if window_size == None: 89 | window_size = feat.shape[0] 90 | assert feat.shape[0] == window_size 91 | feats.append(feat) 92 | labels.append(torch.ones(window_size).long() * label) 93 | files.append(path) 94 | positions.append(start_idx) 95 | 96 | feats = torch.stack(feats) 97 | labels = torch.stack(labels) 98 | return {"data": feats, "labels": labels, "files": files, "positions": positions} 99 | 100 | 101 | def feature_fn(data_tensor, feature_transform, samplerate): 102 | if feature_transform == "fbank": 103 | return torchaudio.compliance.kaldi.fbank( 104 | data_tensor, 105 | window_type="hamming", 106 | dither=1.0, 107 | num_mel_bins=80, 108 | htk_compat=True, 109 | use_energy=False, 110 | frame_length=FRAME_LENGTH_MS, 111 | frame_shift=FRAME_SHIFT_MS, 112 | sample_frequency=samplerate, 113 | ) 114 | elif feature_transform == "mfcc": 115 | return torchaudio.compliance.kaldi.mfcc( 116 | data_tensor, 117 | num_mel_bins=40, 118 | num_ceps=40, 119 | use_energy=False, 120 | high_freq=-400, 121 | low_freq=20, 122 | sample_frequency=samplerate, 123 | dither=0.0, 124 | energy_floor=0.0, 125 | ) 126 | elif feature_transform == "raw": 127 | return data_tensor 128 | else: 129 | raise NotImplementedError(f"feature transform {feature_transform} not implemented.") 130 | 131 | 132 | class AudioDataset(Dataset): 133 | def __init__(self, dbl_path, train=True): 134 | super().__init__() 135 | self.train = train 136 | self.data = self.parse_audio_dbl(dbl_path) 137 | 138 | def __getitem__(self, index): 139 | file_audio = self.data[index] 140 | return file_audio, -1 141 | 142 | def __len__(self): 143 | return len(self.data) 144 | 145 | @staticmethod 146 | def parse_audio_dbl(dbl_path): 147 | dbl_entries = [] 148 | with open(dbl_path) as in_f: 149 | for line in in_f.readlines(): 150 | audio_path = line.strip().split()[0] 151 | if is_non_empty_file(audio_path): 152 | dbl_entries.append(audio_path) 153 | if not dbl_entries: 154 | raise KeyError("dbl list is empty, check paths to dbl files") 155 | return dbl_entries 156 | 157 | 158 | class EmotionDataset(Dataset): 159 | def __init__(self, dbl_path, emotion_set_path, train=True): 160 | super().__init__() 161 | self.train = train 162 | self.emotion2id = self.get_emotion_to_id_mapping(emotion_set_path) 163 | self.data = self.parse_emotion_dbl(dbl_path) 164 | 165 | def __getitem__(self, index): 166 | audio_path, emotion_type = self.data[index] 167 | return audio_path, self.emotion2id[emotion_type] 168 | 169 | def __len__(self): 170 | return len(self.data) 171 | 172 | @staticmethod 173 | def parse_emotion_dbl(dbl_path): 174 | dbl_entries = [] 175 | with open(dbl_path) as in_f: 176 | for line in in_f.readlines(): 177 | audio_path, emotion_type = line.strip().split() 178 | if is_non_empty_file(audio_path): 179 | dbl_entries.append((audio_path, emotion_type)) 180 | if not dbl_entries: 181 | raise KeyError("dbl list is empty, check paths to dbl files") 182 | return dbl_entries 183 | 184 | @staticmethod 185 | def get_emotion_to_id_mapping(emotion_set_path): 186 | with open(emotion_set_path) as in_f: 187 | return {p.strip(): i for i, p in enumerate(in_f.readlines())} 188 | -------------------------------------------------------------------------------- /emotion_id/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jplhughes/emotion_detection_cpc/0eb2d4a2ec4c98f8303482dc0dec53b467c4831a/emotion_id/__init__.py -------------------------------------------------------------------------------- /emotion_id/decode.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from collections import namedtuple 4 | import torch 5 | import warnings 6 | from absl import flags, app 7 | 8 | from dataloader.audio import AudioDataset, AudioDataLoader 9 | from cpc.model import NoCPC 10 | from util import load_model, set_seeds, device 11 | 12 | Prediction = namedtuple("Prediction", ["label", "start", "end"]) 13 | DEFAULT_LABEL = 0 14 | 15 | flags.DEFINE_string("eval_file_path", None, "path to file to run on") 16 | flags.DEFINE_string("output_dir", None, "file path to dir to write output to") 17 | flags.DEFINE_string("cpc_path", None, "path to initial backbone weights to load") 18 | flags.DEFINE_string("model_path", None, "trained model") 19 | flags.DEFINE_integer("window_size", 1024, "num frames to push into model at once") 20 | flags.DEFINE_boolean("pad_input", False, "right pad inputs with zeros up to window size") 21 | 22 | flags.mark_flag_as_required("eval_file_path") 23 | flags.mark_flag_as_required("model_path") 24 | flags.mark_flag_as_required("output_dir") 25 | FLAGS = flags.FLAGS 26 | 27 | 28 | def preds_to_output(pred, num_inputs, input_freq_hz, start_time_s): 29 | """ 30 | Takes an array of predictions from the decode and maps it to real time predictions 31 | Args: 32 | pred (obj): raw output from the model 33 | num_inputs (int): how many input frames were fed to cpc 34 | input_freq_hz (int): frames per second provided to cpc 35 | start_time_s (float): offset to apply to prediction timings 36 | Returns: 37 | (list): outputs, each is a Prediction namedtuple 38 | (float): end time of the batch, could be used as start time of the next one 39 | """ 40 | num_preds = pred.shape[0] 41 | total_duration_s = float(num_inputs) / input_freq_hz 42 | pred_duration_s = total_duration_s / num_preds 43 | outputs = [] 44 | for idx in range(num_preds): 45 | outputs.append( 46 | Prediction( 47 | pred[idx].item(), 48 | start_time_s + idx * pred_duration_s, 49 | start_time_s + (idx + 1) * pred_duration_s, 50 | ) 51 | ) 52 | return outputs, start_time_s + num_preds * pred_duration_s 53 | 54 | 55 | def main(unused_argv): 56 | # create output dirs 57 | output_dir = Path(FLAGS.output_dir) 58 | Path.mkdir(output_dir, exist_ok=True) 59 | 60 | if FLAGS.cpc_path is not None: 61 | cpc = load_model(FLAGS.cpc_path).eval().to(device) 62 | else: 63 | cpc = NoCPC().eval().to(device) 64 | model = load_model(FLAGS.model_path).eval().to(device) 65 | 66 | dataset = AudioDataset(FLAGS.eval_file_path, train=False) 67 | dataloader = AudioDataLoader( 68 | dataset, 69 | window_size=None, 70 | batch_size=1, 71 | feature_transform=cpc.data_class, 72 | num_workers=8, 73 | shuffle=False, 74 | ) 75 | 76 | set_seeds() 77 | # Need the enumeration to ensure unique files 78 | for i, batch in enumerate(dataloader): 79 | data = batch["data"].to(device) 80 | cpc.reset_state() 81 | 82 | preds = [] 83 | prev_end_s = 0.0 84 | windows = torch.split(data, FLAGS.window_size, dim=1) 85 | for window in windows: 86 | with torch.no_grad(): 87 | features = cpc(window) 88 | pred = model(features).argmax(dim=2).squeeze(dim=0) 89 | 90 | outputs, prev_end_s = preds_to_output( 91 | pred, 92 | window.shape[1], 93 | dataloader.sampling_rate, 94 | prev_end_s, 95 | ) 96 | preds.extend(outputs) 97 | 98 | filename = Path(batch["files"][0]) 99 | with open(str(output_dir / filename.name) + "_" + str(i), "w") as out_f: 100 | for pred in preds: 101 | out_f.write("{:.3f} {:.3f} {}\n".format(pred.start, pred.end, pred.label)) 102 | 103 | with open(output_dir / "score.dbl", "a") as dbl_fh: 104 | dbl_fh.write(str(output_dir / filename.name) + "_" + str(i) + "\n") 105 | 106 | 107 | if __name__ == "__main__": 108 | app.run(main) 109 | -------------------------------------------------------------------------------- /emotion_id/model.py: -------------------------------------------------------------------------------- 1 | from torch import nn 2 | from math import ceil 3 | from emotion_id.wavenet import Conv1dMasked, Conv1dSamePadding, ResidualStack 4 | from util import GlobalNormalization, BatchNorm, Permute 5 | 6 | 7 | class BaseModel: 8 | @property 9 | def num_params(self) -> int: 10 | """ 11 | :return: number of parameters in the module 12 | """ 13 | return sum([p.nelement() for p in self.parameters()]) 14 | 15 | def stash_state(self): 16 | """ 17 | stash state within model and initialize new hidden state 18 | for use with recurrent models, dummy method for others 19 | """ 20 | pass 21 | 22 | def pop_state(self): 23 | """ 24 | pop state from stashed state, overwriting current hidden state 25 | for use with recurrent models, dummy method for others 26 | """ 27 | pass 28 | 29 | def reset_state(self): 30 | """ 31 | reset state for use with recurrent models, dummy method for others 32 | """ 33 | pass 34 | 35 | 36 | class MLPEmotionIDModel(nn.Module, BaseModel): 37 | def __init__( 38 | self, 39 | input_dim, 40 | output_classes, 41 | no_layers=2, 42 | hidden_size=1024, 43 | dropout_prob=0, 44 | batch_norm_on=False, 45 | ): 46 | super().__init__() 47 | assert no_layers > 1 48 | blocks = [ 49 | GlobalNormalization(input_dim, scale=False), 50 | nn.Linear(input_dim, hidden_size), 51 | BatchNorm(hidden_size, batch_norm_on), 52 | nn.ReLU(), 53 | nn.Dropout(p=dropout_prob), 54 | ] 55 | for _ in range(no_layers - 2): 56 | blocks.extend( 57 | [ 58 | nn.Linear(hidden_size, hidden_size), 59 | BatchNorm(hidden_size, batch_norm_on), 60 | nn.ReLU(), 61 | nn.Dropout(p=dropout_prob), 62 | ] 63 | ) 64 | blocks.append(nn.Linear(hidden_size, output_classes)) 65 | self.blocks = nn.Sequential(*blocks) 66 | 67 | def forward(self, x): 68 | return self.blocks(x) 69 | 70 | 71 | class LinearEmotionIDModel(nn.Module, BaseModel): 72 | def __init__(self, in_c, output_classes): 73 | super().__init__() 74 | self.normalize = GlobalNormalization(in_c, scale=False) 75 | self.output_classes = output_classes 76 | self.linear_1 = nn.Linear(in_c, output_classes) 77 | 78 | def forward(self, x): 79 | x = self.normalize(x) 80 | x = self.linear_1(x) 81 | return x 82 | 83 | 84 | class ConvEmotionIDModel(nn.Module, BaseModel): 85 | def __init__(self, input_dim, output_classes, no_layers=4, hidden_size=1024, dropout_prob=0): 86 | super().__init__() 87 | assert no_layers > 1 88 | blocks = [ 89 | GlobalNormalization(input_dim, scale=False), 90 | Permute(), 91 | Conv1dSamePadding(input_dim, hidden_size, kernel_size=5), 92 | nn.ReLU(), 93 | nn.Dropout(p=dropout_prob), 94 | ] 95 | for _ in range(no_layers - 1): 96 | blocks.extend( 97 | [ 98 | Conv1dSamePadding(hidden_size, hidden_size, kernel_size=5), 99 | nn.ReLU(), 100 | nn.Dropout(p=dropout_prob), 101 | ] 102 | ) 103 | blocks.extend([Permute(), nn.Linear(hidden_size, output_classes)]) 104 | self.blocks = nn.Sequential(*blocks) 105 | 106 | def forward(self, x): 107 | return self.blocks(x) 108 | 109 | 110 | class BaselineEmotionIDModel(nn.Module, BaseModel): 111 | def __init__(self, input_dim, output_classes): 112 | super().__init__() 113 | 114 | blocks = [ 115 | Permute(), 116 | Conv1dSamePadding(input_dim, 256, kernel_size=5), 117 | nn.ReLU(), 118 | Conv1dSamePadding(256, 128, kernel_size=5), 119 | nn.ReLU(), 120 | nn.Dropout(p=0.1), 121 | nn.MaxPool1d(kernel_size=8, padding=4), 122 | Conv1dSamePadding(128, 128, kernel_size=5), 123 | nn.ReLU(), 124 | Conv1dSamePadding(128, 128, kernel_size=5), 125 | nn.ReLU(), 126 | Conv1dSamePadding(128, 128, kernel_size=5), 127 | nn.ReLU(), 128 | nn.Dropout(p=0.2), 129 | Conv1dSamePadding(128, 128, kernel_size=5), 130 | nn.ReLU(), 131 | Permute(), 132 | nn.Linear(128, output_classes), 133 | ] 134 | 135 | self.blocks = nn.Sequential(*blocks) 136 | 137 | def forward(self, x): 138 | return self.blocks(x) 139 | 140 | 141 | class RecurrentEmotionIDModel(nn.Module, BaseModel): 142 | def __init__( 143 | self, 144 | feat_dim, 145 | num_emotions, 146 | hidden_size=512, 147 | num_layers=2, 148 | bidirectional=False, 149 | dropout_prob=0, 150 | ): 151 | super().__init__() 152 | self.normalize = GlobalNormalization(feat_dim, scale=False) 153 | self.hidden_state = None 154 | self.gru = nn.GRU( 155 | feat_dim, 156 | hidden_size, 157 | num_layers, 158 | batch_first=True, 159 | dropout=dropout_prob, 160 | bidirectional=bidirectional, 161 | ) 162 | self.linear = nn.Linear(hidden_size * (2 if bidirectional else 1), num_emotions) 163 | 164 | def stash_state(self): 165 | self.state_stash = self.hidden_state.detach().clone() 166 | self.reset_state() 167 | 168 | def reset_state(self): 169 | self.hidden_state = None 170 | 171 | def pop_state(self): 172 | self.hidden_state = self.state_stash 173 | self.state_stash = None 174 | 175 | def forward(self, x): 176 | x = self.normalize(x) 177 | if self.hidden_state is not None and x.shape[0] != self.hidden_state.shape[0]: 178 | self.reset_state() 179 | if self.hidden_state: 180 | self.hidden_state = self.hidden_state.detach() 181 | 182 | x, self.hidden_state = self.gru(x, self.hidden_state) 183 | return self.linear(x) 184 | 185 | 186 | class WaveNetEmotionIDModel(nn.Module, BaseModel): 187 | def __init__( 188 | self, 189 | in_c, 190 | output_classes, 191 | hidden_size=64, 192 | dilation_depth=6, 193 | n_repeat=5, 194 | kernel_size=2, 195 | masked=True, 196 | ): 197 | super().__init__() 198 | self.normalize = GlobalNormalization(in_c, scale=False) 199 | self.output_classes = output_classes 200 | ConvModule = Conv1dMasked if masked else Conv1dSamePadding 201 | 202 | dilations = [kernel_size ** i for i in range(dilation_depth)] * n_repeat 203 | self.receptive_field = sum(dilations) 204 | self.max_padding = ceil((dilations[-1] * (kernel_size - 1)) / 2) 205 | 206 | blocks = [ 207 | ConvModule(in_c, hidden_size, kernel_size=1), 208 | nn.ReLU(), 209 | ResidualStack( 210 | hidden_size, 211 | hidden_size, 212 | dilations, 213 | kernel_size=kernel_size, 214 | conv_module=ConvModule, 215 | ), 216 | ConvModule(hidden_size, output_classes, kernel_size=1), 217 | ] 218 | 219 | self.blocks = nn.Sequential(*blocks) 220 | 221 | def forward(self, x): 222 | x = self.normalize(x) 223 | x = x.permute(0, 2, 1) 224 | x = self.blocks(x) 225 | return x.permute(0, 2, 1) 226 | -------------------------------------------------------------------------------- /emotion_id/score.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import numpy as np 4 | from absl import flags, app 5 | from sklearn.metrics import ( 6 | confusion_matrix, 7 | f1_score, 8 | precision_recall_fscore_support, 9 | accuracy_score, 10 | ) 11 | import seaborn as sns 12 | import matplotlib.pyplot as plt 13 | from dataloader.audio import EmotionDataset 14 | 15 | # This scoring assumes only one emotion per file in the reference 16 | flags.DEFINE_string("ref", None, "Path to reference emotions") 17 | flags.DEFINE_string("pred", None, "Path to predicted emotions") 18 | flags.DEFINE_string("output", None, "Path to predicted emotions") 19 | flags.DEFINE_string("emotion_set_path", None, "path to emotion set") 20 | flags.DEFINE_boolean("single", False, "Score only a single file") 21 | flags.DEFINE_list("actor_ignore", [], "actors to ignore in scoring") 22 | FLAGS = flags.FLAGS 23 | flags.mark_flag_as_required("ref") 24 | flags.mark_flag_as_required("pred") 25 | flags.mark_flag_as_required("output") 26 | flags.mark_flag_as_required("emotion_set_path") 27 | 28 | 29 | def get_stats(refs, preds, emotion2id, acc_type): 30 | """ 31 | :param refs: List of reference emotion classes 32 | :param preds: List of predicted emotion classes 33 | :param acc_type: String used in confusion matrix png name 34 | """ 35 | cm = confusion_matrix(refs, preds) 36 | f1_scores = f1_score(refs, preds, average=None) 37 | precisions, recalls, _, _ = precision_recall_fscore_support(refs, preds, average=None) 38 | acc = accuracy_score(refs, preds) 39 | print(f"Frame-wise accuracy: {acc:.4f}") 40 | results = { 41 | "accuracy": acc, 42 | } 43 | 44 | for f1, precision, recall, emotion in zip(f1_scores, precisions, recalls, emotion2id.keys()): 45 | print(f"{emotion}, precision={precision:.3f}, recall={recall:.3f}, f1={f1:.3f}") 46 | results[emotion] = { 47 | "precision": precision, 48 | "recall": recall, 49 | "f1": f1, 50 | } 51 | print(cm) 52 | np.savetxt(f"{FLAGS.output}/confusion_matrix_{acc_type}.txt", cm) 53 | np.save(f"{FLAGS.output}/confusion_matrix_{acc_type}.npy", cm) 54 | 55 | ax = plt.subplot() 56 | sns.heatmap(cm, annot=False, ax=ax) 57 | ax.set_xlabel("Predicted labels") 58 | ax.set_ylabel("True labels") 59 | ax.set_title("Confusion Matrix") 60 | plt.savefig(f"{FLAGS.output}/confusion_matrix_{acc_type}.png") 61 | plt.clf() 62 | 63 | return results 64 | 65 | 66 | def overall_stats(ref, pred, emotion_set_path, single=False): 67 | """ 68 | :param ref: Path to file(s) containing reference emotion timings 69 | :param pred: Path to file(s) containing predicted emotion timings 70 | :param emotion_set_path: Path to emotion set 71 | :param single: If true, paths are to single files (assume they are filelists otherwise) 72 | :return: 73 | """ 74 | emotion2id = EmotionDataset.get_emotion_to_id_mapping(emotion_set_path) 75 | 76 | # prepare files 77 | if single: 78 | ref_emotions = [ref] 79 | pred_files = [pred] 80 | else: 81 | with open(ref) as inf: 82 | ref_emotions = [line.strip().split()[1] for line in inf] 83 | with open(pred) as inf: 84 | pred_files = [line.strip() for line in inf] 85 | 86 | # loop over files, gathering results 87 | results = {} 88 | 89 | all_preds = [] 90 | all_refs = [] 91 | file_preds = [] 92 | file_refs = [] 93 | for ref_emotion, pred_file in zip(ref_emotions, pred_files): 94 | actor = pred_file.split("-")[-1].split(".")[0] 95 | if actor in FLAGS.actor_ignore: 96 | continue 97 | emotion_id = emotion2id[ref_emotion] 98 | frame_preds = [] 99 | with open(pred_file) as in_f: 100 | for line in in_f: 101 | frame_pred = int(line.strip().split()[2]) 102 | frame_preds.append(frame_pred) 103 | all_refs.append(emotion_id) 104 | all_preds.extend(frame_preds) 105 | counts = np.bincount(np.array(frame_preds)) 106 | file_preds.append(np.argmax(counts)) 107 | file_refs.append(emotion_id) 108 | 109 | results["frame_wise"] = get_stats(all_refs, all_preds, emotion2id, "frame_wise") 110 | results["file_wise"] = get_stats(file_refs, file_preds, emotion2id, "file_wise") 111 | 112 | return results 113 | 114 | 115 | def score(unused_argv): 116 | os.makedirs(FLAGS.output, exist_ok=True) 117 | results = overall_stats(FLAGS.ref, FLAGS.pred, FLAGS.emotion_set_path, FLAGS.single) 118 | print(json.dumps(results, indent=4)) 119 | with open(f"{FLAGS.output}/score_results.json", "w") as outfile: 120 | json.dump(results, outfile, indent=4) 121 | 122 | 123 | if __name__ == "__main__": 124 | app.run(score) 125 | -------------------------------------------------------------------------------- /emotion_id/train.py: -------------------------------------------------------------------------------- 1 | from math import inf 2 | import numpy as np 3 | from pathlib import Path 4 | 5 | import torch 6 | from absl import flags, logging, app 7 | from torch import save 8 | import torch.nn.functional as F 9 | from torch.nn.utils import clip_grad_norm_ 10 | from torch.utils.tensorboard import SummaryWriter 11 | from torch.optim.lr_scheduler import CosineAnnealingLR 12 | 13 | from sklearn.metrics import ( 14 | confusion_matrix, 15 | f1_score, 16 | accuracy_score, 17 | ) 18 | import seaborn as sns 19 | import matplotlib.pyplot as plt 20 | 21 | from emotion_id.model import ( 22 | MLPEmotionIDModel, 23 | ConvEmotionIDModel, 24 | BaselineEmotionIDModel, 25 | LinearEmotionIDModel, 26 | RecurrentEmotionIDModel, 27 | WaveNetEmotionIDModel, 28 | ) 29 | from dataloader.audio import EmotionDataset, AudioDataLoader 30 | from cpc.model import NoCPC 31 | 32 | from util import ( 33 | set_seeds, 34 | load_model, 35 | FixedRandomState, 36 | RAdam, 37 | device, 38 | fig2tensor, 39 | ) 40 | 41 | FLAGS = flags.FLAGS 42 | flags.DEFINE_string("expdir", None, "directory to write all experiment data to") 43 | flags.DEFINE_string("train_data", None, "path to train files") 44 | flags.DEFINE_string("val_data", None, "path to validation files") 45 | flags.DEFINE_string("emotion_set_path", None, "path to smotion set") 46 | 47 | flags.DEFINE_string("cpc_path", None, "path to cpc model to use") 48 | flags.DEFINE_string("model_out", None, "path to where to save trained model") 49 | flags.DEFINE_enum( 50 | "model", 51 | "mlp2", 52 | ["linear", "baseline", "mlp2", "mlp4", "conv", "rnn", "rnn_bi", "wavenet", "wavenet_unmasked"], 53 | "The model type", 54 | ) 55 | 56 | flags.DEFINE_integer("window_size", 2048, "num frames to push into model at once") 57 | flags.DEFINE_integer("batch_size", None, "batch size, num parallel streams to train on at once") 58 | flags.DEFINE_integer("steps", None, "number of train steps before breaking") 59 | flags.DEFINE_integer("hidden_size", 1024, "hidden size for models") 60 | flags.DEFINE_float("dropout_prob", 0.0, "dropout probability") 61 | flags.DEFINE_float("lr", 4e-4, "learning rate") 62 | flags.DEFINE_float("clip_thresh", 1.0, "value to clip gradients to") 63 | 64 | flags.DEFINE_integer("valid_steps", None, "number of steps to take in validation") 65 | flags.DEFINE_integer("val_every", None, "how often to perform validation") 66 | flags.DEFINE_integer("save_every", None, "save every n steps") 67 | 68 | flags.DEFINE_boolean("batch_norm", False, "batch_norm") 69 | flags.DEFINE_integer("num_workers", 8, "number of workers for dataloader") 70 | 71 | 72 | flags.mark_flag_as_required("emotion_set_path") 73 | flags.mark_flag_as_required("batch_size") 74 | flags.mark_flag_as_required("steps") 75 | flags.mark_flag_as_required("train_data") 76 | flags.mark_flag_as_required("val_data") 77 | flags.mark_flag_as_required("expdir") 78 | 79 | 80 | def train(unused_argv): 81 | set_seeds(FLAGS.seed) 82 | # setup logging 83 | tb_logger = SummaryWriter(FLAGS.expdir, flush_secs=10) 84 | loss_dir = Path(f"{FLAGS.expdir}/losses") 85 | loss_dir.mkdir(exist_ok=True) 86 | train_losses_fh = open(loss_dir / "train.txt", "a", buffering=1) 87 | valid_losses_fh = open(loss_dir / "valid.txt", "a", buffering=1) 88 | 89 | if not FLAGS.model_out: 90 | FLAGS.model_out = FLAGS.expdir + "/model.pt" 91 | 92 | if FLAGS.cpc_path is not None: 93 | cpc = load_model(FLAGS.cpc_path).to(device) 94 | cpc.reset_state() 95 | else: 96 | cpc = NoCPC() 97 | cpc.eval() 98 | 99 | # write information about cpc into metadata 100 | with open(f"{FLAGS.expdir}/metadata.txt", "a") as fh: 101 | fh.write(f"data_class {cpc.data_class}\n") 102 | fh.write(f"feat_dim {cpc.feat_dim}\n") 103 | 104 | # define training data 105 | train_dataset = EmotionDataset(FLAGS.train_data, FLAGS.emotion_set_path) 106 | train_dataloader = AudioDataLoader( 107 | train_dataset, 108 | window_size=FLAGS.window_size, 109 | batch_size=FLAGS.batch_size, 110 | feature_transform=cpc.data_class, 111 | num_workers=FLAGS.num_workers, 112 | shuffle=True, 113 | drop_last=True, 114 | ) 115 | # define validation data 116 | val_dataset = EmotionDataset(FLAGS.val_data, FLAGS.emotion_set_path) 117 | val_dataloader = AudioDataLoader( 118 | val_dataset, 119 | window_size=FLAGS.window_size, 120 | batch_size=FLAGS.batch_size, 121 | feature_transform=cpc.data_class, 122 | num_workers=FLAGS.num_workers, 123 | shuffle=False, 124 | drop_last=True, 125 | ) 126 | # filewise validation (like decode time) 127 | decode_dataset = EmotionDataset(FLAGS.val_data, FLAGS.emotion_set_path, train=False) 128 | decode_dataloader = AudioDataLoader( 129 | decode_dataset, 130 | window_size=None, 131 | batch_size=1, 132 | feature_transform=cpc.data_class, 133 | num_workers=FLAGS.num_workers, 134 | shuffle=False, 135 | ) 136 | 137 | if not FLAGS.val_every: 138 | FLAGS.val_every = max(100, FLAGS.steps // 50) 139 | if not FLAGS.save_every: 140 | FLAGS.save_every = FLAGS.val_every 141 | if not FLAGS.valid_steps: 142 | FLAGS.valid_steps = max(20, FLAGS.val_every // 100) 143 | valid_frames = FLAGS.batch_size * FLAGS.window_size * FLAGS.valid_steps 144 | 145 | feat_dim = cpc.feat_dim 146 | num_emotions = len(train_dataset.get_emotion_to_id_mapping(FLAGS.emotion_set_path)) 147 | 148 | if FLAGS.model == "linear": 149 | model = LinearEmotionIDModel(feat_dim, num_emotions).to(device) 150 | elif FLAGS.model == "baseline": 151 | model = BaselineEmotionIDModel(feat_dim, num_emotions).to(device) 152 | elif FLAGS.model == "mlp2": 153 | model = MLPEmotionIDModel( 154 | feat_dim, 155 | num_emotions, 156 | no_layers=2, 157 | hidden_size=FLAGS.hidden_size, 158 | dropout_prob=FLAGS.dropout_prob, 159 | batch_norm_on=FLAGS.batch_norm, 160 | ).to(device) 161 | elif FLAGS.model == "mlp4": 162 | model = MLPEmotionIDModel( 163 | feat_dim, 164 | num_emotions, 165 | no_layers=4, 166 | hidden_size=FLAGS.hidden_size, 167 | dropout_prob=FLAGS.dropout_prob, 168 | batch_norm_on=FLAGS.batch_norm, 169 | ).to(device) 170 | elif FLAGS.model == "conv": 171 | model = ConvEmotionIDModel( 172 | feat_dim, 173 | num_emotions, 174 | no_layers=4, 175 | hidden_size=FLAGS.hidden_size, 176 | dropout_prob=FLAGS.dropout_prob, 177 | ).to(device) 178 | elif FLAGS.model == "rnn": 179 | model = RecurrentEmotionIDModel( 180 | feat_dim=feat_dim, 181 | num_emotions=num_emotions, 182 | bidirectional=False, 183 | hidden_size=FLAGS.hidden_size, 184 | dropout_prob=FLAGS.dropout_prob, 185 | ).to(device) 186 | elif FLAGS.model == "rnn_bi": 187 | model = RecurrentEmotionIDModel( 188 | feat_dim=feat_dim, 189 | num_emotions=num_emotions, 190 | bidirectional=True, 191 | hidden_size=FLAGS.hidden_size, 192 | dropout_prob=FLAGS.dropout_prob, 193 | ).to(device) 194 | elif FLAGS.model == "wavenet": 195 | model = WaveNetEmotionIDModel(feat_dim, num_emotions).to(device) 196 | padding_percentage = 100 * model.max_padding / FLAGS.window_size 197 | logging.info(f"max padding {model.max_padding}, percentage {padding_percentage}%") 198 | logging.info(f"receptve field {model.receptive_field}") 199 | elif FLAGS.model == "wavenet_unmasked": 200 | model = WaveNetEmotionIDModel(feat_dim, num_emotions, masked=False).to(device) 201 | padding_percentage = 100 * model.max_padding / FLAGS.window_size 202 | logging.info(f"max padding {model.max_padding}, percentage {padding_percentage}%") 203 | logging.info(f"receptve field {model.receptive_field}") 204 | else: 205 | raise NameError("Model name not found") 206 | 207 | logging.info(f"number of classes {num_emotions}") 208 | logging.info(f"model param count {sum(x.numel() for x in model.parameters()):,}") 209 | 210 | optimizer = RAdam(model.parameters(), eps=1e-05, lr=FLAGS.lr) 211 | scheduler = CosineAnnealingLR(optimizer, FLAGS.steps, eta_min=1e-6) 212 | 213 | step = 0 214 | best_val_loss = inf 215 | 216 | model.train() 217 | for batch in train_dataloader: 218 | data, labels = batch["data"].to(device), batch["labels"].to(device) 219 | features = cpc(data) 220 | pred = model(features) 221 | 222 | # get cross entropy loss against emotion labels and take step 223 | optimizer.zero_grad() 224 | pred = pred.reshape(-1, num_emotions) 225 | labels = labels.reshape(-1) 226 | loss = F.cross_entropy(pred, labels) 227 | loss.backward() 228 | clip_grad_norm_(model.parameters(), FLAGS.clip_thresh) 229 | 230 | optimizer.step() 231 | scheduler.step() 232 | # log training losses 233 | logging.info(f"{step} train steps, loss={loss.item():.5}") 234 | tb_logger.add_scalar("01_train/loss", loss, step) 235 | train_losses_fh.write(f"{step}, {loss.item()}\n") 236 | 237 | tb_logger.add_scalar("01_train/lr", scheduler.get_lr()[0], step) 238 | 239 | # validate periodically 240 | if step % FLAGS.val_every == 0 and step != 0: 241 | 242 | valid_loss = validate(val_dataloader, cpc, model, num_emotions) 243 | # log validation losses 244 | logging.info( 245 | f"{step} validation, loss={valid_loss.item():.5}, " 246 | f"{valid_frames:,} items validated" 247 | ) 248 | tb_logger.add_scalar("02_valid/loss", valid_loss, step) 249 | valid_losses_fh.write(f"{step}, {valid_loss}\n") 250 | 251 | val_results = validate_filewise(decode_dataloader, cpc, model, num_emotions) 252 | tb_logger.add_scalar("02_valid/full_loss", val_results["average_loss"], step) 253 | for name in ["framewise", "filewise"]: 254 | cm = fig2tensor(val_results[name]["confusion_matrix"]) 255 | tb_logger.add_scalar( 256 | f"02_valid/accuracy_{name}", val_results[name]["accuracy"], step 257 | ) 258 | tb_logger.add_scalar( 259 | f"02_valid/f1_score_{name}", val_results[name]["average_f1"], step 260 | ) 261 | tb_logger.add_image(f"02_valid/confusion_matrix_{name}", cm, step) 262 | 263 | for emotion, f1 in val_results["framewise"]["class_f1"].items(): 264 | tb_logger.add_scalar(f"03_f1/{emotion}", f1, step) 265 | 266 | if valid_loss.item() < best_val_loss: 267 | logging.info("Saving new best validation") 268 | save(model, FLAGS.model_out + ".bestval") 269 | best_val_loss = valid_loss.item() 270 | 271 | # save out model periodically 272 | if step % FLAGS.save_every == 0 and step != 0: 273 | save(model, FLAGS.model_out + ".step" + str(step)) 274 | 275 | if step >= FLAGS.steps: 276 | break 277 | 278 | step += 1 279 | 280 | save(model, FLAGS.model_out) 281 | 282 | # close loss logging file handles 283 | train_losses_fh.close() 284 | valid_losses_fh.close() 285 | 286 | 287 | def validate(dataloader, cpc, model, num_emotions): 288 | losses = [] 289 | model.eval() 290 | 291 | # Stash and later restore states for non-leaky validation 292 | cpc.stash_state() 293 | model.stash_state() 294 | 295 | # reset to a fixed random seed for determisitic and comparable validation 296 | with FixedRandomState(42): 297 | for step, batch in enumerate(dataloader): 298 | data, labels = batch["data"].to(device), batch["labels"] 299 | with torch.no_grad(): 300 | features = cpc(data) 301 | pred = model(features).reshape(-1, num_emotions) 302 | labels = labels.reshape(-1) 303 | losses.append(F.cross_entropy(pred, labels.to(device)).item()) 304 | if step >= FLAGS.valid_steps: 305 | break 306 | cpc.pop_state() 307 | model.pop_state() 308 | 309 | model.train() 310 | return np.array(losses).mean() 311 | 312 | 313 | # TODO fix 314 | def validate_filewise(dataloader, cpc, model, num_emotions): 315 | logging.info("Starting filewise validation") 316 | losses = [] 317 | frame_preds = [] 318 | frame_refs = [] 319 | file_preds = [] 320 | file_refs = [] 321 | model.eval() 322 | 323 | # Stash and later restore states for non-leaky validation 324 | cpc.stash_state() 325 | model.stash_state() 326 | 327 | for i, batch in enumerate(dataloader): 328 | data, labels = batch["data"].to(device), batch["labels"].to(device) 329 | cpc.reset_state() 330 | 331 | single_file_preds = [] 332 | data_windows = torch.split(data, FLAGS.window_size, dim=1) 333 | label_windows = torch.split(labels, FLAGS.window_size, dim=1) 334 | for data_chunk, labels_chunk in zip(data_windows, label_windows): 335 | with torch.no_grad(): 336 | features = cpc(data_chunk) 337 | logits = model(features) 338 | # get pred 339 | pred = logits.argmax(dim=2).squeeze(dim=0) 340 | frame_preds.append(pred) 341 | single_file_preds.append(pred) 342 | labels_chunk = labels_chunk.reshape(-1) 343 | frame_refs.append(labels_chunk) 344 | # get loss 345 | logits = logits.reshape(-1, num_emotions) 346 | losses.append(F.cross_entropy(logits, labels_chunk).item()) 347 | 348 | counts = np.bincount(torch.cat(single_file_preds, dim=0).cpu().numpy()) 349 | file_preds.append(np.argmax(counts)) 350 | file_refs.append(labels.squeeze()[-1].item()) 351 | 352 | frame_preds = torch.cat(frame_preds, dim=0).cpu().numpy() 353 | frame_refs = torch.cat(frame_refs, dim=0).cpu().numpy() 354 | file_preds = np.array(file_preds) 355 | file_refs = np.array(file_refs) 356 | 357 | results = {} 358 | results["average_loss"] = np.array(losses).mean() 359 | emotion2id = dataloader.dataset.get_emotion_to_id_mapping(FLAGS.emotion_set_path) 360 | 361 | for refs, preds, name in zip( 362 | [frame_refs, file_refs], [frame_preds, file_preds], ["framewise", "filewise"] 363 | ): 364 | results[name] = {} 365 | results[name]["accuracy"] = accuracy_score(refs, preds) 366 | results[name]["average_f1"] = f1_score(refs, preds, average="macro") 367 | results[name]["class_f1"] = {} 368 | f1_scores = f1_score(refs, preds, average=None) 369 | for f1, emotion in zip(f1_scores, emotion2id.keys()): 370 | results[name]["class_f1"][emotion] = f1 371 | 372 | cm = confusion_matrix(refs, preds) 373 | fig, ax = plt.subplots(figsize=(8, 6), dpi=150) 374 | sns.heatmap(cm, annot=True, ax=ax) 375 | ax.set_xlabel("Predicted labels") 376 | ax.set_ylabel("True labels") 377 | results[name]["confusion_matrix"] = fig 378 | 379 | cpc.pop_state() 380 | model.pop_state() 381 | model.train() 382 | 383 | return results 384 | 385 | 386 | if __name__ == "__main__": 387 | app.run(train) 388 | -------------------------------------------------------------------------------- /emotion_id/wavenet.py: -------------------------------------------------------------------------------- 1 | from math import ceil 2 | from torch import nn 3 | import torch.nn.functional as F 4 | 5 | 6 | class Conv1dSamePadding(nn.Module): 7 | def __init__(self, in_channels, out_channels, kernel_size, stride=1, dilation=1): 8 | super().__init__() 9 | self.cut_last_element = kernel_size % 2 == 0 and stride == 1 and dilation % 2 == 1 10 | padding = ceil((1 - stride + dilation * (kernel_size - 1)) / 2) 11 | self.conv = nn.Conv1d( 12 | in_channels, 13 | out_channels, 14 | kernel_size, 15 | padding=padding, 16 | stride=stride, 17 | dilation=dilation, 18 | ) 19 | 20 | def forward(self, x): 21 | if self.cut_last_element is True: 22 | return self.conv(x)[:, :, :-1] 23 | else: 24 | return self.conv(x) 25 | 26 | 27 | class Conv1dMasked(nn.Conv1d): 28 | def __init__(self, *args, mask_present=False, **kwargs): 29 | kwargs["padding"] = 0 30 | super().__init__(*args, **kwargs) 31 | 32 | """ Pad so receptive field sees only frames in past, optionally including present frame """ 33 | if mask_present is True: 34 | left_padding = ((self.kernel_size[0] - 1) * self.dilation[0]) + 1 35 | else: 36 | left_padding = (self.kernel_size[0] - 1) * self.dilation[0] 37 | self.pad = nn.ConstantPad1d((left_padding, 0), 0) 38 | 39 | def forward(self, x): 40 | assert x.shape[2] % self.stride[0] == 0 41 | desired_out_length = x.shape[2] // self.stride[0] 42 | x = self.pad(x) 43 | x = super().forward(x) 44 | return x[:, :, :desired_out_length] 45 | 46 | 47 | class ResidualStack(nn.Module): 48 | def __init__( 49 | self, 50 | n_residual, 51 | n_skip, 52 | dilations, 53 | kernel_size=3, 54 | groups=4, 55 | conv_module=Conv1dSamePadding, 56 | ): 57 | super().__init__() 58 | self.resblocks = nn.ModuleList() 59 | for dilation in dilations: 60 | self.resblocks.append( 61 | ResidualBlock( 62 | n_residual, 63 | n_skip, 64 | kernel_size=kernel_size, 65 | dilation=dilation, 66 | conv_module=conv_module, 67 | ) 68 | ) 69 | 70 | def forward(self, x): 71 | skip_connections = [] 72 | for resblock in self.resblocks: 73 | x, skip = resblock(x) 74 | skip_connections.append(skip) 75 | return F.relu(sum(skip_connections)) 76 | 77 | 78 | class ResidualBlock(nn.Module): 79 | def __init__( 80 | self, 81 | n_residual, 82 | n_skip, 83 | kernel_size=3, 84 | dilation=1, 85 | groups=4, 86 | conv_module=Conv1dSamePadding, 87 | ): 88 | super().__init__() 89 | self.conv_tanh = conv_module( 90 | n_residual, n_residual, kernel_size=kernel_size, dilation=dilation 91 | ) 92 | self.conv_sigmoid = conv_module( 93 | n_residual, n_residual, kernel_size=kernel_size, dilation=dilation 94 | ) 95 | self.gated_activation_unit = GatedActivation(self.conv_tanh, self.conv_sigmoid) 96 | 97 | self.skip_connection = conv_module(n_residual, n_skip, kernel_size=1, dilation=dilation) 98 | self.residual_connection = conv_module( 99 | n_residual, n_residual, kernel_size=1, dilation=dilation 100 | ) 101 | 102 | def forward(self, inp): 103 | x = self.gated_activation_unit(inp) 104 | skip = self.skip_connection(x) 105 | residual = self.residual_connection(x) 106 | output = residual + inp 107 | return output, skip 108 | 109 | 110 | class GatedActivation(nn.Module): 111 | def __init__(self, conv_tanh, conv_sigmoid): 112 | super().__init__() 113 | self.conv_tanh = conv_tanh 114 | self.conv_sigmoid = conv_sigmoid 115 | self.tanh = nn.Tanh() 116 | self.sigmoid = nn.Sigmoid() 117 | 118 | def forward(self, x): 119 | t = self.tanh(self.conv_tanh(x)) 120 | s = self.sigmoid(self.conv_sigmoid(x)) 121 | return t * s 122 | -------------------------------------------------------------------------------- /parse_emotion_dataset.py: -------------------------------------------------------------------------------- 1 | """ 2 | This script extracts metadata from the emotion dataset and 3 | creates a train, val and test dbl file with 80:10:10 split 4 | """ 5 | import os 6 | from collections import namedtuple 7 | import json 8 | import argparse 9 | from random import random 10 | import subprocess 11 | 12 | # parse arguments 13 | parser = argparse.ArgumentParser() 14 | parser.add_argument( 15 | "--data_location", "-d", action="store", default="data/Audio_Speech_Actors_01-24" 16 | ) 17 | parser.add_argument("--json", "-j", action="store_true", default=False) 18 | parser.add_argument("--output", "-o", action="store", default="data") 19 | args = parser.parse_args() 20 | 21 | # Define how emotion files are parsed 22 | Metadata = namedtuple( 23 | "Metadata", "modeality vocal emotion intensity statement repetition actor gender" 24 | ) 25 | modality = {"01": "full-AV", "02": "video-only", "03": "audio-only"} 26 | vocal_channel = {"01": "speech", "02": "song"} 27 | emotion = { 28 | "01": "neutral", 29 | "02": "calm", 30 | "03": "happy", 31 | "04": "sad", 32 | "05": "angry", 33 | "06": "fearful", 34 | "07": "disgust", 35 | "08": "surprised", 36 | } 37 | intensity = {"01": "normal", "02": "strong"} 38 | statement = {"01": "Kids are talking by the door", "02": "Dogs are sitting by the door"} 39 | 40 | 41 | def parse_filename(filepath): 42 | """ extract meaning from emotion dataset filenames """ 43 | filename = filepath.split("/")[-1].split(".")[0] # e.g. 03-01-04-02-02-02-02 44 | m, v, e, i, s, r, a = filename.split("-") 45 | 46 | m = modality[m] 47 | v = vocal_channel[v] 48 | e = emotion[e] 49 | i = intensity[i] 50 | s = statement[s] 51 | r = int(r) 52 | a = int(a) 53 | g = "male" if a % 2 == 1 else "female" 54 | 55 | meta_named = Metadata(m, v, e, i, s, r, a, g) 56 | meta_dict = { 57 | "modeality": m, 58 | "vocal_channel": v, 59 | "emotion": e, 60 | "intensity": i, 61 | "statement": s, 62 | "repetition": r, 63 | "actor": a, 64 | "gender": g, 65 | } 66 | 67 | return meta_dict, meta_named 68 | 69 | 70 | # parse each file 71 | file_dict = {} 72 | file_meta = {} 73 | for subdir, dirs, files in os.walk(args.data_location): 74 | for file in files: 75 | file_path = os.path.join(subdir, file) 76 | 77 | if file_path.endswith(".wav"): 78 | meta_dict, meta_named = parse_filename(file_path) 79 | file_dict[file_path] = meta_dict 80 | file_meta[file_path] = meta_named 81 | 82 | # save metadata in json 83 | if args.json: 84 | with open(f"{args.output}/metadata.json", "w") as fp: 85 | json.dump(file_dict, fp, indent=4) 86 | 87 | # save emotion set .txt 88 | with open(f"{args.output}/emotion_set.txt", "w") as fp: 89 | for emotion_type in emotion.values(): 90 | fp.write(f"{emotion_type}\n") 91 | 92 | # Save dbl files 93 | # 80:10:10 train val test split, two speakers are kept separate from training 94 | train_dbl = open(f"{args.output}/train.ordered.dbl", "w") 95 | test_dbl = open(f"{args.output}/test.ordered.dbl", "w") 96 | val_dbl = open(f"{args.output}/val.ordered.dbl", "w") 97 | 98 | prob_not_train = (24 * 0.2 - 2) / (24 - 2) 99 | 100 | train_class_counts = {k: 0 for k in emotion.values()} 101 | test_class_counts = {k: 0 for k in emotion.values()} 102 | val_class_counts = {k: 0 for k in emotion.values()} 103 | 104 | for filepath, meta in file_meta.items(): 105 | if meta.actor in [23, 24]: 106 | if random() < 0.5: 107 | val_dbl.write(f"{filepath} {meta.emotion}\n") 108 | val_class_counts[meta.emotion] += 1 109 | else: 110 | test_dbl.write(f"{filepath} {meta.emotion}\n") 111 | test_class_counts[meta.emotion] += 1 112 | else: 113 | if random() < prob_not_train: 114 | if random() < 0.5: 115 | val_dbl.write(f"{filepath} {meta.emotion}\n") 116 | val_class_counts[meta.emotion] += 1 117 | else: 118 | test_dbl.write(f"{filepath} {meta.emotion}\n") 119 | test_class_counts[meta.emotion] += 1 120 | else: 121 | train_dbl.write(f"{filepath} {meta.emotion}\n") 122 | train_class_counts[meta.emotion] += 1 123 | 124 | train_dbl.close() 125 | test_dbl.close() 126 | val_dbl.close() 127 | 128 | print(train_class_counts) 129 | print(val_class_counts) 130 | print(test_class_counts) 131 | 132 | # randomize dbls 133 | subprocess.call(f"sort -R {args.output}/train.ordered.dbl > {args.output}/train.dbl", shell=True) 134 | subprocess.call(f"sort -R {args.output}/test.ordered.dbl > {args.output}/test.dbl", shell=True) 135 | subprocess.call(f"sort -R {args.output}/val.ordered.dbl > {args.output}/val.dbl", shell=True) 136 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.black] 2 | line-length = 100 3 | exclude = ''' 4 | ( 5 | venv* 6 | | .* 7 | | __pycache__ 8 | | Dockerfile 9 | ) 10 | ''' -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # core 2 | torch 3 | absl-py 4 | ffmpeg-python 5 | numpy 6 | torchaudio 7 | scipy 8 | pyannote.metrics 9 | pysndfx 10 | Pillow 11 | 12 | # dev 13 | matplotlib 14 | tensorboard 15 | seaborn 16 | 17 | # python notebooks 18 | jupyter 19 | jupyterlab-git 20 | jupyterlab 21 | nbdime 22 | 23 | # for linting and testing 24 | black 25 | flake8 26 | pre-commit 27 | pylint 28 | pytest 29 | -------------------------------------------------------------------------------- /util.py: -------------------------------------------------------------------------------- 1 | import math 2 | import os 3 | from pathlib import Path 4 | import random 5 | import io 6 | 7 | from PIL import Image 8 | from absl import flags 9 | import numpy as np 10 | import torch 11 | import torch.nn as nn 12 | from torch.optim.optimizer import Optimizer 13 | 14 | flags.DEFINE_integer("seed", 42, "fixed seed to apply to all rng entrypoints") 15 | FLAGS = flags.FLAGS 16 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 17 | 18 | 19 | def is_non_empty_file(path): 20 | if isinstance(path, str): 21 | path = Path(path) 22 | return path.is_file() and path.stat().st_size != 0 23 | 24 | 25 | def set_seeds(seed=42, fully_deterministic=False): 26 | torch.manual_seed(seed) 27 | if torch.cuda.is_available(): 28 | torch.cuda.manual_seed_all(seed) 29 | np.random.seed(seed) 30 | random.seed(seed) 31 | os.environ["PYTHONHASHSEED"] = str(seed) 32 | 33 | if fully_deterministic: 34 | torch.backends.cudnn.deterministic = True 35 | torch.backends.cudnn.benchmark = False 36 | 37 | 38 | def load_model(model_path, map_location=device): 39 | model_path = os.path.realpath(model_path) # Resolve any symlinks 40 | return torch.load(model_path, map_location=map_location) 41 | 42 | 43 | class FixedRandomState: 44 | def __init__(self, seed=0): 45 | self.seed = seed 46 | 47 | def __enter__(self): 48 | # Copy current state 49 | self.random_state = RandomStateCache() 50 | 51 | # Overwrite seeds 52 | random.seed(self.seed) 53 | np.random.seed(self.seed) 54 | torch.manual_seed(self.seed) 55 | if torch.cuda.is_available(): 56 | torch.cuda.manual_seed_all(self.seed) 57 | 58 | def __exit__(self, *args): 59 | self.random_state.restore() 60 | 61 | 62 | class RandomStateCache: 63 | def __init__(self): 64 | self.store() 65 | 66 | def store(self): 67 | self.random_state = random.getstate() 68 | self.numpy_state = np.random.get_state() 69 | self.torch_state = torch.random.get_rng_state() 70 | if torch.cuda.is_available(): 71 | self.cuda_state = torch.cuda.get_rng_state_all() 72 | 73 | def restore(self): 74 | random.setstate(self.random_state) 75 | np.random.set_state(self.numpy_state) 76 | torch.random.set_rng_state(self.torch_state) 77 | if torch.cuda.is_available(): 78 | torch.cuda.set_rng_state_all(self.cuda_state) 79 | 80 | 81 | class RAdam(Optimizer): 82 | def __init__( 83 | self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, degenerated_to_sgd=True 84 | ): 85 | if not 0.0 <= lr: 86 | raise ValueError("Invalid learning rate: {}".format(lr)) 87 | if not 0.0 <= eps: 88 | raise ValueError("Invalid epsilon value: {}".format(eps)) 89 | if not 0.0 <= betas[0] < 1.0: 90 | raise ValueError("Invalid beta parameter at index 0: {}".format(betas[0])) 91 | if not 0.0 <= betas[1] < 1.0: 92 | raise ValueError("Invalid beta parameter at index 1: {}".format(betas[1])) 93 | 94 | self.degenerated_to_sgd = degenerated_to_sgd 95 | defaults = dict(lr=lr, betas=betas, eps=eps, weight_decay=weight_decay) 96 | 97 | super(RAdam, self).__init__(params, defaults) 98 | 99 | def __setstate__(self, state): 100 | super(RAdam, self).__setstate__(state) 101 | 102 | def reset_step_buffer(self): 103 | for group in self.param_groups: 104 | for p in group["params"]: 105 | state = self.state[p] 106 | state["step"] = 0 107 | 108 | def load_state_dict(self, state_dict): 109 | super().load_state_dict(state_dict) 110 | # Step buffer must be reset when loading RAdam checkpoint 111 | # to prevent loss spike 112 | self.reset_step_buffer() 113 | 114 | def step(self, closure=None): 115 | loss = None 116 | if closure is not None: 117 | loss = closure() 118 | 119 | for group in self.param_groups: 120 | 121 | for p in group["params"]: 122 | if p.grad is None: 123 | continue 124 | grad = p.grad.data.float() 125 | if grad.is_sparse: 126 | raise RuntimeError("RAdam does not support sparse gradients") 127 | 128 | p_data_fp32 = p.data.float() 129 | 130 | state = self.state[p] 131 | 132 | if len(state) == 0: 133 | state["step"] = 0 134 | state["exp_avg"] = torch.zeros_like(p_data_fp32) 135 | state["exp_avg_sq"] = torch.zeros_like(p_data_fp32) 136 | else: 137 | state["exp_avg"] = state["exp_avg"].type_as(p_data_fp32) 138 | state["exp_avg_sq"] = state["exp_avg_sq"].type_as(p_data_fp32) 139 | 140 | exp_avg, exp_avg_sq = state["exp_avg"], state["exp_avg_sq"] 141 | beta1, beta2 = group["betas"] 142 | 143 | exp_avg_sq.mul_(beta2).addcmul_(1 - beta2, grad, grad) 144 | exp_avg.mul_(beta1).add_(1 - beta1, grad) 145 | 146 | state["step"] += 1 147 | beta2_t = beta2 ** state["step"] 148 | N_sma_max = 2 / (1 - beta2) - 1 149 | N_sma = N_sma_max - 2 * state["step"] * beta2_t / (1 - beta2_t) 150 | 151 | # more conservative since it's an approximated value 152 | if N_sma >= 5: 153 | if group["weight_decay"] != 0: 154 | p_data_fp32.add_(-group["weight_decay"] * group["lr"], p_data_fp32) 155 | step_size = ( 156 | group["lr"] 157 | * math.sqrt( 158 | (1 - beta2_t) 159 | * (N_sma - 4) 160 | / (N_sma_max - 4) 161 | * (N_sma - 2) 162 | / N_sma 163 | * N_sma_max 164 | / (N_sma_max - 2) 165 | ) 166 | / (1 - beta1 ** state["step"]) 167 | ) 168 | denom = exp_avg_sq.sqrt().add_(group["eps"]) 169 | p_data_fp32.addcdiv_(-step_size, exp_avg, denom) 170 | p.data.copy_(p_data_fp32) 171 | elif self.degenerated_to_sgd: 172 | if group["weight_decay"] != 0: 173 | p_data_fp32.add_(-group["weight_decay"] * group["lr"], p_data_fp32) 174 | step_size = group["lr"] / (1 - beta1 ** state["step"]) 175 | p_data_fp32.add_(-step_size, exp_avg) 176 | p.data.copy_(p_data_fp32) 177 | 178 | return loss 179 | 180 | 181 | class BatchNorm(torch.nn.Module): 182 | """ 183 | nn.Module to handle turning batch norm on or off within the model 184 | """ 185 | 186 | def __init__(self, num_features, batch_norm_on): 187 | super().__init__() 188 | 189 | self.num_features = num_features 190 | self.batch_norm_on = batch_norm_on 191 | 192 | if batch_norm_on: 193 | self.bn = torch.nn.BatchNorm1d(num_features) 194 | else: 195 | self.bn = torch.nn.Identity() 196 | 197 | def forward(self, x): 198 | x = x.transpose(1, 2) 199 | x = self.bn(x) 200 | x = x.transpose(1, 2) 201 | return x 202 | 203 | 204 | class Permute(nn.Module): 205 | """ 206 | nn.Module to switch sequence length and feature dimention for switching between 207 | convolutional and linear layers 208 | """ 209 | 210 | def __init__(self): 211 | super().__init__() 212 | 213 | def forward(self, x): 214 | return x.permute(0, 2, 1) 215 | 216 | 217 | class GlobalNormalization(torch.nn.Module): 218 | """ 219 | nn.Module to track and normalize input variables, calculates running estimates of data 220 | statistics during training time. 221 | Optional scale parameter to fix standard deviation of inputs to 1 222 | Implementation details: 223 | "https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm" 224 | """ 225 | 226 | def __init__(self, feature_dim, scale=False): 227 | super().__init__() 228 | self.feature_dim = feature_dim 229 | self.register_buffer("running_ave", torch.zeros(1, 1, self.feature_dim)) 230 | self.register_buffer("total_frames_seen", torch.Tensor([0])) 231 | self.scale = scale 232 | self.register_buffer("running_sq_diff", torch.zeros(1, 1, self.feature_dim)) 233 | 234 | def forward(self, inputs): 235 | # disabling pylint on a couple of lines as it is bugged at present: 236 | # TODO: re-enable when pylint is fixed 237 | # https://github.com/PyCQA/pylint/issues/2315 238 | # pylint: disable=E0203 239 | # Check input is of correct shape and matches feature size 240 | if len(inputs.shape) != 3 or inputs.shape[2] != self.feature_dim: 241 | raise ValueError( 242 | f"""Inputs do not match required shape [batch_size, window_size, feature_dim], """ 243 | f"""(expecting feature dim {self.feature_dim}), got {inputs.shape}""" 244 | ) 245 | if self.training: 246 | self.update_stats(inputs) 247 | 248 | if self.scale: 249 | std = torch.sqrt(self.running_sq_diff / self.total_frames_seen) 250 | inputs = (inputs - self.running_ave) / std 251 | else: 252 | inputs = inputs - self.running_ave 253 | 254 | return inputs 255 | 256 | def unnorm(self, inputs): 257 | if self.scale: 258 | std = torch.sqrt(self.running_sq_diff / self.total_frames_seen) 259 | inputs = inputs * std + self.running_ave 260 | else: 261 | inputs = inputs + self.running_ave 262 | 263 | return inputs 264 | 265 | def update_stats(self, inputs): 266 | inputs_for_stats = inputs.detach() 267 | # Update running estimates of statistics 268 | frames_in_input = inputs.shape[0] * inputs.shape[1] 269 | updated_running_ave = ( 270 | self.running_ave * self.total_frames_seen 271 | + inputs_for_stats.sum(dim=(0, 1), keepdim=True) 272 | ) / (self.total_frames_seen + frames_in_input) 273 | 274 | if self.scale: 275 | # Update the sum of the squared differences between inputs and mean 276 | self.running_sq_diff = self.running_sq_diff + ( 277 | (inputs_for_stats - self.running_ave) * (inputs_for_stats - updated_running_ave) 278 | ).sum(dim=(0, 1), keepdim=True) 279 | 280 | self.running_ave = updated_running_ave 281 | self.total_frames_seen = self.total_frames_seen + frames_in_input 282 | 283 | 284 | def wav_to_float(x): 285 | """ 286 | Input in range -2**15, 2**15 (or what is determined from dtype) 287 | Output in range -1, 1 288 | """ 289 | assert x.dtype == torch.int16, f"got {x.dtype}" 290 | max_value = torch.iinfo(torch.int16).max 291 | min_value = torch.iinfo(torch.int16).min 292 | if not x.is_floating_point(): 293 | x = x.to(torch.float) 294 | x = x - min_value 295 | x = x / ((max_value - min_value) / 2.0) 296 | x = x - 1.0 297 | return x 298 | 299 | 300 | def float_to_wav(x): 301 | """ 302 | Input in range -1, 1 303 | Output in range -2**15, 2**15 (or what is determined from dtype) 304 | """ 305 | assert x.dtype == torch.float 306 | max_value = torch.iinfo(torch.int16).max 307 | min_value = torch.iinfo(torch.int16).min 308 | 309 | x = x + 1.0 310 | x = x * (max_value - min_value) / 2.0 311 | x = x + min_value 312 | x = x.to(torch.int16) 313 | return x 314 | 315 | 316 | def mu_law_encoding(x, mu=255.0): 317 | """ 318 | Input in range -2**15, 2*15 (or what is determined from dtype) 319 | Output is in range -1, 1 on mu law scale 320 | """ 321 | x = wav_to_float(x) 322 | mu = torch.tensor(mu, dtype=x.dtype, device=x.device) 323 | x_mu = torch.sign(x) * (torch.log1p(mu * torch.abs(x)) / torch.log1p(mu)) 324 | return x_mu 325 | 326 | 327 | def mu_law_decoding(x_mu, mu=255.0): 328 | """ 329 | Input is in range -1, 1 on mu law scale 330 | Output in range -2**15, 2*15 (or what is determined from dtype) 331 | """ 332 | if not x_mu.is_floating_point(): 333 | x_mu = x_mu.to(torch.float) 334 | mu = torch.tensor(mu, dtype=x_mu.dtype, device=x_mu.device) 335 | x = torch.sign(x_mu) * (1 / mu) * (((1 + mu) ** torch.abs(x_mu)) - 1) 336 | x = float_to_wav(x) 337 | return x 338 | 339 | 340 | def fig2tensor(fig): 341 | """Convert a Matplotlib figure to a PIL Image and return it""" 342 | buf = io.BytesIO() 343 | fig.savefig(buf) 344 | buf.seek(0) 345 | img = Image.open(buf) 346 | x = np.array(img) 347 | x = torch.Tensor(x).permute(2, 0, 1) / 255.0 348 | return x 349 | --------------------------------------------------------------------------------