augmentedImageDatastore

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

Описание

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

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

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

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

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

Создание

Описание

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

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

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

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

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

пример

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

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

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

расширить все

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

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

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

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

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

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

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

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

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

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

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

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

Свойства

расширить все

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

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

Примечание

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

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

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

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

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

Хранилища данных дополненных изображений выполняют диспетчеризацию фона только при использовании с 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Объедините данные из нескольких хранилищ данных
hasdataОпределите, доступны ли данные для чтения
numpartitionsКоличество разделов datastore
partitionРаздел datastore
partitionByIndexФункции разделения augmentedImageDatastore согласно индексам
previewПредварительный просмотр подмножества данных в datastore
readЧтение данных из augmentedImageDatastore
readallЧтение всех данных в datastore
readByIndexСчитайте данные, заданные индексом, из augmentedImageDatastore
resetСбросьте datastore в начальное состояние
shuffleПеремещение данных в augmentedImageDatastore
subsetСоздайте подмножество datastore или набора файлов
transformПреобразуйте datastore
isPartitionableОпределите, является ли datastore разделяемым
isShuffleableОпределите, является ли datastore shuffleable

Примеры

свернуть все

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

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

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

Совет

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

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

Введенный в R2018a
Для просмотра документации необходимо авторизоваться на сайте