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