이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

imageDataAugmenter

이미지 데이터 증대 구성

설명

이미지 데이터 증대기는 크기 조정, 회전, 반사와 같은 이미지 증대를 위한 전처리 옵션 세트를 구성합니다.

imageDataAugmenteraugmentedImageDatastore가 증대 이미지로 구성된 배치를 생성하기 위해 사용합니다. 자세한 내용은 훈련을 위해 이미지 증대하기 항목을 참조하십시오.

생성

설명

aug = imageDataAugmenter는 항등 변환이나 마찬가지인 디폴트 속성 값을 사용하여 imageDataAugmenter 객체를 만듭니다.

예제

aug = imageDataAugmenter(Name,Value)는 이름-값 쌍을 사용하여 속성을 설정하여 이미지 증대 옵션 세트를 구성합니다. 여러 개의 이름-값 쌍을 지정할 수 있습니다. 각 속성 이름을 따옴표로 묶습니다.

속성

모두 확장

리샘플링을 수행할 때 경계를 벗어난 점을 정의하는 데 사용하는 채우기 값으로, 숫자형 스칼라 또는 숫자형 벡터로 지정됩니다.

  • 증대 이미지가 단일 채널인 경우, FillValue는 스칼라여야 합니다.

  • 증대 이미지가 다중채널인 경우, FillValue는 스칼라이거나 길이가 입력 이미지의 채널 개수와 같은 벡터일 수 있습니다. 예를 들어, 입력 이미지가 RGB 이미지인 경우, FillValue는 길이가 3인 벡터일 수 있습니다.

회색조 이미지와 컬러 이미지의 디폴트 채우기 값은 0입니다. 범주 이미지의 디폴트 채우기 값은 '<undefined>' 레이블입니다.

예: 128

좌우 방향의 무작위 반사로, 논리형 스칼라로 지정됩니다. RandXReflectiontrue(1)인 경우, 각 이미지는 50%의 확률로 가로로 반사됩니다. RandXReflectionfalse(0)인 경우, 이미지가 반사되지 않습니다.

상하 방향의 무작위 반사로, 논리형 스칼라로 지정됩니다. RandYReflectiontrue(1)인 경우, 각 이미지는 50%의 확률로 세로로 반사됩니다. RandYReflectionfalse(0)인 경우, 이미지가 반사되지 않습니다.

입력 이미지에 적용되는 회전 범위(단위: 도)로, 다음 중 하나로 지정됩니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 회전 각도는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 회전 각도를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 회전 각도를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 회전되지 않습니다.

예: [-45 45]

입력 이미지에 적용되는 균일(등방성) 스케일링 범위로, 다음 중 하나로 지정됩니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 스케일링 인자는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 스케일링 인자를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 스케일링 인자를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 스케일링되지 않습니다.

예: [0.5 4]

입력 이미지에 적용되는 가로 스케일링 범위로, 다음 중 하나로 지정됩니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 가로 스케일링 인자는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 가로 스케일링 인자를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 가로 스케일링 인자를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 가로 방향으로 스케일링되지 않습니다.

참고

RandScale을 지정하면 imageDataAugmenter는 이미지를 스케일링할 때 RandXScale의 값을 무시합니다.

예: [0.5 4]

입력 이미지에 적용되는 세로 스케일링 범위로, 다음 중 하나로 지정됩니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 세로 스케일링 인자는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 세로 스케일링 인자를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 세로 스케일링 인자를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 세로 방향으로 스케일링되지 않습니다.

참고

RandScale을 지정하면 imageDataAugmenter는 이미지를 스케일링할 때 RandYScale의 값을 무시합니다.

예: [0.5 4]

입력 이미지에 적용되는 가로 전단 범위로, 다음 중 하나로 지정됩니다. 전단은 각도(단위: 도)로 측정되며, 범위 (–90, 90) 사이에 있습니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 가로 전단 각도는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 가로 전단 각도를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 가로 전단 각도를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 가로 방향으로 전단되지 않습니다.

예: [0 45]

입력 이미지에 적용되는 세로 전단 범위로, 다음 중 하나로 지정됩니다. 전단은 각도(단위: 도)로 측정되며, 범위 (–90, 90) 사이에 있습니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 세로 전단 각도는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 세로 전단 각도를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 세로 전단 각도를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 세로 방향으로 전단되지 않습니다.

예: [0 45]

입력 이미지에 적용되는 가로 평행 이동 범위로, 다음 중 하나로 지정됩니다. 평행 이동 거리는 픽셀 단위로 측정됩니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 가로 평행 이동 거리는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 가로 평행 이동 거리를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 가로 평행 이동 거리를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 가로 방향으로 평행 이동되지 않습니다.

예: [-5 5]

입력 이미지에 적용되는 세로 평행 이동 범위로, 다음 중 하나로 지정됩니다. 평행 이동 거리는 픽셀 단위로 측정됩니다.

  • 요소를 2개 가진 숫자형 벡터. 두 번째 요소가 첫 번째 요소보다 크거나 같아야 합니다. 세로 평행 이동 거리는 지정된 구간 내의 연속 균등분포에서 무작위로 선택됩니다.

  • 함수 핸들. 함수는 어떤 입력 인수도 받지 않아야 하고, 세로 평행 이동 거리를 숫자형 스칼라로 반환해야 합니다. 함수 핸들을 사용하여 서로소인 구간에서 또는 비균일 확률 분포를 사용하여 세로 평행 이동 거리를 선택합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 (MATLAB) 항목을 참조하십시오.

기본적으로 증대 이미지는 세로 방향으로 평행 이동되지 않습니다.

예: [-5 5]

객체 함수

augmentApply 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,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData는 숫자 훈련 세트를 4차원 배열 데이터로 불러옵니다. XTrain은 28x28x1x5,000 배열입니다. 여기서 각각은 다음을 나타냅니다.

  • 28은 이미지의 높이와 너비입니다.

  • 1은 채널의 개수입니다.

  • 5,000은 손으로 쓴 숫자를 나타내는 합성 이미지의 개수입니다.

YTrain은 각 관측값에 대한 레이블을 포함하는 categorical형 벡터입니다.

네트워크 검증을 위해 이미지 1,000개를 따로 빼 둡니다.

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(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 객체를 만들고 이미지 출력 크기를 지정합니다. 데이터저장소는 훈련 중에 이미지를 증대하고 이미지의 크기를 조정합니다. 데이터저장소는 메모리에 이미지를 저장하지 않으면서 이미지를 증대합니다. 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를 사용하여 전처리 옵션을 지정하십시오. 증대 이미지 데이터저장소는 훈련 데이터에 자동으로 무작위 변환을 적용합니다.

R2017b에 개발됨