Постобработайте выход нейронной сети для глубокого обучения 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 слоев с learnable весами, из которых шесть сверточные слои, шесть слои нормализации партии., и каждый - полносвязный слой.
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
. 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
разделить аудио в системы координат 1 024 выборок с 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
ДПФ указывает для преобразования. spectrogram
показывает, что вокальная запись является на самом деле набором комплексных гармонических тонов, состоявших из нескольких частот.
spectrogram(audioIn,250,225,4096,fs,'yaxis')
activations
— Сеть CREPE выводится360
матрицаАудио системы координат сгенерированы от a crepe
предварительно обученная сеть в виде N-by-360
матрица, где N является количеством сгенерированных систем координат.
Типы данных: single
| double
TH
— Порог доверия
(значение по умолчанию) | неотрицательный скаляр в области значений [0,1)Порог доверия для каждого значения f0
В виде разделенной запятой пары, состоящей из 'ConfidenceThreshold'
и скаляр в области значений [0,1).
Чтобы отключить пороговую обработку, установите TH
к 0
.
Примечание
Если максимальное значение соответствующего activations
вектор меньше TH
, f0
isnan
.
Типы данных: single
| double
f0
— Предполагаемая основная частота1
векторПредполагаемая основная частота в Герц, возвращенном как N-by-1
вектор, где N является количеством сгенерированных систем координат.
Типы данных: single
[1] Ким, Jong Wook, Джастин Сэлэмон, Питер Ли и Хуан Пабло Белло. “Креп: Сверточное Представление для Оценки Тангажа”. На 2 018 Международных конференциях IEEE по вопросам Акустики, Речи и Обработки сигналов (ICASSP), 161–65. Калгари, AB: IEEE, 2018. https://doi.org/10.1109/ICASSP.2018.8461329.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.