Reference
https://iai.postech.ac.kr/teaching/machine-learning
https://iai.postech.ac.kr/teaching/deep-learning
위 링크의 강의 내용에 기반하여 중요하거나 이해가 어려웠던 부분들을 정리하여 작성하였고,
모든 강의 슬라이드의 인용은 저작권자의 허가를 받았습니다.
또한, 모든 내용은 아래 Notion에서 더 편하게 확인하실 수 있습니다.
>>노션 링크<<
Keywords
- CAE
- Fully Convolutional Networks (FCN)
- Segmentation
- Skip Connection
Fully Convolutional Networks (FCN) - Motivation
여기까지는 Computer Vision을 위한 Deep Learning을 학습하며, CNN까지의 것들을 다루었다.
CNN은 기본적으로 Classification을 수행했었고, Computer vision 분야에서 Classification이 아닌 다른 것들을 수행하는 데에 더 적절한 구조가 필요했다.
그 중, Segmentation을 수행할 수 있는 딥러닝 구조를 학습할 것이다.
Segmentation이란, 간단하게 왼쪽 그림과 같은 Input이 있을 때, 우측 그림과 같이 인식해내는 것을 말한다.
즉, 이미지 내의 객체들을 분할(segment)하는 것이며, Classification과는 다른 것이다.
Classification은 하나의 이미지 input 전체를 어떤 class에 들어갈 지 구분했다면,
segmentation은 이미지 내의 하나하나의 모든 픽셀에 대해 classification을 수행하는 것과 같다.
Classification에서는 input 이미지가 ‘무엇인지’ 그 맥락 자체를 이해하는 데 그쳤다면,
segmentation에서 각 픽셀에 대해 구분하기 위해서는, input 이미지에 ‘무엇이 있는지’ 뿐만이 아닌, ‘그것이 어디에 있는지’를 알아내야 한다는 것이다.
FCN(Fully Convolutional Networks)는 오른쪽 그림과 같이 CAE와 비슷한 구조를 이용해 이미지의 픽셀 하나하나를 categorizing (classifying)하는 Network이다.
여기서 FCN의 output은, 나누고 싶은 segment(class)의 개수만큼 channel(dimension)을 갖게 된다.
오른쪽 그림과 같이 dog, cat, background의 3개로 나눈다면,
3개의 채널 각각에 dog가 해당하는 영역, cat이 해당하는 영역… 을
각각의 픽셀이 one-hot encoding된 상태의 3 channel output으로 도출된다는 것.
FCN - Structure
FCN의 구조, CAE, FCN의 차이점을 알아보자.
우선 FCN은 segment하고 싶은 class의 개수만큼 output channel이 존재한다는 차이점이 있다.
또한 둘의 구조적인 차이점으로는,
CAE는 압축했다 복원하는 과정을 거치며, 압축 과정에서 feature extraction을 수행하는 느낌이 강하지만,
FCN은 feature extraction이라기보단, CAE의 구조만 차용하며, spatial한 information을 유지한 채로 픽셀 별로 classification을 수행하고 싶은 것이다.
그렇기 때문에, FCN에서 일단 압축(downsampling)되어 버리면 (위로 예를 들면, 겨우 2개의 픽셀로 압축된다.) 추후 upsampling을 수행할 때, 굉장히 많은 공간적 information loss가 발생한다.
이를 해결하기 위해, FCN에서는 skip connection을 이용한다.
Skip Connection
downsampling 과정에서의 feature map과 upsampling 과정에서의 feature map을 연결(sum)하여, local한 information을 그대로 전달하는 방법이다.
많은 resolution level(해상도 레벨)에서의 feature(feature map)들을 병합함으로써, spatial information과 context information(공간적 정보, 문맥 정보)들을 잃지 않을 수 있다.
그래서 FCN에 대한 것들을 종합하면,
- segmentation map(output)을 얻기 위해, downsampling과 upsampling 과정을 거친다.
- downsampling 과정에서는 context(문맥)에 관한 정보들을 extract, interpret한다.
- upsampling 과정에서는 skip connection을 이용해 정확한 spatial information을 복원한다.
- 이러한 구조로 인해 Input에 어떤 크기의 이미지가 오든, 동일한 방식으로 segmentation을 수행할 수 있다.
위는 FCN의 실제 구현의 예시이다.
앞쪽 encoding(downsampling) 부분은 ImageNet의 VGG부분을 가져와서 사용하였고,
우리가 학습시켜야 하는 부분은 upsampling을 수행하는 layer들이다.