r-f/wav2vec-english-speech-emotion-recognition

Model

35

stars

22

commits

8

repos using this model

3

linked in READMEs

Jan 2, 2025

updated

automatic-speech-recognition
endpoints_compatible
generated_from_trainer
pytorch
transformers
wav2vec2

README

Speech Emotion Recognition By Fine-Tuning Wav2Vec 2.0

The model is a fine-tuned version of jonatasgrosman/wav2vec2-large-xlsr-53-english for a Speech Emotion Recognition (SER) task.

Several datasets were used the fine-tune the original model:

  • Surrey Audio-Visual Expressed Emotion (SAVEE) - 480 audio files from 4 male actors
  • Ryerson Audio-Visual Database of Emotional Speech and Song (RAVDESS) - 1440 audio files from 24 professional actors (12 female, 12 male)
  • Toronto emotional speech set (TESS) - 2800 audio files from 2 female actors

7 labels/emotions were used as classification labels

emotions = ['angry' 'disgust' 'fear' 'happy' 'neutral' 'sad' 'surprise']

It achieves the following results on the evaluation set:

  • Loss: 0.104075
  • Accuracy: 0.97463

Model Usage

pip install transformers librosa torch
from transformers import *
import librosa
import torch

feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")
model = Wav2Vec2ForCTC.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")

def predict_emotion(audio_path):
    audio, rate = librosa.load(audio_path, sr=16000)
    inputs = feature_extractor(audio, sampling_rate=rate, return_tensors="pt", padding=True)
    
    with torch.no_grad():
        outputs = model(inputs.input_values)
        predictions = torch.nn.functional.softmax(outputs.logits.mean(dim=1), dim=-1)  # Average over sequence length
        predicted_label = torch.argmax(predictions, dim=-1)
        emotion = model.config.id2label[predicted_label.item()]
    return emotion

emotion = predict_emotion("example_audio.wav")
print(f"Predicted emotion: {emotion}")
>> Predicted emotion: angry

Training procedure

Training hyperparameters

The following hyperparameters were used during training:

  • learning_rate: 0.0001
  • train_batch_size: 4
  • eval_batch_size: 4
  • eval_steps: 500
  • seed: 42
  • gradient_accumulation_steps: 2
  • optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
  • num_epochs: 4
  • max_steps=7500
  • save_steps: 1500

Training results

StepTraining LossValidation LossAccuracy
5001.81241.3652120.486258
10000.88720.7731450.79704
15000.70350.5749540.852008
20000.68791.2867380.775899
25000.64980.6974550.832981
30000.56960.337240.892178
35000.42180.3070720.911205
40000.30880.3744430.930233
45000.26880.2604440.936575
50000.29730.3029850.92389
55000.17650.1654390.961945
60000.14750.1701990.961945
65000.12740.155310.966173
70000.06990.1038820.976744
75000.0830.1040750.97463

Contributors

r-f

22 commits

r-f/wav2vec-english-speech-emotion-recognition

Model

35

stars

22

commits

8

repos using this model

3

linked in READMEs

Jan 2, 2025

updated

automatic-speech-recognition
endpoints_compatible
generated_from_trainer
pytorch
transformers
wav2vec2

README

Speech Emotion Recognition By Fine-Tuning Wav2Vec 2.0

The model is a fine-tuned version of jonatasgrosman/wav2vec2-large-xlsr-53-english for a Speech Emotion Recognition (SER) task.

Several datasets were used the fine-tune the original model:

  • Surrey Audio-Visual Expressed Emotion (SAVEE) - 480 audio files from 4 male actors
  • Ryerson Audio-Visual Database of Emotional Speech and Song (RAVDESS) - 1440 audio files from 24 professional actors (12 female, 12 male)
  • Toronto emotional speech set (TESS) - 2800 audio files from 2 female actors

7 labels/emotions were used as classification labels

emotions = ['angry' 'disgust' 'fear' 'happy' 'neutral' 'sad' 'surprise']

It achieves the following results on the evaluation set:

  • Loss: 0.104075
  • Accuracy: 0.97463

Model Usage

pip install transformers librosa torch
from transformers import *
import librosa
import torch

feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")
model = Wav2Vec2ForCTC.from_pretrained("r-f/wav2vec-english-speech-emotion-recognition")

def predict_emotion(audio_path):
    audio, rate = librosa.load(audio_path, sr=16000)
    inputs = feature_extractor(audio, sampling_rate=rate, return_tensors="pt", padding=True)
    
    with torch.no_grad():
        outputs = model(inputs.input_values)
        predictions = torch.nn.functional.softmax(outputs.logits.mean(dim=1), dim=-1)  # Average over sequence length
        predicted_label = torch.argmax(predictions, dim=-1)
        emotion = model.config.id2label[predicted_label.item()]
    return emotion

emotion = predict_emotion("example_audio.wav")
print(f"Predicted emotion: {emotion}")
>> Predicted emotion: angry

Training procedure

Training hyperparameters

The following hyperparameters were used during training:

  • learning_rate: 0.0001
  • train_batch_size: 4
  • eval_batch_size: 4
  • eval_steps: 500
  • seed: 42
  • gradient_accumulation_steps: 2
  • optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
  • num_epochs: 4
  • max_steps=7500
  • save_steps: 1500

Training results

StepTraining LossValidation LossAccuracy
5001.81241.3652120.486258
10000.88720.7731450.79704
15000.70350.5749540.852008
20000.68791.2867380.775899
25000.64980.6974550.832981
30000.56960.337240.892178
35000.42180.3070720.911205
40000.30880.3744430.930233
45000.26880.2604440.936575
50000.29730.3029850.92389
55000.17650.1654390.961945
60000.14750.1701990.961945
65000.12740.155310.966173
70000.06990.1038820.976744
75000.0830.1040750.97463

Contributors

r-f

22 commits