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Увеличьте аудиоданные
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 object. The axes object 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;
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 object. The axes object 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 {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 object. The axes object 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 object. The axes object contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

audioDataAugmenter поддержки несколько рабочих процессов для увеличения вашего datastore, включая:

  • Оффлайновое увеличение

  • Увеличение с помощью длинных массивов

  • Увеличение с помощью преобразовывает хранилища данных

В каждом рабочем процессе начните путем создания аудио datastore, чтобы указать на аудиоданные. В этом примере вы создаете аудио datastore, который указывает на аудиосэмплы, включенные с Audio Toolbox™. Считайте количество файлов в наборе данных.

folder = fullfile(matlabroot,"toolbox","audio","samples");
ADS = audioDatastore(folder)
ADS = 
  audioDatastore with properties:

                       Files: {
                              ' ...\matlab\toolbox\audio\samples\Ambiance-16-44p1-mono-12secs.wav';
                              ' ...\matlab\toolbox\audio\samples\AudioArray-16-16-4channels-20secs.wav';
                              ' ...\toolbox\audio\samples\ChurchImpulseResponse-16-44p1-mono-5secs.wav'
                               ... and 26 more
                              }
    AlternateFileSystemRoots: {}
              OutputDataType: 'double'
                      Labels: {}

numFilesInDataset = numel(ADS.Files)
numFilesInDataset = 29

Создайте audioDataAugmenter это применяет случайные последовательные увеличения. Установите NumAugmentations к 2.

aug = audioDataAugmenter('NumAugmentations',2)
aug = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 2
         TimeStretchProbability: 0.5000
             SpeedupFactorRange: [0.8000 1.2000]
          PitchShiftProbability: 0.5000
             SemitoneShiftRange: [-2 2]
       VolumeControlProbability: 0.5000
                VolumeGainRange: [-3 3]
            AddNoiseProbability: 0.5000
                       SNRRange: [0 10]
           TimeShiftProbability: 0.5000
                 TimeShiftRange: [-0.0050 0.0050]

Оффлайновое увеличение

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

while hasdata(ADS)
    [audioIn,info] = read(ADS);
    
    data = augment(aug,audioIn,info.SampleRate);
    
    [~,fn] = fileparts(info.FileName);
    for i = 1:size(data,1)
        augmentedAudio = data.Audio{i};
        
        % If augmentation caused an audio signal to have values outside of -1 and 1, 
        % normalize the audio signal to avoid clipping when writing.
        if max(abs(augmentedAudio),[],'all')>1
            augmentedAudio = augmentedAudio/max(abs(augmentedAudio),[],'all');
        end
        
        audiowrite(sprintf('%s_aug%d.wav',fn,i),augmentedAudio,info.SampleRate)
    end
end

Создайте audioDatastore это указывает на увеличенный набор данных, и подтвердите, что количество файлов в наборе данных удваивает исходное количество файлов.

augmentedADS = audioDatastore(pwd)
augmentedADS = 
  audioDatastore with properties:

                       Files: {
                              ' ...\Examples\audio-ex28074079\Ambiance-16-44p1-mono-12secs_aug1.wav';
                              ' ...\Examples\audio-ex28074079\Ambiance-16-44p1-mono-12secs_aug2.wav';
                              ' ...\Examples\audio-ex28074079\AudioArray-16-16-4channels-20secs_aug1.wav'
                               ... and 55 more
                              }
    AlternateFileSystemRoots: {}
              OutputDataType: 'double'
                      Labels: {}

numFilesInAugmentedDataset = numel(augmentedADS.Files)
numFilesInAugmentedDataset = 58

Увеличьтесь Используя длинные массивы

При увеличении набора данных с помощью длинных массивов входные данные к увеличению должны быть произведены на сопоставимом уровне. Подмножество исходный аудио набор данных, чтобы только включать файлы с частотой дискретизации 44,1 кГц. Большинство наборов данных уже убрано, чтобы иметь сопоставимую частоту дискретизации.

keepFile = cellfun(@(x)contains(x,'44p1'),ADS.Files);
ads44p1 = subset(ADS,keepFile);
fs = 44.1e3;

Преобразуйте аудио datastore в длинный массив. tall массивы оценены только, когда вы запрашиваете их явным образом использование gather. MATLAB® автоматически оптимизирует вычисления в очереди путем минимизации количества проходов через данные. Если у вас есть Parallel Computing Toolbox™, можно распространить вычисления через несколько машин. Аудиоданные представлены как высокий массив ячеек M-1, где M является количеством файлов в аудио datastore.

adsTall = tall(ads44p1)
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

adsTall =

  M×1 tall cell array

    { 539648×1 double}
    { 227497×1 double}
    {   8000×1 double}
    { 685056×1 double}
    { 882688×2 double}
    {1115760×2 double}
    { 505200×2 double}
    {3195904×2 double}
        :         :
        :         :

Задайте cellfun функционируйте так, чтобы увеличение было применено к каждой ячейке длинного массива. Вызовите gather оценивать длинный массив.

augTall = cellfun(@(x)augment(aug,x,fs),adsTall,"UniformOutput",false);
augmentedDataset = gather(augTall)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1 min 34 sec
Evaluation completed in 1 min 34 sec
augmentedDataset=12×1 cell array
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}
    {2×2 table}

Увеличенный набор данных возвращен как numFiles-1 массив ячеек, где numFiles является количеством файлов в datastore. Каждым элементом массива ячеек является numAugmentationsPerFile-2 таблица, где numAugmentationsPerFile является количеством увеличений, возвращенных на файл.

numFiles = numel(augmentedDataset)
numFiles = 12
numAugmentationsPerFile = size(augmentedDataset{1},1)
numAugmentationsPerFile = 2

Увеличьтесь Используя, преобразовывают Datastore

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

transformADS = transform(ADS,@(x,info)augment(aug,x,info),'IncludeInfo',true)
transformADS = 
  TransformedDatastore with properties:

    UnderlyingDatastore: [1×1 audioDatastore]
             Transforms: {@(x,info)augment(aug,x,info)}
            IncludeInfo: 1

Вызовите read возвратить увеличенный первый файл в datastore преобразования.

augmentedRead = read(transformADS)
augmentedRead=2×2 table
          Audio          AugmentationInfo
    _________________    ________________

    {539648×1 double}      [1×1 struct]  
    {586683×1 double}      [1×1 struct]  

Можно расширить возможности audioDataAugmenter путем добавления пользовательских методов увеличения.

Читайте в звуковом сигнале и слушайте его.

[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
sound(audioIn,fs)

Создайте audioDataAugmenter объект. Установите вероятность применения белого шума к 0.

augmenter = audioDataAugmenter('AddNoiseProbability',0)
augmenter = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 1
         TimeStretchProbability: 0.5000
             SpeedupFactorRange: [0.8000 1.2000]
          PitchShiftProbability: 0.5000
             SemitoneShiftRange: [-2 2]
       VolumeControlProbability: 0.5000
                VolumeGainRange: [-3 3]
            AddNoiseProbability: 0
           TimeShiftProbability: 0.5000
                 TimeShiftRange: [-0.0050 0.0050]

Задайте пользовательский алгоритм увеличения, который применяет розовый шум. AddPinkNoise алгоритм добавляется к augmenter свойства.

algorithmName = 'AddPinkNoise';
algorithmHandle = @(x)x+pinknoise(size(x),'like',x);
addAugmentationMethod(augmenter,algorithmName,algorithmHandle)

augmenter
augmenter = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 1
         TimeStretchProbability: 0.5000
             SpeedupFactorRange: [0.8000 1.2000]
          PitchShiftProbability: 0.5000
             SemitoneShiftRange: [-2 2]
       VolumeControlProbability: 0.5000
                VolumeGainRange: [-3 3]
            AddNoiseProbability: 0
           TimeShiftProbability: 0.5000
                 TimeShiftRange: [-0.0050 0.0050]
        AddPinkNoiseProbability: 0.5000

Установите вероятность добавления розового шума к 1.

augmenter.AddPinkNoiseProbability = 1
augmenter = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 1
         TimeStretchProbability: 0.5000
             SpeedupFactorRange: [0.8000 1.2000]
          PitchShiftProbability: 0.5000
             SemitoneShiftRange: [-2 2]
       VolumeControlProbability: 0.5000
                VolumeGainRange: [-3 3]
            AddNoiseProbability: 0
           TimeShiftProbability: 0.5000
                 TimeShiftRange: [-0.0050 0.0050]
        AddPinkNoiseProbability: 1

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

data = augment(augmenter,audioIn,fs);
sound(data.Audio{1},fs)

data.AugmentationInfo(1)
ans = struct with fields:
    SpeedupFactor: 1
    SemitoneShift: 0
       VolumeGain: 2.4803
        TimeShift: -0.0022
     AddPinkNoise: 'Applied'

Постройте mel спектрограммы исходных и увеличенных сигналов.

melSpectrogram(audioIn,fs)
title('Original Signal')

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

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

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

Алгоритмы

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

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

Ссылки

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

Введенный в R2019b