Извлечение функций 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);
The vggishFeatures
функция возвращает матрицу 128-элементных векторов признаков с течением времени.
[numHops,numElementsPerHop,numChannels] = size(featureVectors)
numHops = 23
numElementsPerHop = 128
numChannels = 1
Создайте 10-секундный сигнал розового шума и затем извлеките функции VGGish. The 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, fs,'OverlapPercentage', overlapPercent); 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
Определите сеть длинных краткосрочных сетей памяти (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] Верма, Нишаль К., Рахул Кумар Севакула, Сонал Диксит и Аль Салур. 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'
- Процентное перекрытие последовательных аудиокадров50
(по умолчанию) | скаляром в области значений [0,100)Процентное перекрытие между последовательными аудио систем координат, заданное как разделенная запятой пара, состоящее из 'OverlapPercentage'
и скаляр в области значений [0,100).
Типы данных: single
| double
'ApplyPCA'
- Флаг для применения преобразования PCA к audio embeddingsfalse
(по умолчанию) | true
Флаг для применения преобразования PCA к audio embeddings, заданный как разделенная разделенными запятой парами, состоящая из 'ApplyPCA'
и любой из них true
или false
.
Типы данных: logical
embeddings
- Компактное представление аудиоданныхКомпактное представление аудиоданных, возвращаемое как L -by-128-by- N массив, где:
L - Представляет количество систем координат, в которых разбит аудиосигнал. Это определяется OverlapPercentage
.
128 - Представляет длину вставки звука.
N -- Представляет количество каналов.
vggishFeatures
функция использует VGGish, чтобы извлечь встроенные функции из аудио. vggishFeatures
функция предварительно обрабатывает аудио так, чтобы оно было в формате, требуемом VGGish, и опционально постпроцессирует встраивания.
Повторная выборка audioIn
до 16 кГц и приведение к одинарной точности.
Вычислите одностороннее кратковременное преобразование Фурье с помощью периодического окна Ханна 25 мс с скачком 10 мс и ДПФ с 512 точками. Теперь аудио представлено массивом 257- L, где 257 - количество интервалов в односторонних спектрах, и L зависит от длины входа.
Преобразуйте комплексные спектральные значения в величину и отбрасывайте информацию о фазе.
Пропустите односторонний спектр величины через разнесенную по 64 диапазону группу фильтров, затем суммируйте величины в каждой полосе. Теперь аудио представлено одной 64-байтовой L мел спектрограммой.
Преобразуйте спектрограмму mel в журнал шкалу.
Буферизуют mel spectrogram на перекрывающиеся сегменты, состоящие из 96 спектров каждый. Теперь аудио представлено массивом 96 на 64 на 1 на K, где 96 - количество спектров в отдельных спектрограммах mel, 64 - количество мел-диапазонов, и спектрограммы разнесены вдоль четвертой размерности для совместимости с моделью VGGish. Количество спектрограмм mel, K, зависит от длины и OverlapPercentage
входа.
Передайте массив mel spectrogram 96 на 64 K 1 через VGGish, чтобы вернуть матрицу K на 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, Jort F., Daniel P. W. Ellis, Dylan Freedman, Are Jansen, Wade Lawrence, R. Channing Moore, Manoj Plakal и Marvin Ritter. 2017. Audio Set: An Ontology and Human-Labeled Dataset for Audio Events (неопр.) (недоступная ссылка). В 2017 году IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 776-80. Новый Орлеан, LA: IEEE. https://doi.org/10.1109/ICASSP.2017.7952261.
[2] Hershey, Shawn, Sourish Chaudhuri, Daniel P. W. Ellis, Jort F. Gemmeke, Are Jansen, R. Channing Moore, Manoj Plakal, et al. 2017. CNN Архитектур для крупномасштабной классификации аудио. В 2017 году IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 131-35. Новый Орлеан, LA: IEEE. https://doi.org/10.1109/ICASSP.2017.7952132.
audioFeatureExtractor
| classifySound
| vggish
| vggishPreprocess
| yamnet
| yamnetGraph
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.