Main Content

imageDataAugmenter

영상 데이터 증대 구성

설명

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

imageDataAugmenteraugmentedImageDatastore가 증대 영상으로 구성된 배치를 생성하기 위해 사용합니다. 자세한 내용은 무작위 기하 변환을 사용하여 훈련용 영상 증대하기 항목을 참조하십시오.

생성

설명

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

예제

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

속성

모두 확장

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

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

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

회색조 영상과 컬러 영상의 디폴트 채우기 값은 0입니다. 범주 영상의 경우 디폴트 채우기 값은 '<undefined>' 레이블입니다. 훈련 중에 trainnet 함수는 채워진 픽셀을 무시합니다.

예: 128

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

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

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

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

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

기본적으로 증대 영상은 회전되지 않습니다.

예: [-45 45]

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

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

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

기본적으로 증대 영상은 스케일링되지 않습니다.

예: [0.5 4]

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

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

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

기본적으로 증대 영상은 가로 방향으로 스케일링되지 않습니다.

참고

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

예: [0.5 4]

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

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

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

기본적으로 증대 영상은 세로 방향으로 스케일링되지 않습니다.

참고

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

예: [0.5 4]

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

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

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

기본적으로 증대 영상은 가로 방향으로 전단되지 않습니다.

예: [0 45]

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

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

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

기본적으로 증대 영상은 세로 방향으로 전단되지 않습니다.

예: [0 45]

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

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

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

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

예: [-5 5]

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

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

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

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

예: [-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은 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에 개발됨