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

심층 학습을 위해 이미지 전처리하기

네트워크를 훈련시키고 새로운 데이터에 대해 예측을 수행하려면 이미지가 네트워크의 입력 크기와 일치해야 합니다. 네트워크의 입력 크기와 일치하도록 이미지의 크기를 조정하려면 imresize 또는 augmentedImageDatastore를 사용할 수 있습니다.

이미지에 아핀 기하 변환을 적용하여 훈련, 검증, 테스트 및 예측 데이터 세트를 증대할 수 있습니다. 훈련 이미지 증대는 네트워크가 과적합되는 것을 방지하고 훈련 이미지의 정확한 세부 정보가 기억되지 않도록 하는 데 도움이 됩니다.

transform 함수와 combine 함수를 사용하여 사용자 고유의 파이프라인에 따라 이미지를 전처리할 수 있습니다.

이미지 크기 조정하기

네트워크의 이미지 입력 크기를 구하려면 네트워크의 imageInputLayerInputSize 속성의 처음 2개 요소를 가져옵니다. 예를 들어, AlexNet에서 사전 훈련된 네트워크의 이미지 입력 크기를 가져오려면 다음을 수행합니다.

net = alexnet;
inputSize = net.Layers(1).InputSize(1:2)
inputSize =

   227   227

이미지 크기 조정 방법은 이미지 데이터형에 따라 달라집니다.

  • 단일 컬러 이미지, 단일 다중분광 이미지 또는 회색조 이미지 스택을 나타내는 3차원 배열의 크기를 조정하려면 imresize를 사용하십시오. 예를 들어, 3차원 배열 im3d의 이미지 크기를 조정하려면 다음을 수행합니다.

    im = imresize(im3d,inputSize);
  • 이미지 스택을 나타내는 4차원 배열의 크기를 조정하기 위해 imresize를 사용할 수 있습니다. 예를 들어, 4차원 배열 im4d의 이미지를 크기 조정하려면 다음을 수행합니다.

    im = imresize(im4d,inputSize);

    또는 augmentedImageDatastore를 사용하여 4차원 배열의 이미지 크기를 원하는 크기로 조정하거나 자를 수 있습니다. 기본적으로, augmentedImageDatastore는 이미지를 원하는 크기로 조정합니다. 그 대신 이미지의 중앙이나 임의의 위치에서 이미지를 자르려면 'OutputSizeMode' 이름-값 쌍 인수를 사용할 수 있습니다. 예를 들어, 4차원 배열 im4d의 이미지를 각 이미지의 중앙에서 자르려면 다음을 수행합니다.

    auimds = augmentedImageDatastore(inputSize,im4d,'OutputSizeMode','centercrop');
    

  • ImageDatastore 또는 테이블의 이미지를 크기 조정하거나 자르려면 augmentedImageDatastore를 사용하십시오. 예를 들어, 이미지 데이터저장소 imds의 이미지 크기를 조정하려면 다음을 수행합니다.

    auimds = augmentedImageDatastore(inputSize,imds);
    
    더 자세한 예제는 새로운 이미지를 분류하도록 심층 학습 네트워크 훈련시키기 항목을 참조하십시오.

증대 이미지 데이터저장소나 크기 조정된 4차원 배열을 훈련, 예측 및 분류를 위해 사용할 수 있습니다. 크기 조정된 3차원 배열은 예측 및 분류를 위해서만 사용할 수 있습니다.

훈련을 위해 이미지 증대하기

이미지 크기 조정 외에도, augmentedImageDatastore를 사용하면 회전, 반사, 전단 및 평행 이동 변환을 조합하여 이미지를 증대할 수 있습니다. 다음 도식은 trainNetwork가 증대 이미지 데이터저장소를 사용하여 각 Epoch에 대해 훈련 데이터를 변환하는 방법을 보여줍니다.

  1. 훈련 이미지를 정의합니다. 이미지를 ImageDatastore, 4차원 숫자형 배열 또는 테이블로 저장할 수 있습니다. ImageDatastore를 사용하면 너무 커서 메모리에 담을 수 없는 이미지 컬렉션에서 데이터를 가져올 수 있습니다. 이 함수는 기계 학습 및 컴퓨터 비전 응용의 더 빠른 처리를 위해 이미지 배치를 읽어 들이도록 설계되어 있습니다.

  2. imageDataAugmenter를 만들어서 회전 각도의 범위나 무작위로 반사를 적용할 지점과 같은 이미지 변환 옵션을 구성합니다.

    샘플 이미지에 적용된 변환을 미리 보려면 augment 함수를 사용하십시오.

  3. 훈련 이미지, 출력 이미지의 크기 및 imageDataAugmenter를 지정하여 augmentedImageDatastore를 만듭니다. 출력 이미지의 크기는 네트워크의 imageInputLayer의 크기와 호환되어야 합니다.

  4. trainNetwork의 데이터 소스로 증대 이미지 데이터저장소를 지정하여 네트워크를 훈련시킵니다. 훈련의 각 반복마다, 증대 이미지 데이터저장소는 훈련 데이터의 미니 배치에 임의의 변환 조합을 적용합니다.

    참고

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

이 워크플로의 예제는 증대 이미지를 사용하여 네트워크 훈련시키기 항목을 참조하십시오.

특정 응용 사례를 위한 데이터저장소

일부 데이터저장소는 이미지 배치를 읽어 들일 때 특정 이미지 전처리 연산을 수행합니다. 다음 표에는 이러한 응용 사례별 데이터저장소가 나열되어 있습니다. 이러한 모든 데이터저장소는 데이터를 trainNetwork에 필요한 2열 테이블 또는 2열 셀형 배열에 반환합니다. 이러한 데이터저장소는 Deep Learning Toolbox™를 사용하는 심층 학습 응용 사례를 위한 훈련, 검증 및 테스트 데이터 세트의 소스로 사용할 수 있습니다.

데이터저장소설명
augmentedImageDatastore심층 신경망을 훈련시키기 위해 크기 조정, 회전, 반사, 전단, 평행 이동을 비롯한 무작위 아핀 기하 변환을 적용합니다. 예제는 AlexNet을 사용한 전이 학습 항목을 참조하십시오.
pixelLabelImageDatastore의미론적 분할 네트워크를 훈련시키기 위해 이미지와 그 대응되는 실측 레이블에 동일한 아핀 기하 변환을 적용합니다(Computer Vision Toolbox™ 필요). 예제는 심층 학습을 사용한 의미론적 분할 항목을 참조하십시오.
randomPatchExtractionDatastore이미지 또는 픽셀 레이블 이미지로부터 임의 부분의 여러 개의 쌍을 추출합니다(Image Processing Toolbox™필요). 선택적으로 이런 부분의 쌍에 동일한 무작위 아핀 기하 변환을 적용할 수 있습니다. 예제는 Single Image Super-Resolution Using Deep Learning 항목을 참조하십시오.
denoisingImageDatastore잡음 제거 네트워크를 훈련시키기 위해 임의로 생성된 가우스 잡음을 적용합니다(Image Processing Toolbox 필요).

고급 이미지 전처리

응용 사례별 데이터저장소에서 제공하는 것보다 일반적이고 복잡한 이미지 전처라 연산을 수행하려면 transform 함수와 combine 함수를 사용할 수 있습니다. transform 함수는 사용자가 정의한 사용자 지정 변환 함수에 따라 기본 데이터저장소의 데이터 배치를 처리합니다. combine 함수는 복수의 데이터저장소에서 읽어 들인 데이터를 trainNetwork에 필요한 2열 테이블 또는 2열 셀형 배열 형식으로 변환하고, 기본 데이터저장소 간의 패리티를 유지합니다.

함수결과 데이터저장소설명
transformTransformedDatastore기본 데이터저장소에서 읽어 들인 데이터의 배치를 사용자 고유의 전처리 파이프라인에 따라 변환합니다.
combineCombinedDatastore둘 이상의 기본 데이터저장소에서 읽어 들인 데이터를 가로로 결합합니다.

기본 데이터저장소는 read 함수를 사용하여 데이터 배치를 읽어 들입니다. 사용자 지정 변환 함수는 read 함수에서 반환되는 형식으로 데이터를 받아야 합니다. 이미지 데이터의 경우, 형식은 기본 ImageDatastoreReadSize 속성에 좌우됩니다.

  • ReadSize가 1이면 변환 함수는 정수형 배열을 받아야 합니다. 배열의 크기는 ImageDatastore에 있는 이미지의 유형과 일치합니다. 예를 들어, 회색조 이미지는 차원이 mxn이고, 트루컬러 이미지는 차원이 mxnx3이고, 채널이 c개인 다중분광 이미지는 차원이 mxnxc입니다.

  • ReadSize가 1보다 크면 변환 함수는 배치에 있는 각 이미지에 대응되는 이미지 데이터로 구성된 셀형 배열을 받아야 합니다.

transform 함수는 네트워크의 입력 크기와 일치하는 데이터를 반환해야 합니다. transform 함수는 일대다 관측값 매핑을 지원하지 않습니다.

transform 함수는 기본 ImageDatastore가 JPG 또는 PNG 이미지 파일의 배치를 읽어 들일 때 프리페치를 지원합니다. imageDatastorereadFcn 옵션은 일반적으로 상당히 느리므로 이 옵션을 사용하여 사용자 지정 변환 함수를 지정하지 마십시오. 이미지 읽기를 위해 사용자 지정 함수를 사용하는 경우, ImageDatastore는 프리페치를 수행하지 않습니다.

참고 항목

| | | | |

관련 예제

세부 정보