(정리) FishNet: A Versatile Backbone for Image, Region, and Pixel Level Prediction

Source: Deep Learning on Medium


NIPS 2018, COCO 2018 Detection Challenge Winner’s Backbone Network

Go to the profile of Kim Yaecheol

2017년을 마지막으로 COCO object detection challenge가 사라졌다. 마이크로소프 트측도 이미지의 bounding box를 그리는 detection task가 어느정도 saturation됨을 인정한 것이고, COCO의 detection challenge는 image segmentation task만을 남겨두고있다. 이런 상황에서 구조적으로 많은 변화와 개선을 거친 네트워크가 COCO challenge에서 1위를 하였다는것은 detection task에 있어서 꽤나 고무적인 의미를 갖는다. COCO 홈페이지에 나온 네트워크 소개에서 main contribution으로 (1) region, pixel level을 위해 디자인된 FishNet을 사용했고 (2) Uniform하게 분포되어있는 기존 detector과는 달리 필요한 곳에만 집중하는 RPN을 제안한 것 두가지를 소개했다. 그중 하나인 FishNet이 본 글에서 소개할 논문이다. 
 기존 backbone network(ResNet, DenseNet)대비 classification 성능도 향상하였고 Mask R-CNN이나 FPN에서 backbone network만 ResNet에서 FishNet으로 바꿨을 때 AP의 큰 향상이 있었다. 코드도 공개되어있고 pre-trained weight도 제공한다. 어떤 아이디어로 성능을 향상시켰는지 알아보자.

Introduction

기존 backbone network의 역사를 간단히 정리하면 네트워크의 레이어가 깊어지면 발생하던 gradient vanishing 문제를 해결하기 위해 나온 네트워크가 ResNet(CVPR 2016)이다. Residual connection이라는 identity mapping을 통해 gradient를 shallow layer까지 전파시켜 이를 해결하였다. 이후 나온 DenseNet(CVPR 2017)은 순차적으로 적용하던 residual connection을 같은 feature map 크기를 갖는 stage안에서 서로 dense하게 연결시켜 gradient propagation을 강화하였고, residual connection이후 element wise summation을 하는 ResNet과는 달리 concatenate를 하여 데이터를 보존하였고 채널 수를 조절하여 ResNet보다 적은 파라미터로 더 좋은 성능을 내게 되었다. DenseNet을 개발한 저자들이 후속연구로 개발한 MSDNet(ICLR 2018)은 Multi-Scale로 DenseNet을 확장시킨 네트워크이다. 물론 DenseNet보다 성능이 좋다.

ResNet
DenseNet
MSDNet

본 논문에서 주장하는 3가지 contribution 은 다음과 같다.

1. pixel-level, region-level, image-level 를 위해 디자인한 첫번째 네트워크이다

기존 네트워크들은 classification 성능을 위한 네트워크였다. 따라서 pixel-level, region-level, image-level에서 생각한 네트워크가 아니었다. FishNet은 애초에 detection network의 backbone network로 넣기 위해 만든 네트워크이기 때문에 detection task에서의 backbone network로 넣었을 때 더 좋은 성능을 낸다. Feature Pyramid Network(FPN)이 FishNet과 비슷한 구조를 가지고 있지만 classification task에서도 기존 네트워크보다 좋은 성능을 냈다는 점에서 큰 메리트가 있다.

2. 아주 깊은 레이어에서 얕은 레이어까지 directly propagated 하게 만들었다.

Isolated Convolution (I-conv, ResNet의 문제점)

vanishing gradient 문제를 residual connection으로 완화시켰지만 완벽하지 않다. ResNet에서 feature map 크기가 변하는 부분에서는 identity mapping이 아니라 1×1 conv를 통해 채널을 두배로 늘려주고 stride=2로 down-sampling을 해주게 되는데 여기서 back propagation이 잘 되지 않는 문제가 발생한다. 이를 Isolated Convolution이라 칭한다.

3. 서로 다른 크기를 갖는 feature들을 보존해 서로 정제하는데 도움을 주게한다.

ResNet이나 DenseNet같은 경우에는 다른 크기(scale)를 갖는 feature끼리의 connection이 거의 없어 다른 scale간의 상호작용이 일어날 수 없다. 이를 그나마 이용한 네트워크가 MSDNet인데, MSDNet은 up-sampling을 사용하지 않았고 우리 네트워크는 up-sampling을 사용해 더욱 상호작용이 강화되도록 하였다.

Identity Mappings in Deep Residual Networks and Isolated Convolution

논문에서 발췌

I-conv에 대해 자세히 분석해보자. (1)식은 residual block을 식으로 옮긴 것이다. 우변의 1항은 residual connection을 의미하고 2항은 convolution을 통해서 온 피처맵을 의미한다. (1)을 general한 형태로 바꾼 (2)의 첫번째 식의 gradient를 구한 것이 (2)의 두번째 식이다. 식을 보면 residual connection을 통해 온 피처맵이 상수 1로 살아남아 있는 것을 볼 수 있다. 이를 통해 gradient propagation 을 효과적으로 수행했다고 분석할 수 있다. (3)식은 오른쪽 그림의 노란색 부분이다. Introduction 에서 언급했듯이 피처맵 크기가 바뀌는 부분에서 ResNet은 1×1 conv를 사용해 채널을 인위적으로 2배로 조정한다. 이 부분에서 propagation이 단절되는 현상이 일어나서 효과적으로 학습하지 못한다고 주장한다. 저 노란색 블럭을 I-conv라 한다.

The FishNet

Overview of the FishNet

물고기같이 생긴 네트워크 FishNet이다. 크게 보자면 기존 네트워크(VGGNet, ResNet)과 같은 역할을 하는 Fish Tail. Up-sampling을 하면서 Fish Tail에서 얻은 피처맵을 concat하는 Fish Body. 다시 conv을 통해 피처 정제를 하면서 Fish Body에서 얻은 피처맵을 concat하는 Fish Head로 나뉜다.

Detail of FishNet

디테일하게 보면 이런 모습이 된다. 논문에서 focus를 둔 부분은 Fish Body와 Fish Head이다. Fish Tail은 기존 네트워크를 가져와서 써도 된다고 논문에 나와있다. 네트워크의 가장 큰 특징은 네트워크의 어디에서도 1×1 conv를 통해 인위적으로 채널 수를 늘리지 않는다는 점이다(I-conv). 채널수를 늘리는 부분을 Fish Body에서는 같은 크기의 피처맵을 Fish Tail에서 가져와 concat시킴으로 해결하고, Fish Head에서는 Fish Body에서 가져와서 concat함으로 해결하였다. 또한 conv → up-sampling → conv 세번의 과정을 거치면서 pixel-level, region-level, image-level의 feature들을 효과적으로 상호보완적으로 학습하는 효과를 가져왔다.
 Fish Body에서 up-sampling하는 주황색 화살표를 Up-sampling & Refinement block(UR-block)이라 하고 Fish Head에서 down-sampling하는 파란색 화살표를 Down-sampling & Refinement block(DR-block)이라 한다.

FishNet UR Blocks (M: conv block, T: transfer connection)

UR Blocks를 detail하게 살표보면 위와 같다. Fish Tail에서 가져온 피처맵과 현재 스테이지의 피처맵을 concat한 뒤 residual connection같이 하나는 함수 r을 통과시켜 보내고 하나는 conv block을 통과시킨 후 element wise summation한다. 함수 r은 채널을 1/k로 줄이는 함수인데 그냥 인접한 k개의 채널을 element wise summation해서 채널 수를 1/k로 줄이는 방식이다. 1×1 convolution으로 인위적으로 채널을 조절하는 것을 피하기 위한 설계인 것 같다. 그후 up-sampling을 거치는데 up-sampling은 nearest neighbor 방법을 사용한다.

FishNet DR Blocks (M: conv block, T: transfer connection)

UR Blocks와 같이 Fish Body에서 온 피처맵을 concat해 채널수를 늘리고 residual connection에 통과시킨 후 down-sampling을 사용해 피처 사이즈를 조절한다. down-sampling은 max-pooling을 사용한다.

Detailed design and discussion

Design for handling the gradient propagation problem

Gradient propagation problem을 head부분과body부분에서 I-conv 를 제거함으로서 해결하였다. 기존 backbone network에서 1×1 convolution으로 인위적으로 채널수를 조절하는 부분을 제거하려고 노력한 부분이 많이 보인다. 이 특징이 결국 이미지의 여러 특징을 잘 잡는 이유가 되었다.

Selection of up/down-sampling function

up-sampling에서도 I-conv가 발생할 수 있는 deconvolution을 사용하지 않고 nearest neighbor method를 사용하였다. 또한 피처맵을 up-sampling하면 피처맵이 히석(dilute)되기 때문에 dilated-convolution을 사용하였다. 이를 사용했을 때 ILSVRC top-1 error가 0.13% 감소하였다.

Experiments and Results

Experimental results on ImageNet (Image Classification)

Result on ImageNet

Detection task를 잘 수행하기 위한 네트워크가 classification task만을 위한 네트워크들보다 좋은 성능을 낸다는 점이 주목해야할 요소인 것 같다. 그래프에서 보이듯이 DenseNet보다 성능과 연산량 부분에서 더 뛰어나다. 개인적으로 backbone network로서 중요한 점중에 하나는 이 네트워크를 얼마나 바꾸기 용이한지라고 생각하는데 ResNext를 가져와서 FishNet에 맞게 변형시킨 FishNeXt도 같이 implementation 한 것이 이부분을 어느정도 보여준 것 같다.

Experimental results on ImageNet

Result on COCO

Mask R-CNN과 FPN을 implementation한 후 base network만 바꿔보면서 비교한 성능이다. 표에 보이듯이 단순히 backbone network를 ResNet이나 ResNext에서 FishNet으로 바꾸기만 했는데 AP가 ResNet대비 2.8%, ResNext대비 1.5%나 상승하였다. 이는 backbone network를 바꾸지 않을 이유가 없는 너무 좋은 성능이다. pixel-level, region-level, image-level에 집중해 네트워크를 설계한 것이 진짜로 큰 효과가 있음을 보여주는 성능이다.

리뷰

ResNet이후로 큰 발전을 하지 못한 상황에서 DenseNet이 나오면서 큰 주목을 받았지만 object detector의 base network로는 ResNet만 쓰이던 상황이었다. 이런 상황에서 object detection에 특화된 네트워크를 제안함과 동시에 classification에서의 성능도 향상함을 보여주니 놀랍지 않을 수 없는 논문이었다. 사실 논문의 흐름이 NIPS와는 전혀 다르고 거의 CVPR논문의 성격을 띈다. 이를 받아들여준 데에는 기존 네트워크의 문제점 제시와 이를 풀어낸 네트워크 설계가 너무 깔끔하고 성능 향상이 너무 확실한 점이 가장 컸을것 같다. github으로 코드공개와 pre-trained weight도 공개되어있어서 조금만 시간을 투자하면 가져다가 쓸수있다는 점도 엄청 큰 메리트이다. 딥러닝 분야에서는 어느분야나 초기에는 미국이 주도하다가 정말 메인스트림 분야가 되면 중국에서 정복하는것같다. 이렇게 잘하는것을 보면 씁슬하기도 하다.

여담으로 fishnet은 보통 망사스타킹을 뜻한다. 구글에 fishnet 이라 치면 19세 인증을 하라고 뜨는데 저자들이 이를 몰랐을리는 없고 NIPS2018, COCO challenge 1위 backbone network 논문에 19금 말장난을 쳐놓는걸 보면 존경심이 들정도ㅎㅎ.