Постпроцессный выход нейронной сети для глубокого обучения CREPE
преобразует выход a f0 = crepePostprocess(activations)crepe предварительно обученная сеть для оценки тангажа в Гц.
задает порог доверия как неотрицательное скалярное значение менее 1.f0 = crepePostprocess(activations,'ConfidenceThreshold',TH)
Для примера, f0 = crepePostprocess(actiations,'ConfidenceThreshold',0.75) задает порог доверия 0,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')
activations - выход сети CREPE- 360 матрицаАудио систем координат, сгенерированный a crepe предварительно обученная сеть, заданная как N -by- 360 матрица, где N - количество сгенерированных систем координат.
Типы данных: single | double
TH - Доверительный порог0.5 (по умолчанию) | неотрицательный скаляр в области значений [0,1)Доверительный порог для каждого значения f0, заданная как разделенная разделенными запятой парами, состоящая из 'ConfidenceThreshold' и скаляром в области значений [0,1).
Чтобы отключить пороговое значение, установите TH на 0.
Примечание
Если максимальное значение соответствующего activations вектор меньше TH, f0 является NaN.
Типы данных: single | double
f0 - Оценка основной частоты- 1 векторОценка основной частоты в Герце, возвращается как N -by - 1 вектор, где N - количество сгенерированных систем координат.
Типы данных: single
[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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.