Увеличение звуковых данных
Считывайте аудиосигнал и слушайте его.
[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav");
sound(audioIn,fs)
Создайте audioDataAugmenter
объект, который применяет растяжение времени, регулирование объема и смещение времени в каскаде. Примените каждое увеличение с вероятностью 80%. Задайте NumAugmentations
на 5
выдавать пять независимо дополненных сигналов. Чтобы пропустить перемену тангажа и сложение шума для каждого увеличения, установите соответствующие вероятности на 0
. Задайте области значений параметров для каждого соответствующего алгоритма увеличения.
augmenter = audioDataAugmenter( ... "AugmentationMode","sequential", ... "NumAugmentations",5, ... ... "TimeStretchProbability",0.8, ... "SpeedupFactorRange", [1.3,1.4], ... ... "PitchShiftProbability",0, ... ... "VolumeControlProbability",0.8, ... "VolumeGainRange",[-5,5], ... ... "AddNoiseProbability",0, ... ... "TimeShiftProbability",0.8, ... "TimeShiftRange", [-500e-3,500e-3])
augmenter = audioDataAugmenter with properties: AugmentationMode: "sequential" AugmentationParameterSource: 'random' NumAugmentations: 5 TimeStretchProbability: 0.8000 SpeedupFactorRange: [1.3000 1.4000] PitchShiftProbability: 0 VolumeControlProbability: 0.8000 VolumeGainRange: [-5 5] AddNoiseProbability: 0 TimeShiftProbability: 0.8000 TimeShiftRange: [-0.5000 0.5000]
Функции augment
на аудио, чтобы создать 5 дополнений. Дополненный звук возвращается в таблицу с переменными Audio
и AugmentationInfo
. Количество строк в таблице определяется NumAugmentations
.
data = augment(augmenter,audioIn,fs)
data=5×2 table
Audio AugmentationInfo
_________________ ________________
{685056x1 double} [1x1 struct]
{685056x1 double} [1x1 struct]
{505183x1 double} [1x1 struct]
{685056x1 double} [1x1 struct]
{490728x1 double} [1x1 struct]
В текущем трубопроводе увеличения параметры увеличения назначаются случайным образом из заданных областей. Чтобы определить точные параметры, используемые для увеличения, смотрите AugmentationInfo
.
augmentationToInspect = 4;
Данные .AugmentationInfo (aughmentationToInspect)
ans = struct with fields:
SpeedupFactor: 1
VolumeGain: 4.3399
TimeShift: 0.4502
Послушайте увеличение, которое вы проверяете. Постройте представление времени исходных и дополненных сигналов.
augmentation = data.Audio{augmentationToInspect}; sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs; taug = (0:(numel(augmentation)-1))/fs; plot(t,audioIn,taug,augmentation) legend("Original Audio","Augmented Audio") ylabel("Amplitude") xlabel("Time (s)")
Считывайте аудиосигнал и слушайте его.
[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav");
sound(audioIn,fs)
Создайте audioDataAugmenter
объект, который применяет растяжение времени, перемену тангажа и шумовое повреждение в каскаде. Задайте коэффициенты скорости растяжения по времени как 0.9
, 1.1
, и 1.2
. Задайте смещение тангажа в полутонах следующим -2
, -1
, 1
, и 2
. Задайте ОСШ повреждения шума следующим 10
дБ и 15
дБ.
augmenter = audioDataAugmenter( ... "AugmentationMode","sequential", ... "AugmentationParameterSource","specify", ... "SpeedupFactor",[0.9,1.1,1.2], ... "ApplyTimeStretch",true, ... "ApplyPitchShift",true, ... "SemitoneShift",[-2,-1,1,2], ... "SNR",[10,15], ... "ApplyVolumeControl",false, ... "ApplyTimeShift",false)
augmenter = audioDataAugmenter with properties: AugmentationMode: "sequential" AugmentationParameterSource: "specify" ApplyTimeStretch: 1 SpeedupFactor: [0.9000 1.1000 1.2000] ApplyPitchShift: 1 SemitoneShift: [-2 -1 1 2] ApplyVolumeControl: 0 ApplyAddNoise: 1 SNR: [10 15] ApplyTimeShift: 0
Функции augment
на аудио, чтобы создать 24 увеличения. Увеличение представляет каждую комбинацию заданных параметров увеличения ().
data = augment(augmenter,audioIn,fs)
data=24×2 table
Audio AugmentationInfo
_________________ ________________
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
⋮
Можно проверить строение параметров каждого увеличения с помощью AugmentationInfo
табличная переменная.
augmentationToInspect = 1;
Данные .AugmentationInfo (aughmentationToInspect)
ans = struct with fields:
SpeedupFactor: 0.9000
SemitoneShift: -2
SNR: 10
Послушайте увеличение, которое вы проверяете. Постройте график представления исходных и дополненных сигналов во временной области.
augmentation = data.Audio{augmentationToInspect}; sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs; taug = (0:(numel(augmentation)-1))/fs; plot(t,audioIn,taug,augmentation) legend("Original Audio","Augmented Audio") ylabel("Amplitude") xlabel("Time (s)")
Считывайте аудиосигнал и слушайте его.
[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav");
Создайте audioDataAugmenter
объект, который применяет шумовое повреждение и временное смещение в параллельных ветвях. Для ветви шумового повреждения случайным образом примените шум с ОСШ в области значений 0
дБ к 20
дБ. Для ветви перемены времени случайным образом применить сдвиг времени в области значений - 300
от мс до 300
г-жа Применить увеличение 2 раза для каждой ветви, для 4 общего увеличения.
augmenter = audioDataAugmenter( ... "AugmentationMode","independent", ... "AugmentationParameterSource","random", ... "NumAugmentations",2, ... "ApplyTimeStretch",false, ... "ApplyPitchShift",false, ... "ApplyVolumeControl",false, ... "SNRRange",[0,20], ... "TimeShiftRange",[-300e-3,300e-3])
augmenter = audioDataAugmenter with properties: AugmentationMode: "independent" AugmentationParameterSource: "random" NumAugmentations: 2 ApplyTimeStretch: 0 ApplyPitchShift: 0 ApplyVolumeControl: 0 ApplyAddNoise: 1 SNRRange: [0 20] ApplyTimeShift: 1 TimeShiftRange: [-0.3000 0.3000]
Функции augment
на аудио, чтобы создать 3 увеличения.
data = augment(augmenter,audioIn,fs);
Можно проверить строение параметров каждого увеличения с помощью AugmentatioInfo
табличная переменная.
augmentationToInspect = 4;
data.AugmentationInfo {aughmentationToInspect}
ans = struct with fields:
TimeShift: 0.0016
Слушайте аудио, которое вы проверяете. Постройте график представления исходных и дополненных сигналов во временной области.
augmentation = data.Audio{augmentationToInspect}; sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs; taug = (0:(numel(augmentation)-1))/fs; plot(t,audioIn,taug,augmentation) legend("Original Audio","Augmented Audio") ylabel("Amplitude") xlabel("Time (s)")
Считывайте аудиосигнал и слушайте его.
[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav");
Создайте audioDataAugmenter
объект, который применяет регулирование объема, повреждение шума и перемещение времени в параллельных ветвях.
augmenter = audioDataAugmenter( ... "AugmentationMode","independent", ... "AugmentationParameterSource","specify", ... "ApplyTimeStretch",false, ... "ApplyPitchShift",false, ... "VolumeGain",2, ... "SNR",0, ... "TimeShift",2)
augmenter = audioDataAugmenter with properties: AugmentationMode: "independent" AugmentationParameterSource: "specify" ApplyTimeStretch: 0 ApplyPitchShift: 0 ApplyVolumeControl: 1 VolumeGain: 2 ApplyAddNoise: 1 SNR: 0 ApplyTimeShift: 1 TimeShift: 2
Функции augment
на аудио, чтобы создать 3 увеличения.
data = augment(augmenter,audioIn,fs)
data=3×2 table
Audio AugmentationInfo
_________________ ________________
{685056x1 double} {1x1 struct}
{685056x1 double} {1x1 struct}
{685056x1 double} {1x1 struct}
Можно проверить строение параметров каждого увеличения с помощью AugmentatioInfo
табличная переменная.
augmentationToInspect = 3;
data.AugmentationInfo {aughmentationToInspect}
ans = struct with fields:
TimeShift: 2
Слушайте аудио, которое вы проверяете. Постройте графики представлений исходных и дополненных сигналов во временной области.
augmentation = data.Audio{augmentationToInspect}; sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs; taug = (0:(numel(augmentation)-1))/fs; plot(t,audioIn,taug,augmentation) legend("Original Audio","Augmented Audio") ylabel("Amplitude") xlabel("Time (s)")
The audioDataAugmenter
поддерживает несколько рабочих процессов для увеличения вашего datastore, включая:
Увеличение в автономном режиме
Увеличение с использованием длинные массивы
Увеличение с помощью хранилищ данных преобразования
В каждом рабочем процессе начните с создания audio datastore, чтобы указать на ваши аудио данные. В этом примере вы создаете audio datastore, который указывает на аудио- выборки, включенные в Audio Toolbox™. Подсчитайте количество файлов в наборе данных.
folder = fullfile(matlabroot,"toolbox","audio","samples"); ADS = audioDatastore(folder)
ADS = audioDatastore with properties: Files: { ' ...\matlab\toolbox\audio\samples\Ambiance-16-44p1-mono-12secs.wav'; ' ...\matlab\toolbox\audio\samples\AudioArray-16-16-4channels-20secs.wav'; ' ...\toolbox\audio\samples\ChurchImpulseResponse-16-44p1-mono-5secs.wav' ... and 26 more } AlternateFileSystemRoots: {} OutputDataType: 'double' Labels: {}
numFilesInDataset = numel(ADS.Files)
numFilesInDataset = 29
Создайте audioDataAugmenter
который применяет случайные последовательные увеличения. Задайте NumAugmentations
на 2
.
aug = audioDataAugmenter('NumAugmentations',2)
aug = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' NumAugmentations: 2 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 VolumeGainRange: [-3 3] AddNoiseProbability: 0.5000 SNRRange: [0 10] TimeShiftProbability: 0.5000 TimeShiftRange: [-0.0050 0.0050]
Увеличение в автономном режиме
Чтобы увеличить набор данных аудиоданных, создайте два увеличения каждого файла и затем запишите увеличения как файлы WAV.
while hasdata(ADS) [audioIn,info] = read(ADS); data = augment(aug,audioIn,info.SampleRate); [~,fn] = fileparts(info.FileName); for i = 1:size(data,1) augmentedAudio = data.Audio{i}; % If augmentation caused an audio signal to have values outside of -1 and 1, % normalize the audio signal to avoid clipping when writing. if max(abs(augmentedAudio),[],'all')>1 augmentedAudio = augmentedAudio/max(abs(augmentedAudio),[],'all'); end audiowrite(sprintf('%s_aug%d.wav',fn,i),augmentedAudio,info.SampleRate) end end
Создайте audioDatastore
это указывает на дополненный набор данных и подтверждает, что количество файлов в наборе данных вдвое превышает исходное количество файлов.
augmentedADS = audioDatastore(pwd)
augmentedADS = audioDatastore with properties: Files: { ' ...\Examples\audio-ex28074079\Ambiance-16-44p1-mono-12secs_aug1.wav'; ' ...\Examples\audio-ex28074079\Ambiance-16-44p1-mono-12secs_aug2.wav'; ' ...\Examples\audio-ex28074079\AudioArray-16-16-4channels-20secs_aug1.wav' ... and 55 more } AlternateFileSystemRoots: {} OutputDataType: 'double' Labels: {}
numFilesInAugmentedDataset = numel(augmentedADS.Files)
numFilesInAugmentedDataset = 58
Увеличение с использованием длинных массивов
При увеличении набора данных, используя длинные массивы, входные данные в augmenter должны быть дискретизированы с постоянной скоростью. Подставьте исходный набор данных аудиоданных, чтобы включать только файлы с частотой дискретизации 44,1 кГц. Большинство наборов данных уже очищены, чтобы иметь допустимую частоту дискретизации.
keepFile = cellfun(@(x)contains(x,'44p1'),ADS.Files);
ads44p1 = subset(ADS,keepFile);
fs = 44.1e3;
Преобразуйте audio datastore в длинный массив array. tall
массивы оцениваются только при явном запросе с помощью gather
. MATLAB ® автоматически оптимизирует вычисления в очереди, минимизируя количество проходов через данные. Если у вас есть Parallel Computing Toolbox™, можно распределить вычисления по нескольким машинам. Аудио данных представлено как M-by-1 tall массиву ячеек, где M - количество файлов в audio datastore.
adsTall = tall(ads44p1)
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6). adsTall = M×1 tall cell array { 539648×1 double} { 227497×1 double} { 8000×1 double} { 685056×1 double} { 882688×2 double} {1115760×2 double} { 505200×2 double} {3195904×2 double} : : : :
Задайте cellfun
функция, так что увеличение применяется к каждой камере длинный массив. Функции gather
для вычисления длинный массив.
augTall = cellfun(@(x)augment(aug,x,fs),adsTall,"UniformOutput",false);
augmentedDataset = gather(augTall)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1 min 34 sec Evaluation completed in 1 min 34 sec
augmentedDataset=12×1 cell array
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
Дополненный набор данных возвращается как numFiles-by-1 массив ячеек, где numFiles - это количество файлов в datastore. Каждый элемент массива ячеек является numAugmentationsPerFile-by-2 таблицей, где numAugmentationsPerFile является количеством увеличений, возвращаемых в каждом файле.
numFiles = numel(augmentedDataset)
numFiles = 12
numAugmentationsPerFile = size(augmentedDataset{1},1)
numAugmentationsPerFile = 2
Увеличение с использованием преобразования Datastore
Вы можете выполнить онлайн-увеличение данных во время обучения вашего приложения машинного обучения с помощью хранилища datastore преобразования. Функции transform
чтобы создать новый datastore, который применяет увеличение данных во время чтения.
transformADS = transform(ADS,@(x,info)augment(aug,x,info),'IncludeInfo',true)
transformADS = TransformedDatastore with properties: UnderlyingDatastore: [1×1 audioDatastore] Transforms: {@(x,info)augment(aug,x,info)} IncludeInfo: 1
Функции read
чтобы вернуть дополненный первый файл из datastore преобразования.
augmentedRead = read(transformADS)
augmentedRead=2×2 table
Audio AugmentationInfo
_________________ ________________
{539648×1 double} [1×1 struct]
{586683×1 double} [1×1 struct]
aug
- Увеличение аудиоданныхaudioDataAugmenter
объектaudioDataAugmenter
объект.
audioIn
- Аудио входАудио вход, заданный как вектор-столбец или матрица независимых каналов (столбцов).
Типы данных: single
| double
fs
- Частота дискретизации (Гц)44100
(по умолчанию) | положительная скалярная величинаЧастота дискретизации в Гц, заданная как положительная скалярная величина. Допустимая область значений fs
зависит от свойств audioDataAugmenter
объект.
Типы данных: single
| double
data
- Дополненная аудиоинформация и информация об увеличенииДополненная аудиоинформация и информация об увеличении, возвращаемая как двухколоночная table
. Первый столбец содержит дополненный аудиосигнал. Второй столбец содержит информацию о применяемых методах увеличения. Количество строк в data
соответствует количеству выхода дополненных сигналов. Количество выхода дополненных сигналов зависит от значений свойств объекта.
addAugmentationMethod
| audioDataAugmenter
| removeAugmentationMethod
| table
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.