exponenta event banner

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]

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

[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

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

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

Представлен в R2017b