audioDataAugmenter

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

Описание

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

Создание

Описание

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

пример

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

Свойства

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

Конвейер увеличения

Режим Augmentation, заданный как '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'.

Типы данных: логический

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

Зависимости

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

Типы данных: логический

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

Зависимости

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

Типы данных: логический

Усиление объема в дБ, заданном как скаляр или вектор.

Типы данных: 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'.

Типы данных: логический

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

Типы данных: 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'.

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

Типы данных: логический

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

Зависимости

Чтобы включить это свойство, установите 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;
данные. (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 увеличения. Увеличения представляют каждую комбинацию заданных параметров увеличения (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;
данные. (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;
данные.
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;
данные.
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
    {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. Следующие разделы описывают конвейеры, которые можно создать и применимые свойства для каждой архитектуры.

Ссылки

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

Введенный в R2019b

Для просмотра документации необходимо авторизоваться на сайте