audioDataAugmenter

Увеличение звуковых данных

Описание

Увеличьте аудио набора данных с помощью специфичных для аудио методов увеличения, таких как перемена тангажа, изменение шкалы времени, смещение времени, шумовое сложение и регулирование громкости. Можно создать каскадные или параллельные трубопроводы увеличения для применения нескольких алгоритмов детерминированно или вероятностно.

Создание

Описание

aug = audioDataAugmenter() создает объект audio data augmenter со значениями свойств по умолчанию.

пример

aug = audioDataAugmenter(Name,Value) задает свойства nondefault для aug использование одного или нескольких аргументов пары "имя-значение".

Свойства

расширить все

Трубопровод увеличения

Режим увеличения, заданный как 'sequential' или 'independent'.

  • 'sequential' - Алгоритмы увеличения применяются последовательно (последовательно).

  • 'independent' - Алгоритмы увеличения применяются независимо (параллельно).

Типы данных: char | string

Источник параметров увеличения, заданный как 'random' или 'specify'.

  • 'random' - Алгоритмы увеличения применяются вероятностно с использованием параметра вероятности и параметра области значений.

    Например, чтобы создать audioDataAugmenter который применяет растяжение времени с помощью коэффициента скорости между 0.5 и 1.5 с вероятностью 60% введите в Командном окне следующее:

    aug = audioDataAugmenter('AugmentationParameterSource','random', ...
                             'TimeStretchProbability',0.6, ...
                             'SpeedupFactorRange',[0.5,1.5]);
    Когда применяется растяжение во времени, коэффициент ускорения рисуется из равномерного распределения с центром 1 (среднее значение области значений) с минимумом 0.5 и максимум 1.5.

  • 'specify' - Алгоритмы увеличения применяются детерминированно с помощью логического параметра и заданного значения параметров. Например, чтобы создать audioDataAugmenter который применяет растяжение времени с помощью 1.5 коэффициент ускорения со 100% вероятностью введите в Командном окне следующее:

    aug = audioDataAugmenter('AugmentationParameterSource','specify', ...
                             'ApplyTimeStretch',true, ...
                             'SpeedupFactor',1.5);

Типы данных: char | string

Количество дополненных сигналов на вывод, заданное как положительное целое число.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Время растяжения

Вероятность применения временного растяжения, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1 применять время растяжения каждый раз, когда вы вызываете augment. Установите вероятность в 0 чтобы пропустить время растяжения каждый раз, когда вы вызываете augment.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random' и AugmentationMode, чтобы 'sequential'.

Типы данных: single | double

Область значений коэффициента ускорения растяжения времени, заданный как двухэлементный вектор-строка положительных значений без сканирования.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Применить временное растяжение, заданное как true или false.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'.

Типы данных: logical

Коэффициент скорости растяжения времени, заданный как скаляр или вектор действительных положительных значений.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Переключение Тангажа

Вероятность применения сдвига тангажа, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1 применять смещение тангажа каждый раз, когда вы вызываете augment. Установите вероятность в 0 чтобы пропустить смещение тангажа каждый раз, когда вы вызываете augment.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random' и AugmentationMode, чтобы 'sequential'.

Типы данных: single | double

Область значений сдвига тангажа в полутонах, заданная как двухэлементный вектор-строка недекретирующих значений.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Применить сдвиг тангажа, заданный как true или false.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'.

Типы данных: logical

Сдвиг тангажа в полутонах, заданный как действительный скаляр или вектор.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Управляйте объемом

Вероятность применения регулирования объема, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1 применять регулирование громкости каждый раз при вызове augment. Установите вероятность в 0 чтобы пропускать регулирование громкости каждый раз, когда вы вызываете augment.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random' и AugmentationMode, чтобы 'sequential'.

Типы данных: single | double

Область значений объемного усиления в дБ, заданная как двухэлементный вектор-строка недекретирующих значений.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Применить коэффициент усиления объема, заданный как true или false.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'.

Типы данных: logical

Объемный коэффициент усиления в дБ, заданный как скаляр или вектор.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Добавить шум

Вероятность применения Гауссова сложения белого шума, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1 чтобы добавить шум каждый раз, когда вы звоните augment. Установите вероятность в 0 чтобы пропустить добавление шума каждый раз, когда вы вызываете augment.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random' и AugmentationMode, чтобы 'sequential'.

Типы данных: single | double

Область значений ОСШ суммирования шума в дБ, заданный как двухэлементный вектор-строка недекретируемых значений.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'range'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Применить сложение белого шума Гауссова, заданное как true или false.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'.

Типы данных: logical

Сложение шума в дБ, заданный как скаляр или вектор.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Время сдвига

Вероятность применения временного сдвига, заданная как скаляр в области значений [0, 1]. Установите вероятность в 1 применять временную смену каждый раз, когда вы вызываете augment. Установите значение свойства 0 чтобы пропустить перемещение времени каждый раз, когда вы вызываете augment.

Сдвиг во времени применяет круговой сдвиг на аудио данных временной области.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random' и AugmentationMode, чтобы 'sequential'.

Типы данных: single | double

Область значений временного сдвига в секундах, заданная как двухэлементный вектор-строка неразрешающих значений.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'random'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Применить временной сдвиг, заданный как true или false.

Зависимости

Чтобы включить это свойство, установите значение AugmentationParameterSource на 'specify'.

Сдвиг во времени применяет круговой сдвиг на аудио данных временной области.

Типы данных: logical

Сдвиг времени в секундах, заданный как скаляр или вектор.

Зависимости

Чтобы включить это свойство, установите значение 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)")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

Считывайте аудиосигнал и слушайте его.

[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 увеличения. Увеличение представляет каждую комбинацию заданных параметров увеличения (3×4×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;
Данные .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)")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

Считывайте аудиосигнал и слушайте его.

[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)")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

Считывайте аудиосигнал и слушайте его.

[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)")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

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')

Figure contains an axes. The axes with title Original Signal contains an object of type image.

melSpectrogram(data.Audio{1},fs)
title('Augmented Signal')

Figure contains an axes. The axes with title Augmented Signal contains an object of type image.

Алгоритмы

расширить все

The audioDataAugmenter позволяет вам сконфигурировать увеличивающий конвейер как детерминированный или вероятностный с помощью свойства AugmentationParameterSource. Можно также принять решение применить увеличение последовательно или параллельно с помощью свойства AugmentationMode. В следующих разделах описываются трубопроводы, которые можно создать, и применимые свойства для каждой архитектуры.

Ссылки

[1] Саламон, Джастин и Хуан Пабло Белло. Глубокие сверточные нейронные сети и увеличение данных для классификации экологического звука. Буквы обработки сигналов IEEE. Том 24, Выпуск 3, 2017.

Введенный в R2019b