분할(Segmentation)은 아래 이미지와 같이 하나의 이미지에서 같은 의미를 가지고 있는 부분을 구분해내는 Task입니다.
Segmentation 은 의료 이미지, 자율주행, 위성 및 항공 사진 등의 분야에서 많이 사용되고 있는데요.
모델이 출력하는 결과 이미지를 보고 어떻게 진행해야 아래와 같은 결과를 출력할 수 있을지 상상해봅시다.
이미지 분류에서는 이미지를 하나의 단위로 레이블을 예측하였다면 Segmentation 은 더 낮은 단위로 분류합니다.
동일한 의미(사람, 자동차, 도로, 인도, 자연물 등)마다 해당되는 픽셀이 모두 레이블링 되어있는 데이터셋을 픽셀 단위에서 레이블을 예측하게 되죠.
실제로 사람은 특정 이미지/영상에서 여러 물체를 인식하게 되는데요.
이런 의미에서 Segmentation 은 사람과 한층 더 가까운 인공지능 기술이라고 생각해볼 수 있겠습니다
의미적(Semantic)으로 '사람'으로 분류되는 개체에 대해서는 모두 동일하게 라벨링을 해주었습니다. 이러한 구분 방식을 의미적 분할(Semantic Segmentation)이라고 합니다.
위 이미지에는 여러 명의 사람이 있지만 각각은 다른 레이블로 분류되고 있습니다.
이렇게 개체까지 구분하는 방식을 Instance Segmentation 이라고 합니다.
두 방법을 단적으로 아래와 같이 구분할 수 있습니다.
이미지 분류를 위한 신경망에 사용되었던 CNN의 분류기 부분, 즉 완전 연결 신경망(Fully Connected Layer) 부분을 합성곱 층(Convolutional Layer)으로 대체한 모델입니다.
Segmentation 은 픽셀 단위로 분류가 이루어지기 때문에 픽셀의 위치 정보를 끝까지 보존해주어야 하는데요.
기존 CNN에서 사용하였던 완전 연결 신경망은 위치 정보를 무시한다는 단점을 가지고 있습니다.
그렇다보니 Segmentation 에 적용하기에는 적절하지 않았는데요.
FCN에서는 이를 합성곱 층으로 모두 대체함으로써 문제를 해결할 수 있었습니다.
먼저 FCN의 구조를 도식화한 그림을 보도록 하겠습니다.
FCN(Fully Convolutional Networks)은 딥러닝 모델 중 하나로, 주로 이미지 분할(segmentation) 문제에서 사용됩니다.
이전에 사용되던 딥러닝 모델들은 대부분 이미지 분류(image classification) 문제를 해결하기 위해 설계되었는데, 이미지 분류 문제에서는 입력 이미지가 하나의 클래스에만 속하기 때문에 출력으로 하나의 클래스를 예측하는 것이 가능합니다. 그러나 이미지 분할 문제에서는 입력 이미지의 각 픽셀마다 클래스를 예측해야 합니다. 이를 위해서는 공간 정보(spatial information)를 보존할 수 있는 모델이 필요합니다.
FCN은 이를 위해 딥러닝 모델을 완전 연결(fully connected) 레이어 대신에 컨볼루션(convolution) 레이어로만 구성합니다. 따라서, 입력 이미지를 통과시켜 얻어진 출력 특징 맵(feature map)은 입력 이미지와 동일한 크기를 가지며, 각 픽셀은 입력 이미지의 해당 위치와 연관된 정보를 가지고 있습니다.
FCN은 이렇게 얻어진 출력 특징 맵을 업샘플링하는 과정을 거쳐 최종 분할 맵(segmentation map)을 생성합니다. 업샘플링을 통해 공간 정보를 보존하면서, 입력 이미지의 모든 픽셀에 대해 클래스를 예측할 수 있습니다.
이렇게 FCN은 딥러닝 모델의 구조를 간소화하고, 컨볼루션 레이어를 사용하여 공간 정보를 보존하면서 이미지 분할 문제를 해결할 수 있습니다. 이후 FCN 모델의 발전을 거쳐 다양한 딥러닝 모델들이 개발되었습니다.
CNN에서 사용되는 것처럼 Convolution 과 Pooling 을 사용하여 이미지의 특징을 추출하는 과정을 Downsampling(디운샘플링)이라고 합니다.
반대로 원래 이미지의 크기로 키우는 과정을 Upsampling(업샘플링)이라고 합니다.
Upsampling 에는 기존 Convolution 과는 다른 Transpose Convolution 이 적용되는데요.
Transpose Convolution 에서는 각 픽셀에 커널을 곱한 값에 Stride를 주어 나타냄으로써 이미지 크기를 키워나갑니다.
아래는 2X2 이미지가 입력되었을 때 3X3 필터에 의해 Transpose Convolution 되는 과정을 나타낸 이미지입니다.
U-net 역시 Downsampling 과 Upsampling, 두 부분으로 나눌 수 있습니다.
Downsampling 에서는 Convolution 과 Maxpooling 을 거치면서 이미지의 특징을 추출하게 됩니다.
Upsampling 에서는 Convolution 과 Transpose Convolution 을 거치면서 원본 이미지와 비슷한 크기로 복원합니다.
추가적으로 Upsampling 에서 Downsampling 출력으로 나왔던 Feature map 을 적당한 크기로 잘라서 붙여준 뒤 추가 데이터로 사용합니다.
그렇다면 객체 탐지의 결과는 어떻게 평가할까요?
객체 탐지를 평가하는 지표인 IoU(Intersection over Union)에 대해 알아봅시다.
아래 왼쪽 그림의 초록색 박스처럼 정답에 해당하는 Bounding Box 를 Ground-truth 라고 합니다.
모델이 빨간색 박스처럼 예측했을 때 IoU 는 오른쪽 식을 사용하여 구할 수 있습니다.
IoU 를 사용하면 객체가 포함되어 있지만 너무 큰 범위를 잡는 문제를 해결할 수 있습니다.
아래는 Ground-truth/Prediction에 해당하는 Bounding Box 에 따라 IoU가 구해지는 예시를 나타내고 있습니다.
어떤 단계를 거쳐 분류(Classification)가 진행되는지에 따라 2-stage 방식과 1-stage 방식으로 나눌 수 있습니다.
Two Stage Detector는 일련의 알고리즘을 통해 객체가 있을 만한 곳을 추천받은(Region Proposal) 뒤에
추천받은 Region, 즉 RoI(Region of Interest)에 대해 분류를 수행하는 방식입니다.
그림으로는 아래와 같이 나타낼 수 있습니다.
One Stage Detector는 특정 지역을 추천받지 않고 입력 이미지를 Grid 등의 같은 작은 공간으로 나눈 뒤 해당 공간을 탐색하며 분류를 수행하는 방식입니다.
그림으로는 아래와 같이 나타낼 수 있습니다.
대표적인 1-stage 모델로는 SSD(Single Shot multibox Detector)계열과 YOLO(You Only Look Once)계열의 모델이 있습니다.
자세한 내용은 별도 공부 필요