crepePreprocess

Предварительно обработайте аудио для нейронной сети для глубокого обучения CREPE

    Описание

    frames = crepePreprocess(audioIn,fs) генерирует системы координат от audioIn это может питаться предварительно обученную нейронную сеть для глубокого обучения CREPE.

    frames = crepePreprocess(audioIn,fs,'OverlapPercentage',OP) задает процент перекрытия между последовательными аудио системами координат.

    Например, frames = crepePreprocess(audioIn,fs,'OverlapPercentage',75) применяется 75%-е перекрытие между последовательными системами координат раньше генерировало обработанные кадры.

    пример

    [frames,loc] = crepePreprocess(___) возвращает временные стоимости, loc, сопоставленный с каждой системой координат.

    Примеры

    свернуть все

    Загрузите и разархивируйте модель 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')

    Входные параметры

    свернуть все

    Входной сигнал в виде вектор-столбца или матрицы. Если вы задаете матрицу, crepePreprocess обрабатывает столбцы матрицы как отдельные звуковые каналы.

    Типы данных: single | double

    Частота дискретизации входного сигнала в Гц в виде положительной скалярной величины.

    Типы данных: single | double

    Перекрытие процента между последовательным аудио структурирует в виде разделенной запятой пары, состоящей из 'OverlapPercentage' и скаляр в области значений [0,100).

    Типы данных: single | double

    Выходные аргументы

    свернуть все

    Обработанные аудио кадры, возвращенные как 1024- 1- 1- N массив, где N является количеством сгенерированных систем координат.

    Примечание

    Для многоканальных входных параметров, сгенерированного frames сложены по 4-му измерению согласно каналу. Например, если audioIn сигнал стерео, количество сгенерированного frames поскольку каждым каналом является на самом деле N /2. Первый N /2 frames соответствуйте каналу 1 и последующий N /2 frames соответствуйте каналу 2.

    Типы данных: single | double

    Временные стоимости сопоставлены с каждой системой координат, возвращенной как 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.

    Расширенные возможности

    Генерация кода C/C++
    Генерация кода C и C++ с помощью MATLAB® Coder™.

    Смотрите также

    | |

    Введенный в R2021a