Постобработайте выход нейронной сети для глубокого обучения 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.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.