Увеличение звуковых данных
Увеличьте аудио набора данных с помощью специфичных для аудио методов увеличения, таких как перемена тангажа, изменение шкалы времени, смещение времени, шумовое сложение и регулирование громкости. Можно создать каскадные или параллельные трубопроводы увеличения для применения нескольких алгоритмов детерминированно или вероятностно.
создает объект audio data augmenter со значениями свойств по умолчанию.aug
= audioDataAugmenter()
задает свойства nondefault для aug
= audioDataAugmenter(Name,Value
)aug
использование одного или нескольких аргументов пары "имя-значение".
AugmentationMode
- Режим увеличения'sequential'
(по умолчанию) | 'independent'
Режим увеличения, заданный как 'sequential'
или 'independent'
.
'sequential'
- Алгоритмы увеличения применяются последовательно (последовательно).
'independent'
- Алгоритмы увеличения применяются независимо (параллельно).
Типы данных: char
| string
AugmentationParameterSource
- Источник параметров увеличения'random'
(по умолчанию) | 'specify'
Источник параметров увеличения, заданный как 'random'
или 'specify'
.
'random'
- Алгоритмы увеличения применяются вероятностно с использованием параметра вероятности и параметра области значений.
Например, чтобы создать audioDataAugmenter
который применяет растяжение времени с помощью коэффициента скорости между 0.5
и 1.5
с вероятностью 60% введите в Командном окне следующее:
aug = audioDataAugmenter('AugmentationParameterSource','random', ... 'TimeStretchProbability',0.6, ... 'SpeedupFactorRange',[0.5,1.5]);
0.5
и максимум 1.5
.'specify'
- Алгоритмы увеличения применяются детерминированно с помощью логического параметра и заданного значения параметров. Например, чтобы создать audioDataAugmenter
который применяет растяжение времени с помощью 1.5
коэффициент ускорения со 100% вероятностью введите в Командном окне следующее:
aug = audioDataAugmenter('AugmentationParameterSource','specify', ... 'ApplyTimeStretch',true, ... 'SpeedupFactor',1.5);
Типы данных: char
| string
NumAugmentations
- Количество дополненных сигналов на выход1
(по умолчанию) | положительное целое числоКоличество дополненных сигналов на вывод, заданное как положительное целое число.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
TimeStretchProbability
- Вероятность применения временного растяжения0.5
(по умолчанию) | скаляром в области значений [0, 1]Вероятность применения временного растяжения, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1
применять время растяжения каждый раз, когда вы вызываете augment
. Установите вероятность в 0
чтобы пропустить время растяжения каждый раз, когда вы вызываете augment
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
и AugmentationMode, чтобы 'sequential'
.
Типы данных: single
| double
SpeedupFactorRange
- Область значений коэффициента скорости растяжения[0.8 1.2]
(по умолчанию) | двухэлементный вектор-строка положительных неразрешающих значенийОбласть значений коэффициента ускорения растяжения времени, заданный как двухэлементный вектор-строка положительных значений без сканирования.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyTimeStretch
- Применить временное растяжениеtrue
(по умолчанию) | false
Применить временное растяжение, заданное как true
или false
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Типы данных: logical
SpeedupFactor
- Коэффициент скорости растяжения по времени0.8
(по умолчанию) | действительная положительная скалярная величина | действительный положительный векторКоэффициент скорости растяжения времени, заданный как скаляр или вектор действительных положительных значений.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
PitchShiftProbability
- Вероятность применения сдвига тангажа0.5
(по умолчанию) | скаляром в области значений [0, 1]Вероятность применения сдвига тангажа, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1
применять смещение тангажа каждый раз, когда вы вызываете augment
. Установите вероятность в 0
чтобы пропустить смещение тангажа каждый раз, когда вы вызываете augment
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
и AugmentationMode, чтобы 'sequential'
.
Типы данных: single
| double
SemitoneShiftRange
- Область значений сдвига тангажа (полутоны)[-2,2]
(по умолчанию) | двухэлементный вектор-строка неотрицательных значенийОбласть значений сдвига тангажа в полутонах, заданная как двухэлементный вектор-строка недекретирующих значений.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyPitchShift
- Применить сдвиг тангажаtrue
(по умолчанию) | false
Применить сдвиг тангажа, заданный как true
или false
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Типы данных: logical
SemitoneShift
- Сдвиг тангажа (полутоны)-3
(по умолчанию) | действительный скаляр | вектор действительных чиселСдвиг тангажа в полутонах, заданный как действительный скаляр или вектор.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
VolumeControlProbability
- Вероятность применения регулирования объема0.5
(по умолчанию) | скаляром в области значений [0, 1]Вероятность применения регулирования объема, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1
применять регулирование громкости каждый раз при вызове augment
. Установите вероятность в 0
чтобы пропускать регулирование громкости каждый раз, когда вы вызываете augment
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
и AugmentationMode, чтобы 'sequential'
.
Типы данных: single
| double
VolumeGainRange
- Область значений усиления объема (дБ)[-3,3]
(по умолчанию) | двухэлементный вектор-строка неотрицательных значенийОбласть значений объемного усиления в дБ, заданная как двухэлементный вектор-строка недекретирующих значений.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyVolumeControl
- Применить коэффициент усиления объемаtrue
(по умолчанию) | false
Применить коэффициент усиления объема, заданный как true
или false
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Типы данных: logical
VolumeGain
- Коэффициент усиления объема (дБ)-3
(по умолчанию) | скалярный вектор |Объемный коэффициент усиления в дБ, заданный как скаляр или вектор.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
AddNoiseProbability
- Вероятность применения шумового сложения0.5
(по умолчанию) | скаляром в области значений [0, 1]Вероятность применения Гауссова сложения белого шума, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1
чтобы добавить шум каждый раз, когда вы звоните augment
. Установите вероятность в 0
чтобы пропустить добавление шума каждый раз, когда вы вызываете augment
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
и AugmentationMode, чтобы 'sequential'
.
Типы данных: single
| double
SNRRange
- Область значений сложения шума ОСШ (дБ)[0,10]
(по умолчанию) | двухэлементный вектор-строка неотрицательных значенийОбласть значений ОСШ суммирования шума в дБ, заданный как двухэлементный вектор-строка недекретируемых значений.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'range'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyAddNoise
- Применить добавление шумаtrue
(по умолчанию) | false
Применить сложение белого шума Гауссова, заданное как true
или false
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Типы данных: logical
SNR
- ОСШ сложения шума (дБ)5
(по умолчанию) | скалярный вектор |Сложение шума в дБ, заданный как скаляр или вектор.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
TimeShiftProbability
- Вероятность применения временного сдвига0.5
(по умолчанию) | скаляром в области значений [0, 1]Вероятность применения временного сдвига, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1
применять временную смену каждый раз, когда вы вызываете augment
. Установите значение свойства 0
чтобы пропустить перемещение времени каждый раз, когда вы вызываете augment
.
Сдвиг во времени применяет круговой сдвиг на аудио данных временной области.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
и AugmentationMode, чтобы 'sequential'
.
Типы данных: single
| double
TimeShiftRange
- Область значений временных сдвигов (сдвигов )[-5e-3,5e3]
(по умолчанию) | двухэлементный вектор-строку неразрешающих значений.Область значений временного сдвига в секундах, заданная как двухэлементный вектор-строка неразрешающих значений.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyTimeShift
- Применить временной сдвигtrue
(по умолчанию) | false
Применить временной сдвиг, заданный как true
или false
.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Сдвиг во времени применяет круговой сдвиг на аудио данных временной области.
Типы данных: logical
TimeShift
- Временные сдвиги (сдвиги ) (ы)5e-3
(по умолчанию) | скалярный вектор |Сдвиг времени в секундах, заданный как скаляр или вектор.
Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
addAugmentationMethod | Добавьте пользовательский метод увеличения |
removeAugmentationMethod | Удалите пользовательский метод увеличения |
augment | Увеличение звуковых данных |
setAugmenterParams | Установите параметры алгоритма увеличения |
getAugmenterParams | Получите параметры алгоритма увеличения |
Считывайте аудиосигнал и слушайте его.
[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]
Можно расширить возможности audioDataAugmenter
путем добавления пользовательских методов увеличения.
Считывайте аудиосигнал и слушайте его.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
sound(audioIn,fs)
Создайте audioDataAugmenter
объект. Установите вероятность применения белого шума в 0
.
augmenter = audioDataAugmenter('AddNoiseProbability',0)
augmenter = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' NumAugmentations: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 VolumeGainRange: [-3 3] AddNoiseProbability: 0 TimeShiftProbability: 0.5000 TimeShiftRange: [-0.0050 0.0050]
Задайте пользовательский алгоритм увеличения, который применяет розовый шум. The AddPinkNoise
алгоритм добавляется к augmenter
свойства.
algorithmName = 'AddPinkNoise'; algorithmHandle = @(x)x+pinknoise(size(x),'like',x); addAugmentationMethod(augmenter,algorithmName,algorithmHandle) augmenter
augmenter = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' NumAugmentations: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 VolumeGainRange: [-3 3] AddNoiseProbability: 0 TimeShiftProbability: 0.5000 TimeShiftRange: [-0.0050 0.0050] AddPinkNoiseProbability: 0.5000
Установите вероятность добавления розового шума равной 1
.
augmenter.AddPinkNoiseProbability = 1
augmenter = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' NumAugmentations: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 VolumeGainRange: [-3 3] AddNoiseProbability: 0 TimeShiftProbability: 0.5000 TimeShiftRange: [-0.0050 0.0050] AddPinkNoiseProbability: 1
Увеличьте исходный сигнал и прослушайте результат. Осмотрите параметры примененных алгоритмов увеличения.
data = augment(augmenter,audioIn,fs); sound(data.Audio{1},fs) data.AugmentationInfo(1)
ans = struct with fields:
SpeedupFactor: 1
SemitoneShift: 0
VolumeGain: 2.4803
TimeShift: -0.0022
AddPinkNoise: 'Applied'
Постройте график спектрограмм mel исходных и дополненных сигналов.
melSpectrogram(audioIn,fs)
title('Original Signal')
melSpectrogram(data.Audio{1},fs)
title('Augmented Signal')
The audioDataAugmenter
позволяет вам сконфигурировать увеличивающий конвейер как детерминированный или вероятностный с помощью свойства AugmentationParameterSource. Можно также принять решение применить увеличение последовательно или параллельно с помощью свойства AugmentationMode. В следующих разделах описываются трубопроводы, которые можно создать, и применимые свойства для каждой архитектуры.
Чтобы определить увеличение как последовательность вероятностно применяемых увеличений, установите AugmentationParameterSource на 'random'
и AugmentationMode, чтобы 'sequential'
.
Порядок применения дополнений всегда одинаковый. Если вы задаете пользовательские алгоритмы, они применяются в конце последовательности в том же порядке, в котором вы их задали.
В этом строении трубопровода применяются следующие параметры:
Метод увеличения | Параметры |
---|---|
Время растяжения | |
Переключение Тангажа | |
Управляйте объемом | |
Добавить шум | |
Время сдвига |
Если вы задаете NumAugmentations больше 1, то объект применяется NumAugmentations
параллельные случайные последовательные увеличения. Вероятность применения увеличения и значение любых параметров, которые вероятностно определены, являются независимыми.
Чтобы определить увеличение как последовательность детерминированно применяемых увеличений, установите AugmentationParameterSource на 'specify'
и AugmentationMode, чтобы 'sequential'
.
Порядок применения дополнений всегда одинаковый. Если вы задаете пользовательские алгоритмы, они применяются в конце последовательности в том же порядке, в котором вы их задали.
В этом строении трубопровода применяются следующие параметры:
Метод увеличения | Параметры |
---|---|
Время растяжения | |
Переключение Тангажа | |
Управляйте объемом | |
Добавить шум | |
Время сдвига |
Если вы задаете метод увеличения как вектор, то каждый элемент вектора создает отдельную ветвь в конвейере увеличения. Например, следующий объект создает конвейер увеличения, который приводит к четырем отдельным увеличениям:
aug = audioDataAugmenter("AugmentationMode","sequential", ... "AugmentationParameterSource","specify", ... "SpeedupFactor",[0.8,1.2], ... "VolumeGain",[-3,-1])
aug = audioDataAugmenter with properties: AugmentationMode: "sequential" AugmentationParameterSource: "specify" ApplyTimeStretch: 1 SpeedupFactor: [0.8000 1.2000] ApplyPitchShift: 1 SemitoneShift: -3 ApplyVolumeControl: 1 VolumeGain: [-3 -1] ApplyAddNoise: 1 SNR: 5 ApplyTimeShift: 1 TimeShift: 0.0050
Чтобы определить свое увеличение как независимо применяемые увеличения с случайным образом определенными параметрами, установите AugmentationParameterSource на 'random'
и AugmentationMode, чтобы 'independent'
.
В этом строении трубопровода применяются следующие параметры:
Метод увеличения | Параметры |
---|---|
Время растяжения | |
Переключение Тангажа | |
Управляйте объемом | |
Добавить шум | |
Время сдвига |
Если вы задаете NumAugmentations больше 1, то объект применяется NumAugmentations
параллельные случайные независимые увеличения. Значение любых параметров, которые определяются вероятностно, являются независимыми.
Чтобы определить свое увеличение как детерминированно применяемые независимые увеличения с детерминированными параметрами, установите AugmentationParameterSource на 'specify'
и AugmentationMode, чтобы 'independent'
.
В этом строении трубопровода применяются следующие параметры:
Метод увеличения | Параметры |
---|---|
Время растяжения | |
Переключение Тангажа | |
Управляйте объемом | |
Добавить шум | |
Время сдвига |
Если вы задаете метод увеличения как вектор, то каждый элемент вектора создает отдельную ветвь в конвейере увеличения. Например, следующий объект создает конвейер увеличения, который приводит к семи отдельным увеличениям:
aug = audioDataAugmenter("AugmentationMode","independent", ... "AugmentationParameterSource","specify", ... "SpeedupFactor",[0.8,1.2], ... "VolumeGain",[-3,-1])
aug = audioDataAugmenter with properties: AugmentationMode: "independent" AugmentationParameterSource: "specify" ApplyTimeStretch: 1 SpeedupFactor: [0.8000 1.2000] ApplyPitchShift: 1 SemitoneShift: -3 ApplyVolumeControl: 1 VolumeGain: [-3 -1] ApplyAddNoise: 1 SNR: 5 ApplyTimeShift: 1 TimeShift: 0.0050
[1] Саламон, Джастин и Хуан Пабло Белло. Глубокие сверточные нейронные сети и увеличение данных для классификации экологического звука. Буквы обработки сигналов IEEE. Том 24, Выпуск 3, 2017.
audioFeatureExtractor
| audioTimeScaler
| shiftPitch
| stretchAudio
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.