Предварительная обработка аудио для нейронной сети для глубокого обучения CREPE
задает процент перекрытия между последовательными аудио систем координат.frames
= crepePreprocess(audioIn
,fs
,'OverlapPercentage'
,OP
)
Для примера, frames = crepePreprocess(audioIn,fs,'OverlapPercentage',75)
применяет 75% перекрытие между последовательными системами координат, используемыми для генерации обработанных систем координат.
Загрузите и разархивируйте модель Audio Toolbox™ для CREPE.
Тип crepe
в Командном окне. Если модель Audio Toolbox для CREPE не установлена, то функция предоставляет ссылку на расположение весов сети. Чтобы загрузить модель, щелкните ссылку и разархивируйте файл в расположение на пути MATLAB.
Также выполните эти команды, чтобы загрузить и разархивировать модель CREPE во временную директорию.
downloadFolder = fullfile(tempdir,'crepeDownload'); loc = websave(downloadFolder,'https://ssd.mathworks.com/supportfiles/audio/crepe.zip'); crepeLocation = tempdir; unzip(loc,crepeLocation) addpath(fullfile(crepeLocation,'crepe'))
Проверьте успешность установки путем ввода crepe
в Командном окне. Если сеть установлена, то функция возвращает DAGNetwork
(Deep Learning Toolbox) объект.
crepe
ans = DAGNetwork with properties: Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}
Загрузите предварительно обученную сверточную нейронную сеть CREPE и исследуйте слои и классы.
Использование crepe
для загрузки предварительно обученной сети CREPE. Область выхода net
является DAGNetwork
(Deep Learning Toolbox) объект.
net = crepe
net = DAGNetwork with properties: Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}
Просмотрите сетевую архитектуру с помощью Layers
свойство. Сеть имеет 34 слоя. Существует 13 слоев с усвояемыми весами, из которых шесть являются сверточными слоями, шесть являются нормализациями партии ., а один является полностью соединенным слоем.
net.Layers
ans = 34×1 Layer array with layers: 1 'input' Image Input 1024×1×1 images 2 'conv1' Convolution 1024 512×1×1 convolutions with stride [4 1] and padding 'same' 3 'conv1_relu' ReLU ReLU 4 'conv1-BN' Batch Normalization Batch normalization with 1024 channels 5 'conv1-maxpool' Max Pooling 2×1 max pooling with stride [2 1] and padding [0 0 0 0] 6 'conv1-dropout' Dropout 25% dropout 7 'conv2' Convolution 128 64×1×1024 convolutions with stride [1 1] and padding 'same' 8 'conv2_relu' ReLU ReLU 9 'conv2-BN' Batch Normalization Batch normalization with 128 channels 10 'conv2-maxpool' Max Pooling 2×1 max pooling with stride [2 1] and padding [0 0 0 0] 11 'conv2-dropout' Dropout 25% dropout 12 'conv3' Convolution 128 64×1×128 convolutions with stride [1 1] and padding 'same' 13 'conv3_relu' ReLU ReLU 14 'conv3-BN' Batch Normalization Batch normalization with 128 channels 15 'conv3-maxpool' Max Pooling 2×1 max pooling with stride [2 1] and padding [0 0 0 0] 16 'conv3-dropout' Dropout 25% dropout 17 'conv4' Convolution 128 64×1×128 convolutions with stride [1 1] and padding 'same' 18 'conv4_relu' ReLU ReLU 19 'conv4-BN' Batch Normalization Batch normalization with 128 channels 20 'conv4-maxpool' Max Pooling 2×1 max pooling with stride [2 1] and padding [0 0 0 0] 21 'conv4-dropout' Dropout 25% dropout 22 'conv5' Convolution 256 64×1×128 convolutions with stride [1 1] and padding 'same' 23 'conv5_relu' ReLU ReLU 24 'conv5-BN' Batch Normalization Batch normalization with 256 channels 25 'conv5-maxpool' Max Pooling 2×1 max pooling with stride [2 1] and padding [0 0 0 0] 26 'conv5-dropout' Dropout 25% dropout 27 'conv6' Convolution 512 64×1×256 convolutions with stride [1 1] and padding 'same' 28 'conv6_relu' ReLU ReLU 29 'conv6-BN' Batch Normalization Batch normalization with 512 channels 30 'conv6-maxpool' Max Pooling 2×1 max pooling with stride [2 1] and padding [0 0 0 0] 31 'conv6-dropout' Dropout 25% dropout 32 'classifier' Fully Connected 360 fully connected layer 33 'classifier_sigmoid' Sigmoid sigmoid 34 'pitch' Regression Output mean-squared-error
Использование analyzeNetwork
(Deep Learning Toolbox), чтобы визуально исследовать сеть.
analyzeNetwork(net)
Сеть CREPE требует, чтобы вы предварительно обработали аудиосигналы, чтобы сгенерировать буферизованные, перекрывающиеся и нормализованные аудиосигналы систем координат которые могут использоваться как вход для сети. Этот пример проходит через предварительную обработку аудио с помощью crepePreprocess
и последующую обработку звука с оценкой тангажа с использованием crepePostprocess
. The pitchnn
функция выполняет эти шаги для вас.
Считайте в аудиосигнале для оценки тангажа. Визуализация и прослушивание аудио. В аудиоклипе девять вокальных высказываний.
[audioIn,fs] = audioread('SingingAMajor-16-mono-18secs.ogg'); soundsc(audioIn,fs) T = 1/fs; t = 0:T:(length(audioIn)*T) - T; plot(t,audioIn); grid on axis tight xlabel('Time (s)') ylabel('Ampltiude') title('Singing in A Major')
Использование crepePreprocess
разбить аудио на системы координат 1024 выборки с 85% перекрытием между последовательными спектрограммами mel. Расположите системы координат вдоль четвертой размерности.
[frames,loc] = crepePreprocess(audioIn,fs);
Создайте сеть CREPE с ModelCapacity
установлено на tiny
. Если вы звоните crepe
перед загрузкой модели в Командное окно выводится ошибка со ссылкой загрузки.
netTiny = crepe('ModelCapacity','tiny');
Предсказать активацию сети.
activationsTiny = predict(netTiny,frames);
Использование crepePostprocess
для получения оценки основного тангажа частоты в Гц. Отключите доверительное пороговое значение путем установки ConfidenceThreshold
на 0
.
f0Tiny = crepePostprocess(activationsTiny,'ConfidenceThreshold',0);
Визуализируйте оценку тангажа с течением времени.
plot(loc,f0Tiny) grid on axis tight xlabel('Time (s)') ylabel('Pitch Estimation (Hz)') title('CREPE Network Frequency Estimate - Thresholding Disabled')
При отключенном доверием пороге crepePostprocess
обеспечивает оценку тангажа для каждой системы координат. Увеличьте ConfidenceThreshold
на 0.8
.
f0Tiny = crepePostprocess(activationsTiny,'ConfidenceThreshold',0.8);
Визуализируйте оценку тангажа с течением времени.
plot(loc,f0Tiny,'LineWidth',3) grid on axis tight xlabel('Time (s)') ylabel('Pitch Estimation (Hz)') title('CREPE Network Frequency Estimate - Thresholding Enabled')
Создайте новую сеть CREPE с ModelCapacity
установлено на full
.
netFull = crepe('ModelCapacity','full');
Предсказать активацию сети.
activationsFull = predict(netFull,frames);
f0Full = crepePostprocess(activationsFull,'ConfidenceThreshold',0.8);
Визуализируйте оценку тангажа. Существует девять групп оценки основного тангажа, каждая группа соответствует одному из девяти голосовых высказываний.
plot(loc,f0Full,'LineWidth',3) grid on xlabel('Time (s)') ylabel('Pitch Estimation (Hz)') title('CREPE Network Frequency Estimate - Full')
Найдите элементы времени, соответствующие последнему вокальному высказыванию.
roundedLocVec = round(loc,2); lastUtteranceBegin = find(roundedLocVec == 16); lastUtteranceEnd = find(roundedLocVec == 18);
Для простоты возьмите наиболее часто встречающуюся оценку тангажа в группе высказываний в качестве основной оценки частоты для этого временного интервала. Сгенерируйте чистый тон с частотой, совпадающей с оценкой тангажа для последнего голосового высказывания.
lastUtteranceEstimation = mode(f0Full(lastUtteranceBegin:lastUtteranceEnd))
lastUtteranceEstimation = single
217.2709
Значение для lastUtteranceEstimate
от 217.3
Гц. соответствует A3 примечания. Наложите синтезированный тон на последнее вокальное высказывание, чтобы слышно сравнить эти два.
lastVocalUtterance = audioIn(fs*16:fs*18); newTime = 0:T:2; compareTone = cos(2*pi*lastUtteranceEstimation*newTime).'; soundsc(lastVocalUtterance + compareTone,fs);
Функции spectrogram
для более тщательного изучения частотного содержимого пения. Используйте формат кадра 250
выборки и перекрытие 225
выборки или 90%. Использование 4096
Точки ДПФ для преобразования. The spectrogram
показывает, что вокальная запись на самом деле является набором сложных гармонических тонов, состоящих из нескольких частот.
spectrogram(audioIn,250,225,4096,fs,'yaxis')
audioIn
- Входной сигналВходной сигнал, заданный как вектор-столбец или матрица. Если вы задаете матрицу, crepePreprocess
обрабатывает столбцы матрицы как отдельные аудиоканалы.
Типы данных: single
| double
fs
- Частота дискретизации (Гц)Частота дискретизации входного сигнала в Гц, заданная как положительная скалярная величина.
Типы данных: single
| double
OP
- Процент перекрытия между последовательными аудиокадрами85
(по умолчанию) | неотрицательный скаляр в области значений [0,100)Процентное перекрытие между последовательными аудио систем координат, заданное как разделенная запятой пара, состоящее из 'OverlapPercentage'
и скаляр в области значений [0,100).
Типы данных: single
| double
frames
- Аудиокадры, которые могут быть переданы в предварительно обученную сеть CREPE1024
-by- 1
-by- 1
-by - N массивОбработанный аудио системы координат, возвращенный как 1024
-by- 1
-by- 1
-by - N массив, где N - количество сгенерированных систем координат.
Примечание
Для многоканальных входов сгенерированы frames
сложены по 4-ой размерности согласно каналу. Для примера, если audioIn
является стереосигналом, количеством сгенерированных frames
для каждого канала фактически N /2
. Первый N /2
frames
соответствуют 1 канала и последующим N /2
frames
соответствуют каналу 2.
Типы данных: single
| double
loc
- Значения времени1
-by- N векторЗначения времени, сопоставленные с каждой системой координат, возвращаются как 1
-by - N вектор, где N - количество сгенерированных систем координат. Значения времени соответствуют самым последним выборкам, используемым для вычисления систем координат.
Типы данных: single
| double
[1] Ким, Чен Ук, Джастин Саламон, Питер Ли и Хуан Пабло Белло. Crepe: сверточное представление для оценки тангажа. В 2018 году IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 161-65. Калгари, AB: IEEE, 2018. https://doi.org/10.1109/ICASSP.2018.8461329.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.