Сконфигурируйте увеличение данных изображения
Увеличение данных изображения конфигурирует набор предварительной обработки опций для увеличения изображений, таких как изменение размеров, вращение и отражение.
imageDataAugmenter
используется augmentedImageDatastore
сгенерировать пакеты увеличенных изображений. Для получения дополнительной информации смотрите Изображения Приращения для Обучения со Случайными Геометрическими преобразованиями.
aug = imageDataAugmenter
создает imageDataAugmenter
объект со значениями свойств по умолчанию, сопоставимыми с единичным преобразованием.
FillValue
'FillValue' Заполните значение раньше задавало за пределы точки при передискретизации в виде числового скаляра или числового вектора.
Если увеличенные изображения являются одним каналом, то FillValue
должен быть скаляр.
Если увеличенные изображения являются многоканальными, то FillValue
может быть скаляр или вектор с длиной, равной количеству каналов входного изображения. Например, если входное изображение является изображением RGB, FillValue
может быть вектор из длины 3.
Для полутоновых и цветных изображений значением заливки по умолчанию является 0
. Для категориальных изображений значением заливки по умолчанию является '<undefined>'
метка и trainNetwork
игнорирует заполненные пиксели когда обучение.
Пример: 128
RandXReflection
— Случайное отражениеfalse
(значение по умолчанию) | true
Случайное отражение в лево-правильном направлении в виде логического скаляра. Когда RandXReflection
true
(1 ), каждое изображение отражается горизонтально с 50%-й вероятностью. Когда
RandXReflection
false
(0 ), никакие изображения не отражаются.
RandYReflection
— Случайное отражениеfalse
(значение по умолчанию) | true
Случайное отражение в направлении главной нижней части в виде логического скаляра. Когда RandYReflection
true
(1 ), каждое изображение отражается вертикально с 50%-й вероятностью. Когда
RandYReflection
false
(0 ), никакие изображения не отражаются.
RandRotation
— Область значений вращения
(значение по умолчанию) | числовой вектор с 2 элементами | указатель на функциюОбласть значений вращения, в градусах, применилась к входному изображению в виде одного из следующих.
Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Угол поворота выбран случайным образом от непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принять входные параметры и возвратить угол поворота в виде числа. Используйте указатель на функцию, чтобы выбрать углы поворота от непересекающегося интервала или использования неоднородного вероятностного распределения. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию.
По умолчанию увеличенные изображения не вращаются.
Пример: [-45 45]
RandScale
— Область значений универсального масштабирования
(значение по умолчанию) | числовой вектор с 2 элементами | указатель на функциюОбласть значений универсального (изотропного) масштабирования применилась к входному изображению в виде одного из следующих.
Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Масштабный коэффициент выбран случайным образом от непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принять входные параметры и возвратить масштабный коэффициент в виде числа. Используйте указатель на функцию, чтобы выбрать масштабные коэффициенты от непересекающегося интервала или использования неоднородного вероятностного распределения. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию.
По умолчанию увеличенные изображения не масштабируются.
Пример: [0.5 4]
RandXScale
— Область значений горизонтального масштабирования
(значение по умолчанию) | вектор с 2 элементами из положительных чисел | указатель на функциюОбласть значений горизонтального масштабирования применилась к входному изображению в виде одного из следующих.
Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Фактор горизонтального масштаба выбран случайным образом от непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принять входные параметры и возвратить фактор горизонтального масштаба в виде числа. Используйте указатель на функцию, чтобы выбрать факторы горизонтального масштаба от непересекающегося интервала или использования неоднородного вероятностного распределения. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию.
По умолчанию увеличенные изображения не масштабируются в горизонтальном направлении.
Примечание
Если вы задаете RandScale
, затем imageDataAugmenter
игнорирует значение RandXScale
при масштабировании изображений.
Пример: [0.5 4]
RandYScale
— Область значений вертикального масштабирования
(значение по умолчанию) | вектор с 2 элементами из положительных чисел | указатель на функциюОбласть значений вертикального масштабирования применилась к входному изображению в виде одного из следующих.
Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Вертикальный масштабный коэффициент выбран случайным образом от непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принять входные параметры и возвратить вертикальный масштабный коэффициент в виде числа. Используйте указатель на функцию, чтобы выбрать вертикальные масштабные коэффициенты от непересекающегося интервала или использования неоднородного вероятностного распределения. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию.
По умолчанию увеличенные изображения не масштабируются в вертикальном направлении.
Примечание
Если вы задаете RandScale
, затем imageDataAugmenter
игнорирует значение RandYScale
при масштабировании изображений.
Пример: [0.5 4]
RandXShear
— Область значений горизонтального сдвига
(значение по умолчанию) | числовой вектор с 2 элементами | указатель на функциюОбласть значений горизонтального сдвига применилась к входному изображению в виде одного из следующих. Сдвиг измеряется как угол в градусах и находится в области значений (–90, 90).
Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Горизонтальный угол сдвига выбран случайным образом от непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принять входные параметры и возвратить горизонтальный угол сдвига в виде числа. Используйте указатель на функцию, чтобы выбрать горизонтальные углы сдвига от непересекающегося интервала или использования неоднородного вероятностного распределения. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию.
По умолчанию увеличенные изображения не сдвигают в горизонтальном направлении.
Пример: [0 45]
RandYShear
— Область значений вертикального сдвига
(значение по умолчанию) | числовой вектор с 2 элементами | указатель на функциюОбласть значений вертикального сдвига применилась к входному изображению в виде одного из следующих. Сдвиг измеряется как угол в градусах и находится в области значений (–90, 90).
Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Вертикальный угол сдвига выбран случайным образом от непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принять входные параметры и возвратить вертикальный угол сдвига в виде числа. Используйте указатель на функцию, чтобы выбрать вертикальные углы сдвига от непересекающегося интервала или использования неоднородного вероятностного распределения. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию.
По умолчанию увеличенные изображения не сдвигают в вертикальном направлении.
Пример: [0 45]
RandXTranslation
— Область значений горизонтального перевода
(значение по умолчанию) | числовой вектор с 2 элементами | указатель на функциюОбласть значений горизонтального перевода применилась к входному изображению в виде одного из следующих. Расстояние перевода измеряется в пикселях.
Числовой вектор с 2 элементами. Второй элемент должен быть больше, чем или равным первому элементу. Горизонтальное расстояние перевода выбрано случайным образом от непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принять входные параметры и возвратить горизонтальное расстояние перевода в виде числа. Используйте указатель на функцию, чтобы выбрать горизонтальные расстояния перевода от непересекающегося интервала или использования неоднородного вероятностного распределения. Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию.
По умолчанию увеличенные изображения не переводятся в горизонтальном направлении.
Пример: [-5 5]
RandYTranslation
— Область значений вертикального перевода
(значение по умолчанию) | числовой вектор с 2 элементами | указатель на функциюОбласть значений вертикального перевода применилась к входному изображению в виде одного из следующих. Расстояние перевода измеряется в пикселях.
Числовой вектор с 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]
Создайте увеличенный datastore изображений с помощью увеличения данных изображения. Увеличенный datastore изображений также требует выборочных данных, меток и размера выходного изображения.
[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
Предварительный просмотр случайные преобразования применился к первым восьми изображениям в datastore изображений.
minibatch = preview(auimds); imshow(imtile(minibatch.input));
Предварительный просмотр различные случайные преобразования применился к тому же набору изображений.
minibatch = preview(auimds); imshow(imtile(minibatch.input));
Обучите сверточную нейронную сеть с помощью увеличенных данных изображения. Увеличение данных помогает препятствовать тому, чтобы сеть сверхсоответствовала и запомнила точные детали учебных изображений.
Загрузите выборочные данные, которые состоят из синтетических изображений рукописных цифр.
[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);
Чтобы предварительно просмотреть преобразования, к которым применяются демонстрационные изображения, используйте augment
функция.
Чтобы выполнить увеличение изображений во время обучения, создайте augmentedImageDatastore
и задайте опции предварительной обработки при помощи 'DataAugmentation'
пара "имя-значение" с imageDataAugmenter
. Увеличенный datastore изображений автоматически применяет случайные преобразования к обучающим данным.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.