Увеличение аудиоданных
Увеличьте свой набор аудиоданных, используя специальные методы увеличения звука, такие как сдвиг основного тона, изменение масштаба времени, сдвиг времени, добавление шума и контроль громкости. Можно создать каскадные или параллельные конвейеры увеличения для применения нескольких алгоритмов детерминированно или вероятностно.
создает объект увеличения аудиоданных со значениями свойств по умолчанию.aug = audioDataAugmenter()
задает свойства по умолчанию для 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 (по умолчанию) | положительное целое числоКоличество дополненных сигналов на выходе, указанное как положительное целое число.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
TimeStretchProbability - Вероятность применения временного растяжения0.5 (по умолчанию) | скаляр в диапазоне [0, 1]Вероятность применения временного растяжения, заданного как скаляр в диапазоне [0, 1]. Установить вероятность на 1 применение растяжения времени при каждом вызове augment. Установить вероятность на 0 пропускать время растяжения при каждом вызове augment.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.
Типы данных: single | double
SpeedupFactorRange - Диапазон коэффициента ускорения растяжения времени[0.8 1.2] (по умолчанию) | двухэлементный вектор строк положительных значений без возрастанияДиапазон коэффициента ускорения растяжения времени, определяемый как двухэлементный вектор строки положительных значений без возрастания.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ApplyTimeStretch - Применить растяжение времениtrue (по умолчанию) | falseПрименить растяжение времени, указанное как true или false.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'specify'.
Типы данных: logical
SpeedupFactor - Коэффициент ускорения растяжения времени0.8 (по умолчанию) | действительный положительный скаляр | действительный положительный векторКоэффициент ускорения растяжения времени, заданный как скаляр или вектор действительных положительных значений.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'specify'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
PitchShiftProbability - Вероятность применения сдвига тангажа0.5 (по умолчанию) | скаляр в диапазоне [0, 1]Вероятность применения сдвига основного тона, заданного как скаляр в диапазоне [0, 1]. Установить вероятность на 1 применение смещения основного тона при каждом вызове augment. Установить вероятность на 0 пропускать смещение основного тона при каждом вызове augment.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.
Типы данных: single | double
SemitoneShiftRange - Диапазон сдвига тангажа (полутоны)[-2,2] (по умолчанию) | двухэлементный вектор строк недекрессирующих значенийДиапазон сдвига основного тона в полутонах, определяемый как двухэлементный вектор строк недекрессирующих значений.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ApplyPitchShift - Применить сдвиг шагаtrue (по умолчанию) | falseПрименить сдвиг шага, указанный как true или false.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'specify'.
Типы данных: logical
SemitoneShift - Сдвиг шага (полутоны)-3 (по умолчанию) | вещественный скаляр | реальный векторСдвиг шага в полутонах, заданный как действительный скаляр или вектор.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'specify'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
VolumeControlProbability - Вероятность применения контроля громкости0.5 (по умолчанию) | скаляр в диапазоне [0, 1]Вероятность применения регулировки громкости, заданной как скаляр в диапазоне [0, 1]. Установить вероятность на 1 применять регулятор громкости при каждом вызове augment. Установить вероятность на 0 пропускать регулятор громкости при каждом вызове augment.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.
Типы данных: single | double
VolumeGainRange - Диапазон усиления громкости (дБ)[-3,3] (по умолчанию) | двухэлементный вектор строк недекрессирующих значенийДиапазон усиления громкости в дБ, задаваемый в виде двухэлементного вектора строк значений, не подвергающихся возрастанию.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ApplyVolumeControl - Применить коэффициент усиления громкостиtrue (по умолчанию) | falseПрименить коэффициент усиления громкости, указанный как true или false.
Чтобы включить это свойство, задайте для AugingParameterSource значение '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.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.
Типы данных: single | double
SNRRange - Диапазон SNR добавления шума (дБ)[0,10] (по умолчанию) | двухэлементный вектор строк недекрессирующих значенийДиапазон SNR суммирования шумов в дБ, задаваемый как двухэлементный вектор строк значений, не подвергающихся повторению.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'range'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ApplyAddNoise - Применить добавление шумаtrue (по умолчанию) | falseПрименение гауссова добавления белого шума, указанного как true или false.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'specify'.
Типы данных: logical
SNR - SNR добавления шума (дБ)5 (по умолчанию) | скаляр | векторSNR добавления шума в дБ, заданный как скаляр или вектор.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
TimeShiftProbability - Вероятность применения временного сдвига0.5 (по умолчанию) | скаляр в диапазоне [0, 1]Вероятность применения временного сдвига, заданного как скаляр в диапазоне [0, 1]. Установить вероятность на 1 применение сдвига времени при каждом вызове augment. Задайте свойству значение 0 пропускать сдвиг времени при каждом вызове augment.
Сдвиг времени применяет циклический сдвиг к аудиоданным временной области.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.
Типы данных: single | double
TimeShiftRange - Диапазон временных сдвигов[-5e-3,5e3] (по умолчанию) | двухэлементный вектор строк значений без возрастания.Диапазон временного сдвига в секундах, определяемый как двухэлементный вектор строки значений, не подвергающихся возрастанию.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'random'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ApplyTimeShift - Применить смену времениtrue (по умолчанию) | falseПрименить сдвиг во времени, указанный как true или false.
Чтобы включить это свойство, задайте для AugingParameterSource значение 'specify'.
Сдвиг времени применяет циклический сдвиг к аудиоданным временной области.
Типы данных: logical
TimeShift - Сдвиг во времени5e-3 (по умолчанию) | скаляр | векторСдвиг времени в секундах, заданный как скаляр или вектор.
Чтобы включить это свойство, задайте для AugingParameterSource значение '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;
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. Укажите SNR с повреждением шума как 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 дополнений. Дополнения представляют собой каждую комбинацию заданных параметров увеличения (2 = 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 объект, применяющий искажение шума и сдвиг времени в параллельных ветвях. Для ветви повреждения шума случайным образом примените шум с SNR в диапазоне 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 поддерживает несколько рабочих процессов для расширения хранилища данных, включая:
Автономное увеличение
Увеличение с помощью массивов tall
Увеличение с помощью хранилищ данных преобразования
В каждом рабочем процессе сначала создайте хранилище аудиоданных для указания на аудиоданные. В этом примере создается хранилище аудиоданных, указывающее на аудиоотборы, включенные в 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
Увеличение с помощью массивов Tal
При увеличении набора данных с использованием массивов tall входные данные в augmenter должны выбираться с согласованной скоростью. Поднабор исходного набора аудиоданных включает только файлы с частотой дискретизации 44,1 кГц. Большинство наборов данных уже очищено, чтобы иметь согласованную частоту выборки.
keepFile = cellfun(@(x)contains(x,'44p1'),ADS.Files);
ads44p1 = subset(ADS,keepFile);
fs = 44.1e3;Преобразование хранилища аудиоданных в массив высокого уровня. tall массивы вычисляются только при явном запросе с использованием gather. MATLAB ® автоматически оптимизирует вычисления в очереди, минимизируя количество проходов через данные. При наличии Toolbox™ параллельных вычислений можно распределить вычисления по нескольким машинам. Аудиоданные представлены в виде массива ячеек M-by-1 высокого уровня, где М - количество файлов в хранилище аудиоданных.
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 - количество файлов в хранилище данных. Каждый элемент массива ячеек является таблицей numAugmentationsPerFile-by-2, где numAugmentationPerFile - количество дополнений, возвращаемых на файл.
numFiles = numel(augmentedDataset)
numFiles = 12
numAugmentationsPerFile = size(augmentedDataset{1},1)numAugmentationsPerFile = 2
Увеличение с помощью хранилища данных преобразования
При обучении приложения машинного обучения с помощью хранилища данных преобразования можно выполнять оперативное увеличение данных. Звонить transform для создания нового хранилища данных, которое применяет увеличение данных при чтении.
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 для возврата дополненного первого файла из хранилища данных преобразования.
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'
Постройте график спектрограмм исходных и дополненных сигналов.
melSpectrogram(audioIn,fs)
title('Original Signal')
melSpectrogram(data.Audio{1},fs)
title('Augmented Signal')
audioDataAugmenter объект позволяет настроить конвейер дополнений как детерминированный или вероятностный с помощью свойства AugingParameterSource. Можно также применить дополнения последовательно или параллельно с помощью свойства AugesedMode. В следующих разделах описаны трубопроводы, которые можно создать, и применимые свойства для каждой архитектуры.
Чтобы определить увеличение как последовательность вероятностно применяемых дополнений, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.
Порядок применения дополнений всегда одинаков. Если заданы пользовательские алгоритмы, они применяются в конце последовательности в указанном порядке.

В этой конфигурации трубопровода применяются следующие параметры:
| Метод увеличения | Параметры |
|---|---|
| Время растяжения | |
| Шаг сдвига | |
| Контрольный объем | |
| Добавить шум | |
| Время смены |
Если задано значение NumAugmentations больше 1, применяется объект NumAugmentations параллельные случайные последовательные увеличения. Вероятность применения увеличения и значение любых параметров, которые вероятностно определены, независимы.

Чтобы определить увеличение как последовательность детерминированно примененных дополнений, задайте для AugingParameterSource значение 'specify' и режим AugtedMode для '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
Чтобы определить увеличение как независимо примененные дополнения со случайным образом определенными параметрами, задайте для AugenParameterSource значение 'random' и режим AugtedMode для 'independent'.

В этой конфигурации трубопровода применяются следующие параметры:
| Метод увеличения | Параметры |
|---|---|
| Время растяжения | |
| Шаг сдвига | |
| Контрольный объем | |
| Добавить шум | |
| Время смены |
Если задано значение NumAugmentations больше 1, применяется объект NumAugmentations параллельные случайные независимые увеличения. Значения любых вероятностно определяемых параметров независимы.

Чтобы определить увеличение как детерминированно примененные независимые дополнения с детерминированными параметрами, задайте для AugingParameterSource значение 'specify' и режим AugtedMode для '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.