Предварительная обработка аудио для классификации YAMNet
задает процент перекрытия между последовательными аудио систем координат.features = yamnetPreprocess(audioIn,fs,'OverlapPercentage',OP)
Для примера, features = yamnetPreprocess(audioIn,fs,'OverlapPercentage',75) применяет 75% перекрытие между последовательными системами координат, используемыми для генерации спектрограмм.
Загрузите и разархивируйте модель Audio Toolbox™ для YAMNet.
Тип yamnet в Командном окне. Если модель Audio Toolbox для YAMNet не установлена, то функция предоставляет ссылку на расположение весов сети. Чтобы скачать модель, щелкните ссылку. Разархивируйте файл в местоположении по пути MATLAB.
Также выполните следующие команды, чтобы загрузить и разархивировать модель YAMNet во временную директорию.
downloadFolder = fullfile(tempdir,'YAMNetDownload'); loc = websave(downloadFolder,'https://ssd.mathworks.com/supportfiles/audio/yamnet.zip'); YAMNetLocation = tempdir; unzip(loc,YAMNetLocation) addpath(fullfile(YAMNetLocation,'yamnet'))
Проверьте успешность установки путем ввода yamnet в Командном окне. Если сеть установлена, то функция возвращает SeriesNetwork (Deep Learning Toolbox) объект.
yamnet
ans =
SeriesNetwork with properties:
Layers: [86×1 nnet.cnn.layer.Layer]
InputNames: {'input_1'}
OutputNames: {'Sound'}
Загрузите предварительно обученную сверточную нейронную сеть YAMNet и исследуйте слои и классы.
Использование yamnet для загрузки предварительно обученной сети YAMNet. Выход сеть является SeriesNetwork (Deep Learning Toolbox) объект.
net = yamnet
net =
SeriesNetwork with properties:
Layers: [86×1 nnet.cnn.layer.Layer]
InputNames: {'input_1'}
OutputNames: {'Sound'}
Просмотрите сетевую архитектуру с помощью Layers свойство. Сеть имеет 86 слоев. Существует 28 слоев с усвояемыми весами: 27 сверточных слоев и 1 полносвязный слой.
net.Layers
ans =
86x1 Layer array with layers:
1 'input_1' Image Input 96×64×1 images
2 'conv2d' Convolution 32 3×3×1 convolutions with stride [2 2] and padding 'same'
3 'b' Batch Normalization Batch normalization with 32 channels
4 'activation' ReLU ReLU
5 'depthwise_conv2d' Grouped Convolution 32 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
6 'L11' Batch Normalization Batch normalization with 32 channels
7 'activation_1' ReLU ReLU
8 'conv2d_1' Convolution 64 1×1×32 convolutions with stride [1 1] and padding 'same'
9 'L12' Batch Normalization Batch normalization with 64 channels
10 'activation_2' ReLU ReLU
11 'depthwise_conv2d_1' Grouped Convolution 64 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same'
12 'L21' Batch Normalization Batch normalization with 64 channels
13 'activation_3' ReLU ReLU
14 'conv2d_2' Convolution 128 1×1×64 convolutions with stride [1 1] and padding 'same'
15 'L22' Batch Normalization Batch normalization with 128 channels
16 'activation_4' ReLU ReLU
17 'depthwise_conv2d_2' Grouped Convolution 128 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
18 'L31' Batch Normalization Batch normalization with 128 channels
19 'activation_5' ReLU ReLU
20 'conv2d_3' Convolution 128 1×1×128 convolutions with stride [1 1] and padding 'same'
21 'L32' Batch Normalization Batch normalization with 128 channels
22 'activation_6' ReLU ReLU
23 'depthwise_conv2d_3' Grouped Convolution 128 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same'
24 'L41' Batch Normalization Batch normalization with 128 channels
25 'activation_7' ReLU ReLU
26 'conv2d_4' Convolution 256 1×1×128 convolutions with stride [1 1] and padding 'same'
27 'L42' Batch Normalization Batch normalization with 256 channels
28 'activation_8' ReLU ReLU
29 'depthwise_conv2d_4' Grouped Convolution 256 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
30 'L51' Batch Normalization Batch normalization with 256 channels
31 'activation_9' ReLU ReLU
32 'conv2d_5' Convolution 256 1×1×256 convolutions with stride [1 1] and padding 'same'
33 'L52' Batch Normalization Batch normalization with 256 channels
34 'activation_10' ReLU ReLU
35 'depthwise_conv2d_5' Grouped Convolution 256 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same'
36 'L61' Batch Normalization Batch normalization with 256 channels
37 'activation_11' ReLU ReLU
38 'conv2d_6' Convolution 512 1×1×256 convolutions with stride [1 1] and padding 'same'
39 'L62' Batch Normalization Batch normalization with 512 channels
40 'activation_12' ReLU ReLU
41 'depthwise_conv2d_6' Grouped Convolution 512 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
42 'L71' Batch Normalization Batch normalization with 512 channels
43 'activation_13' ReLU ReLU
44 'conv2d_7' Convolution 512 1×1×512 convolutions with stride [1 1] and padding 'same'
45 'L72' Batch Normalization Batch normalization with 512 channels
46 'activation_14' ReLU ReLU
47 'depthwise_conv2d_7' Grouped Convolution 512 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
48 'L81' Batch Normalization Batch normalization with 512 channels
49 'activation_15' ReLU ReLU
50 'conv2d_8' Convolution 512 1×1×512 convolutions with stride [1 1] and padding 'same'
51 'L82' Batch Normalization Batch normalization with 512 channels
52 'activation_16' ReLU ReLU
53 'depthwise_conv2d_8' Grouped Convolution 512 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
54 'L91' Batch Normalization Batch normalization with 512 channels
55 'activation_17' ReLU ReLU
56 'conv2d_9' Convolution 512 1×1×512 convolutions with stride [1 1] and padding 'same'
57 'L92' Batch Normalization Batch normalization with 512 channels
58 'activation_18' ReLU ReLU
59 'depthwise_conv2d_9' Grouped Convolution 512 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
60 'L101' Batch Normalization Batch normalization with 512 channels
61 'activation_19' ReLU ReLU
62 'conv2d_10' Convolution 512 1×1×512 convolutions with stride [1 1] and padding 'same'
63 'L102' Batch Normalization Batch normalization with 512 channels
64 'activation_20' ReLU ReLU
65 'depthwise_conv2d_10' Grouped Convolution 512 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
66 'L111' Batch Normalization Batch normalization with 512 channels
67 'activation_21' ReLU ReLU
68 'conv2d_11' Convolution 512 1×1×512 convolutions with stride [1 1] and padding 'same'
69 'L112' Batch Normalization Batch normalization with 512 channels
70 'activation_22' ReLU ReLU
71 'depthwise_conv2d_11' Grouped Convolution 512 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same'
72 'L121' Batch Normalization Batch normalization with 512 channels
73 'activation_23' ReLU ReLU
74 'conv2d_12' Convolution 1024 1×1×512 convolutions with stride [1 1] and padding 'same'
75 'L122' Batch Normalization Batch normalization with 1024 channels
76 'activation_24' ReLU ReLU
77 'depthwise_conv2d_12' Grouped Convolution 1024 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same'
78 'L131' Batch Normalization Batch normalization with 1024 channels
79 'activation_25' ReLU ReLU
80 'conv2d_13' Convolution 1024 1×1×1024 convolutions with stride [1 1] and padding 'same'
81 'L132' Batch Normalization Batch normalization with 1024 channels
82 'activation_26' ReLU ReLU
83 'global_average_pooling2d' Global Average Pooling Global average pooling
84 'dense' Fully Connected 521 fully connected layer
85 'softmax' Softmax softmax
86 'Sound' Classification Output crossentropyex with 'Speech' and 520 other classes
Чтобы просмотреть имена классов, выученных сетью, можно просмотреть Classes свойство выходного слоя классификации (конечного слоя). Просмотрите первые 10 классов, задав первые 10 элементов.
net.Layers(end).Classes(1:10)
ans = 10×1 categorical
Speech
Child speech, kid speaking
Conversation
Narration, monologue
Babbling
Speech synthesizer
Shout
Bellow
Whoop
Yell
Использование analyzeNetwork (Deep Learning Toolbox), чтобы визуально исследовать сеть.
analyzeNetwork(net)

YAMNet был выпущен с соответствующей онтологией класса звука, которую можно исследовать с помощью yamnetGraph объект.
ygraph = yamnetGraph;
p = plot(ygraph);
layout(p,'layered')
График онтологии строит графики всех 521 возможных классов звука. Постройте подграфик звуков, относящихся к дыхательным звукам.
allRespiratorySounds = dfsearch(ygraph,"Respiratory sounds");
ygraphSpeech = subgraph(ygraph,allRespiratorySounds);
plot(ygraphSpeech)
Считывайте аудиосигнал.
[audioIn,fs] = audioread('SpeechDFT-16-8-mono-5secs.wav');Постройте график и прослушайте аудиосигнал.
T = 1/fs; t = 0:T:(length(audioIn)*T) - T; plot(t,audioIn); grid on xlabel('Time (t)') ylabel('Ampltiude')

soundsc(audioIn,fs)
Использование yamnetPreprocess для извлечения mel спектрограмм из аудиосигнала. Визуализируйте произвольную спектрограмму из массива.
melSpectYam = yamnetPreprocess(audioIn,fs); arbSpect = melSpectYam(:,:,1,randi(size(melSpectYam,4))); surf(arbSpect,'EdgeColor','none') view([90,-90]) axis([1 size(arbSpect,1) 1 size(arbSpect,2)]) xlabel('Mel Band') ylabel('Frame') title('Mel Spectrogram for YAMNet') axis tight

Создайте нейронную сеть YAMNet (Для этого требуется Deep Learning Toolbox). Функции classify с помощью сети YAMNet и предварительно обработанных изображений mel spectrogram.
net = yamnet; classes = classify(net,melSpectYam);
Классифицируйте аудиосигнал как наиболее часто встречающийся звук.
mySound = mode(classes)
mySound = categorical
Speech
audioIn - Входной сигналВходной сигнал, заданный как вектор-столбец или матрица. Если вы задаете матрицу, yamnetPreprocess обрабатывает столбцы матрицы как отдельные аудиоканалы.
Типы данных: single | double
fs - Частота дискретизации (Гц)Частота дискретизации входного сигнала в Гц, заданная как положительная скалярная величина.
Типы данных: single | double
OP - Процент перекрытия между последовательными спектрограммами mel50 (по умолчанию) | скаляром в области значений [0,100)Процентное перекрытие между последовательными спектрограммами mel, заданное как разделенная разделенными запятой парами, состоящая из 'OverlapPercentage' и скаляр в области значений [0,100).
Типы данных: single | double
features - Спектрограммы Mel, которые могут быть поданы в предварительно обученную сеть YAMNet96-by- 64-by- 1-by - K массивСпектрограммы Меля, сгенерированные audioIn, возвращается как 96-by- 64-by- 1-by - K массив, где :
96 - Представляет количество систем координат 10 мс в каждой mel spectrogram
64 -- Представляет количество полос мел, охватывающих 125 Гц до 7,5 кГц
K -- Представляет количество мел спектрограмм и зависит от длины audioIn, количество каналов в audioIn, а также OverlapPercentage
Примечание
Каждый 96-by- 64-by- 1 закрашенная фигура представляет одно изображение mel spectrogram. Для многоканальных входов mel-спектрограммы складываются по четвертой размерности.
Типы данных: single
[1] Gemmeke, Jort F., et al. «Audio Set: An Ontology and Human-Labeled Dataset for Audio Events». 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), IEEE, 2017, pp. 776-80. DOI.org (Crossref), doi:10.1109/ICASSP.2017.7952261.
[2] Hershey, Shawn, et al. «Архитектуры CNN для Крупномасштабной Аудио Классификации». Международная конференция IEEE 2017 года по вопросам Акустики, Речи и Сигнала, Обрабатывающего (ICASSP), IEEE, 2017, стр 131-35. DOI.org (Crossref), doi:10.1109/ICASSP.2017.7952132.
classifySound | vggish | vggishPreprocess | yamnet | yamnetGraph
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.