Main Content

딥러닝을 위해 영상 전처리하기

신경망을 훈련시키고 새로운 데이터에 대해 예측을 수행하려면 영상이 신경망의 입력 크기와 일치해야 합니다. 신경망에 맞게 영상의 크기를 조정하려면 데이터를 필요한 크기로 다시 스케일링하거나 자를 수 있습니다.

데이터에 무작위 방식의 증강을 적용하여 훈련 데이터의 양을 효과적으로 늘릴 수 있습니다. 또한 증강을 사용하면 신경망이 왜곡된 영상 데이터에 대해 일관된 결과를 도출하도록 훈련시킬 수 있습니다. 예를 들어, 신경망이 회전된 입력 영상에 대해서도 일관된 결과를 도출하도록 하기 위해 입력 영상에 무작위로 회전을 가할 수 있습니다. augmentedImageDatastore (Deep Learning Toolbox)는 분류 문제용 2차원 영상에 다양한 방식의 증강을 편하게 적용할 수 있는 방법을 제공합니다.

그 밖의 고급 전처리 연산이 필요하거나 회귀 문제를 위해 영상을 전처리해야 하거나, 3차원 볼륨 영상을 전처리해야 하는 경우에는 내장된 데이터저장소를 사용할 수 있습니다. transform 함수와 combine 함수를 사용하여 사용자 고유의 파이프라인에 따라 영상을 전처리할 수도 있습니다.

재스케일링 또는 자르기를 사용하여 영상 크기 조정하기

영상 데이터를 숫자형 배열, ImageDatastore 객체 또는 테이블로 저장할 수 있습니다. ImageDatastore를 사용하면 너무 커서 메모리에 담을 수 없는 영상 컬렉션에서 데이터를 배치 단위로 가져올 수 있습니다. 증강 영상 데이터저장소나 크기 조정된 4차원 배열을 훈련, 예측 및 분류를 위해 사용할 수 있습니다. 크기 조정된 3차원 배열은 예측 및 분류를 위해서만 사용할 수 있습니다.

신경망 입력 크기와 일치하도록 영상 데이터의 크기를 조정하는 방법에는 두 가지가 있습니다.

  • 재스케일링은 영상의 높이와 너비에 스케일링 인자를 곱합니다. 스케일링 인자가 세로 방향과 가로 방향에서 동일하지 않은 경우, 재스케일링은 픽셀의 공간 범위와 종횡비를 변경합니다.

  • 자르기는 영상의 하위 영역을 추출하고 각 픽셀의 공간 범위를 보존합니다. 영상을 중앙에서 자르거나 임의의 위치에서 자를 수 있습니다.

크기 조정 옵션데이터 형식크기 조정 함수샘플 코드
재스케일링
  • 하나의 색 또는 다중분광 영상을 나타내는 3차원 배열

  • 회색조 영상 스택을 나타내는 3차원 배열

  • 영상 스택을 나타내는 4차원 배열

imresize

im = imresize(I,outputSize);

outputSize는 다시 스케일링할 영상의 차원을 지정합니다.

  • 영상 스택을 나타내는 4차원 배열

  • ImageDatastore

  • 테이블

augmentedImageDatastore (Deep Learning Toolbox)

auimds = augmentedImageDatastore(outputSize,I);

outputSize는 다시 스케일링할 영상의 차원을 지정합니다.

자르기
  • 하나의 색 또는 다중분광 영상을 나타내는 3차원 배열

imcrop

im = imcrop(I,rect);

rect는 2차원 자르기 윈도우의 크기와 위치를 지정합니다.

  • 회색조 영상 스택을 나타내는 3차원 배열

  • 컬러 영상 스택 또는 다중분광 영상 스택을 나타내는 4차원 배열

imcrop3

im = imcrop3(I,cuboid);

cuboid는 3차원 자르기 윈도우의 크기와 위치를 지정합니다.

  • 영상 스택을 나타내는 4차원 배열

  • ImageDatastore

  • 테이블

augmentedImageDatastore (Deep Learning Toolbox)

auimds = augmentedImageDatastore(outputSize,I,'OutputSizeMode',m);

입력 영상의 중앙에서 자르려면 m"centercrop"으로 지정합니다.

입력 영상의 임의의 위치에서 자르려면 m"randcrop"으로 지정합니다.

무작위 기하 변환을 사용하여 훈련용 영상 증강하기

영상 분류 문제를 위해 augmentedImageDatastore (Deep Learning Toolbox)를 사용하여 크기 조정, 회전, 반사, 전단, 평행 이동 변환을 무작위로 결합하여 영상을 증강할 수 있습니다.

다음 도식은 trainnet (Deep Learning Toolbox)이 증강 영상 데이터저장소를 사용하여 각 Epoch에 대해 훈련 데이터를 변환하는 방법을 보여줍니다. 데이터 증강을 사용하면 훈련의 각 Epoch마다 각 영상의 무작위로 증강된 버전 하나가 사용됩니다. 이 워크플로의 예제는 Retrain Neural Network to Classify New Images (Deep Learning Toolbox) 항목을 참조하십시오.

Diagram showing training process using augmentation. There is an augmented image datastore showing a collection of training images and an image data augmenter. There is a box with label "trainnet" with showing the images used for epoch 1, epoch 2, and so on. There are arrows from the datastore to each epoch Each epoch shows the same images, but with different transformations. To illustrate this detail, there is an icon labeled "transform mini-batches" on each arrow from the datastore to the epochs.

  1. 훈련 영상을 지정합니다.

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

    샘플 영상에 적용된 변환을 미리 보려면 augment (Deep Learning Toolbox) 함수를 사용하십시오.

  3. augmentedImageDatastore (Deep Learning Toolbox)를 만듭니다. 훈련 영상, 출력 영상의 크기 및 imageDataAugmenter를 지정합니다. 출력 영상의 크기는 신경망의 imageInputLayer (Deep Learning Toolbox)의 크기와 호환되어야 합니다.

  4. trainnet (Deep Learning Toolbox)의 데이터 소스로 증강 영상 데이터저장소를 지정하여 신경망을 훈련시킵니다. 훈련의 각 반복마다, 증강 영상 데이터저장소는 훈련 데이터의 미니 배치에 있는 영상에 임의의 변환 조합을 적용합니다.

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

내장된 데이터저장소를 사용하여 추가적인 영상 처리 연산 수행하기

일부 데이터저장소는 데이터 배치를 읽어 들일 때 제한된 특정 영상 전처리 연산을 수행합니다. 다음 표에는 이러한 응용 사례별 데이터저장소가 나열되어 있습니다. 이러한 데이터저장소는 Deep Learning Toolbox™를 사용하는 딥러닝 응용 사례를 위한 훈련, 검증 및 테스트 데이터 세트의 소스로 사용할 수 있습니다. 이들 데이터저장소는 모두 trainnet에서 지원하는 형식으로 영상 데이터를 반환합니다.

데이터저장소설명
augmentedImageDatastore (Deep Learning Toolbox)심층 신경망을 훈련시키기 위해 크기 조정, 회전, 반사, 전단, 평행 이동을 비롯한 무작위 아핀 기하 변환을 적용합니다. 예제는 Retrain Neural Network to Classify New Images (Deep Learning Toolbox) 항목을 참조하십시오.
randomPatchExtractionDatastore영상 또는 픽셀 레이블 영상으로부터 임의 부분의 여러 개의 쌍을 추출합니다(Image Processing Toolbox™필요). 선택적으로 이런 부분의 쌍에 동일한 무작위 아핀 기하 변환을 적용할 수 있습니다. 예제는 딥러닝을 사용하여 영상 해상도 높이기 (Deep Learning Toolbox) 항목을 참조하십시오.
denoisingImageDatastore잡음 제거 신경망을 훈련시키기 위해 임의로 생성된 가우스 잡음을 적용합니다(Image Processing Toolbox 필요).

결합 및 변환을 적용하여 추가적으로 영상 처리하기

응용 사례별 데이터저장소에서 제공하는 것보다 일반적이고 복잡한 영상 전처리 연산을 수행하려면 transform 함수와 combine 함수를 사용할 수 있습니다. 자세한 내용은 Datastores for Deep Learning (Deep Learning Toolbox) 항목을 참조하십시오.

영상 데이터가 있는 데이터저장소 변환하기

transform 함수는 데이터저장소(기본 데이터저장소)에서 읽어 들인 데이터를 사용자가 정의한 변환 함수에 따라 변환하여 변형된 형식의 데이터저장소를 만듭니다.

사용자 지정 변환 함수는 기본 데이터저장소의 read 함수가 반환하는 형식으로 데이터를 받아야 합니다. ImageDatastore에 있는 영상 데이터의 경우, 형식은 ReadSize 속성에 좌우됩니다.

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

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

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

transform 함수는 기본 ImageDatastore가 JPG 또는 PNG 영상 파일의 배치를 읽어 들일 때 프리페치를 지원합니다. 이러한 영상 유형의 경우, ImageDatastorereadFcn 인수를 사용하여 영상 전처리를 적용하지 마십시오. 이 옵션은 일반적으로 상당히 느립니다. 사용자 지정 read 함수를 사용하는 경우, ImageDatastore는 프리페치를 수행하지 않습니다.

영상 데이터가 있는 데이터저장소 결합하기

combine 함수는 복수의 데이터저장소에서 읽어 들인 데이터를 결합하고 데이터저장소 간의 패리티를 유지합니다.

  • image-to-image 회귀 신경망과 같이 입력값이 1개인 훈련 신경망의 경우 데이터를 2열 테이블 또는 2열 셀형 배열로 결합합니다.

  • 입력값이 여러 개인 훈련 신경망의 경우 데이터를 numInputs+1 열 셀형 배열로 결합합니다.

참고 항목

(Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox) | | | |

관련 예제

세부 정보