vggishFeatures

Извлеките функции VGGish

    Описание

    пример

    embeddings = vggishFeatures(audioIn,fs) возвращает вложения функции VGGish в зависимости от времени для аудиовхода audioIn с частотой дискретизации fs. Столбцы входа обработаны, когда индивидуум образовывает канал.

    пример

    embeddings = vggishFeatures(audioIn,fs,Name,Value) задает опции с помощью одного или нескольких Name,Value парные аргументы. Например, embeddings = vggishFeatures(audioIn,fs,'ApplyPCA',true) применяет преобразование анализа главных компонентов (PCA) к аудио вложениям.

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

    Примеры

    свернуть все

    Загрузите и разархивируйте модель Audio Toolbox™ для VGGish.

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

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

    downloadFolder = fullfile(tempdir,'VGGishDownload');
    loc = websave(downloadFolder,'https://ssd.mathworks.com/supportfiles/audio/vggish.zip');
    VGGishLocation = tempdir;
    unzip(loc,VGGishLocation)
    addpath(fullfile(VGGishLocation,'vggish'))

    Читайте в звуковом файле.

    [audioIn,fs] = audioread('MainStreetOne-16-16-mono-12secs.wav');

    Вызовите vggishFeatures функция с аудио и частотой дискретизации, чтобы извлечь VGGish показывает вложения от аудио.

    featureVectors = vggishFeatures(audioIn,fs);

    vggishFeatures функция возвращает матрицу характеристических векторов с 128 элементами в зависимости от времени.

    [numHops,numElementsPerHop,numChannels] = size(featureVectors)
    numHops = 23
    
    numElementsPerHop = 128
    
    numChannels = 1
    

    Создайте 10-секундный розовый шумовой сигнал и затем извлеките функции VGGish. vggishFeatures функционируйте функции извлечений от mel спектрограмм с 50%-м перекрытием.

    fs = 16e3;
    dur = 10;
    
    audioIn = pinknoise(dur*fs,1,'single');
    
    features = vggishFeatures(audioIn,fs);

    Стройте функции VGGish в зависимости от времени.

    surf(features,'EdgeColor','none')
    view([30 65])
    axis tight
    xlabel('Feature Index')
    ylabel('Frame')
    xlabel('Feature Value')
    title('VGGish Features')

    Чтобы увеличивать разрешение функций VGGish в зависимости от времени, задайте перекрытие процента между mel спектрограммами. Постройте график результатов.

    overlapPercentage = 75;
    функции = vggishFeatures (audioIn, фс,'OverlapPercentage', overlapPercentage);
    
    surf (функции,'EdgeColor','none')
    представление ([30 65])
    ось tight
    xlabel'Feature Index')
    yLabel 'Frame')
    zlabel'Feature Value')
    заголовок'VGGish Features')

    Читайте в звуковом файле, слушайте его, и затем извлеките функции VGGish из аудио.

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

    Визуализируйте функции VGGish в зависимости от времени. Многие отдельные функции с нулевым знаком и не содержат полезной информации.

    surf(features,'EdgeColor','none')
    view([90,-90])
    axis tight
    xlabel('Feature Index')
    ylabel('Frame Index')
    title('VGGish Features')

    Можно применить анализ главных компонентов (PCA), чтобы сопоставить характеристические векторы в пробел, который подчеркивает изменение между вложениями. Вызовите vggishFeatures функционируйте снова и задайте ApplyPCA как true. Визуализируйте функции VGGish после PCA.

    features = vggishFeatures(audioIn,fs,'ApplyPCA',true);
    
    surf(features,'EdgeColor','none')
    view([90,-90])
    axis tight
    xlabel('Feature Index')
    ylabel('Frame Index')
    title('VGGish Features + PCA')

    Загрузите и разархивируйте воздушный набор данных компрессора. Этот набор данных состоит из записей от воздушных компрессоров в здоровом состоянии или в одном из семи дефектных состояний.

    url = 'https://www.mathworks.com/supportfiles/audio/AirCompressorDataset/AirCompressorDataset.zip';
    downloadFolder = fullfile(tempdir,'aircompressordataset');
    datasetLocation = tempdir;
    
    if ~exist(fullfile(tempdir,'AirCompressorDataSet'),'dir')
        loc = websave(downloadFolder,url);
        unzip(loc,fullfile(tempdir,'AirCompressorDataSet'))
    end

    Создайте audioDatastore объект управлять данными и разделить его в наборы обучения и валидации.

    ads = audioDatastore(downloadFolder,'IncludeSubfolders',true,'LabelSource','foldernames');
    
    [adsTrain,adsValidation] = splitEachLabel(ads,0.8,0.2);

    Считайте звуковой файл из datastore и сохраните частоту дискретизации для дальнейшего использования. Сбросьте datastore, чтобы возвратить указатель чтения на начало набора данных. Слушайте звуковой сигнал и постройте сигнал во временном интервале.

    [x,fileInfo] = read(adsTrain);
    fs = fileInfo.SampleRate;
    
    reset(adsTrain)
    
    sound(x,fs)
    
    figure
    t = (0:size(x,1)-1)/fs;
    plot(t,x)
    xlabel('Time (s)')
    title('State = ' + string(fileInfo.Label))
    axis tight

    Извлеките функции VGGish из наборов обучения и валидации. Транспонируйте функции так, чтобы время приехало строки.

    trainFeatures = cell(1,numel(adsTrain.Files));
    for idx = 1:numel(adsTrain.Files)
        [audioIn,fileInfo] = read(adsTrain);
        features = vggishFeatures(audioIn,fileInfo.SampleRate);
        trainFeatures{idx} = features';
    end
    
    validationFeatures = cell(1,numel(adsValidation.Files));
    for idx = 1:numel(adsValidation.Files)
        [audioIn,fileInfo] = read(adsValidation);
        features = vggishFeatures(audioIn,fileInfo.SampleRate);
        validationFeatures{idx} = features';
    end

    Задайте сеть Long Short-Term Memory Networks (Deep Learning Toolbox).

    layers = [
        sequenceInputLayer(128)
        lstmLayer(100,'OutputMode','last')
        fullyConnectedLayer(8)
        softmaxLayer
        classificationLayer];

    Чтобы задать опции обучения, используйте trainingOptions (Deep Learning Toolbox).

    miniBatchSize = 64;
    validationFrequency = 5*floor(numel(trainFeatures)/miniBatchSize);
    options = trainingOptions("adam", ...
        "MaxEpochs",12, ...
        "MiniBatchSize",miniBatchSize, ...
        "Plots","training-progress", ...
        "Shuffle","every-epoch", ...
        "LearnRateSchedule","piecewise", ...
        "LearnRateDropPeriod",6, ...
        "LearnRateDropFactor",0.1, ...
        "ValidationData",{validationFeatures,adsValidation.Labels}, ...
        "ValidationFrequency",validationFrequency, ...
        'Verbose',false);

    Чтобы обучить сеть, используйте trainNetwork (Deep Learning Toolbox).

    net = trainNetwork(trainFeatures,adsTrain.Labels,layers,options)

    net = 
      SeriesNetwork with properties:
    
             Layers: [5×1 nnet.cnn.layer.Layer]
         InputNames: {'sequenceinput'}
        OutputNames: {'classoutput'}
    
    

    Визуализируйте матрицу беспорядка для набора валидации.

    predictedClass = classify(net,validationFeatures);
    confusionchart(adsValidation.Labels,predictedClass)

    Загрузите и разархивируйте воздушный набор данных компрессора [1]. Этот набор данных состоит из записей от воздушных компрессоров в здоровом состоянии или в одном из семи дефектных состояний.

    url = 'https://www.mathworks.com/supportfiles/audio/AirCompressorDataset/AirCompressorDataset.zip';
    downloadFolder = fullfile(tempdir,'aircompressordataset');
    datasetLocation = tempdir;
    
    if ~exist(fullfile(tempdir,'AirCompressorDataSet'),'dir')
        loc = websave(downloadFolder,url);
        unzip(loc,fullfile(tempdir,'AirCompressorDataSet'))
    end

    Создайте audioDatastore объект управлять данными и разделить его в наборы обучения и валидации.

    ads = audioDatastore(downloadFolder,'IncludeSubfolders',true,'LabelSource','foldernames');

    В этом примере вы классифицируете сигналы или как здоровые или как дефектные. Объедините все дефектные метки в одну метку. Разделите datastore в наборы обучения и валидации.

    labels = ads.Labels;
    labels(labels~=categorical("Healthy")) = categorical("Faulty");
    ads.Labels = removecats(labels);
    
    [adsTrain,adsValidation] = splitEachLabel(ads,0.8,0.2);

    Извлеките функции VGGish из набора обучающих данных. Каждый звуковой файл соответствует нескольким функциям VGGish. Реплицируйте метки так, чтобы они были во взаимно-однозначном соответствии с функциями.

    trainFeatures = [];
    trainLabels = [];
    for idx = 1:numel(adsTrain.Files)
        [audioIn,fileInfo] = read(adsTrain);
        features = vggishFeatures(audioIn,fileInfo.SampleRate);
        trainFeatures = [trainFeatures;features];
        trainLabels = [trainLabels;repelem(fileInfo.Label,size(features,1))'];
    end

    Обучите кубическую машину опорных векторов (SVM) с помощью fitcsvm (Statistics and Machine Learning Toolbox). Чтобы исследовать другие классификаторы и их эффективность, используйте Classification Learner (Statistics and Machine Learning Toolbox).

    faultDetector = fitcsvm( ...
        trainFeatures, ...
        trainLabels, ...
        'KernelFunction','polynomial', ...
        'PolynomialOrder',3, ...
        'KernelScale','auto', ...
        'BoxConstraint',1, ...
        'Standardize',true, ...
        'ClassNames',categories(trainLabels));

    Для каждого файла в наборе валидации:

    1. Извлеките функции VGGish.

    2. Для каждого характеристического вектора VGGish в файле используйте обученный классификатор, чтобы предсказать, здорова ли машина или неисправна.

    3. Возьмите режим предсказаний для каждого файла.

    predictions = [];
    for idx = 1:numel(adsValidation.Files)
        [audioIn,fileInfo] = read(adsValidation);
        
        features = vggishFeatures(audioIn,fileInfo.SampleRate);
        
        predictionsPerFile = categorical(predict(faultDetector,features));
        
        predictions = [predictions;mode(predictionsPerFile)];
    end

    Используйте confusionchart (Statistics and Machine Learning Toolbox), чтобы отобразить эффективность классификатора.

    accuracy = sum(predictions==adsValidation.Labels)/numel(adsValidation.Labels);
    cc = confusionchart(predictions,adsValidation.Labels);
    cc.Title = sprintf('Accuracy = %0.2f %',accuracy*100);

    Ссылки

    [1] Verma, Нищел К., Рахул Кумар Севэкула, Сонэл Диксит и Аль Сэлур. 2016. “Интеллектуальный основанный на условии Контроль Используя Акустические Сигналы для Воздушных Компрессоров”. Транзакции IEEE на Надежности 65 (1): 291–309. https://doi.org/10.1109/TR.2015.2459684.

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

    свернуть все

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

    Длительность audioIn должно быть равным или больше, чем 0,975 секунды.

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

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

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

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

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

    Пример: 'OverlapPercentage',75

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

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

    Отметьте, чтобы применить преобразование PCA к аудио вложениям в виде разделенной запятой пары, состоящей из 'ApplyPCA' и любой true или false.

    Типы данных: логический

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

    свернуть все

    Компактное представление аудиоданных, возвращенных как L-by-128-by-N массив, где:

    • L Представляет количество систем координат, в которые разделен звуковой сигнал. Это определяется OverlapPercentage.

    • 128 - Представляет продолжительность встраивания аудио.

    • N Представляет количество каналов.

    Алгоритмы

    свернуть все

    vggishFeatures функционируйте использует VGGish, чтобы извлечь вложения функции из аудио. vggishFeatures функция предварительно обрабатывает аудио так, чтобы это было в формате, требуемом VGGish, и опционально постобработало вложения.

    Предварительно обработать

    1. Передискретизируйте audioIn к 16 кГц и бросок к одинарной точности.

    2. Вычислите одностороннее кратковременное преобразование Фурье с помощью периодического окна Hann на 25 мс с транзитным участком на 10 мс и ДПФ с 512 точками. Аудио теперь представлено 257 L массивом, где 257 количество интервалов в односторонних спектрах, и L зависит от длины входа.

    3. Преобразуйте комплексные спектральные значения в величину и отбросьте информацию о фазе.

    4. Передайте односторонний спектр величины через mel-расположенный-с-интервалами набор фильтров с 64 полосами, затем суммируйте величины в каждой полосе. Аудио теперь представлено одним 64 L mel спектрограмма.

    5. Преобразуйте mel спектрограмму в логарифмическую шкалу.

    6. Буферизуйте mel спектрограмму в перекрытые сегменты, состоящие из 96 спектров каждый. Аудио теперь представлено 96 64 1 K массивом, где 96 количество спектров в отдельных mel спектрограммах, 64 количество mel полос, и спектрограммы расположены с интервалами по четвертому измерению для совместимости с моделью VGGish. Количество mel спектрограмм, K, зависит от входной длины и OverlapPercentage.

    Извлечение признаков

    Передайте 96 64 1 K массивом mel спектрограмм через VGGish, чтобы возвратить K-by-128 матрица. Выход от VGGish является вложениями функции, соответствующими каждой системе координат на 0,975 мс аудиоданных.

    Постобработать

    Если ApplyPCA установлен в true, вложения функции постобрабатываются, чтобы совпадать с постобработкой выпущенных вложений AudioSet. Модель VGGish была выпущена с предварительно вычисленной матрицей анализа главных компонентов (PCA) и вектором средних значений, чтобы применить преобразование PCA и белящий во время вывода. Постобработка включает применение PCA, отбеливание и квантование.

    1. Вычтите предварительно вычисленный 1 128 вектор средних значений PCA от K-by-128 матрица функции, и затем предварительно умножьте результат на предварительно вычисленный 128 128 матрица PCA.

    2. Отсеките преобразованные и побеленные вложения к между –2 и 2, затем квантуйте результат к значениям, которые могут быть представлены uint8.

    Ссылки

    [1] Gemmeke, Джортом Ф., Дэниелом П. В. Эллисом, Диланом Фридменом, не Является Янсен, Уэйд Лоуренс, Р. Ченнинг Мур, Мэнодж Плэкэл и Марвин Риттер. 2017. “Аудио Набор: Онтология и Помеченный Человеком Набор данных для Аудио Событий”. На 2 017 Международных конференциях IEEE по вопросам Акустики, Речи и Обработки сигналов (ICASSP), 776–80. Новый Орлеан, LA: IEEE. https://doi.org/10.1109/ICASSP.2017.7952261.

    [2] Херши, Шон, Кисловатый Chaudhuri, Дэниел П. В. Эллис, Джорт Ф. Джеммек, не Является Янсен, Р. Ченнинг Мур, Manoj Plakal, и др. 2017. “Архитектуры CNN для Крупномасштабной Аудио Классификации”. На 2 017 Международных конференциях IEEE по вопросам Акустики, Речи и Обработки сигналов (ICASSP), 131–35. Новый Орлеан, LA: IEEE. https://doi.org/10.1109/ICASSP.2017.7952132.

    Введенный в R2020b