이미지 관련 연구는 Segmentation은 Object Detection과 더불어 많이 연구되고 있다고 얼마전까지 생각하였는데, 최근 연구를 하며 드는 생각이 내가 트래킹하고 있는 연구는 Segmentation 중 Semantic Segmentation 위주라는 걸 다시금 생각하게 되었다. Segmentation은 아래와 같이 크게 Semantic, Instance, Panoptic으로 구분되며 경우에 따라 Object Detaction도 같이 얘기되곤한다.

Segmentation은 인접한 픽셀 사이에서 유사성을 찾아 그룹화하는 것이 주 목적인 연구이다. 여기서 Semantic Segmentation은 그룹의 클레스라벨을 분류하는 것을 목표로 하며, Instance Segmentation은 그룹의 클레스 뿐아니라 ID를 부여하여 같은 클레스 내에서도 구분할수 있게 하는 것을 목표로 한다. Panoptic Segmentation은 셀 수 있는 클레스는 Instance Segmentation을 하고, 하늘이나 바다와 같이 셀 수 없는 클레스는 Semantic Segmentation을 하는 것을 목표로 한다.
Semantic Segmentation
Semantic Segmentation은 Pixel단위로 Classification을 수행하는 문제로 생각될 수 있다. 일반적으로 내가 연구하는 눈의 경우와 같이 동공과 홍채처럼 같은위치에 겹쳐질 수 있는 경우에는 데이터를 각각의 채널로 구성하여, 마지막레이어로 Sigmoid를 사용하여 분류하는 형식으로 구성하고, 동시에 존재할 수 없는 경우에는 Pixel에 0, 1, 2와 같이 표현한 후 마지막 레이어를 Softmax로 사용하여 분류하는 형식으로 자료와 모델을 구성한다.
대표적인 연구사례로 FCN(Fully Convolutional Net)이 있는데, FCN은 이미지 분류에서 우수한 성능을 보인 CNN 기반의 모델(AlexNet, VGG16, GoogLeNet)을 Segmentation 목적에 맞게 변화한 것이다. Segmentation의 입장에서는 위치정보가 중요하므로, 위치 정보를 유지할 수 없는 fully Connected layer 대신 위치정보를 유지하는 Convolutional layer를 사용하는 식으로 발전했으며, 레이어가 깊어짐에 따라 차원이 축소되며, 자세한 위치정보를 잃게되는 문제점으로 인해 차원이 큰 초기 레이어 정보를 입력해주는 Unet과 같은 구조를 Deconvolutional 연산에서 고려하는 식으로 발전하고 있다. Unet에서는 이러한 방식을 Skip Connection이라 부르고 있다.

Instance Segmentation
Instance Segmentation은 동일한 클레스 내에서도 개별 식별이 가능하게 하는게 목표이다. Mask RCNN 알고리즘이 대표적인 예라할 수 있다. MaskRCNN을 알아보기전에 RCNN(Regions with Convolutional Neuron Networks features)과 Object Detection을 먼저 알아보자.
Object Detaction과 RCNN
Object Detaction은 여러 물체에 대해 클레스를 분류하는 문제와 그 물체의 영역이 있는 Bounding Box의 위치정보를 나타내는 Localization 문제가 결합된 문제이다. 이 두가지 문제를 한꺼번에 해결하는 알고리즘을 One Stage Detector방식, 각각 해결하는 알고리즘을 Two Stage Detectors 방식이라고 부른다.

RCNN
RCNN은 Two stage Detectors 방식으로 물체의 위치를 찾는 Region Proposal, 물체를 분류하는 Region Classification으로 구성되어 있다.
Region Proposal
물체의 위치를 찾아 Bounding Box를 찾기위해 RCNN은 Selective Search라는 알고리즘을 사용한다. Selective Search에 의해 나온 영역은 다양한 사이즈로 나오기 때문에 이를 같은 사이즈로 통일시키는 Warping작업을 거친다.
Selective Search
객체와 주변 사이의 색감, 질감의 차이 등을 파악하여 인접한 유사 픽셀끼리 묶어 위치를 파악할 수 있도록 하는 알고리즘으로, 랜덤하게 Bounding Box를 생성하고, 이를 계층적으로 그룹화하여 조금씩 결합해 ROI(Regions of Interest)라는 영역을 제안하는 방식이다.

Region Classification
앞어 Selective Search와 Warping 작업을 통해 얻은 영역에 AlexNet을 거쳐 feature를 확보하고, 이를 다시 SVM을 거쳐 분류를 수행한다. Bounding Box는 Region Proposal 을 통해 얻은 Bounding Box인 P와 실제 Ground Truth사이의 차이를 줄여주게 Regression하는 방식으로 수행된다.
Mask RCNN
fast-RCNN는 RCNN의 CNN모델의 Input Size 가 고정되는 문제를 개선하였는으나, 주요 내용이 아니라 생각되어 생략하겠다. 상세내용은 아래 링크를 참조 바란다. Mask RCNN은 fast RCNN에서 ROI영역을 찾은 뒤 거친 CNN에 대해 mask branch가 추가된 구조이다.

전이학습과 미세조정
AI를 조금 하다 보면 학습 방식에 따라 learning for scratch , Fine Tuning, Transfer learning라는 용어를 많이 들어봤을 텐데, learning for scratch 는 랜덤한 가중치로 처음부터 인공지능을 학습하는 방식을 의미한다. 전이학습과 미세조정은 다양하게 얘기가 되고 있는 것 같다. 내 생각을 정리하면, 전이는 옮긴다라는 의미를 내포하므로, 기존 유사한 문제를 학습한 모델을 유사한 자료에 대해 활용하거나, 유사한 문제에 대해 활용하는 것이라 생각한다. 즉, 앞서 언급한 FCN 모델을 Backbone망으로 사용하여, 개와 고양이를 분류하는 문제에 활용하거나, 혹은 앞서와 같이 이미지 분류 모델이였던 FCN모델을 Backbone망으로 사용하여, Segmentation문제에 적용하는 것을 의미한다. 학습시에 보통 분류 문제에서는 Backbone Net을 학습되지 않게 가중치를 고정하여 사용하고, Segmentation모델의 경우 가중치를 가져오되 고정하지 않고 사용하는 것 같았다. 미세조정은 이렇게 학습한 Backbone망 중 끝부분의 레이어 가중치를 일부 학습되게 변경한 뒤 매우 낮은 학습률로 미세하게 조정하는 것을 의미한다. CNN이 연구되며, Attention이나 Transfomer 연구가 활발해진 이유가 CNN 알고리즘이 윈도우를 움직이며 연산하므로, 레이어가 깊어질 때까지 먼 거리사이의 관계를 학습하기 힘들다고 생각하여, 공간적 상관성을 고려할 수 있게 Attention 모델이 연구되었다. 즉, CNN의 앞단의 레이어일수록 국소적인 정보를, 뒷단의 레이어일수록 거시적인 정보를 학습한다고 할 수 있을텐데, 미세조정은 이러한 거시적인 정보를 조금씩 내 데이터에 맞게 수정하는 작업이라 생각한다.
