exponenta event banner

audioDataAugmenter

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

Описание

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

Создание

Описание

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

пример

aug = audioDataAugmenter(Name,Value) задает свойства по умолчанию для 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

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

Зависимости

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

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

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

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

Зависимости

Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.

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

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

Зависимости

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

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

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

Зависимости

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

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

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

Зависимости

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

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

Шаг сдвига

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

Зависимости

Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.

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

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

Зависимости

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

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

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

Зависимости

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

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

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

Зависимости

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

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

Контрольный объем

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

Зависимости

Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.

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

Диапазон усиления громкости в дБ, задаваемый в виде двухэлементного вектора строк значений, не подвергающихся возрастанию.

Зависимости

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

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

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

Зависимости

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

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

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

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

Добавить шум

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

Зависимости

Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.

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

Диапазон SNR суммирования шумов в дБ, задаваемый как двухэлементный вектор строк значений, не подвергающихся повторению.

Зависимости

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

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

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

Зависимости

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

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

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

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

Время смены

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

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

Зависимости

Чтобы включить это свойство, задайте для AugingParameterSource значение 'random' и режим AugtedMode для 'sequential'.

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

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

Зависимости

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

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

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

Зависимости

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

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

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

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

Зависимости

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

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

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 объект, применяющий искажение шума и сдвиг времени в параллельных ветвях. Для ветви повреждения шума случайным образом примените шум с 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)")

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

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

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

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.

Алгоритмы

развернуть все

audioDataAugmenter объект позволяет настроить конвейер дополнений как детерминированный или вероятностный с помощью свойства AugingParameterSource. Можно также применить дополнения последовательно или параллельно с помощью свойства AugesedMode. В следующих разделах описаны трубопроводы, которые можно создать, и применимые свойства для каждой архитектуры.

Ссылки

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

Представлен в R2019b