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 слоев с усвояемыми весами, из которых шесть являются сверточными слоями, шесть являются нормализациями партии ., а один является полностью соединенным слоем.

    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. The 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% перекрытием между последовательными спектрограммами 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 Точки ДПФ для преобразования. The spectrogram показывает, что вокальная запись на самом деле является набором сложных гармонических тонов, состоящих из нескольких частот.

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

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

    свернуть все

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

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

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

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

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

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

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

    свернуть все

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

    Примечание

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

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

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

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

    Ссылки

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

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

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

    .

    См. также

    | |

    Введенный в R2021a