exponenta event banner

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

    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')

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

    свернуть все

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

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

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

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

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

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

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

    свернуть все

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

    Примечание

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

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

    Значения времени, связанные с каждым кадром, возвращаемые как 1-по-N вектору, где N - число сформированных кадров. Значения времени соответствуют последним выборкам, используемым для вычисления кадров.

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

    Ссылки

    [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