imageDataAugmenter

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

Описание

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

The 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 дополненных изображений также требует выборочных данных, меток и размера выходного изображения.

[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. The axes contains an object of type image.

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

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

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

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

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

[XTrain,YTrain] = digitTrain4DArrayData;

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

  • 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