Ответ
Подготовка аудиоданных — критический этап. Мой пайплайн включает стандартизацию, извлечение признаков и аугментацию.
1. Унификация формата (ресемплинг и моно-конвертация): Первым делом привожу все аудио к единой частоте дискретизации (часто 16 кГц для речи) и одному каналу (моно). Это обеспечивает согласованность входных данных.
import librosa
audio, orig_sr = librosa.load('input.wav', sr=None) # Загрузка с исходной частотой
target_sr = 16000
audio_resampled = librosa.resample(audio, orig_sr=orig_sr, target_sr=target_sr)
2. Нормализация громкости: Привожу амплитуду сигналов к общему диапазону (например, [-1, 1]), чтобы модель не училась на уровне громкости.
audio_normalized = librosa.util.normalize(audio_resampled)
3. Извлечение признаков (Feature Extraction): Сырые волновые формы редко подают на вход модели. Я извлекаю спектральные признаки.
- MFCC (Mel-Frequency Cepstral Coefficients): Стандарт для задач распознавания речи и классификации звуков. Они аппроксимируют восприятие звука человеком.
# Извлечение 13 MFCC коэффициентов + их первые и вторые производные (delta) mfcc = librosa.feature.mfcc(y=audio_normalized, sr=target_sr, n_mfcc=13) delta_mfcc = librosa.feature.delta(mfcc) delta2_mfcc = librosa.feature.delta(mfcc, order=2) features = np.vstack([mfcc, delta_mfcc, delta2_mfcc]) # Итоговый вектор признаков 39xT - Mel-спектрограммы: Часто используются в end-to-end моделях (например, на основе CNN).
4. Аугментация данных для увеличения датасета: Чтобы модель стала robust к вариациям в реальном мире, применяю преобразования к аудио или признакам.
import audiomentations as A
augment = A.Compose([
A.AddGaussianNoise(min_amplitude=0.001, max_amplitude=0.015, p=0.5),
A.TimeStretch(min_rate=0.8, max_rate=1.25, p=0.5),
A.PitchShift(min_semitones=-4, max_semitones=4, p=0.5),
])
augmented_audio = augment(samples=audio_normalized, sample_rate=target_sr)
5. Сегментация и паддинг: Для задач, требующих фиксированной длины входа (например, классификация), нарезаю аудио на сегменты одинаковой длительности. Более короткие сегменты дополняю (pad) нулями или тишиной.
6. Создание таргетов: Для supervised learning подготавливаю метки, синхронизированные с аудио (например, текст для ASR или временные метки для sound event detection).