본문 바로가기
논문 리뷰

SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (2016) Review

by rltjq09 2024. 2. 14.
728x90
 

SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

We present a novel and practical deep fully convolutional neural network architecture for semantic pixel-wise segmentation termed SegNet. This core trainable segmentation engine consists of an encoder network, a corresponding decoder network followed by a

arxiv.org

0. 핵심 요약

SegNet은 Encoder, Decoder, pixel-wise classification layer로 구성된 모델

Decoder에서 up-sampling 시 encoder의 동일 level의 max-pooling indices를 활용

SegNet은 memory와 computational time에서 모두 효율적

1. BackGround

- Dataset

SegNet은 도로 위의 이미지를 segmentation 하는 것이 목적

따라서 이와 관련된 데이터셋을 활용

Camvid

 

Object Recognition in Video Dataset

Description:    The Cambridge-driving Labeled Video Database (CamVid) is the first collection of videos with object class semantic labels, complete with metadata. The database provides ground truth labels that associate each pixel with one of 32 semantic

mi.eng.cam.ac.uk

데이터는 367개의 학습 데이터와 233개의 test 데이터로 구성

RGB 채널이며 해상도는 360 x 480

총 11개의 클래스를 보유하고 있다

 

- FCN

해당 논문에서 주로 비교가 되는 모델은 FCN이다

해당 모델에 대한 설명은 이전 논문 리뷰를 참고

 

Fully Convolutional Networks for Semantic Segmentation(FCN)(2014) Review

Fully Convolutional Networks for Semantic Segmentation Convolutional networks are powerful visual models that yield hierarchies of features. We show that convolutional networks by themselves, trained end-to-end, pixels-to-pixels, exceed the state-of-the-ar

rltjq09.tistory.com

 

2. 논문 핵심 내용

- Encoder

SegNet에서의 encoder는 VGG16 모델을 거의 그대로 사용하였다

달라지는 점은 마지막 class 예측을 위한 fully connected layer를 제거했다는 것

이를 통해 기존의 VGG16의 파라미터 수에서 매우 감소한 파라미터 수 만을 사용했다

 

이 이외에는 모두 동일하며, encoder는 원본 이미지에서 feature를 추출하기 위한 용도이기에, 기존 ImageNet으로 학습된 가중치를 그대로 사용했다

 

encoder는 총 13개의 layer로 구성되어 있으며, 각 layer의 구성은 다음과 같다

우선 convolution layer를 통해 feature map을 생성한다

그 후, batch normalization을 수행하고 바로 이어서 ReLU 함수를 적용한다

마지막으로 max-pooling을 적용하여, 입력 해상도 대비 2배 줄어든 해상도의 feature map을 출력한다

 

해당 논문에서는 위에서 수행하는 layer들 중 max-pooling을 매우 중요하게 생각한다

우선 max-pooling을 통해서 해상도를 감소시키면 얻을 수 있는 이점이 총 2가지가 있다

1. 작은 공간적 변화에 대한 translation invariance 생성

2. robust한 classification에 대한 translation invariance 생성

 

이 2가지의 이점은 classification에서는 매우 큰 효과로 작동하지만 우리가 수행하고자 하는 segmentation에서는 오히려 물체 간의 외곽선을 smooth하게 만드는 단점으로 작용하게 된다

따라서, segmentation을 위해 max-pooling을 수행하기 이전, 고해상도의 정보가 반드시 필요하다

이를 적절히 잘 활용해보겠다는 아이디어가 해당 논문의 핵심 내용이다

 

- Decoder

Decoder 역시 encoder와 마찬가지로 총 13개의 layer로 구성되어 있다

이렇게 구성된 이유는 up-sampling에 있다

앞서서 segmentation을 위해 고해상도의 정보가 필요하다고 언급하였다

이를 사용하기 위해서 다양한 방법을 시도해보았는데, 이전의 feature map을 모두 저장하고 이를 decoder에서 그대로 활용하면 너무 많은 memory가 사용되기 때문에 비효율적이다

따라서 논문에서는 max-pooling을 할 때 결정되는 pixel의 위치가 어디인지를 기억하여, 이를 up-sampling에 그대로 활용하고자 하였다

위의 그림 중 왼쪽이 SegNet에서 사용한 up-sampling 방법을 나타낸 것이다

보면 encoder에서 결정된 max의 위치에 그대로 decoder의 값을 넣어주는 것을 볼 수 있다

하지만 이렇게만 하면 너무 sparse한 feature map이 생성되기 때문에 바로 이어서 convolution을 수행해 이를 dense한 feature map으로 변환해주게 된다

이렇게 하면 up-sampling을 그냥 무작정 하는 것이 아닌 encoder 과정에서의 풍부한 정보를 적절히 활용해서 up-sampling을 수행하기 때문에 더욱 세밀한 정보를 표현할 수 있을 것이다

 

그와 반대로 FCN의 up-sampling 과정을 보게 되면 encoder의 정보를 차원 축소하고, 저차원을 deconvolution을 통해 upsampling 하여 이를 더해주게 된다

이 역시 encoder의 정보를 활용할 수는 있지만, 너무 많은 정보를 encoder에서 저장을 하고 있어야 하고 이는 곧 비효율적인 작동이 된다

 

이러한 구조를 활용해서 얻을 수 있는 이점으로는 다음과 같다

1. 더욱 세밀한 정보를 표현할 수 있게 되어 boundary를 예측하는 성능이 향상된다

2. parameter의 수가 감소한다

3. 이는 max-pooling의 index 정보만 저장하는 것이기 때문에 어떠한 encoder-decoder 구조에도 활용할 수 있다

3. Model Architecture

위에서 설명한 구조를 간단히 도식화하여 표현한 그림이다

 

간단히 학습에 활용된 hyper-parameter를 살펴보면

SGD, learning rate는 0.1로 고정, momentum은 0.9, batch size는 12로 설정

 

손실 함수로는 pixel 별 cross-entropy loss 를 적

4. Experiment

다른 모델들과 비교했을 때 segmentation map이 어떻게 형성되는 지를 보여주는 그림이다

SegNet이 다른 모델들에 비해 boundary를 매우 잘 예측하는 모습을 볼 수 있다

 

이는 Camvid 데이터에 대한 각 모델들의 성능을 비교한 것이다

대부분의 클래스에서 SegNet이 좋은 성능을 보이는 것을 확인할 수 있다

5. Contribution

SegNet은 memory 및 computational time 측면에서 효율적인 모델 제시

SegNet은 feature map의 max-pooling indices 만을 저장하고 이를 Decoder에서 사용하여 좋은 성능을 달성SegNet은 큰

+ Comment

Encoder는 feature를 추출하는 부분이고 Decoder은 이를 복원하는 부분이라는 것은 요즘은 너무나도 잘 알려진 사실이다

하지만 이 사이에서 적절한 정보 교환을 통해 장점만을 강조하는 이런 기법들을 보면 신기한 것이 많은 것 같다

앞으로 더 많은 모델을 공부하고 배우면서 더 다양한 아이디어를 빨리 만나보고 싶다

728x90