exponenta event banner

openl3

OpenL3 нейронная сеть

    Описание

    пример

    net = openl3 возвращает предварительно подготовленную модель OpenL3.

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

    net = openl3(Name,Value) указывает параметры, использующие один или несколько аргументов Name и Value. Например, net = openl3('EmbeddingLength',6144) определяет выходную длину встраивания как 6144.

    Примеры

    свернуть все

    Загрузите и распакуйте модель Audio Toolbox™ для OpenL3.

    Напечатать openl3 в окне команд. Если модель Audio Toolbox для OpenL3 не установлена, функция предоставляет ссылку на расположение весов сети. Чтобы загрузить модель, щелкните ссылку. Распакуйте файл в папку по пути MATLAB.

    Либо выполните эти команды для загрузки и распаковки модели OpenL3 во временную папку.

    downloadFolder = fullfile(tempdir,'OpenL3Download');
    loc = websave(downloadFolder,'https://ssd.mathworks.com/supportfiles/audio/openl3.zip');
    OpenL3Location = tempdir;
    unzip(loc,OpenL3Location)
    addpath(fullfile(OpenL3Location,'openl3'))

    Убедитесь, что установка выполнена успешно, введя openl3 в окне команд. Если сеть установлена, то функция возвращает DAGNetwork(Панель инструментов глубокого обучения).

    openl3
    ans = 
      DAGNetwork with properties:
    
             Layers: [30×1 nnet.cnn.layer.Layer]
        Connections: [29×2 table]
         InputNames: {'in'}
        OutputNames: {'out'}
    
    

    Загрузите предварительно обученную OpenL3 сверточную нейронную сеть и изучите слои и классы.

    Использовать openl3 для загрузки предварительно обученной сети OpenL3. Продукция net является DAGNetwork(Панель инструментов глубокого обучения).

    net = openl3
    net = 
      DAGNetwork with properties:
    
             Layers: [30×1 nnet.cnn.layer.Layer]
        Connections: [29×2 table]
         InputNames: {'in'}
        OutputNames: {'out'}
    
    

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

    net.Layers
    ans = 
      30×1 Layer array with layers:
    
         1   'in'                       Image Input           128×199×1 images
         2   'batch_normalization_81'   Batch Normalization   Batch normalization with 1 channels
         3   'conv2d_71'                Convolution           64 3×3×1 convolutions with stride [1  1] and padding 'same'
         4   'batch_normalization_82'   Batch Normalization   Batch normalization with 64 channels
         5   'activation_71'            ReLU                  ReLU
         6   'conv2d_72'                Convolution           64 3×3×64 convolutions with stride [1  1] and padding 'same'
         7   'batch_normalization_83'   Batch Normalization   Batch normalization with 64 channels
         8   'activation_72'            ReLU                  ReLU
         9   'max_pooling2d_41'         Max Pooling           2×2 max pooling with stride [2  2] and padding [0  0  0  0]
        10   'conv2d_73'                Convolution           128 3×3×64 convolutions with stride [1  1] and padding 'same'
        11   'batch_normalization_84'   Batch Normalization   Batch normalization with 128 channels
        12   'activation_73'            ReLU                  ReLU
        13   'conv2d_74'                Convolution           128 3×3×128 convolutions with stride [1  1] and padding 'same'
        14   'batch_normalization_85'   Batch Normalization   Batch normalization with 128 channels
        15   'activation_74'            ReLU                  ReLU
        16   'max_pooling2d_42'         Max Pooling           2×2 max pooling with stride [2  2] and padding [0  0  0  0]
        17   'conv2d_75'                Convolution           256 3×3×128 convolutions with stride [1  1] and padding 'same'
        18   'batch_normalization_86'   Batch Normalization   Batch normalization with 256 channels
        19   'activation_75'            ReLU                  ReLU
        20   'conv2d_76'                Convolution           256 3×3×256 convolutions with stride [1  1] and padding 'same'
        21   'batch_normalization_87'   Batch Normalization   Batch normalization with 256 channels
        22   'activation_76'            ReLU                  ReLU
        23   'max_pooling2d_43'         Max Pooling           2×2 max pooling with stride [2  2] and padding [0  0  0  0]
        24   'conv2d_77'                Convolution           512 3×3×256 convolutions with stride [1  1] and padding 'same'
        25   'batch_normalization_88'   Batch Normalization   Batch normalization with 512 channels
        26   'activation_77'            ReLU                  ReLU
        27   'audio_embedding_layer'    Convolution           512 3×3×512 convolutions with stride [1  1] and padding 'same'
        28   'max_pooling2d_44'         Max Pooling           16×24 max pooling with stride [16  24] and padding 'same'
        29   'flatten'                  Keras Flatten         Flatten activations into 1-D assuming C-style (row-major) order
        30   'out'                      Regression Output     mean-squared-error
    

    Использовать analyzeNetwork (Deep Learning Toolbox) для визуального изучения сети.

    analyzeNetwork(net)

    Использовать openl3Preprocess для извлечения встраиваемых данных из звукового сигнала.

    Считывание звукового сигнала.

    [audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');

    Чтобы извлечь спектрограммы из звука, вызовите openl3Preprocess функция с частотой звука и дискретизации. Используйте 50% перекрытие и установите тип спектра линейным. openl3Preprocess функция возвращает массив из 30 спектрограмм, полученных с использованием длины БПФ 512.

    features = openl3Preprocess(audioIn,fs,'OverlapPercentage',50,'SpectrumType','linear');
    [posFFTbinsOvLap50,numHopsOvLap50,~,numSpectOvLap50] = size(features)
    posFFTbinsOvLap50 = 257
    
    numHopsOvLap50 = 197
    
    numSpectOvLap50 = 30
    

    Звонить openl3Preprocess опять же, на этот раз с использованием перекрытия по умолчанию 90%. openl3Preprocess функция теперь возвращает массив из 146 спектрограмм.

    features = openl3Preprocess(audioIn,fs,'SpectrumType','linear');
    [posFFTbinsOvLap90,numHopsOvLap90,~,numSpectOvLap90] = size(features)
    posFFTbinsOvLap90 = 257
    
    numHopsOvLap90 = 197
    
    numSpectOvLap90 = 146
    

    Визуализируйте одну из спектрограмм случайным образом.

    randSpect = randi(numSpectOvLap90);
    viewRandSpect = features(:,:,:,randSpect);
    N = size(viewRandSpect,2); 
    binsToHz = (0:N-1)*fs/N;
    nyquistBin = round(N/2);
    semilogx(binsToHz(1:nyquistBin),mag2db(abs(viewRandSpect(1:nyquistBin))))
    xlabel('Frequency (Hz)')
    ylabel('Power (dB)');
    title([num2str(randSpect),'th Spectrogram'])
    axis tight
    grid on

    Создание сети OpenL3 (для этого требуется инструментарий Deep Learning Toolbox) с использованием того же самого 'SpectrumType'.

    net = openl3('SpectrumType','linear');

    Извлеките и визуализируйте аудиозаписи.

    embeddings = predict(net,features);
    surf(embeddings,'EdgeColor','none')
    view([90,-90])
    axis([1 numSpectOvLap90 1 numSpectOvLap90])
    xlabel('Embedding Length')
    ylabel('Spectrum Number')
    title('OpenL3 Feature Embeddings')
    axis tight

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

    свернуть все

    Аргументы пары «имя-значение»

    Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

    Пример: openl3('EmbeddingLength',6144)

    Тип спектра, генерируемый из звука и используемый в качестве входа в нейронную сеть, указанный как 'mel128', 'mel256', или 'linear'.

    При использовании 'SpectrumType' и:

    • 'mel128' - Сеть принимает спектрограммы с диапазонами 128 мел в качестве входных данных. Входные размеры сети: 128около-199около-1-по-К, где 128 - количество полос mel и 199 - количество скачков времени.

    • 'mel256' - Сеть принимает спектрограммы с 256 диапазонами мел в качестве входных данных. Входные размеры сети: 256около-199около-1-по-К, где 256 - количество полос mel и 199 - количество скачков времени.

    • 'linear' - Сеть принимает положительные односторонние спектрограммы с длиной БПФ 257. Входные размеры сети: 257около-197около-1-по-К, где 257 - положительная односторонняя длина БПФ и 197 - количество скачков времени.

    K представляет количество спектрограмм. При предварительной обработке данных с помощью openl3Preprocess, вы должны использовать то же самое 'SpectrumType'.

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

    Длина встраивания выходного звука, указанная как 512 или 6144.

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

    Тип аудиоконтента, на котором обучается нейронная сеть, указанный как 'env' или 'music'.

    Набор ContentType кому:

    • 'env' когда вы хотите использовать модель, обученную экологическим данным.

    • 'music' когда вы хотите использовать модель, обученную музыкальным данным.

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

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

    свернуть все

    Предварительно обученная OpenL3 нейронная сеть, возвращенная как DAGNetwork(Панель инструментов глубокого обучения).

    Ссылки

    [1] Крамер, Джейсон, и др. «Смотрите, слушайте и узнайте больше: варианты дизайна для глубоких аудиозаписей». В ICASSP 2019 Международная конференция IEEE по аустике, обработке речи и сигналов (ICASSP), IEEE, 2019, стр. 3852-56. DOI.org (Crossref), doi:/10.1109/ICASSP.2019.8682475.

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