augmentedImageDatastore

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

Описание

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

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

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

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

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

Создание

Синтаксис

auimds = augmentedImageDatastore(outputSize,imds)
auimds = augmentedImageDatastore(outputSize,X,Y)
auimds = augmentedImageDatastore(outputSize,X)
auimds = augmentedImageDatastore(outputSize,tbl)
auimds = augmentedImageDatastore(outputSize,tbl,responseName)
auimds = augmentedImageDatastore(___,Name,Value)

Описание

auimds = augmentedImageDatastore(outputSize,imds) создает увеличенный datastore изображений для проблем классификации с помощью изображений от datastore изображений imds и устанавливает свойство OutputSize.

auimds = augmentedImageDatastore(outputSize,X,Y) создает увеличенный datastore изображений для проблем регрессии и классификации. Массив X содержит переменные прогноза и массив Y, содержит категориальные метки или числовые ответы.

auimds = augmentedImageDatastore(outputSize,X) создает увеличенный datastore изображений для предсказания ответов данных изображения в массиве X.

auimds = augmentedImageDatastore(outputSize,tbl) создает увеличенный datastore изображений для проблем регрессии и классификации. Таблица, tbl, содержит предикторы и ответы.

auimds = augmentedImageDatastore(outputSize,tbl,responseName) создает увеличенный datastore изображений для проблем регрессии и классификации. Таблица, tbl, содержит предикторы и ответы. Аргумент responseName задает переменные отклика в tbl.

пример

auimds = augmentedImageDatastore(___,Name,Value) создает увеличенный datastore изображений, с помощью пар "имя-значение", чтобы установить ColorPreprocessing, DataAugmentation, OutputSizeMode и свойства DispatchInBackground. Можно задать несколько пар "имя-значение". Заключите каждое имя свойства в кавычки.

Например, augmentedImageDatastore([28,28],myTable,'OutputSizeMode','centercrop') создает увеличенный datastore изображений, который обрезки отображают от центра.

Входные параметры

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

Изображения с метками, заданными как объект ImageDatastore с метками categorical. Можно хранить данные в ImageDatastore для сетей классификации изображений только.

ImageDatastore позволяет пакетное чтение JPG или упреждающую выборку использования файлов изображений PNG. Если вы используете пользовательскую функцию для чтения изображений, то ImageDatastore не выбирает с упреждением.

Совет

Используйте augmentedImageDatastore для эффективной предварительной обработки изображений для глубокого обучения включая изменение размеров изображений.

Не используйте опцию readFcn imageDatastore, когда эта опция обычно значительно медленнее.

Изображения, заданные как 4-D числовой массив. Первые три измерения являются высотой, шириной и каналами, и последняя размерность индексирует отдельные изображения.

Если массив содержит NaN s, то они распространены посредством обучения. Однако в большинстве случаев обучению не удается сходиться.

Типы данных: single | double | uint8 | int8 | uint16 | int16 | uint32 | int32

Ответы для классификации или регрессия, заданная как одно из следующего:

  • Для проблемы классификации Y является категориальным вектором, содержащим метки изображения.

  • Для проблемы регрессии Y может быть:

    • n-by-r числовая матрица. n является количеством наблюдений, и r является количеством ответов.

    • h-by-w-by-c-by-n числовой массив. h-by-w-by-c является размером одного ответа, и n является количеством наблюдений.

Ответы не должны содержать NaN s.

Типы данных: categorical | double

Входные данные, заданные как таблица. tbl должен содержать предикторы в первом столбце или как абсолютные или как относительные каналы передачи изображения или изображения. Тип и местоположение ответов зависят от проблемы:

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

  • Для проблемы регрессии ответы должны быть численными значениями в столбце или столбцах после первого. Ответы могут быть или в нескольких столбцах как скаляры или в отдельном столбце как числовые векторы или массивы ячеек, содержащие числовые трехмерные массивы. Когда вы не задаете имя переменной отклика или переменных, augmentedImageDatastore принимает остальные столбцы tbl как переменные отклика. Можно задать имена переменной отклика с помощью позиционного параметра responseName.

Ответы не должны содержать NaN s. Если существует NaN s в данных о предикторе, они распространены посредством обучения, однако, в большинстве случаев обучению не удается сходиться.

Типы данных: table

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

Типы данных: char | cell

Свойства

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

Предварительно обрабатывая цветные операции, выполняемые на входной шкале полутонов или изображениях RGB, заданных как 'none', 'gray2rgb' или 'rgb2gray'. Когда datastore изображений содержит смесь шкалы полутонов и изображений RGB, используйте ColorPreprocessing, чтобы гарантировать, что все выходные изображения имеют количество каналов, требуемых imageInputLayer.

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

Примечание

Объект augmentedImageDatastore преобразовывает изображения RGB в шкалу полутонов при помощи функции rgb2gray. Если изображение имеет три канала, которые не соответствуют красным, зеленым, и синим каналам (таким как изображение в L*a*b* цветовое пространство), то использование ColorPreprocessing может дать плохие результаты.

Никакая операция предварительной обработки цвета не выполняется, когда входные изображения не имеют 1 или 3 каналов, такой что касается многоспектральных или гиперспектральных изображений. В этом случае все входные изображения должны иметь то же количество каналов.

Типы данных: char | string

Предварительная обработка примененного к входным изображениям, заданным как объект imageDataAugmenter или 'none'. Когда DataAugmentation является 'none', никакая предварительная обработка не применяется, чтобы ввести изображения.

Диспетчеризируйте наблюдения в фоновом режиме во время обучения, прогноза или классификации, заданной как false или true. Чтобы использовать фоновую диспетчеризацию, у вас должен быть Parallel Computing Toolbox™.

Это свойство доступно только для чтения.

Количество наблюдений, которые возвращены в каждом пакете. Для обучения, прогноза и классификации, свойство MiniBatchSize установлено в мини-пакетный размер, заданный в trainingOptions.

Это свойство доступно только для чтения.

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

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

Примечание

Если вы создаете augmentedImageDatastore путем определения изображения выходной размер как трехэлементный вектор, то datastore игнорирует третий элемент. Вместо этого datastore использует значение ColorPreprocessing, чтобы определить размерность выходных изображений. Например, если вы задаете OutputSize как [28 28 1], но устанавливаете ColorPreprocessing как 'gray2rgb', затем выходные изображения имеют размер 28 28 3.

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

  • 'resize' — Масштабируйте изображение с помощью билинейной интерполяции, чтобы соответствовать выходному размеру.

    Примечание

    augmentedImageDatastore использует метод билинейной интерполяции imresize со сглаживанием. Билинейная интерполяция включает быструю обработку изображений при предотвращении искажений такой, как вызвано интерполяцией ближайшего соседа. Напротив, imresize по умолчанию использует бикубическую интерполяцию со сглаживанием, чтобы произвести высококачественное измененное изображение за счет более длительного времени вычислений.

  • 'centercrop' — Возьмите обрезку из центра учебного изображения. Обрезка имеет тот же размер как выходной размер.

  • 'randcrop' — Возьмите случайную обрезку из учебного изображения. Случайная обрезка имеет тот же размер как выходной размер.

Типы данных: char | string

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

hasdataОпределите, доступны ли данные для чтения
partitionByIndexРаздел augmentedImageDatastore согласно индексам
previewПодмножество данных в datastore
readСчитайте данные из augmentedImageDatastore
readallСчитывайте все данные в datastore
readByIndexСчитайте данные, заданные индексом от augmentedImageDatastore
resetСброс Datastore к начальному состоянию
shuffleПереставьте данные в augmentedImageDatastore

Примеры

свернуть все

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

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

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

Советы

  • Можно визуализировать много преобразованных изображений в той же фигуре при помощи функции imtile. Например, этот код отображает один мини-пакет преобразованных изображений от увеличенного datastore изображений под названием auimds.

    minibatch = read(auimds);
    imshow(imtile(minibatch.input))
  • По умолчанию изменение размеров является единственной операцией предварительной обработки изображений, выполняемой на изображениях. Включите дополнительные операции предварительной обработки при помощи аргумента пары "имя-значение" DataAugmentation с объектом imageDataAugmenter. Каждый раз отображает, читаются из увеличенного datastore изображений, различная случайная комбинация предварительной обработки операций применяются к каждому изображению.

Введенный в R2018a