exponenta event banner

crepePostprocess

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

    Описание

    пример

    f0 = crepePostprocess(activations) преобразует выходные данные 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(Панель инструментов глубокого обучения).

    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(Панель инструментов глубокого обучения).

    net = crepe
    net = 
      DAGNetwork with properties:
    
             Layers: [34×1 nnet.cnn.layer.Layer]
        Connections: [33×2 table]
         InputNames: {'input'}
        OutputNames: {'pitch'}
    
    

    Просмотр сетевой архитектуры с помощью Layers собственность. Сеть имеет 34 уровня. Существует 13 слоев с обучаемыми весами, из которых шесть являются сверточными слоями, шесть являются слоями пакетной нормализации, и один является полностью соединенным слоем.

    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 для разделения звука на кадры из 1024 выборок с 85% перекрытием между последовательными спектрограммами. Разместите рамки вдоль четвертого размера.

    [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 Точки DFT для преобразования. spectrogram показывает, что запись вокала на самом деле является набором сложных гармонических тонов, составленных из множества частот.

    spectrogram(audioIn,250,225,4096,fs,'yaxis')

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

    свернуть все

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

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

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

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

    Примечание

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

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

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

    свернуть все

    Оцененная фундаментальная частота в Герце, возвращенная как N-by-1 вектор, где N - число сформированных кадров.

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

    Ссылки

    [1] Ким, Чен Вук, Джастин Саламон, Питер Ли и Хуан Пабло Белло. «Crepe: Сверточное представление для оценки основного тона». В 2018 году IEEE Международная конференция по акустике, обработке речи и сигналов (ICASSP), 161-65. Калгари, AB: IEEE, 2018. https://doi.org/10.1109/ICASSP.2018.8461329.

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

    Создание кода C/C + +
    Создайте код C и C++ с помощью MATLAB ® Coder™

    .

    См. также

    | |

    Представлен в R2021a