imageDataAugmenter

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

Описание

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

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

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

Пример: 128

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

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

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

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

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

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

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

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

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

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

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

Пример: [0.5 4]

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

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

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

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

Примечание

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

Пример: [0.5 4]

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

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

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

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

Примечание

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

Пример: [0.5 4]

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

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

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

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

Пример: [0 45]

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

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

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

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

Пример: [0 45]

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

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

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

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

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

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

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

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

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

Пример: [-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));

Figure contains an axes object. The axes object contains an object of type image.

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

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

Figure contains an axes object. The axes object contains an object of type image.

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

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

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

Figure Training Progress (25-Aug-2021 07:27:29) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 8 objects of type patch, text, line. Axes object 2 contains 8 objects of type patch, text, line.

Советы

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

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

Введенный в R2017b