728x90
반응형

키워드

1. 인코더-디코더 아키텍처를 도입하여 효율적인 세그멘테이션을 구현. 디코더가 인코더의 맵을 복구.

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

3. SegNet, Encoder-Decoder, Local Contrast Normalization, Flat architecture

SegNet

  Segmentation을 위해 classification 네트워크를 변형한 접근 방식의 중요한 단점이 존재한다. 이는 깊은 레이어의 feature map을 입력 차원에 매핑하는 메커니즘이 성능이 부족하다는 것이다. 기본적으로 깊은 레이어 feature map은 여러 pooling 레이어로 인해 입력 이미지 크기에 비해 해상도가 낮다. 이를 입력 이미지 크기와 일치하도록 단순 업샘플링하게 되는데, 이로 인해 예측이 blocky하게 된다.

  이를 보완하기 위해 새로운 아키텍처인 SegNet을 고안하였다. 이는 생성형 모델을 구축하는 데 사용되는 probabilistic auto-encoder의 encoder-decoder 구조의 아키텍처에서 영감을 얻었다. SegNet은 인코더-디코더 스택과 softmax classifier로 구성으로 인코더 출력을 이미지 픽셀 레이블에 매핑하는 방법으로 뛰어난 매핑 메커니즘을 구현하였다. 다만 생성형 모델과 모델의 목적이 다르기 때문에, cross-entropy를 사용하는 차이가 존재한다.

  이렇게 디코딩하는 방법을 학습하는 경우, pooling-subsampling이 존재하는 더 깊은 레이어를 도입할 수 있게 되어 픽셀 라벨링을 위한 spatial context를 증가시킬 수 있다. 즉, 더 많은 인코더-디코더 쌍이 추가되면 context를 증가시킬 수 있다. 또한 학습된 모델을 통해 단일 feed-forward로 추론이 가능하며, feature activation을 통해 각 레이어 별 효과를 시각화하는 것도 매우 용이하다.

Architecture

SegNet

  각 인코더는 conv 레이어, ReLU, max pooling를 통해 다운샘플링을 반복하는 구조로 구성되었다. 디코더는 인코더에서 풀링된 인덱스를 그대로 사용하여 feature map을 업샘플링하고 디코더 filter bank를 학습하여 입력 이미지를 재구성한다. 여기서 deconvolutional 네트워크와 달리 디코더에서는 ReLU가 사용되지 않으며, 이를 통해 각 쌍의 필터를 더 쉽게 최적화할 수 있다. 또한 인코더와 디코더 필터도 별도의 파라미터를 사용함으로써 손실을 최소화하기 위한 추가적인 자유도를 제공한다. 마지막 레이어는 입력 이미지 크기에 클래스 수 만큼의 채널을 가지며, 각 픽셀을 독립적으로 분류하는 softmax classifier가 사용된다.

  SegNet은 각 레이어의 채널(64개)이 동일하게 유지되는 "플랫" 아키텍처를 사용한다. 이는 더 깊게 확장하면서 모든 feature들이 상호 연결되게 해주기 때문에 weights explosion을 방지한다. 또한 더 내부에 있는 인코더-디코더 쌍의 feature map 해상도가 더 작기 때문에 convolution이 더 빨라지게 해주고, 이를 통해 훈련 시간이 동일하게 유지해준다. SegNet은 인코더-디코더 쌍 별로 훈련을 별도로 수행하며 자세한 내용은 아래 “Training” 섹션에서 설명 예정이다.

  또한 max pooling에서 2×2 kernel과 크기의 겹치지 않게 stride를 2로 사용한다. 그리고 원활한 라벨링을 위해 광범위한 context를 제공하기 위해 7 x 7 filter를 사용한다. 이를 통해 가장 깊은 레이어 feature map의 각 픽셀은 입력 이미지에 대해 106 x 106 의 receptive field를 가진다. 이 둘은 적정 수준으로 설계되어야 하며, kernel이 작을수록 context가 줄어들고 kernel이 클수록 얇은 구조(thin structure)가 파괴될 가능성이 있다.

  SegNet에 대한 입력은 다중 채널 이미지이다. 이러한 입력에 대해 preprocessing으로 Local Contrast Normalization (LCN)을 수행한다. 이를 통해, 불균일한 illumination을 수정하여 dynamic range를 줄인다. 예시로 그림자 부분의 대비 증가하는 점을 들 수 있다. 또한 이미지의 경계를 강조하게 되며, 입력의 차원간 상관성을 줄이게 되어 수렴을 향상시킨다.

728x90

Training

SegNet

  레이어의 입력을 재구성하는 unsupervised 학습과 다른 방식으로 학습을 진행한다. 그 이유는 레이어의 목적이 다르기 때문이다. Unsupervised과 달리 더 깊은 레이어와 완전히 동일한 재구성 목표를 최적화된다는 것이다. 이를 위해  인코더-디코더 쌍을 연속적으로 추가하고 앞선 쌍의 가중치를 고정한 상태에서 훈련한다. 위 이미지 기준으로 왼쪽처럼 초기 입력 이미지에 가장 가까운 인코더-디코더 쌍의 가중치를 먼저 훈련하고, 다음 오른쪽처럼 이후 학습에서 고정된 상태로 유지한채 다음 인코더-디코더의 가중치를 훈련하는 방식이다.

  추가로 일반적으로 사용되는 SGD 대신 L-BFGS를 사용하며, 훈련 데이터의 라벨 불균형을 수정하기 위해 클래스에 inverse frequency 가중치를 사용하였다.

Visualization

SegNet

  각 레이어의 feature activation을 통해 예측에 대한 효과를 확인하였다. SegNet 아키텍처는 인코더 activation을 디코딩하도록 훈련되었으며, 이를 사용하여 픽셀 공간에 특정 레이어의 activation의 효과를 시각화하기 용이하다. 이를 구현한 방식은 특정 레이어에서 각 훈련 샘플에 대한 activation을 계산한 후, 단위 별 RMS 값을 계산하면 단일 값을 구할 수 있다. 만약 채널이 64개라면 64차원 벡터를 얻을 수 있다. 이후 모든 샘플에 대해 각 벡터의 상위 'N' 요소에 대한 히스토그램을 계산한다. 이 히스토그램은 훈련 세트에 걸쳐 해당 레이어에서 가장 많이 활성화된 feature가 된다. 나머지 feature map을 0으로 설정하고 이를 픽셀 단위 라벨링을 디코딩한다. SegNet의 훈련은 모듈식이므로 새로운 레이어 쌍이 추가될 때마다 이 작업을 수행한다.

  입력 공간으로부터 깊이가 증가함에 따라 예측이 더 부드러워지는 것을 관찰할 수 있다. 4번째 레이어 feature는 클래스를 거의 완전히 예측하고 누락된 자동차를 채은다. 이와 대조적으로, 얕은 레이어에서는 이러한 효과가 덜 명확하고 악화되는 것을 관찰할 수 있다.

결과

SegNet

  SegNet 예측은 더 많은 레이어가 추가됨에 따라 더욱 부드러워지고, CRF를 사용하는 방법과 비슷하거나 심지어 이를 능가하는 높은 정확도를 보인다. 정성적인 결과 이미지를 통해 SegNet이 소규모(자동차, 보행자, 자전거 이용자) 클래스까지 분류하는 능력을 갖췄으며 전체 장면을 부드럽게 분할하는 것을 알 수 있다. 이와 대조적으로 CRF 기반 결과는 매끄럽지만 작은 클래스를 분류하지 못한다. 정량적으로 비교하여도 여러 비교 방법보다 성능이 뛰어나다.

Transfer Learning

SegNet

  위 결과 이미지의 1,2 번째 행은 KITTI 데이터셋의 샘플 및 GT 이다. 3 번째 행은 SegNet(R)로 완전히 무작위로 초기화된 파라미터를 사용한 결과이다. 4 번째 행은 SegNet(L4)로 CamVid로 훈련된 파라미터로 초기화하고, 레이어 4만 2 epoch 동안 학습한 결과이다. 마지막 5 번째 행은 SegNet(SM)으로 동일하게 CamVid로 훈련된 파라미터로 초기화하고, softmax classifier를 학습한 결과이다. 이를 통해 SegNet(R)이 가장 뛰어난 성능을 보였으며, SegNet(L4)를 통해 transfer learning의 가능성도 확인할 수 있다.

RGBD 4채널 이미지

SegNet

 깊이 정보가 존재하는 NYUv2 데이터셋의 결과이다. SegNet 예측은 13개 클래스 중 9개 클래스에서 multi-scale ConvNet보다 더 우수하다. 이는 SegNet이 더 깊은 레이어를 사용하여 context를 늘려 scale 변화까지를 처리할 수 있다는 것을 의미한다. 하지만 정성적 결과에서 대체로 정확하지만 날카로운 경계 예측이 부족하다는 것을 알 수 있다. 이는 320x240의 낮은 입력 해상도로 인해 클래스 경계의 정보가 부족하기 때문이다. 또 다른 이유는 fine-tuning 없이 다양한 데이터셋에서 활용한 SegNe 파라미터를 동일하게 사용했기 때문이다.

Reference

논문 링크 : https://arxiv.org/abs/1511.00561

728x90
반응형

'딥러닝 > Segmentation' 카테고리의 다른 글

[Segmentation] DeepLab  (2) 2024.10.31
[Segmentation] PSPNet  (0) 2024.10.26
[Segmentation] U-Net  (0) 2024.10.24
[Segmentation] FCN  (0) 2024.10.17
[Segmentation] Segmentation 발전 과정  (1) 2024.10.12

+ Recent posts