crepe

Нейронная сеть CREPE

    Описание

    пример

    net = crepe возвращает предварительно обученную модель CREPE.

    Эта функция требует как Audio Toolbox™, так и Deep Learning Toolbox™.

    net = crepe('ModelCapacity',CAP) задает емкость модели.

    Для примера, net = crepe('ModelCapacity','small') задает емкость модели как маленькую.

    Примеры

    свернуть все

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

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

    свернуть все

    Емкость модели, заданная как разделенная разделенными запятой парами, состоящая из 'ModelCapacity' и 'tiny', 'small', 'medium', 'large', или 'full'.

    Совет

    'ModelCapacity' управляет сложностью базовых глубоких нейронных сетей. Чем выше емкость модели, тем больше числа узлов и слои в модели. Выбор подходящей емкости модели для ваших данных поможет предотвратить подгонку или сверхподбор кривой.

    Типы данных: string | char

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

    свернуть все

    Предварительно обученная нейронная сеть CREPE, возвращенная как DAGNetwork (Deep Learning Toolbox) объект.

    Ссылки

    [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.

    Введенный в R2021a