Извлеките функции VGGish
возвращает вложения функции VGGish в зависимости от времени для аудиовхода embeddings
= vggishFeatures(audioIn
,fs
)audioIn
с частотой дискретизации fs
. Столбцы входа обработаны, когда индивидуум образовывает канал.
задает опции с помощью одного или нескольких embeddings
= vggishFeatures(audioIn
,fs
,Name,Value
)Name,Value
аргументы. Например, embeddings = vggishFeatures(audioIn,fs,'ApplyPCA',true)
применяет преобразование анализа главных компонентов (PCA) к аудио вложениям.
Эта функция требует и Audio Toolbox™ и Deep Learning Toolbox™.
vggishFeatures
ФункциональностьЗагрузите и разархивируйте модель 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));
Для каждого файла в наборе валидации:
Извлеките функции VGGish.
Для каждого характеристического вектора VGGish в файле используйте обученный классификатор, чтобы предсказать, здорова ли машина или неисправна.
Возьмите режим предсказаний для каждого файла.
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.
audioIn
— Входной сигналВходной сигнал в виде вектор-столбца или матрицы. Если вы задаете матрицу, vggishFeatures
обрабатывает столбцы матрицы как отдельные звуковые каналы.
Длительность audioIn
должно быть равным или больше, чем 0,975 секунды.
Типы данных: single
| double
fs
— Частота дискретизации (Гц)Частота дискретизации входного сигнала в Гц в виде положительной скалярной величины.
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'OverlapPercentage',75
OverlapPercentage
— Перекрытие процента между последовательными аудио системами координат
(значение по умолчанию) | скаляр в области значений [0,100)Перекрытие процента между последовательным аудио структурирует в виде скаляра в области значений [0,100).
Типы данных: single
| double
ApplyPCA
— Отметьте, чтобы применить преобразование PCA к аудио вложениямfalse
(значение по умолчанию) | true
Отметьте, чтобы применить преобразование PCA к аудио вложениям в виде любого true
или false
.
Типы данных: логический
embeddings
— Компактное представление аудиоданныхКомпактное представление аудиоданных, возвращенных как L-by-128-by-N массив, где:
L Представляет количество кадров, в которое разделен звуковой сигнал. Это определяется OverlapPercentage
.
128 - Представляет продолжительность встраивания аудио.
N Представляет количество каналов.
vggishFeatures
функционируйте использует VGGish, чтобы извлечь вложения функции из аудио. vggishFeatures
функция предварительно обрабатывает аудио так, чтобы это было в формате, требуемом VGGish, и опционально постобработало вложения.
Передискретизируйте audioIn
к 16 кГц и бросок к одинарной точности.
Вычислите одностороннее кратковременное преобразование Фурье с помощью периодического окна Hann на 25 мс с транзитным участком на 10 мс и ДПФ с 512 точками. Аудио теперь представлено 257 L массивом, где 257 количество интервалов в односторонних спектрах, и L зависит от длины входа.
Преобразуйте комплексные спектральные значения в величину и отбросьте информацию о фазе.
Передайте односторонний спектр величины через mel-расположенный-с-интервалами набор фильтров с 64 полосами, затем суммируйте величины в каждой полосе. Аудио теперь представлено одним 64 L mel спектрограмма.
Преобразуйте mel спектрограмму в логарифмическую шкалу.
Буферизуйте 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 128 вектор средних значений PCA от K-by-128 матрица функции, и затем предварительно умножьте результат на предварительно вычисленный 128 128 матрица PCA.
Отсеките преобразованные и побеленные вложения к между –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.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.