이전 포스팅에서 CNN을 활용하여 입력된 이미지의 범주를 예측하는 이미지 분류에 대해 정리했습니다. 이번 포스팅에서는 자율주행, 의료, 불량품 인식 등에서 사용되는 분할(Segmentation)과 객체 탐지(Object Detection)에 대해 정리해보겠습니다.
분할은 하나의 이미지에서 같은 의미를 가진 객체를 구분하는 Task입니다. CNN에서 이미지를 하나의 단위로 하여 레이블을 분류했다면, 분할은 픽셀 단위로 이미지를 분류합니다. 동일한 의미를 지닌 객체가 이미지 안에서 픽셀 단위로 Labeling 되어 있고, 모델도 마찬가지로 픽셀 단위에서 레이블을 예측합니다.
동일한 의미를 지닌 객체를 같은 범주로 Labeling하는 것을 Sementic Segmentation이라고 합니다. 하지만 모든 객체를 다르게 구분하는 Task가 필요할 때가 있습니다. 예를 들어, 자동자가 줄지어 늘어져 있는 경우에 의미론적 분할에서는 늘어져 있는 자동차가 몇대인지 알 수 있는 방법이 없습니다. 반면에 인스턴스 분할에서는 각각의 객체를 분할하여 인식하기 때문에 자동차의 숫자를 파악할 수 있습니다.
의미론적 분할에서는 의지가 하나로 보이지만, 인스턴스 분할에서는 각각의 의자를 구분할 수 있습니다.
그럼 이미지 분할 Task를 위해 어떤 모델이 사용되는지 살펴보겠습니다.
FCN은 CNN의 분류기 부분, 즉 완전 연결 신경망 부분을 합성곱 층으로 대체한 모델입니다.
Segmentation은 이미지를 픽셀 단위로 분류합니다. 그래서 픽셀의 위치 정보를 끝까지 잘 보존해야 합니다. CNN에서 완전 연결 신경망은 이미지의 위치정보(=픽셀 정보)가 보존되다가 마지막 완전 연결 신경망에서 Flatten이 적용되어 위치 정보가 무시된다는 단점이 있는데, 이를 합성곱 신경망으로 대체하여 Segmentation task에 적용합니다.
위 예시에서 이미지의 크기가 갑자기 커지는 부분이 합성곱 신경망이 적용되는 부분입니다. 하지만, 이전 포스팅에서 합성곱 신경망은 이미지의 크기를 줄인다고 했습니다. 어떻게 줄어들었던 이미지의 크기가 커질 수 있는 걸까요? 위와 같이 줄어든 이미지의 크기를 다시 키우는 방법을 Upsampling이라고 합니다.
Upsampling에는 기존 Convolution과 다른 Transpose Convolution이 적용됩니다. 위 이미지는 2 2 이미지가 입력되었을 때 3 3 필터에 의해 Transpose Convolution이 적용되는 모습입니다.
U-net은 이미지의 특징을 추출하기 위한 Downsampling과 Downsampling 과정에서 축소된 이미지를 원래 이미지와 비슷한 크기로 키워 픽셀 단위로 레이블을 비교하기 위한 Upsampling 과정으로 이루어져 있습니다.
위의 구성은 앞서 설명한 FCN과 비슷하지만, U-net은 Downsampling 과정에서 나왔던 Feature map을 적당한 크기로 크롭하여 Upsampling의 결과물에 붙여줍니다. 이렇게 함으로써 학습 과정에서도 이미지의 특징을 보존할 수 있는 skip-connection과 비슷한 효과를 낼 수 있습니다.
앞서 설명한 분류가 이미지를 객체 별로 분할하는 방법이라면 Object Detection은 이미지 안에서 레이블에 해당하는 객체를 찾아내는 방법입니다. 위 이미지처럼 객체의 경계에 Bounding Box를 만들어 박스 내의 객체가 속하는 클래스가 무엇인지를 분류합니다.
Bounding Box가 객체를 제대로 분류했는지 평가하는 방법으로 IoU를 사용하는데, 객체를 적절히 포착하는 Ground-Truth와 Bounding Box의 교집합을 합집합으로 나누는 방식입니다.
IoU를 사용하면 객체가 포함되어 있지만 너무 큰 범위를 잡는 문제를 해결할 수 있습니다. 0~1 사이의 값을 가지며 1에 가까울 수록 작은 Bounding Box로 객체를 적절히 포착했다는 의미입니다. Object Detection은 Two-stage 방식과 One-stage으로 나눌 수 있습니다.
일련의 알고리즘을 통해 객체가 있을 만한 곳을 추천받아서 추천받은 Region에 대해 분류를 수행하는 방식입니다. 정확도는 높지만 추천 Region(약 2000개 이상)에 대해 분류를 진행하기 때문에 속도가 느립니다. 대표적으로 R-CNN계열의 모델이 있습니다.
특정 지역을 추천받지 않고 입력 이미지를 Grid로 나누어 해당 공간을 탐색하며 분류를 수행하는 방식입니다. 객체가 있을 만한 곳을 추천받는 Region Proposal 과정이 없기 때문에 속도는 빠르지만 정확도가 Two-stage 방식에 비해서는 낮을 수 있습니다. 대표적으로 SSD 계열과 YOLO 계열의 모델이 있습니다.