Main Content

augmentedImageDatastore

배치를 변환하여 영상 데이터 증대

설명

증대 영상 데이터저장소는 크기 조정, 회전, 반사와 같은 선택적 전처리를 사용하여 훈련 데이터, 검증 데이터, 테스트 데이터, 예측 데이터의 배치를 변환합니다. 딥러닝 신경망의 입력 크기와 호환되도록 영상의 크기를 조정합니다. 무작위 방식의 전처리 연산으로 영상 데이터를 증대 훈련시키는 것은 신경망이 과적합되는 것을 막고 훈련 영상의 세부 정보를 정확히 기억하지 못하게 하는 데 도움이 됩니다.

증대 영상을 사용하여 신경망을 훈련시키려면 trainnet 함수에 augmentedImageDatastore를 사용하십시오. 자세한 내용은 딥러닝을 위해 영상 전처리하기 항목을 참조하십시오.

  • 증대 영상 데이터저장소를 훈련 영상의 소스로 사용하면 각 Epoch에 사용되는 훈련 데이터가 무작위로 섭동되어 Epoch마다 조금씩 다른 데이터 세트가 사용됩니다. 각 Epoch에 사용되는 실제 훈련 영상의 개수는 변경되지 않습니다. 변환된 영상은 메모리에 저장되지 않습니다.

  • imageInputLayer는 원래 데이터 세트의 평균이 아닌 증대 영상의 평균을 사용하여 영상을 정규화합니다. 이 평균은 첫 번째로 증대된 Epoch에 대해 한 번 계산됩니다. 다른 모든 Epoch도 동일하게 이 평균을 사용하므로, 훈련 중에 평균값 영상이 변경되지 않습니다.

  • 딥러닝을 위해 영상을 효율적으로 전처리하려면(영상 크기 조정 포함) 증대 영상 데이터저장소를 사용합니다. ImageDatastore 객체의 ReadFcn 옵션dmf 사용하지 마십시오. ImageDatastore는 프리페치 작업을 사용한 JPG 또는 PNG 영상 파일의 배치 읽기를 허용합니다. ReadFcn 옵션을 사용자 지정 함수로 설정하는 경우, ImageDatastore는 프리페치를 수행하지 않고 일반적으로 상당히 느립니다.

기본적으로 augmentedImageDatastore는 출력 크기와 맞추기 위해 영상의 크기를 조정합니다. imageDataAugmenter를 사용하여 영상 변환 옵션을 추가로 구성할 수 있습니다.

생성

설명

auimds = augmentedImageDatastore(outputSize,imds)는 영상 데이터저장소 imds의 영상을 사용하여 분류 문제를 위한 증대 영상 데이터저장소를 만듭니다. 출력 크기를 OutputSize 속성에 설정합니다.

auimds = augmentedImageDatastore(outputSize,X,Y)는 분류나 회귀 문제를 위한 증대 영상 데이터저장소를 만듭니다. 배열 X는 예측 변수를 포함하고 배열 Y는 categorical형 레이블 또는 숫자형 응답 변수를 포함합니다.

auimds = augmentedImageDatastore(outputSize,X)는 영상 데이터인 배열 X의 응답 변수 예측을 위한 증대 영상 데이터저장소를 만듭니다.

auimds = augmentedImageDatastore(outputSize,tbl)은 분류나 회귀 문제를 위한 증대 영상 데이터저장소를 만듭니다. 테이블 tbl은 예측 변수와 응답 변수를 포함합니다.

auimds = augmentedImageDatastore(outputSize,tbl,responseNames)는 분류나 회귀 문제를 위한 증대 영상 데이터저장소를 만듭니다. 테이블 tbl은 예측 변수와 응답 변수를 포함합니다. responseNames 인수는 tbl의 응답 변수를 지정합니다.

예제

auimds = augmentedImageDatastore(___,Name,Value)는 이름-값 쌍을 사용하여 ColorPreprocessing, DataAugmentation, OutputSizeMode, DispatchInBackground의 속성을 설정하고 증대 영상 데이터저장소를 만듭니다. 여러 개의 이름-값 쌍을 지정할 수 있습니다. 각 속성 이름을 따옴표로 묶습니다.

예를 들어, augmentedImageDatastore([28,28],myTable,'OutputSizeMode','centercrop')은 영상을 중앙에서 자르는 증대 영상 데이터저장소를 만듭니다.

입력 인수

모두 확장

영상 데이터저장소로, ImageDatastore 객체로 지정됩니다.

영상으로, 4차원 숫자형 배열로 지정됩니다. 처음 3개의 차원은 높이, 너비, 채널이고, 마지막 차원은 개별 영상의 인덱스입니다.

데이터형: single | double | uint8 | int8 | uint16 | int16 | uint32 | int32

분류 또는 회귀에 대한 응답 변수로, 다음 중 하나로 지정됩니다.

  • 분류 문제의 경우, Y는 영상 레이블로 구성된 categorical형 벡터입니다.

  • 회귀 문제의 경우, Y는 다음이 될 수 있습니다.

    • n×r 숫자형 행렬. n은 관측값의 개수이고 r은 응답 변수의 개수입니다.

    • h×w×c×n 숫자형 배열. h×w×c는 응답 변수 하나의 크기이고 n은 관측값의 개수입니다.

응답 변수는 NaN을 포함해서는 안 됩니다.

데이터형: categorical | double

입력 데이터로, 테이블로 지정됩니다. tbl은 첫 번째 열에 예측 변수를 절대 영상 경로나 상대 영상 경로, 또는 영상으로 포함해야 합니다. 응답 변수의 유형과 위치는 문제에 따라 달라집니다.

  • 분류 문제의 경우, 응답 변수는 영상에 대한 레이블을 포함하는 categorical형 변수여야 합니다. augmentedImageDatastore 함수를 호출할 때 응답 변수의 이름을 지정하지 않는다면 두 번째 열에 응답 변수가 있어야 합니다. 응답 변수가 tbl의 다른 열에 있다면 responseNames 인수를 사용하여 응답 변수 이름을 지정해야 합니다.

  • 회귀 문제의 경우, 응답 변수는 첫 번째 열 뒤에 오는 열(들)에 있는 숫자형 값이어야 합니다. 응답 변수는 스칼라 유형으로 여러 열에 있거나, 숫자형 벡터나 3차원 숫자형 배열로 구성된 셀형 배열로 하나의 열에 있을 수 있습니다. 응답 변수의 이름을 지정하지 않으면 augmentedImageDatastoretbl의 나머지 열을 응답 변수로 받습니다. responseNames 인수를 사용하여 응답 변수 이름을 지정할 수 있습니다.

응답 변수는 NaN 값을 포함해서는 안 됩니다. 예측 변수 데이터에 NaN이 포함되어 있으면 이 값은 훈련 끝까지 전파되지만, 대부분의 경우 훈련이 수렴하지 않습니다.

데이터형: table

입력 테이블에 있는 응답 변수의 이름으로, 다음 중 하나로 지정됩니다.

  • 단일 응답 변수를 갖는 분류 또는 회귀 작업의 경우, responseNames는 입력 테이블의 응답 변수를 포함하는 문자형 벡터 또는 string형 스칼라여야 합니다.

    여러 응답 변수를 갖는 회귀 작업의 경우, responseNames는 입력 테이블의 응답 변수를 포함하는 string형 배열 또는 문자형 벡터로 구성된 셀형 배열이어야 합니다.

데이터형: char | cell | string

속성

모두 확장

입력된 회색조 영상 또는 RGB 영상에 수행되는 색 전처리 연산으로, 'none', 'gray2rgb' 또는 'rgb2gray'로 지정됩니다. 영상 데이터저장소가 회색조 영상과 RGB 영상을 모두 포함하는 경우, 모든 출력 영상이 imageInputLayer가 요구하는 채널 개수를 갖도록 ColorPreprocessing을 사용하십시오.

요구되는 색 채널 개수를 입력 영상이 이미 갖고 있는 경우에는 색 전처리 연산이 수행되지 않습니다. 예를 들어, 값을 'gray2rgb'로 지정했는데 입력 영상에 이미 3개의 채널이 있는 경우, 색 전처리가 수행되지 않습니다.

참고

augmentedImageDatastore 객체는 rgb2gray 함수를 사용하여 RGB 영상을 회색조로 변환합니다. 영상에 R, G, B에 대응되지 않는 3개의 채널이 있는 경우(예: L*a*b* 컬러스페이스에 있는 영상), ColorPreprocessing을 사용하면 좋지 않은 결과가 나올 수 있습니다.

복수의 입력 영상이 1개 또는 3개의 채널을 갖지 않는 경우(예: 다중분광 영상 또는 초분광 영상), 색 전처리 연산이 수행되지 않습니다. 이 경우에는 모든 입력 영상의 채널 개수가 같아야 합니다.

데이터형: char | string

입력 영상에 적용할 전처리로, imageDataAugmenter 객체 또는 'none'으로 지정됩니다. DataAugmentation'none'인 경우, 입력 영상에 전처리가 적용되지 않습니다.

훈련 중이거나 예측 또는 분류 중일 때의 백그라운드 디스패치 관측값으로, false 또는 true로 지정됩니다. 백그라운드 디스패치를 사용하려면 Parallel Computing Toolbox™가 필요합니다.

증대 영상 데이터저장소는 trainnet 함수와 predictminibatchpredict와 같은 추론 함수와 함께 사용된 경우에만 백그라운드 디스패치를 수행합니다. 데이터저장소의 read 함수를 직접 호출한 경우에는 백그라운드 디스패치가 이루어지지 않습니다.

각 배치에서 반환되는 관측값 개수입니다. MiniBatchSize의 값은 데이터저장소를 만든 후에만 변경할 수 있습니다. 훈련, 예측, 분류의 경우, MiniBatchSize 속성은 trainingOptions에 정의된 미니 배치 크기로 설정됩니다.

읽기 전용 속성입니다.

증대 영상 데이터저장소에 있는 관측값의 총 개수입니다. 관측값의 개수는 훈련 Epoch 1회의 길이입니다.

출력 영상의 크기로, 2개의 양의 정수로 구성된 벡터로 지정됩니다. 첫 번째 요소는 출력 영상의 행 개수를 지정하고, 두 번째 요소는 열 개수를 지정합니다.

참고

영상 출력 크기를 요소를 3개 가진 벡터로 지정하여 augmentedImageDatastore를 만든 경우, 데이터저장소는 세 번째 요소를 무시합니다. 대신 데이터저장소는 ColorPreprocessing의 값에 따라 출력 영상의 차원을 결정합니다. 예를 들어, OutputSize[28 28 1]로 지정했는데 ColorPreprocessing'gray2rgb'로 설정한 경우, 출력 영상의 크기는 28×28×3이 됩니다.

출력 영상 크기 조정에 사용할 메서드로, 다음 중 하나로 지정됩니다.

  • 'resize' — 쌍선형 보간을 사용하여 출력 크기에 맞도록 영상을 스케일링합니다.

    참고

    augmentedImageDatastoreimresize의 쌍선형 보간 메서드를 안티에일리어싱과 함께 사용합니다. 쌍선형 보간을 사용하면 영상 처리를 빠르게 수행하는 동시에 왜곡 문제(예: 최근접이웃 보간으로 인한 왜곡)를 방지할 수 있습니다. 반면에 imresize는 기본적으로 안티에일리어싱과 함께 쌍삼차 보간을 사용하여 처리 시간이 오래 걸리는 대신 고품질의 크기 조정된 영상을 생성합니다.

  • 'centercrop' — 훈련 영상의 중앙에서 자르기를 수행합니다. 자르기의 크기는 출력 크기와 같습니다.

  • 'randcrop' — 훈련 영상에서 무작위 자르기를 수행합니다. 무작위 자르기의 크기는 출력 크기와 같습니다.

데이터형: char | string

객체 함수

combine여러 데이터저장소의 데이터 결합
hasdata데이터를 읽을 수 있는지 확인
numpartitions데이터저장소 파티션 개수
partition데이터저장소 파티셔닝
partitionByIndexPartition augmentedImageDatastore according to indices
preview데이터저장소에 있는 데이터의 서브셋 미리보기
readRead data from augmentedImageDatastore
readall데이터저장소의 모든 데이터 읽기
readByIndexRead data specified by index from augmentedImageDatastore
reset데이터저장소를 초기 상태로 재설정
shuffleShuffle data in augmentedImageDatastore
subsetCreate subset of datastore or FileSet
transform데이터저장소 변환
isPartitionableDetermine whether datastore is partitionable
isShuffleableDetermine whether datastore is shuffleable

예제

모두 축소

증대 영상 데이터를 사용하여 컨벌루션 신경망을 훈련시킵니다. 데이터 증대는 신경망이 과적합되는 것을 방지하고 훈련 영상의 정확한 세부 정보가 기억되지 않도록 하는 데 도움이 됩니다.

손으로 쓴 숫자를 나타내는 합성 영상으로 구성된 샘플 데이터를 불러옵니다. 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);

  • imtile 함수를 사용하면 변환된 복수의 영상을 하나의 Figure에 시각화할 수 있습니다. 예를 들어, 다음 코드는 증대 영상 데이터저장소 auimds에서 변환된 영상으로 구성된 미니 배치 1개를 표시합니다.

    minibatch = read(auimds);
    imshow(imtile(minibatch.input))
  • 기본적으로 크기 조정이 영상에 수행되는 유일한 영상 전처리 연산입니다. imageDataAugmenter 객체와 DataAugmentation 이름-값 쌍 인수를 함께 사용하면 전처리 연산을 추가로 활성화할 수 있습니다. 증대 영상 데이터저장소에서 영상을 읽어 들일 때마다 무작위로 조합된 다른 전처리 연산이 영상에 적용됩니다.

버전 내역

R2018a에 개발됨