/ Модель

Характеристики

Параметры
101 млн
Лицензия
CC BY-NC-SA 4.0
Архитектура
wav2vec2 · dense
Опубликована
4 сен 2023

wav2vec2-large-robust-6-ft-age-gender

Классификация аудиоАудио → label3 профессии

Модель на основе Wav2Vec2 оценивает возраст и вероятностную гендерную категорию говорящего по аудио.

41 832скачиваний за 30 дней6лайковвеса обновлены27 ноя 2023

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Модель audeering для оценки возраста и распознавания гендерной категории по необработанному аудиосигналу. Она основана на Wav2Vec2-Large-Robust и дообучена на наборах aGender, Mozilla Common Voice, TIMIT и VoxCeleb 2; в этой версии обучались первые шесть слоёв трансформера. Модель содержит около 100,7 млн параметров.

На выходе модель предсказывает приблизительный возраст в диапазоне от 0 до 100 лет, вероятности категорий «ребёнок», «женщина» и «мужчина», а также объединённые представления последнего слоя трансформера. Она предназначена для анализа возрастных и гендерных характеристик по голосу; pooled-представления также могут использоваться в последующих аудиозадачах. Доступна в форматах PyTorch и Safetensors; для модели также опубликован экспорт ONNX. Лицензия CC BY-NC-SA 4.0 разрешает некоммерческое использование с указанием авторства и распространением производных работ на тех же условиях.

Сценарии применения

  • оценка приблизительного возраста говорящего по голосу
  • классификация голоса по категориям ребёнок, женщина или мужчина
  • извлечение аудиопредставлений для последующего анализа речи

Ограничения

Возраст выдаётся приблизительно, а гендерная оценка ограничена категориями «ребёнок», «женщина» и «мужчина». Лицензия запрещает коммерческое использование.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Model for Age and Gender Recognition based on Wav2vec 2.0 (6 layers)

The model expects a raw audio signal as input and outputs predictions for age in a range of approximately 0...1 (0...100 years) and gender expressing the probababilty for being child, female, or male. In addition, it also provides the pooled states of the last transformer layer. The model was created by fine-tuning Wav2Vec2-Large-Robust on aGender, Mozilla Common Voice, Timit and Voxceleb 2. For this version of the model we only trained the first six transformer layers. An ONNX export of the model is available from doi:10.5281/zenodo.7761387. Further details are given in the associated paper and tutorial.

Usage

import numpy as np
import torch
import torch.nn as nn
from transformers import Wav2Vec2Processor
from transformers.models.wav2vec2.modeling_wav2vec2 import (
    Wav2Vec2Model,
    Wav2Vec2PreTrainedModel,
)


class ModelHead(nn.Module):
    r"""Classification head."""

    def __init__(self, config, num_labels):

        super().__init__()

        self.dense = nn.Linear(config.hidden_size, config.hidden_size)
        self.dropout = nn.Dropout(config.final_dropout)
        self.out_proj = nn.Linear(config.hidden_size, num_labels)

    def forward(self, features, **kwargs):

        x = features
        x = self.dropout(x)
        x = self.dense(x)
        x = torch.tanh(x)
        x = self.dropout(x)
        x = self.out_proj(x)

        return x


class AgeGenderModel(Wav2Vec2PreTrainedModel):
    r"""Speech emotion classifier."""

    def __init__(self, config):

        super().__init__(config)

        self.config = config
        self.wav2vec2 = Wav2Vec2Model(config)
        self.age = ModelHead(config, 1)
        self.gender = ModelHead(config, 3)
        self.init_weights()

    def forward(
            self,
            input_values,
    ):

        outputs = self.wav2vec2(input_values)
        hidden_states = outputs[0]
        hidden_states = torch.mean(hidden_states, dim=1)
        logits_age = self.age(hidden_states)
        logits_gender = torch.softmax(self.gender(hidden_states), dim=1)

        return hidden_states, logits_age, logits_gender



# load model from hub
device = 'cpu'
model_name = 'audeering/wav2vec2-large-robust-6-ft-age-gender'
processor = Wav2Vec2Processor.from_pretrained(model_name)
model = AgeGenderModel.from_pretrained(model_name)

# dummy signal
sampling_rate = 16000
signal = np.zeros((1, sampling_rate), dtype=np.float32)


def process_func(
    x: np.ndarray,
    sampling_rate: int,
    embeddings: bool = False,
) -> np.ndarray:
    r"""Predict age and gender or extract embeddings from raw audio signal."""

    # run through processor to normalize signal
    # always returns a batch, so we just get the first entry
    # then we put it on the device
    y = processor(x, sampling_rate=sampling_rate)
    y = y['input_values'][0]
    y = y.reshape(1, -1)
    y = torch.from_numpy(y).to(device)

    # run through model
    with torch.no_grad():
        y = model(y)
        if embeddings:
            y = y[0]
        else:
            y = torch.hstack([y[1], y[2]])

    # convert to numpy
    y = y.detach().cpu().numpy()

    return y


print(process_func(signal, sampling_rate))
#    Age       child      female      male
# [[ 0.3079211  0.00848487 0.0051472  0.9863679 ]]

print(process_func(signal, sampling_rate, embeddings=True))
# Pooled hidden states of last transformer layer
# [[ 0.00409924  0.00365688  0.02392936 ...  0.02349018 -0.13294911
#    0.1538802 ]]

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · audio-classification

Можно запустить

Подбираем GPU…

Класс архитектуры
Model
Ревизия весов
a681b72

0 моделей