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

augmentedImageDatastore

배치를 변환하여 이미지 데이터 증대

설명

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

증대 이미지를 사용하여 네트워크를 훈련시키려면 trainNetworkaugmentedImageDatastore를 사용하십시오. 자세한 내용은 Preprocess Images for Deep Learning 항목을 참조하십시오.

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

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

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

생성

구문

auimds = augmentedImageDatastore(outputSize,imds)
auimds = augmentedImageDatastore(outputSize,X,Y)
auimds = augmentedImageDatastore(outputSize,X)
auimds = augmentedImageDatastore(outputSize,tbl)
auimds = augmentedImageDatastore(outputSize,tbl,responseName)
auimds = augmentedImageDatastore(___,Name,Value)

설명

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,responseName)은 분류나 회귀 문제를 위한 증대 이미지 데이터저장소를 만듭니다. 테이블 tbl은 예측 변수와 응답 변수를 포함합니다. responseName 인수는 tbl의 응답 변수를 지정합니다.

예제

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

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

입력 인수

모두 확장

레이블이 있는 이미지로, categorical형 레이블이 있는 ImageDatastore 객체로 지정됩니다. ImageDatastore에는 이미지 분류 네트워크를 위한 데이터만 저장할 수 있습니다.

ImageDatastore는 프리페치 작업을 사용한 JPG 또는 PNG 이미지 파일의 배치 읽기를 허용합니다. 이미지 읽기를 위해 사용자 지정 함수를 사용하는 경우, ImageDatastore는 프리페치를 수행하지 않습니다.

심층 학습을 위해 이미지를 효율적으로 전처리하려면(이미지 크기 조정 포함) augmentedImageDatastore를 사용하십시오.

imageDatastorereadFcn 옵션은 일반적으로 상당히 느리므로 사용하지 마십시오.

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

배열에 NaN이 포함되어 있는 경우, 이 값이 훈련 끝까지 전파됩니다. 그러나 대부분의 경우 훈련이 수렴하지 않습니다.

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

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

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

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

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

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

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

데이터형: categorical | double

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

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

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

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

데이터형: table

입력 테이블에 있는 응답 변수의 이름으로, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 응답 변수가 1개인 문제의 경우, responseNametbl의 대응되는 변수 이름입니다. 응답 변수가 여러 개인 회귀 문제의 경우, responseNametbl의 대응되는 변수 이름으로 구성된 셀형 배열입니다.

데이터형: char | cell

속성

모두 확장

입력된 회색조 이미지 또는 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™가 필요합니다.

이 속성은 읽기 전용입니다.

각 배치에서 반환되는 관측값 개수입니다. 훈련, 예측, 분류의 경우, MiniBatchSize 속성은 trainingOptions에 정의된 미니 배치 크기로 설정됩니다.

이 속성은 읽기 전용입니다.

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

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

참고

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

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

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

    참고

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

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

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

데이터형: char | string

객체 함수

hasdata데이터를 읽을 수 있는지 확인
partitionByIndexPartition augmentedImageDatastore according to indices
preview데이터저장소에 있는 데이터의 서브셋
readRead data from augmentedImageDatastore
readall데이터저장소의 모든 데이터 읽기
readByIndexRead data specified by index from augmentedImageDatastore
reset데이터저장소를 초기 상태로 재설정
shuffleShuffle data in augmentedImageDatastore

예제

모두 축소

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

손으로 쓴 숫자를 나타내는 합성 이미지로 구성된 샘플 데이터를 불러옵니다.

[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);

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

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

R2018a에 개발됨