Извлечение элементов VGGish
возвращает встраиваемые функции VGGish с течением времени для ввода звука embeddings = vggishFeatures(audioIn,fs)audioIn с частотой выборки fs. Столбцы ввода обрабатываются как отдельные каналы.
указывает параметры, использующие один или несколько embeddings = vggishFeatures(audioIn,fs,Name,Value)Name,Value аргументы пары. Например, embeddings = vggishFeatures(audioIn,fs,'ApplyPCA',true) применяет преобразование анализа основных компонентов (PCA) к вложениям звука.
Эта функция требует как 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; features = vggishFeatures(audioIn,fs,'OverlapPercentage',overlapPercentage); surf(features,'EdgeColor','none') view([30 65]) axis tight xlabel('Feature Index') ylabel('Frame') zlabel('Feature Value') title('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);
Прочитайте аудиофайл из хранилища данных и сохраните частоту дискретизации для последующего использования. Сбросьте хранилище данных, чтобы вернуть указатель чтения в начало набора данных. Прослушайте звуковой сигнал и постройте график сигнала во временной области.
[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 (инструментарий глубокого обучения).
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 (инструментарий глубокого обучения).
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');
В этом примере сигналы классифицируются как исправные или неисправные. Объедините все неисправные метки в одну. Разбейте хранилище данных на обучающие и проверочные наборы.
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 (Статистика и инструментарий машинного обучения). Для изучения других классификаторов и их характеристик используйте 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 к аудиозаписямfalse (по умолчанию) | trueФлаг для применения преобразования PCA к вложениям звука, указанный как пара, разделенная запятыми, состоящая из 'ApplyPCA' и либо true или false.
Типы данных: logical
embeddings - Компактное представление аудиоданныхКомпактное представление аудиоданных, возвращаемых в виде массива L-by-128-by-N, где:
L - количество кадров, на которые разделен звуковой сигнал. Это определяется OverlapPercentage.
128 - Представляет длину встраивания звука.
N - количество каналов.
vggishFeatures функция использует VGGish для извлечения встраиваемых функций из звука. vggishFeatures функция предварительно обрабатывает звук так, чтобы он был в формате, требуемом для VGGish, и дополнительно выполняет постобработку вложений.
Передискретизировать audioIn до 16 кГц и отливка с единственной точностью.
Вычислите одностороннее короткое преобразование Фурье, используя 25-миллисекундное периодическое окно Ханна с 10-миллисекундным прыжком и 512-точечным DFT. Звук теперь представлен 257-by-L матрицей, где 257 - количество элементов в односторонних спектрах, и L зависит от длины входа.
Преобразуйте комплексные спектральные значения в величину и отбрасывайте информацию о фазе.
Пропускают односторонний спектр амплитуд через 64-полосный блок фильтров с промежутками, затем суммируют величины в каждой полосе. Аудио теперь представлено единственными 64 L mel спектрограмма.
Преобразование спектрограммы в логарифмическую шкалу.
Буферизуют мель-спектрограмму в перекрывающиеся сегменты, состоящие из 96 спектров каждый. Звук теперь представлен 96-by-64-by-1-by-K матрицей, где 96 - количество спектров в отдельных спектрограммах mel, 64 - количество полос mel, и спектрограммы разнесены вдоль четвертого измерения для совместимости с моделью VGGish. Число спектрограмм mel, K, зависит от длины входа и OverlapPercentage.
Пропустите 96-by-64-by-1-by-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] Геммеке, Йорт Ф., Даниэль В. Эллис, Дилан Фридман, Арен Янсен, Уэйд Лоуренс, Р. Ченнинг Мур, Манодж Плакал и Марвин Риттер. 2017. «Аудиозапись: онтология и набор данных, помеченных человеком, для аудиовыходов». В 2017 году IEEE Международная конференция по акустике, обработке речи и сигналов (ICASSP), 776-80. Новый Орлеан, ЛА: IEEE. https://doi.org/10.1109/ICASSP.2017.7952261.
[2] Херши, Шон, Суриш Чаудхури, Даниэль В. Эллис, Йорт Ф. Геммеке, Арен Янсен, Р. Ченнинг Мур, Манодж Плакал и др. 2017. «Архитектуры CNN для крупномасштабной классификации звука». В 2017 году IEEE Международная конференция по акустике, обработке речи и сигналов (ICASSP), 131-35. Новый Орлеан, ЛА: IEEE. https://doi.org/10.1109/ICASSP.2017.7952132.
audioFeatureExtractor | classifySound | vggish | vggishPreprocess | yamnet | yamnetGraph
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.