imageDataAugmenter

Сконфигурируйте увеличение данных изображения

Описание

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

imageDataAugmenter используется augmentedImageDatastore, чтобы сгенерировать пакеты увеличенных изображений. Для получения дополнительной информации смотрите Изображения Приращения для Обучения.

Создание

Синтаксис

aug = imageDataAugmenter
aug = imageDataAugmenter(Name,Value)

Описание

aug = imageDataAugmenter создает объект imageDataAugmenter со значениями свойств по умолчанию, сопоставимыми с единичным преобразованием.

пример

aug = imageDataAugmenter(Name,Value) конфигурирует набор опций увеличения изображений с помощью пар "имя-значение", чтобы установить свойства. Можно задать несколько пар "имя-значение". Заключите каждое имя свойства в кавычки.

Свойства

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

Заполните значение раньше задавало за пределы точки при передискретизации, заданный в виде числа или числового вектора.

  • Если увеличенные изображения являются одним каналом, то FillValue должен быть скаляром.

  • Если увеличенные изображения являются многоканальными, то FillValue может быть скаляром или вектором с длиной, равной количеству каналов входного изображения. Например, если входное изображение является изображением RGB, FillValue может быть вектором длины 3.

Значением заливки по умолчанию для полутоновых и цветных изображений является 0. Значение заливки по умолчанию для категориальных изображений является меткой '<undefined>'.

Пример: 128

Случайное отражение в лево-правильном направлении, заданном как логический скаляр. Когда RandXReflection является true (1), каждое изображение отражается горизонтально с 50%-й вероятностью. Когда RandXReflection является false (0), никакие изображения не отражаются.

Случайное отражение в направлении главной нижней части, заданном как логический скаляр. Когда RandYReflection является true (1), каждое изображение отражается вертикально с 50%-й вероятностью. Когда RandYReflection является false (0), никакие изображения не отражаются.

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

  • Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Угол поворота выбран случайным образом от непрерывного равномерного распределения в заданном интервале.

  • указатель на функцию. Функция не должна принять входные параметры и возвратить угол поворота в виде числа. Используйте указатель на функцию, чтобы выбрать углы поворота от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

По умолчанию увеличенные изображения не вращаются.

Пример: [-45 45]

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

  • Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Масштабный коэффициент выбран случайным образом от непрерывного равномерного распределения в заданном интервале.

  • указатель на функцию. Функция не должна принять входные параметры и возвратить масштабный коэффициент в виде числа. Используйте указатель на функцию, чтобы выбрать масштабные коэффициенты от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

По умолчанию увеличенные изображения не масштабируются.

Пример: [0.5 4]

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

  • Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Фактор горизонтального масштаба выбран случайным образом от непрерывного равномерного распределения в заданном интервале.

  • указатель на функцию. Функция не должна принять входные параметры и возвратить фактор горизонтального масштаба в виде числа. Используйте указатель на функцию, чтобы выбрать факторы горизонтального масштаба от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

По умолчанию увеличенные изображения не масштабируются в горизонтальном направлении.

Примечание

Если вы задаете RandScale, то imageDataAugmenter игнорирует значение RandXScale при масштабировании изображений.

Пример: [0.5 4]

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

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

  • указатель на функцию. Функция не должна принять входные параметры и возвратить вертикальный масштабный коэффициент в виде числа. Используйте указатель на функцию, чтобы выбрать вертикальные масштабные коэффициенты от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

По умолчанию увеличенные изображения не масштабируются в вертикальном направлении.

Примечание

Если вы задаете RandScale, то imageDataAugmenter игнорирует значение RandYScale при масштабировании изображений.

Пример: [0.5 4]

Область значений горизонтального сдвига применилась к входному изображению, заданному как одно из следующих. Сдвиг измеряется как угол в градусах и находится в области значений (–90, 90).

  • Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Горизонтальный угол сдвига выбран случайным образом от непрерывного равномерного распределения в заданном интервале.

  • указатель на функцию. Функция не должна принять входные параметры и возвратить горизонтальный угол сдвига в виде числа. Используйте указатель на функцию, чтобы выбрать горизонтальные углы сдвига от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

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

Пример: [0 45]

Область значений вертикального сдвига применилась к входному изображению, заданному как одно из следующих. Сдвиг измеряется как угол в градусах и находится в области значений (–90, 90).

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

  • указатель на функцию. Функция не должна принять входные параметры и возвратить вертикальный угол сдвига в виде числа. Используйте указатель на функцию, чтобы выбрать вертикальные углы сдвига от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

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

Пример: [0 45]

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

  • Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Горизонтальное расстояние перевода выбрано случайным образом от непрерывного равномерного распределения в заданном интервале.

  • указатель на функцию. Функция не должна принять входные параметры и возвратить горизонтальное расстояние перевода в виде числа. Используйте указатель на функцию, чтобы выбрать горизонтальные расстояния перевода от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

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

Пример: [-5 5]

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

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

  • указатель на функцию. Функция не должна принять входные параметры и возвратить вертикальное расстояние перевода в виде числа. Используйте указатель на функцию, чтобы выбрать вертикальные расстояния перевода от непересекающегося интервала или использования неоднородного распределения вероятностей. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

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

Пример: [-5 5]

Функции объекта

augmentПримените идентичные случайные преобразования к повторным изображениям

Примеры

свернуть все

Создайте увеличение данных изображения, которое предварительно обрабатывает изображения перед обучением. Это увеличение вращает изображения случайными углами в области значений [0, 360] степени и изменяет размер изображений случайными масштабными коэффициентами в области значений [0.5, 1].

augmenter = imageDataAugmenter( ...
    'RandRotation',[0 360], ...
    'RandScale',[0.5 1])
augmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 0
     RandYReflection: 0
        RandRotation: [0 360]
           RandScale: [0.5000 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [0 0]
    RandYTranslation: [0 0]

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

[XTrain,YTrain] = digitTrain4DArrayData;
imageSize = [56 56 1];
auimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',augmenter)
auimds = 
  augmentedImageDatastore with properties:

         NumObservations: 5000
           MiniBatchSize: 128
        DataAugmentation: [1x1 imageDataAugmenter]
      ColorPreprocessing: 'none'
              OutputSize: [56 56]
          OutputSizeMode: 'resize'
    DispatchInBackground: 0

Предварительный просмотр случайные преобразования применился к первым восьми изображениям в datastore изображений.

minibatch = preview(auimds);
imshow(imtile(minibatch.input));

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

minibatch = preview(auimds);
imshow(imtile(minibatch.input));

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

Загрузите выборочные данные, которые состоят из синтетических изображений рукописных цифр.

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData загружает набор обучающих данных цифры как 4-D данные массива. XTrain является 28 28 1 5 000 массивов, где:

  • 28 высота и ширина изображений.

  • 1 количество каналов.

  • 5000 количество синтетических изображений рукописных цифр.

YTrain является категориальным вектором, содержащим метки для каждого наблюдения.

Отложите 1000 из изображений для сетевой валидации.

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Создайте объект imageDataAugmenter, который задает опции предварительной обработки для увеличения изображений, такие как изменение размеров, вращение, перевод и отражение. Случайным образом переведите изображения до трех пикселей горизонтально и вертикально и вращайте изображения с углом до 20 градусов.

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[-20,20], ...
    'RandXTranslation',[-3 3], ...
    'RandYTranslation',[-3 3])
imageAugmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 0
     RandYReflection: 0
        RandRotation: [-20 20]
           RandScale: [1 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [-3 3]
    RandYTranslation: [-3 3]

Создайте объект augmentedImageDatastore использовать для сетевого обучения и задать изображение выходной размер. Во время обучения datastore выполняет увеличение изображений и изменяет размер изображений. Datastore увеличивает изображения, не сохраняя образов к памяти. trainNetwork обновляет сетевые параметры и затем отбрасывает увеличенные изображения.

imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);

Задайте сверточную архитектуру нейронной сети.

layers = [
    imageInputLayer(imageSize)
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Задайте опции обучения для стохастического спуска градиента с импульсом.

opts = trainingOptions('sgdm', ...
    'MaxEpochs',15, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false, ...
    'ValidationData',{XValidation,YValidation});

Обучите сеть. Поскольку изображения валидации не увеличиваются, точность валидации выше, чем учебная точность.

net = trainNetwork(augimds,layers,opts);

Советы

  • Чтобы предварительно просмотреть преобразования, к которым применяются демонстрационные изображения, используйте функцию augment.

  • Чтобы выполнить увеличение изображений во время обучения, создайте augmentedImageDatastore и задайте опции предварительной обработки при помощи пары "имя-значение" 'DataAugmentation' с imageDataAugmenter. Увеличенный datastore изображений автоматически применяет случайные преобразования к данным тренировки.

Введенный в R2017b