augmentedImageDatastore

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

Описание

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

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

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

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

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

Создание

Описание

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,responseNames) создает увеличенный datastore изображений для проблем регрессии и классификации. Таблица, tbl, содержит предикторы и ответы. responseNames аргумент задает переменные отклика в tbl.

пример

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

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

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

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

Отобразите datastore в виде ImageDatastore объект.

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

Совет

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

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

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

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

Типы данных: 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 является количеством наблюдений.

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

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

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

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

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

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

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

Имена переменных отклика во входной таблице в виде одного из следующего:

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

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

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

Свойства

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

Предварительная обработка цветных операций, выполняемых на входной шкале полутонов или 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™.

Увеличенные хранилища данных изображений только выполняют фоновую диспетчеризацию, когда используется с trainNetwork и вывод функционирует такой как predict и classify. Фоновая диспетчеризация не происходит, когда вы вызываете read функция datastore непосредственно.

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

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

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

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

Примечание

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

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

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

    Примечание

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

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

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

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

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

combineОбъедините данные от нескольких datastores
hasdataОпределите, доступны ли данные для чтения
numpartitionsКоличество разделов datastore
partitionРазделите datastore
partitionByIndexРаздел augmentedImageDatastore согласно индексам
previewПодмножество предварительного просмотра данных в datastore
readСчитайте данные из augmentedImageDatastore
readallСчитывайте все данные в datastore
readByIndexСчитайте данные, заданные индексом от augmentedImageDatastore
resetСброс Datastore к начальному состоянию
shuffleПереставьте данные в augmentedImageDatastore
subsetСоздайте подмножество datastore или установленный на файл
transformПреобразуйте datastore
isPartitionableОпределите, partitionable ли datastore
isShuffleableОпределите, shuffleable ли datastore

Примеры

свернуть все

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

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

[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