Увеличьте аудиоданные
Увеличьте свой аудио набор данных с помощью аудио специфичных методов увеличения как перемена подачи, модификация масштаба времени, смещение во времени, шумовое сложение и регулятор громкости. Можно создать расположенный каскадом или найти что-либо подобное конвейерам увеличения, чтобы применить несколько алгоритмов детерминировано или вероятностно.
создает объект увеличения аудиоданных со значениями свойств по умолчанию.aug
= audioDataAugmenter()
задает свойства не по умолчанию для aug
= audioDataAugmenter(Name,Value
)aug
использование одного или нескольких аргументов пары "имя-значение".
AugmentationMode
— Режим Augmentation'sequential'
(значение по умолчанию) | 'independent'
Режим Augmentation в виде '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
— Количество увеличенных сигналов вывести
(значение по умолчанию) | положительное целое числоКоличество увеличенных сигналов вывести в виде положительного целого числа.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
TimeStretchProbability
— Вероятность применения фрагмента времени
(значение по умолчанию) | скаляр в области значений [0, 1]Вероятность применения времени простирается в виде скаляра в области значений [0, 1]. Установите вероятность на 1
чтобы применить время, простираясь каждый раз, вы вызываете augment
. Установите вероятность на 0
чтобы пропустить время, простираясь каждый раз, вы вызываете augment
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
и AugmentationMode к 'sequential'
.
Типы данных: single
| double
SpeedupFactorRange
— Область значений времени расширяет фактор ускорения
(значение по умолчанию) | двухэлементный вектор-строка из положительных неуменьшающихся значенийОбласть значений времени расширяет фактор ускорения в виде двухэлементного вектора-строки из положительных неуменьшающихся значений.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyTimeStretch
— Примените фрагмент времениtrue
(значение по умолчанию) | false
Примените фрагмент времени в виде true
или false
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'specify'
.
Типы данных: логический
SpeedupFactor
— Фактор ускорения фрагмента времени
(значение по умолчанию) | действительная положительная скалярная величина | действительный положительный векторФактор ускорения фрагмента времени в виде скаляра или вектора из действительных положительных значений.
Чтобы включить это свойство, установите AugmentationParameterSource на 'specify'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
PitchShiftProbability
— Вероятность применения сдвига подачи
(значение по умолчанию) | скаляр в области значений [0, 1]Вероятность применения подачи переключает в виде скаляра в области значений [0, 1]. Установите вероятность на 1
чтобы применить подачу, переключающую каждый раз, вы вызываете augment
. Установите вероятность на 0
чтобы пропустить подачу, переключающую каждый раз, вы вызываете augment
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
и AugmentationMode к 'sequential'
.
Типы данных: single
| double
SemitoneShiftRange
— Область значений сдвига подачи (полутоны)
(значение по умолчанию) | двухэлементный вектор-строка из неуменьшающихся значенийОбласть значений подачи переключает полутоны на нижний регистр в виде двухэлементного вектора-строки из неуменьшающихся значений.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyPitchShift
— Примените сдвиг подачиtrue
(значение по умолчанию) | false
Примените сдвиг подачи в виде true
или false
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'specify'
.
Типы данных: логический
SemitoneShift
— Передайте сдвиг (полутоны)
(значение по умолчанию) | действительный скаляр | вектор действительных чиселПодача переключает полутоны на нижний регистр в виде действительного скаляра или вектора.
Чтобы включить это свойство, установите AugmentationParameterSource на 'specify'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
VolumeControlProbability
— Вероятность применения регулятора громкости
(значение по умолчанию) | скаляр в области значений [0, 1]Вероятность применения регулятора громкости в виде скаляра в области значений [0, 1]. Установите вероятность на 1
чтобы применить регулятор громкости каждый раз, вы вызываете augment
. Установите вероятность на 0
чтобы пропустить регулятор громкости каждый раз, вы вызываете augment
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
и AugmentationMode к 'sequential'
.
Типы данных: single
| double
VolumeGainRange
— Область значений усиления объема (дБ)
(значение по умолчанию) | двухэлементный вектор-строка из неуменьшающихся значенийОбласть значений объема получает в дБ в виде двухэлементного вектора-строки из неуменьшающихся значений.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyVolumeControl
— Примените усиление объемаtrue
(значение по умолчанию) | false
Примените усиление объема в виде true
или false
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'specify'
.
Типы данных: логический
VolumeGain
— Усиление объема (дБ)
(значение по умолчанию) | скаляр | векторУсиление объема в дБ в виде скаляра или вектора.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
AddNoiseProbability
— Вероятность применения шумового сложения
(значение по умолчанию) | скаляр в области значений [0, 1]Вероятность применения Гауссова белого шумового сложения в виде скаляра в области значений [0, 1]. Установите вероятность на 1
чтобы добавить шум каждый раз, вы вызываете augment
. Установите вероятность на 0
чтобы пропустить добавляющий шум каждый раз, вы вызываете augment
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'random'
и AugmentationMode к 'sequential'
.
Типы данных: single
| double
SNRRange
— Область значений шумового ОСШ сложения (дБ)
(значение по умолчанию) | двухэлементный вектор-строка из неуменьшающихся значенийОбласть значений шумового ОСШ сложения в дБ в виде двухэлементного вектора-строки из неуменьшающихся значений.
Чтобы включить это свойство, установите AugmentationParameterSource на 'range'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ApplyAddNoise
— Примените шумовое сложениеtrue
(значение по умолчанию) | false
Примените Гауссово белое шумовое сложение в виде true
или false
.
Чтобы включить это свойство, установите AugmentationParameterSource на 'specify'
.
Типы данных: логический
SNR
— Шумовой ОСШ сложения (дБ)
(значение по умолчанию) | скаляр | векторШумовой ОСШ сложения в дБ в виде скаляра или вектора.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
TimeShiftProbability
— Вероятность применения временного сдвига
(значение по умолчанию) | скаляр в области значений [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'
.
Сдвиг времени применяет циклический сдвиг на аудиоданные временного интервала.
Типы данных: логический
TimeShift
— Временной сдвиг (сдвиги)5e-3
(значение по умолчанию) | скаляр | векторВременной сдвиг в секундах в виде скаляра или вектора.
Чтобы включить это свойство, установите AugmentationParameterSource на 'specify'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
addAugmentationMethod | Добавьте пользовательский метод увеличения |
removeAugmentationMethod | Удалите пользовательский метод увеличения |
augment | Увеличьте аудиоданные |
Читайте в звуковом сигнале и слушайте его.
[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;
data.AugmentationInfo (augmentationToInspect)
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;
data.AugmentationInfo (augmentationToInspect)
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 {augmentationToInspect}
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 {augmentationToInspect}
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)")
audioDataAugmenter
поддержки несколько рабочих процессов для увеличения вашего datastore, включая:
Оффлайновое увеличение
Увеличение с помощью длинных массивов
Увеличение с помощью преобразовывает хранилища данных
В каждом рабочем процессе начните путем создания аудио datastore, чтобы указать на аудиоданные. В этом примере вы создаете аудио 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
Увеличьтесь Используя длинные массивы
При увеличении набора данных с помощью длинных массивов входные данные к увеличению должны быть произведены на сопоставимом уровне. Подмножество исходный аудио набор данных, чтобы только включать файлы с частотой дискретизации 44,1 кГц. Большинство наборов данных уже убрано, чтобы иметь сопоставимую частоту дискретизации.
keepFile = cellfun(@(x)contains(x,'44p1'),ADS.Files);
ads44p1 = subset(ADS,keepFile);
fs = 44.1e3;
Преобразуйте аудио datastore в длинный массив. tall
массивы оценены только, когда вы запрашиваете их явным образом использование gather
. MATLAB® автоматически оптимизирует вычисления в очереди путем минимизации количества проходов через данные. Если у вас есть Parallel Computing Toolbox™, можно распространить вычисления через несколько машин. Аудиоданные представлены как высокий массив ячеек M-1, где M является количеством файлов в аудио 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-1 массив ячеек, где numFiles является количеством файлов в datastore. Каждым элементом массива ячеек является numAugmentationsPerFile-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]
Задайте пользовательский алгоритм увеличения, который применяет розовый шум. 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')
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] Salamon, Джастин и Хуан Пабло Белло. "Глубокие сверточные нейронные сети и увеличение данных для экологической звуковой классификации". Буквы обработки сигналов IEEE. Издание 24, выпуск 3, 2017.
audioFeatureExtractor
| audioTimeScaler
| shiftPitch
| stretchAudio
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.