crepePostprocess

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

    Описание

    пример

    f0 = crepePostprocess(activations) преобразует выход a crepe предварительно обученная сеть, чтобы передать оценки в Гц.

    f0 = crepePostprocess(activations,'ConfidenceThreshold',TH) задает порог доверия как неотрицательное скалярное значение меньше чем 1.

    Например, 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')

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

    свернуть все

    Аудио системы координат сгенерированы от a crepe предварительно обученная сеть в виде N-by-360 матрица, где N является количеством сгенерированных систем координат.

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

    Порог доверия для каждого значения f0В виде разделенной запятой пары, состоящей из 'ConfidenceThreshold' и скаляр в области значений [0,1).

    Чтобы отключить пороговую обработку, установите TH к 0.

    Примечание

    Если максимальное значение соответствующего activations вектор меньше TH, f0 isnan.

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

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

    свернуть все

    Предполагаемая основная частота в Герц, возвращенном как 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.

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

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

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

    | |

    Введенный в R2021a