의미론적으로 분할하였다는 것. 의미를 갖는 분할 영역을 갖도록 이미지를 분할한다. 정확한 영역을 픽셀 단위로 구분하여 준다.
채널별로 레이블을 나눈다. (ex) Person 채널엔 Person에 해당하는 영역만 1로 Plants/Grass 채널엔 Plants/Grass에 해당하는 영역만 1로..)
Pixel-wise loss를 사용한다.
우리가 평소 아는 방식으로 Convolution 연산을 수행하면 연산량이 매우 많아진다. 이를 보완하기 위해서 다음과 같은 구조로 만들게 된다.http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf
위 네트워크 구조는 정보를 압축하는 과정인 Encoding과 압축된 정보를 풀어내는 과정인 Decoding을 거치는 Network이기 때문에 Encoder-decoder network라고 한다.
FCN(Fully Convolutional Network)
Semantic Segmentation을 맨 처음 제안한 논문
구조
https://arxiv.org/pdf/1411.4038.pdf
위의 과정에서 사이즈가 굉장히 크게 줄어든 영상을 2D-Bilinear Interpolation(2차원 쌍선형 보간법) 이용하여 원래의 크기로 되돌려 놓는다.https://medium.com/@msmapark2/fcn-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-fully-convolutional-networks-for-semantic-segmentation-81f016d76204
위 과정을 거쳐 만들어낸 이미지는 해상도가 늘어났다고 하지는 않는다. 새로운 정보가 생기지 않았기 때문이다.(그저 사이즈만 키운 것이기 때문에) 그래서 세밀한 정보를 잃어버리는 정보 손실 문제가 발생하게 된다. 이는 하나의 scale만을 사용해 생긴 문제로, 이를 보완하기 위해서 Multiscale을 활용하게 된다.
Multi-scale Prediction
https://medium.com/@msmapark2/fcn-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-fully-convolutional-networks-for-semantic-segmentation-81f016d76204
3번째 풀링 단계에서 나왔던 Feature맵을 가져와서 1X1 Convolution을 거쳐 28x28 Feature map을 생성하고, 4번째 풀링 단계에서 나온 Feature맵을 가져와 1x1 Convolution을 거쳐 14x14 Feature map을 생성한다. 그리고 최종 Upsampling 과정 전 나온 Feature map을 우선 2배만큼 Upsampling하여 14x14 Feature map으로 만든 후 4번째 풀링 단계에서 나온 Feature map과 합 연산을 한다. 이를 2배만큼 UpSampling하여 3번재 풀링 단계에서 나온 Feature맵과 합 연산을 하고 여기서 나온 Feature 맵에 8배만큼 Upsampling을 한다. 이 때 나온 Feature map은 최종적으로 Upsampling된 Feature map보다 정보를 더 많이 갖고 있다. 그래서 이 둘의 정보를 결합해 Segmentation 품질을 개선하였다.
위 Upsampling을 보면 노란색이 아닌 빨간 색으로 칠해져 있는 Upsampling이 있다. 이 Upsampling은 학습이 가능한(Trainable) Backwards convolution(=Strided convolution, Transpose convolution, deconvolution)을 사용하고 있다. https://medium.com/apache-mxnet/transposed-convolutions-explained-with-ms-excel-52d13030c7e8
제대로 Upsampling이 되도록 하는 Weight를 학습한다.