exponenta event banner

augmentedImageDatastore

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

Описание

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

Для обучения сети с использованием дополненных изображений поставьте augmentedImageDatastore кому trainNetwork. Дополнительные сведения см. в разделе Изображения предварительной обработки для глубокого обучения.

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

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

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

Создание

Описание

auimds = augmentedImageDatastore(outputSize,imds) создает хранилище данных дополненного изображения для проблем классификации с использованием изображений из хранилища данных изображения 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, содержит предикторы и ответы. responseNames аргумент задает переменные ответа в tbl.

пример

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

Например, augmentedImageDatastore([28,28],myTable,'OutputSizeMode','centercrop') создает хранилище данных дополненного изображения, которое отсеивает изображения из центра.

Входные аргументы

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

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

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

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

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

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

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

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

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

Свойства

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

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

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

Примечание

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

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

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

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

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

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

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

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

Общее число наблюдений в хранилище данных дополненного изображения. Количество наблюдений - это продолжительность одной тренировочной эпохи.

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

Примечание

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

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

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

    Примечание

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

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

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

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

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

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

Примеры

свернуть все

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

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

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

Совет

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

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

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