본문 바로가기
Deep Learning/[논문] Paper Review

SegNet

by 제룽 2023. 7. 6.
728x90
반응형

 

 

Intro
  • 자율주행 - road scene segmentation task를 풀고자 하였음
  • 도로와 보도를 구분하거나, 자동차와 보행자 등
  • max pooling, subsampling 연산을 수행하다보면 추상적인 피처맵들이 만들어짐 ( 즉, 이미지 크기가 점점 줄어들수록 원본 정보가 손실됨 → 추상적인 결과값으로 변함)
  • 그렇게 되면 피처맵으로 픽센 단위로 정교하게 segmentation을 못함
  • 또한, 자율주행을 위해서는 실시간으로 빠르게 segmentation을 해야하지만, 파라미터 수가 많으면 빠르게 하지 못함. 그래서 이에 대한 문제점을 해결하기 위해 나온 것이 segnet임
Network Architecture
  • SegNet의 encoder-decoder는 각각 13개의 convolution layer로 구성됨
  • 레이어 구조는 conv → BN → ReLU, stride가 2인 2x2 max pooling을 사용함
1) Encoder Network
  • encoder는 VGG16 구조를 따르기 때문에 encoder의 경우 pre-trained weight 활용이 가능함
  • encoder에서 f.c layer를 제외한 이유는 VGG에서 대다수의 파라미터가 f.c layer에 존재하지만 f.c layer가 그만큼 중요한 역할을 하는 것도 아니고 메모리 사용량도 줄일 수 있기 때문에 f.c layer를 제외함.
  • f.c layer만 제외하더라도 약 9배의 파라미터가 줄어듬.
2) Decoder Network
  • Decoder network는 각 encoder network에 대응하여 (mirrored) 존재
  • Encoder의 feature map 정보를 decoder로 전달하는 가장 정확한 방법은 전체 feature map을 저장해 두었다가 Up-sampling 할 때 모두 Decoder로 전달하는 것. 하지만 메모리 많이 필요
  • encoder에서 max-pooling indices (위치 정보)만을 저장해두었다 이후 decoder에서 Max Unpooling 진행 ( 즉, 위치 정보를 기억했다가 upsampling 할 때 위치 정보를 기반으로 사이즈를 키워서 값을 넣어줌)
3) Softmax classifier
  • Decoder의 output은 K-class softmax classifier로 들어가 최종적으로는 각 픽셀마다의 독립적인 확률값으로 계산됨
  • 위 결과에서, 각 픽셀별로 가장 확률이 높은 class만을 출력하면 최종 segmentation이 됨
Decoder Variants
SegNet-basic
  • 기존의 SegNet과 동일하며 layer 개수만 줄인 버전으로 4개의 encoder, 4개의 decoder를 사용
  • wide context 정보를 추출하기 위해 모든 convolution layer에서 7x7 kernel을 사용하며 decoder에 bias, relu를 사용하지 않음
FCN-basic
  • encoder 구조는 SegNet-basic과 동일하고 decoder는 FCN에서 사용했던 구조를 사용
SegNet-Basic-SingleChannelDecoder(SegNet-Basic보다 더 적은 정보 전달)
  • encoder은 SegNet-Basic과 동일한 구조
  • Decoder의 conv filter을 single channel로 변경하여 segnet-basic 을 더 축소시킴

FCN-Basic-NoAddition (FCN-Basic보다 더 작은 정보 전달)

  • encoder는 segnet-basic과 동일
  • decoder에서는 FCN skip connection 제외
Bilinear-Interpolation(SegNet, FCN의 decoding 방법 사용 x)
  • encoder은 segnet-basic과 동일
  • FCN-Basic-NoAddition모델에서 upsampling layer를 fixed bilinear interpolation weight 사용※ bilinear interpolation
    • x,y 2차원에 대해 필요한 값을 채우는 방식
    • ex) 2x2 를 4x4로 upsampling 하고 싶을 때, 빈 값을 채워주는 것을 말함
SegNet-Basic-EncoderAddition(SegNet- Basic 보다 더 많은 정보 전달)
  • encoder은 SegNet-basic과 동일
  • Decoder은 segNet-basic에서 추가로 encoder의 각 layer마다 64개의 피처맵 추출해서 해당하는 위치의 decoder layer에 더해줌
FCN-Basic-NoDimReduction(FCN-basic보다 더 많은 정보 전달)
  • encoder은 SegNet-basic과 동일
  • Decoder은 FCN-basic에서 encoder 정보 더해줄 때, 차원 축소하지 않고 바로 더해줌
Training

학습 데이터셋 : CamVid road scene

  • 367 train images, 233 test images
  • 11 classes (road, building, cars, pedestrians, signs, poles, side-walk ...)
  • weight init : He
  • batch size: 12
  • loss function: cross-entropy
  • optimizer : SGD
  • lr : 0.1(momentum = 0.9)
  • sky, road, building 처럼 크기가 큰 클래스의 경우 이미지에서 차지하고 있는 픽셀 수가 다른 클래스에 비해 많기 때문에 loss에 끼치는 영향도 클래스마다 달라지게 된다. class balancing이 필요하며 논문에서는 median frequency balancing을 사용하였다. 학습 데이터셋에서 특정 클래스가 차지하고 있는 비중에 따라 loss함수 계산 시 weight를 다르게 부여함 (클래스마다 비중 계산은 픽셀 수를 기준으로 계산한 것으로 보임)
  • sky, building, road 같이 크기가 큰 클래스의 경우 1보다 작은 값의 weight를 사용하고 크기가 작은 클래스의 경우 1보다 큰 값의 weight를 사용하여 loss function 계산 시 class balancing이 유지되도록 함
  • validation score가 가장 좋은 weight를 test에 사용함
Analysis

정량적 평가 척도로 총 3가지 metric을 사용함

  1. global accuracy데이터셋 전체의 픽셀 수에서 올바르게 분류된 픽셀의 수
  1. class average accuracy각 클래스마다 accuracy를 계산한 뒤, 평균낸 것
  1. boundary F1 Scoreboundary에 대한 예측이 중요하기 때문에 mIoU보다 정성적 평가에 더 적합하기 때문에 mIoU 대신 BF1 score를 사용함
  2. score = 2 * precision * recall / (recall + precision)
  1. encoder feature map 전체를 저장하는 것이 BF(boundary F1 score) 성능이 가장 좋다. 여기서 feature map 저장은 skip connection을 위해 저장하는 것
  1. 인퍼런스 시 메모리 사용량이 제한된 경우, decoder에서 un-maxpooling을 사용하면 성능을 올릴 수 있음
  1. Larger decoders increase performance (Decoder가 클수록 성능 향상)
Benchmarking

SegNet을 2가지 scene segmentation dataset에서 평가함

  • road scene segmentation
  • indoor scene segmentation
Road Scene Segmentation
  • class간 boundary 부분에서 SegNet이 다른 모델들보다 더 정교하게 boundary를 구분하고 small 객체도 잘 잡는다.
  • DeepLab-LargeFOV의 경우 크기가 작은 클래스는 제대로 segmentation하지 못했지만 그래도 competitive한 결과를 보여줌
  • FCN with deconv의 경우 고정된 bilinear upsampling을 사용한 FCN보다 더 better한 결과를 보여줌
  • DeconvNet의 경우 모델 자체가 굉장히 크고 학습이 비효율적이며 small class 객체는 segmentation하지 못함
SUN RGB-D Indoor Scenes

SUN RGB-D 데이터셋은 실내 이미지에서 37개 클래스를 segmentation한 데이터셋 (실내 환경 같은 데이터는 증강현실 쪽에서 흥미롭게 사용되는 데이터셋이라고 함)

⇒ 객체의 모양이나 사이즈, 포즈가 다 다야함 + 일부분이 가려진 이미지가 많이 존재해서 까다로운 segmentation challenge 중 하나라고

  • 5285 train images
  • 5050 testing images
  • class : wall, floor, ceiling, table, chair, sofa ...
  • 본 논문에서는 이미지의 depth 정보는 제외하고 RGB 정보만 사용
  • SegNet은 view가 달라지더라도 크기가 큰 객체들은 잘 잡아냄 다른 모델들보다 reasonable한 결과를 보여줌
  • SegNet은 RGB image만으로도 큰 object에서 좋은 성능을 보임
Conclusion
  • road, indoor scene segmentation을 위한 효율적인 아키텍처 SegNet을 제안하였다.
  • SegNet은 메모리 사용량 연산 속도 측면에서 다른 모델보다 훨씬 효율적이다.
  • encoder에서 모든 feature map을 저장하는 아키텍처의 경우 성능은 우수하지만 메모리 사용량이 많아지는 단점이 있다. 그러나 SegNet은 un-maxpooling을 사용하여 메모리 사용량을 줄이면서 성능도 개선하였다.

 

728x90
반응형