Wav2vec2 Large Xlsr 53 Gender Recognition Librispeech
基於Librispeech-clean-100數據集微調的性別識別模型,在測試集上F1分數達0.9993
下載量 182.33k
發布時間 : 4/24/2023
模型概述
該模型是基於wav2vec2-xls-r-300m架構的語音性別識別模型,專門用於從語音中識別說話者性別
模型特點
高精度性別識別
在Librispeech測試集上達到99.93%的F1分數
基於預訓練模型微調
利用facebook/wav2vec2-xls-r-300m預訓練模型進行遷移學習
高效訓練配置
採用混合精度訓練和梯度累積等技術優化訓練效率
模型能力
語音性別分類
英語語音處理
使用案例
語音分析
說話者性別識別
從語音片段中識別說話者性別
測試集F1分數0.9993
🚀 wav2vec2-large-xlsr-53-gender-recognition-librispeech
該模型是 facebook/wav2vec2-xls-r-300m 在 Librispeech-clean-100 數據集上針對性別識別任務進行微調後的版本。它在評估集上取得了以下成績:
- 損失值:0.0061
- F1 分數:0.9993
🚀 快速開始
計算推理結果
import os
import random
from glob import glob
from typing import List, Optional, Union, Dict
import tqdm
import torch
import torchaudio
import numpy as np
import pandas as pd
from torch import nn
from torch.utils.data import DataLoader
from torch.nn import functional as F
from transformers import (
AutoFeatureExtractor,
AutoModelForAudioClassification,
Wav2Vec2Processor
)
class CustomDataset(torch.utils.data.Dataset):
def __init__(
self,
dataset: List,
basedir: Optional[str] = None,
sampling_rate: int = 16000,
max_audio_len: int = 5,
):
self.dataset = dataset
self.basedir = basedir
self.sampling_rate = sampling_rate
self.max_audio_len = max_audio_len
def __len__(self):
"""
Return the length of the dataset
"""
return len(self.dataset)
def __getitem__(self, index):
if self.basedir is None:
filepath = self.dataset[index]
else:
filepath = os.path.join(self.basedir, self.dataset[index])
speech_array, sr = torchaudio.load(filepath)
if speech_array.shape[0] > 1:
speech_array = torch.mean(speech_array, dim=0, keepdim=True)
if sr != self.sampling_rate:
transform = torchaudio.transforms.Resample(sr, self.sampling_rate)
speech_array = transform(speech_array)
sr = self.sampling_rate
len_audio = speech_array.shape[1]
# Pad or truncate the audio to match the desired length
if len_audio < self.max_audio_len * self.sampling_rate:
# Pad the audio if it's shorter than the desired length
padding = torch.zeros(1, self.max_audio_len * self.sampling_rate - len_audio)
speech_array = torch.cat([speech_array, padding], dim=1)
else:
# Truncate the audio if it's longer than the desired length
speech_array = speech_array[:, :self.max_audio_len * self.sampling_rate]
speech_array = speech_array.squeeze().numpy()
return {"input_values": speech_array, "attention_mask": None}
class CollateFunc:
def __init__(
self,
processor: Wav2Vec2Processor,
padding: Union[bool, str] = True,
pad_to_multiple_of: Optional[int] = None,
return_attention_mask: bool = True,
sampling_rate: int = 16000,
max_length: Optional[int] = None,
):
self.sampling_rate = sampling_rate
self.processor = processor
self.padding = padding
self.pad_to_multiple_of = pad_to_multiple_of
self.return_attention_mask = return_attention_mask
self.max_length = max_length
def __call__(self, batch: List[Dict[str, np.ndarray]]):
# Extract input_values from the batch
input_values = [item["input_values"] for item in batch]
batch = self.processor(
input_values,
sampling_rate=self.sampling_rate,
return_tensors="pt",
padding=self.padding,
max_length=self.max_length,
pad_to_multiple_of=self.pad_to_multiple_of,
return_attention_mask=self.return_attention_mask
)
return {
"input_values": batch.input_values,
"attention_mask": batch.attention_mask if self.return_attention_mask else None
}
def predict(test_dataloader, model, device: torch.device):
"""
Predict the class of the audio
"""
model.to(device)
model.eval()
preds = []
with torch.no_grad():
for batch in tqdm.tqdm(test_dataloader):
input_values, attention_mask = batch['input_values'].to(device), batch['attention_mask'].to(device)
logits = model(input_values, attention_mask=attention_mask).logits
scores = F.softmax(logits, dim=-1)
pred = torch.argmax(scores, dim=1).cpu().detach().numpy()
preds.extend(pred)
return preds
def get_gender(model_name_or_path: str, audio_paths: List[str], label2id: Dict, id2label: Dict, device: torch.device):
num_labels = 2
feature_extractor = AutoFeatureExtractor.from_pretrained(model_name_or_path)
model = AutoModelForAudioClassification.from_pretrained(
pretrained_model_name_or_path=model_name_or_path,
num_labels=num_labels,
label2id=label2id,
id2label=id2label,
)
test_dataset = CustomDataset(audio_paths, max_audio_len=5) # for 5-second audio
data_collator = CollateFunc(
processor=feature_extractor,
padding=True,
sampling_rate=16000,
)
test_dataloader = DataLoader(
dataset=test_dataset,
batch_size=16,
collate_fn=data_collator,
shuffle=False,
num_workers=2
)
preds = predict(test_dataloader=test_dataloader, model=model, device=device)
return preds
model_name_or_path = "alefiury/wav2vec2-large-xlsr-53-gender-recognition-librispeech"
audio_paths = [] # Must be a list with absolute paths of the audios that will be used in inference
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
label2id = {
"female": 0,
"male": 1
}
id2label = {
0: "female",
1: "male"
}
num_labels = 2
preds = get_gender(model_name_or_path, audio_paths, label2id, id2label, device)
📚 詳細文檔
訓練和評估數據
該模型使用了 Librispeech-clean-100 數據集進行訓練,其中 70% 的數據用於訓練,10% 用於驗證,20% 用於測試。
訓練超參數
訓練過程中使用了以下超參數:
- 學習率:3e-05
- 訓練批次大小:4
- 評估批次大小:4
- 隨機種子:42
- 梯度累積步數:4
- 總訓練批次大小:16
- 優化器:Adam(β1=0.9,β2=0.999,ε=1e-08)
- 學習率調度器類型:線性
- 學習率調度器熱身比例:0.1
- 訓練輪數:1
- 混合精度訓練:原生自動混合精度(Native AMP)
訓練結果
訓練損失 | 輪數 | 步數 | 驗證損失 | F1 分數 |
---|---|---|---|---|
0.002 | 1.0 | 1248 | 0.0061 | 0.9993 |
框架版本
- Transformers 4.28.0
- Pytorch 2.0.0+cu118
- Tokenizers 0.13.3
📄 許可證
本項目採用 Apache-2.0 許可證。
Mms Lid 126
基於Facebook大規模多語言語音項目微調的語言識別模型,支持126種語言的音頻分類
音頻分類
Transformers 支持多種語言

M
facebook
2.1M
26
Wav2vec2 Base Finetuned Speech Commands V0.02
Apache-2.0
該模型是基於facebook/wav2vec2-base在speech_commands數據集上微調的語音命令識別模型,準確率達97.59%。
音頻分類
Transformers

W
0xb1
1.2M
0
Whisper Medium Fleurs Lang Id
Apache-2.0
基於OpenAI Whisper-medium微調的語音語種識別模型,在FLEURS數據集上達到88.05%準確率
音頻分類
Transformers

W
sanchit-gandhi
590.30k
14
Wav2vec2 Large Robust 12 Ft Emotion Msp Dim
該模型通過對Wav2Vec2-Large-Robust進行微調訓練,用於語音情感識別,輸出喚醒度、支配度和效價三個維度的預測值。
音頻分類
Transformers 英語

W
audeering
394.51k
109
Lang Id Voxlingua107 Ecapa
Apache-2.0
基於SpeechBrain框架和ECAPA-TDNN架構的語音語言識別模型,支持107種語言的識別和語音嵌入向量提取。
音頻分類
PyTorch 支持多種語言
L
speechbrain
330.01k
112
Ast Finetuned Audioset 10 10 0.4593
Bsd-3-clause
音頻頻譜圖變換器(AST)是基於AudioSet微調的模型,將音頻轉換為頻譜圖後應用視覺變換器進行音頻分類。
音頻分類
Transformers

A
MIT
308.88k
311
Whisper Small Ft Common Language Id
Apache-2.0
基於openai/whisper-small微調的通用語言識別模型,在評估集上準確率達88.6%
音頻分類
Transformers

W
sanchit-gandhi
256.20k
2
Emotion Recognition Wav2vec2 IEMOCAP
Apache-2.0
使用微調的wav2vec2模型進行語音情感識別,在IEMOCAP數據集上訓練
音頻分類
PyTorch 英語
E
speechbrain
237.65k
131
Ast Finetuned Audioset 14 14 0.443
Bsd-3-clause
基於AudioSet數據集微調的音頻頻譜圖變換器,將音頻轉換為頻譜圖後使用視覺變換器架構處理,在音頻分類任務中表現優異。
音頻分類
Transformers

A
MIT
194.20k
5
Wav2vec2 Large Xlsr 53 Gender Recognition Librispeech
Apache-2.0
基於Librispeech-clean-100數據集微調的性別識別模型,在測試集上F1分數達0.9993
音頻分類
Transformers

W
alefiury
182.33k
42
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98