DonHurry

[Paper Review] FreDSNet 본문

Paper Review

[Paper Review] FreDSNet

_도녁 2023. 11. 14. 13:01

Abstract

해당 논문의 핵심은 FFC(fast Fourier convolution)을 활용하여, 하나의 파노라마 이미지로부터 monocular depth estimation과 semantic segmentation을 수행한다는 것이다.

 

Method

아키텍처를 보면 U-Net과 유사하게 생겼다. 저자들은 해당 network가 encoder-decoder 형식을 따른다고 소개하고 있는데, 구조가 어렵지는 않다. 초기 feature extractor로 ResNet을 활용하고 있으며 2개의 branch로 나뉘는데, 각각 depth estimation과 semantic segmentation을 목표로 한다.

multi-resolution으로 encoding과 decoding을 하는 이유는(구조를 보면 4개의 encoder 블록과 6개의 decoder 블록으로 나누어져 있다.) multi-scale representation을 얻기 위해서이다. 또한 skip connection 구조는 학습 과정을 안정적으로 만들어준다.

 

Architecture

encoder와 decoder 블록에는 Fourier Block(FB)이 들어간다. FB는 기존 FFC와 똑같은 구조를 가지고 있지만, 활성화 함수만 변경해서 활용한다. 기존에는 활성화 함수로 ReLU를 사용하지만, 해당 저자들은 PReLU를 사용한다. (최근 연구에서 ReLU는 gradients vanish 문제로 depth estimation에 적합하지 않음이 증명되었다고 한다.) FB를 통과한 후에는 N factor에 따라 feature map을 rescale하는데, 이때 N<1의 경우 down-scaling을 뜻하며 N>1의 경우 up-scaling을 뜻한다.

  • PReLU는 ReLU를 개선하기 위한 방안으로, 음수에 대한 gradient를 변수로 두고 학습을 통하여 업데이트한다.
  • 영상처리 분야에서는 푸리에 변환을 활용하여 입력을 spatial domain에서 frequency domain으로 변환하기도 한다.

W-conv의 경우 ResNet bottleneck 구조와 동일하며, 마찬가지로 PReLU를 활용한다.

 

Semantic segmentation branch

semantic segmentation task를 위해 마지막 5개의 decoder에서 feature map을 얻는다. 이때 intermediate representation을 얻기 위해 feature map을 합치는 것 대신, 학습 가중치를 더해줌으로써 더 compact한 intermediate representation을 유지하게 된다. 해당 branch에서는 PReLU를 사용하지 않고 ReLU를 사용한다.

 

Depth estimation branch

depth estimation을 위해 다른 branch를 구성하는데, decoder에서 마지막 3개의 feature map을 활용한다. 뒤쪽 블록일수록 더 높은 해상도와 높은 레벨의 detail을 가지고 있기 때문이다. 해당 branch에서는 PReLU를 그대로 활용하지만, 마지막 convolution은 ReLU로 변환한다. 이는 depth가 negative 값을 가지는 것이 불가능하기 때문이다.

 

Loss functions

semantic segmentation과 depth estimation은 완전히 다른 정보를 제공하지만, 공통적인 특성이 있고 이 특성들은 서로에게 이점으로 작용할 수 있다. 저자들의 목표는 같은 시간에, 같은 이미지로 두 task 모두를 학습하는 것으로 한다.

 

최종 loss를 보면 4개의 loss로 구성된다. 먼저, segmetation을 위한 loss는 표준 cross entropy loss와 각 클래스에 대한 weights를 활용한다.

 

위의 수식에서 e는 depth error 절댓값이며, ∇x, ∇y는 x, y gradients의 절댓값이다. 모두 prediction과 ground truth를 바탕으로 정의된다. Bc에 대한 수식은 다음과 같다.

 

e는 prediction − ground truth로 정의되고, c는 각 배치 error의 절댓값 중 최댓값의 20%를 의미한다. loss function의 경우, depth map과 gradients에 대한 Adaptive Reverse Huber Loss의 합이다.

 

나머지 loss는 joint training 과정을 돕기 위함이다.

각 배치에서 prediction과 ground truth의 최솟값 최댓값 사이의 mean square difference를 계산한다.

 

object의 boundary 정의를 돕기 위한 loss이다. 모델은 이 loss를 통해 경계선에 나타나는 depth 불연속성을 정의한다.

 

Discussion

이미지를 이해하기 위해 frequency domain을 활용한 좋은 예시라고 생각된다. 또한 monocular depth와 semantic segmentation task를 동시에 학습하고 추론한다는 점에서 의의가 있다. 다만, 해당 논문을 확실히 이해하기 위해서는 FFC에 대한 공부가 필수적으로 보인다. (사실상 핵심..)

https://proceedings.neurips.cc/paper/2020/file/2fd5d41ec6cfab47e32164d5624269b1-Paper.pdf

 

https://proceedings.neurips.cc/paper/2020/file/2fd5d41ec6cfab47e32164d5624269b1-Paper.pdf%EF%BB%BF

 

proceedings.neurips.cc

 

Code

github 예시를 따라 conda 환경에서 cpu로 돌려보았다. 8장의 이미지를 inference하는데 걸리는 시간은 대략 25초로, system상의 communicate time까지 합치면 꽤 오랜 시간이 걸린다.

 

 

결과가 잘 나오지만, 저자들은 cherry picking으로 뽑은 이미지를 제공한 것일테니 실제 성능을 테스트해보려면 다양한 파노라마 이미지를 구해서 진행해보아야 할 듯 하다.

 

코드 자체는 매우 깔끔하다. 모델 구조가 복잡하지 않은 것도 있지만, 코드에서도 각 블록 별 class가 잘 정리되어 있다. 다만, 학습용 코드 예제가 따로 없기도 하고, 파노라마 데이터 자체가 일반적이지는 않기 때문에 활용 측면에서는 어려움이 있을 것으로 보인다.

 

 

https://arxiv.org/pdf/2210.01595.pdf

https://github.com/Sbrunoberenguel/FreDSNet