Предварительно обработайте аудио для нейронной сети для глубокого обучения 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 слоев с 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')
audioIn — Входной сигналВходной сигнал в виде вектор-столбца или матрицы. Если вы задаете матрицу, crepePreprocess обрабатывает столбцы матрицы как отдельные звуковые каналы.
Типы данных: single | double
fs — Частота дискретизации (Гц)Частота дискретизации входного сигнала в Гц в виде положительной скалярной величины.
Типы данных: single | double
OP — Перекройте процент между последовательными аудио системами координат (значение по умолчанию) | неотрицательный скаляр в области значений [0,100)Перекрытие процента между последовательным аудио структурирует в виде разделенной запятой пары, состоящей из 'OverlapPercentage' и скаляр в области значений [0,100).
Типы данных: single | double
frames — Аудио системы координат, которые могут питаться предварительно обученную сеть CREPE- 1- 1- N массивОбработанные аудио кадры, возвращенные как 1024- 1- 1- N массив, где N является количеством сгенерированных систем координат.
Примечание
Для многоканальных входных параметров, сгенерированного frames сложены по 4-му измерению согласно каналу. Например, если audioIn сигнал стерео, количество сгенерированного frames поскольку каждым каналом является на самом деле N /2. Первый N /2
frames соответствуйте каналу 1 и последующий N /2
frames соответствуйте каналу 2.
Типы данных: single | double
loc — Временные стоимости- N векторВременные стоимости сопоставлены с каждой системой координат, возвращенной как 1- N вектор, где N является количеством сгенерированных систем координат. Временные стоимости соответствуют новым выборкам, использовался для расчета систем координат.
Типы данных: single | double
[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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.