OpenL3 нейронная сеть
возвращает предварительно подготовленную модель OpenL3.net = openl3
Эта функция требует как Toolbox™ аудио, так и Deep Learning Toolbox™.
указывает параметры, использующие один или несколько аргументов Name и Value. Например, net = openl3(Name,Value)net = openl3('EmbeddingLength',6144) определяет выходную длину встраивания как 6144.
В этом примере используются:
Загрузите и распакуйте модель Audio Toolbox™ для OpenL3.
Напечатать openl3 в окне команд. Если модель Audio Toolbox для OpenL3 не установлена, функция предоставляет ссылку на расположение весов сети. Чтобы загрузить модель, щелкните ссылку. Распакуйте файл в папку по пути MATLAB.
Либо выполните эти команды для загрузки и распаковки модели OpenL3 во временную папку.
downloadFolder = fullfile(tempdir,'OpenL3Download'); loc = websave(downloadFolder,'https://ssd.mathworks.com/supportfiles/audio/openl3.zip'); OpenL3Location = tempdir; unzip(loc,OpenL3Location) addpath(fullfile(OpenL3Location,'openl3'))
Убедитесь, что установка выполнена успешно, введя openl3 в окне команд. Если сеть установлена, то функция возвращает DAGNetwork(Панель инструментов глубокого обучения).
openl3
ans =
DAGNetwork with properties:
Layers: [30×1 nnet.cnn.layer.Layer]
Connections: [29×2 table]
InputNames: {'in'}
OutputNames: {'out'}
В этом примере используются:
Загрузите предварительно обученную OpenL3 сверточную нейронную сеть и изучите слои и классы.
Использовать openl3 для загрузки предварительно обученной сети OpenL3. Продукция net является DAGNetwork(Панель инструментов глубокого обучения).
net = openl3
net =
DAGNetwork with properties:
Layers: [30×1 nnet.cnn.layer.Layer]
Connections: [29×2 table]
InputNames: {'in'}
OutputNames: {'out'}
Просмотр сетевой архитектуры с помощью Layers собственность. Сеть имеет 30 уровней. Существует 16 слоев с обучаемыми весами, из которых восемь являются слоями пакетной нормализации и восемь - сверточными слоями.
net.Layers
ans =
30×1 Layer array with layers:
1 'in' Image Input 128×199×1 images
2 'batch_normalization_81' Batch Normalization Batch normalization with 1 channels
3 'conv2d_71' Convolution 64 3×3×1 convolutions with stride [1 1] and padding 'same'
4 'batch_normalization_82' Batch Normalization Batch normalization with 64 channels
5 'activation_71' ReLU ReLU
6 'conv2d_72' Convolution 64 3×3×64 convolutions with stride [1 1] and padding 'same'
7 'batch_normalization_83' Batch Normalization Batch normalization with 64 channels
8 'activation_72' ReLU ReLU
9 'max_pooling2d_41' Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
10 'conv2d_73' Convolution 128 3×3×64 convolutions with stride [1 1] and padding 'same'
11 'batch_normalization_84' Batch Normalization Batch normalization with 128 channels
12 'activation_73' ReLU ReLU
13 'conv2d_74' Convolution 128 3×3×128 convolutions with stride [1 1] and padding 'same'
14 'batch_normalization_85' Batch Normalization Batch normalization with 128 channels
15 'activation_74' ReLU ReLU
16 'max_pooling2d_42' Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
17 'conv2d_75' Convolution 256 3×3×128 convolutions with stride [1 1] and padding 'same'
18 'batch_normalization_86' Batch Normalization Batch normalization with 256 channels
19 'activation_75' ReLU ReLU
20 'conv2d_76' Convolution 256 3×3×256 convolutions with stride [1 1] and padding 'same'
21 'batch_normalization_87' Batch Normalization Batch normalization with 256 channels
22 'activation_76' ReLU ReLU
23 'max_pooling2d_43' Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
24 'conv2d_77' Convolution 512 3×3×256 convolutions with stride [1 1] and padding 'same'
25 'batch_normalization_88' Batch Normalization Batch normalization with 512 channels
26 'activation_77' ReLU ReLU
27 'audio_embedding_layer' Convolution 512 3×3×512 convolutions with stride [1 1] and padding 'same'
28 'max_pooling2d_44' Max Pooling 16×24 max pooling with stride [16 24] and padding 'same'
29 'flatten' Keras Flatten Flatten activations into 1-D assuming C-style (row-major) order
30 'out' Regression Output mean-squared-error
Использовать analyzeNetwork (Deep Learning Toolbox) для визуального изучения сети.
analyzeNetwork(net)

Использовать openl3Preprocess для извлечения встраиваемых данных из звукового сигнала.
Считывание звукового сигнала.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');Чтобы извлечь спектрограммы из звука, вызовите openl3Preprocess функция с частотой звука и дискретизации. Используйте 50% перекрытие и установите тип спектра линейным. openl3Preprocess функция возвращает массив из 30 спектрограмм, полученных с использованием длины БПФ 512.
features = openl3Preprocess(audioIn,fs,'OverlapPercentage',50,'SpectrumType','linear'); [posFFTbinsOvLap50,numHopsOvLap50,~,numSpectOvLap50] = size(features)
posFFTbinsOvLap50 = 257
numHopsOvLap50 = 197
numSpectOvLap50 = 30
Звонить openl3Preprocess опять же, на этот раз с использованием перекрытия по умолчанию 90%. openl3Preprocess функция теперь возвращает массив из 146 спектрограмм.
features = openl3Preprocess(audioIn,fs,'SpectrumType','linear'); [posFFTbinsOvLap90,numHopsOvLap90,~,numSpectOvLap90] = size(features)
posFFTbinsOvLap90 = 257
numHopsOvLap90 = 197
numSpectOvLap90 = 146
Визуализируйте одну из спектрограмм случайным образом.
randSpect = randi(numSpectOvLap90); viewRandSpect = features(:,:,:,randSpect); N = size(viewRandSpect,2); binsToHz = (0:N-1)*fs/N; nyquistBin = round(N/2); semilogx(binsToHz(1:nyquistBin),mag2db(abs(viewRandSpect(1:nyquistBin)))) xlabel('Frequency (Hz)') ylabel('Power (dB)'); title([num2str(randSpect),'th Spectrogram']) axis tight grid on

Создание сети OpenL3 (для этого требуется инструментарий Deep Learning Toolbox) с использованием того же самого 'SpectrumType'.
net = openl3('SpectrumType','linear');
Извлеките и визуализируйте аудиозаписи.
embeddings = predict(net,features); surf(embeddings,'EdgeColor','none') view([90,-90]) axis([1 numSpectOvLap90 1 numSpectOvLap90]) xlabel('Embedding Length') ylabel('Spectrum Number') title('OpenL3 Feature Embeddings') axis tight

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
openl3('EmbeddingLength',6144)'SpectrumType' - Тип спектра'mel128' (по умолчанию) | 'mel256' | 'linear'Тип спектра, генерируемый из звука и используемый в качестве входа в нейронную сеть, указанный как 'mel128', 'mel256', или 'linear'.
При использовании 'SpectrumType' и:
'mel128' - Сеть принимает спектрограммы с диапазонами 128 мел в качестве входных данных. Входные размеры сети: 128около-199около-1-по-К, где 128 - количество полос mel и 199 - количество скачков времени.
'mel256' - Сеть принимает спектрограммы с 256 диапазонами мел в качестве входных данных. Входные размеры сети: 256около-199около-1-по-К, где 256 - количество полос mel и 199 - количество скачков времени.
'linear' - Сеть принимает положительные односторонние спектрограммы с длиной БПФ 257. Входные размеры сети: 257около-197около-1-по-К, где 257 - положительная односторонняя длина БПФ и 197 - количество скачков времени.
K представляет количество спектрограмм. При предварительной обработке данных с помощью openl3Preprocess, вы должны использовать то же самое 'SpectrumType'.
Типы данных: char | string
'EmbeddingLength' - Длина встраивания512 (по умолчанию) | 6144Длина встраивания выходного звука, указанная как 512 или 6144.
Типы данных: single | double
'ContentType' - Тип аудиоконтента'env' (по умолчанию) | 'music'Тип аудиоконтента, на котором обучается нейронная сеть, указанный как 'env' или 'music'.
Набор ContentType кому:
'env' когда вы хотите использовать модель, обученную экологическим данным.
'music' когда вы хотите использовать модель, обученную музыкальным данным.
Типы данных: char | string
net - Предварительно обученная нейронная сеть OpenL3DAGNetwork объектПредварительно обученная OpenL3 нейронная сеть, возвращенная как DAGNetwork(Панель инструментов глубокого обучения).
[1] Крамер, Джейсон, и др. «Смотрите, слушайте и узнайте больше: варианты дизайна для глубоких аудиозаписей». В ICASSP 2019 Международная конференция IEEE по аустике, обработке речи и сигналов (ICASSP), IEEE, 2019, стр. 3852-56. DOI.org (Crossref), doi:/10.1109/ICASSP.2019.8682475.
audioFeatureExtractor | classifySound | openl3Features | openl3Preprocess | vggish | vggishFeatures
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.