Сконфигурируйте увеличение данных
Блок увеличения данных изображения конфигурирует набор опций предварительной обработки для увеличения изображения, таких как изменение размера, поворот и отражение.
The imageDataAugmenter
используется в augmentedImageDatastore
для генерации пакетов дополненных изображений. Для получения дополнительной информации см. «Увеличение изображений для обучения со случайными геометрическими преобразованиями».
aug = imageDataAugmenter
создает imageDataAugmenter
объект со значениями свойств по умолчанию, сопоставимыми с преобразованием тождествами.
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
- Область значений вращения[0 0]
(по умолчанию) | 2-элементный числовой вектор | указатель на функциюОбласть значений вращения, в степени, применяемая к входу изображению, заданная как одно из следующего.
2-элементный числовой вектор. Второй элемент должен быть больше или равен первому элементу. Угол поворота выбирается случайным образом из непрерывного равномерного распределения в пределах заданного интервала.
указатель на функцию. Функция не должна принимать входные параметры и возвращать угол поворота как числовой скаляр. Используйте указатель на функцию, чтобы выбрать углы поворота из несвязанного интервала или используя неоднородное распределение вероятностей. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».
По умолчанию дополненные изображения не поворачиваются.
Пример: [-45 45]
RandScale
- Область значений равномерного масштабирования[1 1]
(по умолчанию) | 2-элементный числовой вектор | указатель на функциюОбласти значений равномерного (изотропного) масштабирования, применяемого к входу изображению, заданные как одно из следующего.
2-элементный числовой вектор. Второй элемент должен быть больше или равен первому элементу. Коэффициент шкалы выбирается случайным образом из непрерывного равномерного распределения в пределах заданного интервала.
указатель на функцию. Функция не должна принимать входные параметры и возвращать коэффициент шкалы как числовой скаляр. Используйте указатель на функцию, чтобы выбрать масштабные коэффициенты из неоднородного интервала или с помощью неоднородного распределения вероятностей. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».
По умолчанию дополненные изображения не масштабируются.
Пример: [0.5 4]
RandXScale
- Область значений горизонтального масштабирования[1 1]
(по умолчанию) | 2-элементный вектор положительных чисел | указатель на функциюОбласть значений горизонтального масштабирования, применяемый к входному изображению, задаётся как одно из следующего.
2-элементный числовой вектор. Второй элемент должен быть больше или равен первому элементу. Горизонтальный масштабный коэффициент выбирается случайным образом из непрерывного равномерного распределения в пределах заданного интервала.
указатель на функцию. Функция не должна принимать входные параметры и возвращать горизонтальный масштабный коэффициент как числовой скаляр. Используйте указатель на функцию, чтобы выбрать горизонтальные масштабные коэффициенты из несвязанного интервала или с помощью неоднородного распределения вероятностей. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».
По умолчанию дополненные изображения не масштабируются в горизонтальном направлении.
Примечание
Если вы задаете RandScale
, затем imageDataAugmenter
игнорирует значение RandXScale
при масштабировании изображений.
Пример: [0.5 4]
RandYScale
- Область значений вертикального масштабирования[1 1]
(по умолчанию) | 2-элементный вектор положительных чисел | указатель на функциюОбласть значений вертикального масштабирования, применяемый к входному изображению, задаётся как одно из следующего.
2-элементный числовой вектор. Второй элемент должен быть больше или равен первому элементу. Вертикальный масштабный коэффициент выбирается случайным образом из непрерывного равномерного распределения в пределах заданного интервала.
указатель на функцию. Функция не должна принимать входные параметры и возвращать вертикальный масштабный коэффициент как числовой скаляр. Используйте указатель на функцию, чтобы выбрать вертикальные масштабные коэффициенты из несвязанного интервала или с помощью неоднородного распределения вероятностей. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».
По умолчанию дополненные изображения не масштабируются в вертикальном направлении.
Примечание
Если вы задаете RandScale
, затем imageDataAugmenter
игнорирует значение RandYScale
при масштабировании изображений.
Пример: [0.5 4]
RandXShear
- Область значений сдвига по горизонтали[0 0]
(по умолчанию) | 2-элементный числовой вектор | указатель на функциюОбласть значений горизонтального сдвига, приложенного к входному изображению, задаётся как одно из следующего. Сдвиг измеряется как угол в степенях и находится в области значений (-90, 90).
2-элементный числовой вектор. Второй элемент должен быть больше или равен первому элементу. Горизонтальный угол сдвига выбирается случайным образом из непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принимать входные параметры и возвращать горизонтальный угол сдвига как числовой скаляр. Используйте указатель на функцию, чтобы выбрать горизонтальные углы сдвига из несвязанного интервала или используя неоднородное распределение вероятностей. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».
По умолчанию дополненные изображения не срезаются в горизонтальном направлении.
Пример: [0 45]
RandYShear
- Область значений сдвига по вертикали[0 0]
(по умолчанию) | 2-элементный числовой вектор | указатель на функциюОбласть значений вертикального сдвига, приложенный к входному изображению, задаётся как одно из следующего. Сдвиг измеряется как угол в степенях и находится в области значений (-90, 90).
2-элементный числовой вектор. Второй элемент должен быть больше или равен первому элементу. Вертикальный угол сдвига выбирается случайным образом из непрерывного равномерного распределения в заданном интервале.
указатель на функцию. Функция не должна принимать входные параметры и возвращать вертикальный угол сдвига как числовой скаляр. Используйте указатель на функцию, чтобы выбрать вертикальные углы сдвига из неоднородного интервала или используя неоднородное распределение вероятностей. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».
По умолчанию дополненные изображения не срезаются в вертикальном направлении.
Пример: [0 45]
RandXTranslation
- Область значений горизонтального перемещения[0 0]
(по умолчанию) | 2-элементный числовой вектор | указатель на функциюОбласть значений горизонтального перемещения, приложенный к входному изображению, задаётся как одно из следующего. Расстояние перемещения измеряется в пикселях.
2-элементный числовой вектор. Второй элемент должен быть больше или равен первому элементу. Расстояние горизонтального перемещения выбирается случайным образом из непрерывного равномерного распределения в пределах заданного интервала.
указатель на функцию. Функция не должна принимать входные параметры и возвращать горизонтальное расстояние преобразования как числовой скаляр. Используйте указатель на функцию, чтобы выбрать горизонтальные расстояния преобразования от несвязанного интервала или используя неоднородное распределение вероятностей. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».
По умолчанию дополненные изображения не перемещаются в горизонтальном направлении.
Пример: [-5 5]
RandYTranslation
- Область значений вертикальных перемещений[0 0]
(по умолчанию) | 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 дополненных изображений также требует выборочных данных, меток и размера выходного изображения.
[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 на 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);
Для предварительного просмотра преобразований, примененных к образцам изображений, используйте augment
функция.
Чтобы выполнить увеличение изображения во время обучения, создайте augmentedImageDatastore
и задайте опции предварительной обработки при помощи 'DataAugmentation'
Пара "имя-значение" со imageDataAugmenter
. datastore дополненных изображений автоматически применяет случайные преобразования к обучающим данным.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.