imageDataAugmenter
영상 데이터 증대 구성
설명
영상 데이터 증대기는 크기 조정, 회전, 반사와 같은 영상 증대를 위한 전처리 옵션 세트를 구성합니다.
imageDataAugmenter
는 augmentedImageDatastore
가 증대 영상으로 구성된 배치를 생성하기 위해 사용합니다. 자세한 내용은 무작위 기하 변환을 사용하여 훈련용 영상 증대하기 항목을 참조하십시오.
생성
속성
FillValue
— 채우기 값
숫자형 스칼라 | 숫자형 벡터
리샘플링을 수행할 때 경계를 벗어난 점을 정의하는 데 사용하는 채우기 값으로, 숫자형 스칼라 또는 숫자형 벡터로 지정됩니다.
증대 영상이 단일 채널인 경우,
FillValue
는 스칼라여야 합니다.증대 영상이 다중채널인 경우,
FillValue
는 스칼라이거나 길이가 입력 영상의 채널 개수와 같은 벡터일 수 있습니다. 예를 들어, 입력 영상이 RGB 영상인 경우,FillValue
는 길이가 3인 벡터일 수 있습니다.
회색조 영상과 컬러 영상의 디폴트 채우기 값은 0
입니다. 범주 영상의 경우 디폴트 채우기 값은 '<undefined>'
레이블입니다. 훈련 중에 trainnet
함수는 채워진 픽셀을 무시합니다.
예: 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 | Apply identical random transformations to multiple images |
예제
영상을 크기 조정하고 회전하는 영상 데이터 증대기 만들기
훈련 전에 영상에 전처리를 수행하는 영상 데이터 증대기를 만듭니다. 이 증대기는 각도 범위 [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]
영상 데이터 증대 함수를 사용하여 증대 영상 데이터저장소를 만듭니다. 증대 영상 데이터저장소에는 샘플 데이터, 레이블, 출력 영상 크기도 필요합니다.
[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
영상 데이터저장소의 처음 8개의 영상에 적용된 무작위 변환을 미리 봅니다.
minibatch = preview(auimds); imshow(imtile(minibatch.input));
동일한 영상 세트에 적용된 다른 무작위 변환을 미리 봅니다.
minibatch = preview(auimds); imshow(imtile(minibatch.input));
증대 영상을 사용하여 신경망 훈련시키기
증대 영상 데이터를 사용하여 컨벌루션 신경망을 훈련시킵니다. 데이터 증대는 신경망이 과적합되는 것을 방지하고 훈련 영상의 정확한 세부 정보가 기억되지 않도록 하는 데 도움이 됩니다.
손으로 쓴 숫자를 나타내는 합성 영상으로 구성된 샘플 데이터를 불러옵니다. XTrain
은 28×28×1×5000 배열입니다. 여기서 각각은 다음을 나타냅니다.
28은 영상의 높이와 너비입니다.
1은 채널의 개수입니다.
5,000은 손으로 쓴 숫자를 나타내는 합성 영상의 개수입니다.
labelsTrain
은 각 관측값에 대한 레이블을 포함하는 categorical형 벡터입니다.
load DigitsDataTrain
신경망 검증을 위해 영상 1,000개를 남겨 둡니다.
idx = randperm(size(XTrain,4),1000); XValidation = XTrain(:,:,:,idx); XTrain(:,:,:,idx) = []; TValidation = labelsTrain(idx); labelsTrain(idx) = [];
크기 조정, 회전, 평행 이동, 반사와 같은 영상 증대 전처리 옵션을 지정하는 imageDataAugmenter
객체를 만듭니다. 영상을 최대 3개 픽셀만큼 가로와 세로 방향으로 임의로 평행 이동하고 최대 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
객체를 만들고 영상 출력 크기를 지정합니다. 데이터저장소는 훈련 중에 영상을 증대하고 영상의 크기를 조정합니다. 데이터저장소는 메모리에 영상을 저장하지 않으면서 영상을 증대합니다. trainnet
은 신경망 파라미터를 업데이트한 다음 증대 영상을 버립니다.
imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,labelsTrain,'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];
훈련 옵션을 지정합니다. 옵션 중에서 선택하려면 경험적 분석이 필요합니다. 실험을 실행하여 다양한 훈련 옵션 구성을 살펴보려면 Experiment Manager 앱을 사용합니다.
opts = trainingOptions('sgdm', ... 'MaxEpochs',15, ... 'Shuffle','every-epoch', ... 'Plots','training-progress', ... 'Metrics','accuracy', ... 'Verbose',false, ... 'ValidationData',{XValidation,TValidation});
trainnet
함수를 사용하여 신경망을 훈련시킵니다. 분류에는 교차 엔트로피 손실을 사용합니다. 기본적으로 trainnet
함수는 GPU를 사용할 수 있으면 GPU를 사용합니다. GPU에서 훈련시키려면 Parallel Computing Toolbox™ 라이선스와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. GPU를 사용할 수 없는 경우, trainnet
함수는 CPU를 사용합니다. 실행 환경을 지정하려면 ExecutionEnvironment
훈련 옵션을 사용하십시오.
net = trainnet(augimds,layers,"crossentropy",opts);
팁
샘플 영상에 적용된 변환을 미리 보려면
augment
함수를 사용하십시오.훈련 중에 영상 증대를 수행하려면
augmentedImageDatastore
를 만들고'DataAugmentation'
이름-값 쌍에imageDataAugmenter
를 사용하여 전처리 옵션을 지정하십시오. 증대 영상 데이터저장소는 훈련 데이터에 자동으로 무작위 변환을 적용합니다.
버전 내역
R2017b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)