Paper Review

[논문 리뷰] CoordConv

슈넌 2021. 7. 15. 20:05

An intriguing failing of convolutional neural networks and the CoordConv solution


Abstract

 

딥러닝에서 Convolution에 대한 영향력은 막대하다. Segmentation, object detection, classification 등의 task에서 CNN은 엄청난 효과를 보여주었고, 가장 적합한 모델로 여겨진다. 하지만 이 논문에서 충격적인 사실 하나를 발견하게 된다. 바로 coordinate transform problem인데, (x, y) 하나의 좌표를 직교좌표계에 해당하는 픽셀에 점을 찍는 것을 말한다. 이것에 대해 Convolution은 좋지 않은 성능을 보였는데, 이것이 왜 충격적이냐면 object detection이나 segmentation은 위치 정보를 알아야 할 수 있는 것들인데, 이것들에 대해 성능이 좋지 않다는 것은 우리의 직관과는 다르기 때문이다. 논문의 저자들은 이것을 해결하기 위해 CoordConv를 제안한다. 이것은 coordinate 정보를 담는 channels를 convolution의 input에 추가한 방법이다. 계산량이나 parameter수의 큰 영향 없이 CoordConv는 translation invariance를 잘 학습했다. Translation invariance는 object의 위치가 변하더라도 결과를 그에 맞게 잘 도출하는 것을 말한다. 결과적으로 CoodConv는 coordinate transform problem을 잘 해결했고, generalization(일반화)도 잘 해냈다.  또한 parameter 갯수도 10~100배 정도 줄었고 속도는 150배 정도 빨라졌다. 하지만 사람들은 이것이 performance나 other task에 안 좋은 영향을 끼칠 수 있지 않을까?라고 생각할 수 있다. 이를 확인하기 위해 GAN, Faster R-CNN, RL(Reinforement Learning)에 적용을 해보았을 때 차이가 없거나, 오히려 성능이 증가한 것을 확인하였다.


1. Introduction

 

CNN은 엄청난 성과를 보이면서 가장 중요하고 효과적인 툴로 널리 쓰여왔다. CNN은 이미지, 음성, 게임 등 다양한 task에 사용이 되었으며 많은 발전을 이루어냈다. Detection 모델인 Faster R-CNN은 좌표를 계산하고 focus를 attention한다. Generative 모델인 DRAW는 반복적으로 감지하고 focus 하고, 개선한다. 이러한 모델들은 모두 CNN에 대한 잘못된 방법으로 유도된 bias를 가지고 만들어졌다고 주장한다.

 

이 연구에서 CNN이 직교좌표 정보를 픽셀로 표현하는 것과 반대로 픽셀을 직교좌표 정보로 받아오는 것에 무능력하다는 것을 분석하고 제시한다. 말로만 들었을 때는 쉬운 task처럼 보이지만 예상과 달리 convolution은 이 task에 어려움이 있었다.

 

Main Contribution:

 

  1. 단순한 toy dataset을 만들었는데, Not-so-Clevr라고 다양한 위치에 사각형들이 그려져 있는 것이다.
  2. CoordConv operation을 정의했다. 직교좌표의 위치 정보를 hard-coding된 input channel에 추가하는 방법을 사용하였다. 이 방법은 Tensorflow 두줄 정도면 간단히 구현 가능하다.
  3. Coordinate transform problem을 간단한 방법부터 시작해서 복잡한 방법까지 실험을 했다. 여기서 간단한 방법을 toy problem이라고 칭하는데, 이는 설명을 위해 복잡한 문제를 간단히 만든 것을 말한다. 예를 들면 여기에서는 좌표 한 개를 주고 픽셀에 칠하는 것을 생각하면 될 것 같다. 실험을 진행하였을 때 supervised learning으로 간단한 문제를 해결하는 것조차 쉽지 않았다. 실험에서 좌표를 input으로 주고 CNN으로 학습을 시켜 output으로는 그 위치를 highlgiht 하게 하였다. 그 반대로도 실험을 해보았고 CoordConv가 더 좋은 성능을 보이는 것을 확인했다.
  4. Supervised Rendering task로 복잡성을 더했다. 앞에서 말한 Not-so-Clevr dataset을 이용하여 사각형의 중심 좌표를 주고 색칠하는 것이다. 이 실험을 진행했을 때, convolution는 학습에 어려움이 있었고, CoordConv의 성능이 더 좋았다.
  5. CoordConv의 성능 확인을 위해 기존에 나와있는 모델에 CoordConv를 추가해보았다. GAN, VAE에서 mode collapse가 줄어드는 것을 확인하였고, Larger GAN에서 geometric translation을 제공했는데, 이것은 전형적인 GAN에서 한번도 발견되지 않았던 것이다. Geometric translation은 위치를 옮기면, 옮겨진 위치에 맞게 사진을 생성하는 것이다. Faster R-CNN에서는 CoordConv를 추가하니 성능이 향상되었고, agent learning을 이용하여 Atrai game을 하였는데 성능이 눈에 띄게 올라갔다.
  6. 다른 연구자들이 이것을 더 개선시키면 좋겠다고 생각되어 깃헙에 CoordConv에 관한 자료들을 공개해놓았다.

아래 사진은 논문에서 말한 toy problems이다.

 


2. Not-so-Clevr dataset

 

Not-so-Clevr dataset은 이 실험에서 사용될 dataset으로 한 개의 object와 흑백으로 된 Sort-of-CLEVR라고 생각하면 된다. Sort-of-CLEVR은 아래 사진과 같이 square, circle 모양의 object들이 여러 곳에 위치해 있는 dataset이다.

Sort-of-CLEVR

이것들은 dataset을 보고 질문(파란색 사각형은 어디에 있는가?)에 답(중앙 아래)하는 모델에서 많이 사용된다. 하지만 여기서는 generative model에 사용된다. Not-so-Clevr은 9x9 사각형으로 구성되어 있으며, 사각형은 64x64 크기의 canvas에 놓여 있다. 사각형의 위치는 64x64 grid에 제한되어 있다. 이 뜻은 square의 중점은 56x56 area에만 있을 수 있다는 뜻인데 64x64 크기의 canvas에 9x9 사각형이 안에 존재해야 한다고 생각하면 이해할 수 있을 것이다.

 

실험을 할 때 train, test dataset을 영역별로 나눴는데 일단은 uniformquadrant로 나누었다. 랜덤하게 가능한 중심 위치들을 8:2 비율로 train과 test를 나누는 것이 uniform이고, 위치를 4 분할해서 3/4는 train, 1/4는 test로 완전히 떨어뜨려 나눈 것이 quadrant이다. 아래 사진의 (b)를 보면 이해하기 쉬울 것이다.


3. The CoordConv Layer

 

기존 convolutional layer에 간단하게 추가를 한 CoordConv를 제시하였다. Convolutional layer는 사용되는 가장 큰 이유 3가지가 있다. 첫번째는 적은 parameter가 사용되고, 두 번째는 GPU 연산을 할 때 빠르기 때문이다. 마지막 세 번째는 translation invariant 때문이다. 앞에서 설명한 대로 translation invariant는 translation input이 들어가면 translation output이 나오는, 위치 변화가 생기더라도 그것에 맞게 output을 도출해내는 것을 말한다.

 

CoordConv layer는 앞에서 말했던 적은 parameter수와 빠른 계산의 장점을 갖고 있다. 하지만 translation invariance를 필요에 따라 버리거나 유지할 수 있다. 이것은 성능을 저해하는 것처럼 보일 수 있는데 마지막 부분에 보면 non-translation invariant이지만 generalization이 더 잘 된 것을 확인할 수 있다.

 

CoodConv는 아주 쉽게 구현이 가능하다. 그냥 추가적인 channel만 붙여주면 되는데 그 channel에는 좌표에 대한 정보로 채워져있다. 이 channel은 convolutional layer에 들어가는 input에 concat 된다.

 

위에 사진을 보면 알 수 있듯이, i와 j coordinate가 추가되고 각 채널은 h x w 크기의 rank-1 행렬이다. 각 값들은 [-1,1] 범위의 값들로 연속되어 분포해 있다. 웬만하면 i, j coordinate 정보만으로 충분하지만 가끔 몇몇 case에서는 r coordinate가 필요할 때도 있다. r좌표는 아래와 같이 정의된다.

 

Number of parameters: square kernel size가 k이고, input channel이 c, output channel이 c'이라고 할 때, standard convolutional layer는 cc'k^2개의 weights를 가진다. CoordConv는 이와 달리 (c+d)c'k^2개의 weights를 가지는데, d는 coordinate dimension의 갯수이다. 따라서 i, j만 쓴다면 2, r까지 쓴다면 3의 값을 가진다. Parameter 수가 증가하는 양은 상대적으로 많이 적다. 이 증가를 최소화하기 위해 논문에서는 kernel의 크기를 1x1으로 하여 k값을 1로 만들기 때문이다.

 

Translation invariance: CoordConv의 coordinate 정보를 담고 있는 channel 값이 0으로 초기화가 되어 있거나, 학습을 통해 0에 도달하게 된다면 수학적으로 일반적인 convolutional layer와 다름이 없다. 하지만 이것이 0이 아니라면 translation의 의존도가 생기게 된다. (coordinate정보가 큰 값이라면 처음 input부터 위치에 대한 정보 값이 생기므로 translation에 상관없이 coordinate 정보를 통해 위치를 찾아내는 것 같다.) CoordConv는 translation dependence를 학습하는데, 이것은 locally connected layers도 가능하다. 하지만 훨씬 적은 parameter수가 필요하다. Locally connected layer는 convolutional layer와 유사하지만 kernel끼리 weights를 공유하지 않는다. (그렇기 때문에 translation dependence를 학습할 수 있는 것 같다.) CoordConv는 weights를 공유하기 때문에 coordinate 정보가 담긴 channel에만 의존한다.

 

Relation to other work: CoordConv는 다른 많은 연구와 연관이 되어있다. Compositional Pattern Producing Network(CPPN)은 임의의 많은 차원에 좌표 정보를 넣은 함수를 사용했다. CoordConv는 conditional CPPN이라고 생각할 수 있다. CoordConv는 output 값이 coordinate 정보뿐만 아니라 incoming data에도 의존한다. 한 연구에서 CPPN의 input에 coordinate 정보를 함께 넣어서 사용했는데 이 연구를 보고 간단하게 만들어서 CoordConv를 만들었다. Input layer에 position embedding을한 방법과, GAN model에서 부분적으로 그림을 그리는 방법 등의 연구들이 이루어지고 있으며 CoordConv가 그러한 연구를 도와줄 수 있을 것으로 보인다.

 

이전 연구들에서도 지형 정보를 network에 넣으려는 시도가 있었지만 이것에 중요성은 크게 부각되지 않았다. 하지만 이 논문에서는 이것을 가장 중요한 것으로 여기고 있으며, 이전의 어려움을 줄이려고 하고 있고, 어떤 convolutional net에도 사용이 가능하다.


4. Supervised Coordinate tasks

 

1. Supervised Coordinate Classification

가장 간단한 task라고 생각한 Supervised Coordinate Classification을 시도해보았다. (x, y) 좌표를 input으로 주고 그에 맞는 pixel을 칠하는 것이다. 이런 toy problem을 실험하는 이유는 이것이 선행되어야 high level의 task도 할 수 있기 때문이다. 아래 사진은 정확도를 시각화한 표이다.

Convolution을 사용했을 때 정확도는 86%가 최대였고 더 이상의 발전은 없었다. 게다가 quadrant dataset을 사용했을 때는 accuracy가 아주 안 좋은 것을 확인할 수 있다. 아무래도 위치가 바뀌게 되면 잘 찾지 못하는 것 같다. CoordConv를 사용했을 때 100%의 정확도를 보여주었고, parameter의 갯수도 200K에서 7.5K로 1/30 가량 줄어들었다. 학습시간 또한 매우 줄어들었는데, 단 10~20초 밖에 걸리지 않았다.

 

2. Supervised Coordinate Regression

이번에는 반대로 픽셀 정보를 받아서 좌표를 얻는 실험을 하였고, 이것도 똑같이 어려웠다. 이것은 VAE encoder나 GAN discriminator로 실험할 수 있다. 4-Layer convolutional network는 uniform train set에서는 generalize가 잘 되었지만 quadrant에서는 실패했다. 다른 구조로는 fully-convolutional architecture로 해보았는데 generalization이 quadrant, uniform 모든 set에서 실패했다. CoordConv model은 오직 900개의 parameter만 사용함에도 불구하고 generalize가 두 가지 set에서 모두 잘 되었다. (다른 모델은 각각 85K, 12K개의 parameter를 사용하였다) 

Supervised Coordinate Classification 결과부터 보면 convolution은 Train 할 때 영역 구분 정도는 되는 수준이고 99.6%의 정확도를 가진다. 하지만 이것은 memorization으로 인한 결과로 생각되는데 그 이유는 오른쪽 test 부분을 보면 전혀 잡아내지 못하기 때문이다. 반대로 CoordConv에서는 train과 test에서 모두 100%의 정확도를 달성했다.

 

오른쪽의 Supervised Coordinate Regression 결과 사진을 보면 Conv는 전혀 이상한 곳에 점을 찍고 있고, CoordConv는 Ground truth와 거의 완벽하게 동일한 것을 확인할 수 있다. 이는 generalize가 잘 된 것을 의미한다.

 

3. Supervised Rendering

앞에서 말했던 Supervised Rendering도 Conv와 CoordConv를 비교하여 실험을 하였다. 왼쪽을 보면 quadrant set은 Deconv가 전혀 test에서 맞추지 못하고 있으며, uniform set에서도 0.83 이상 올라가지 못하고 있다. (지표가 IOU인 이유는 Rendering은 좌표에 맞는 사각형을 그리는 것이기 때문에 겹치는 정도를 보는 것이다.) 반대로 CoordConv는 두 가지 set 모두에서 높은 성능을 보여준다.

 

오른쪽 사진을 보면 학습하는데 걸린 시간이 CoordConv가 훨씬 짧은 것을 볼 수 있으며 IOU도 훨씬 높은 것을 확인할 수 있다.

 


5. Applicability to Image Classification, Object Detection, Generative Modeling, and Reinforcement Learning

 

위의 실험들을 통해 CoordConv의 성능이 좋다는 것은 입증되었지만, 진짜 model에 적용했을 때 performance에 어떤 영향을 끼칠지 모르기 때문에 여러 모델에 CoordConv를 추가하여 실험을 한다.

 

ImageNet Classification: 먼저 Classification은 위치 정보를 필요로 하지 않기 때문에 성능이 올라갈 것으로 예상하지는 않았다. 하지만 성능이 나빠지지 않는지 확인을 위해 실험을 하였다. ResNet-50에 CoordConv를 추가하였고, 결과를 확인해보니 성능에는 별 차이가 없었고 performance에 영향을 끼치지 않는 것을 확인하였다.

 

Object Detection: MNIST dataset을 사용하여 Faster R-CNN 모델에 CoordConv를 추가하여 학습하였다. IOU를 측정한 결과 24%의 성능이 향상된 것을 확인하였다. Object detection의 경우에는 bounding box를 그릴 때 위치 정보가 필요하므로 성능 개선이 예상되었다.

 

Generative Modeling: GAN과 VAE와 같은 generative 모델들은 mode collapse가 일어나는데, content, style, and position 등의 다양한 것들과 연관이 있다. 여기서 CoordConv가 position으로 인한 mode collapse를 완화해줄 것으로 예상을 한다. 

 

(a)에서는 GAN을 이용하여 색깔이 있는 object를 생성하였다. (a)의 두 번째 사진에서 convolution을 사용한 GAN은 mode collapse가 일어난 것을 볼 수 있다. 하지만 CoordConv는 기존 모델의 7%의 parameter만 사용했음에도 불구하고 더 좋은 성능을 보여주었다.

 

(b)에서 CoordConv를 사용한 것이 사용하지 않은 것보다 더 넓게 퍼져있는 것을 확인할 수 있다.

 

(c)에서는 두 모델 모두 mode collapse가 일어난 것을 볼 수 있으며 CoordConv를 사용한 것이 더 뭉쳐있기 때문에 성능이 약간 더 안 좋아 보인다.

 

(d)에서는 CoordConv GAN이 기존 GAN보다 훨씬 smooth 한 것을 볼 수 있다.

 

(e)에서 LSUN의 경우 랜덤 한 그림을 그리고 geometric translation을 했을 때 변화를 관찰하였다. 이 변화를 관찰하면 CoordConv로 만든 GAN이 더 smooth 하게 변화하고 변화한 위치를 잘 찾는 것을 볼 수 있다. 반면에 convolution을 사용한 GAN은 fade-out이 되는 것처럼 물체가 없어지고 새로 생기는 듯한 영상을 볼 수 있다.

 

참고 영상: https://www.youtube.com/watch?v=YefMbLqS7Jg

 

Reinforcement Learning: CoordConv를 추가하면서 몇몇 게임들에 대해서 성능 향상이 일어났다. 아래 그림을 보면 대부분의 게임에서 성능 향상이 있었고, Pacman이나 Back Heist 같은 위치 정보가 중요한 게임들에 대해서 높은 성능 향상을 보여준다.


6. Conclusion and Future Work

 

CNN이 coordinate transform task에 대해 무능력함을 증명했고, CoordConv를 통해 이 문제를 해결하였다. 또한 CoordConv가 다양한 곳에 적용되면서 성능이 향상되는 것을 확인하였다. 지금은 아직 단순한 것들에 적용을 하였지만 후속 연구를 통해 더 다양한 곳에 널리 쓰일 수 있을 것이다.


2018년에 나온 논문으로 당시 Object Detection과 Semantic Segmentation을 CNN으로 처리하였기 때문에 큰 충격이었을 것으로 예상됩니다. 그러면 어떻게 detection과 segmentation을 잘할 수 있었던 것일까요? 이 답변으로 가장 유력한 후보는 zero padding입니다. 다음에는 이것에 대해 좀 더 알아보겠습니다. 

 

 

참고 자료: https://youtu.be/8yFQc6elePA Uber-AI Lab 논문 저자들이 설명 영상을 촬영하여 유튜브에 올렸습니다.

참고 자료: https://eng.uber.com/coordconv/ 논문 저자들이 작성한 내용 정리입니다.