R-FCN: Object Detection via Region-based Fully Convolutional Networks

nips
sota
detection
convolutional
nips2016

(Curtis Kim) #1

Detector Outline 목록에도 있지만, R-CNN 을 시작으로 많은 많은 개선이 있었습니다. R-CNN 류의 Detector 라고 하면, 대략 아래의 Two Stage를 갖습니다.

  1. Region Proposal : Object가 있을 만한 곳을 Proposal 함. 일종의 물체가 있을 것이라는 가설.
  2. Classification & Regression : 1에서 추천된 영역을 RoI Crop하여 Class 정보를 예상하고, Bounding Box 위치를 정교하게 조정함.

R-CNN이 갖는 가장 큰 단점은 Computationally Expensive 하다는 점인데, 이는 2의 과정이 1에서 나온 여러개의 Proposal(대략 수천개)에 대하여 반복적으로 수행되어야 하기 떄문입니다.

이 논문에서는, 이러한 문제를 배경으로, 아래의 주요한 변화를 시도합니다.

  1. (2)의 과정에 필요한 연산을 줄임. 무시할 수 있는 수준으로.
  2. CNN의 학습이 쉽도록 Heatmap 형태의 Output으로 모델링을 함.

그렇게 해서 탄생한 R-FCN은 #sota 수준의 성능이면서도 수십배 이상 빠른 Realtime에 가까운 속도를 보여줍니다.


R-CNN 배경

서론에서 밝힌 것처럼 R-CNN은, Region Proposal을 통해 얻은 여러 영역에 대해 RoI Cropping을 수행합니다. 각 영역은 다시 CNN에 의해 Class 정보와 정확한 Bounding Box 정보를 취득하도록 설계되어 있습니다.

논문에서는 이러한 디자인이 Translation Invariance를 바라보는 서로 다른 두 시각 차에 의해서 발생했다고 주장합니다.

  • Classification 문제만을 해결하는 CNN은 Translation에 영향을 받지 않아야 합니다. 즉, 강아지가 왼쪽에 있던, 오른쪽에 있던, 귀퉁에 있던, 정답은 강아지여야 합니다.

  • 그런데 Detection 문제를 위해 CNN을 만들면, Translation에 매우 민감해져야 합니다. 이미지 속 강아지를 조금 옮기면, 결과 역시 달라져야 합니다. 저자는 깊은 네트워크일 수록 translation에 덜 민감하기 때문에, 학습이 어려울 것이라고 주장합니다.

이러한 딜레마를 해결하기 위해 결국 Region Proposal된 영역을 Crop해 Translation 정보가 없는 형태로 문제를 푸는 방식이 유용하다고 주장합니다.

Approach

먼저 Network의 Output을 Heatmap 형태로 변경했습니다.

특정 클래스의 물체가 있는 경우 높은 값을 갖도록 설계된 Heatmap을 클래스 개수만큼 쌓은 Tensor가 Output 입니다. 즉 클래스의 개수를 C+1(아무것도 아닌 클래스까지 포함), Grid가 k \times k 만큼 있는 Tensor라면,

(C+1) \times k^2

크기의 Tensor output을 갖습니다. 그리고 이 Output 정보를 Voting해 실제 클래스가 존재하는지 여부를 판단하는데 쓰겠다는 것입니다.

즉 위와 같이, 사람에 잘 맞추어진 Bounding Box라면, Heatmap에서 나온 점수가 높을테니, Object - Person 으로 결과가 나오게 되고, 그렇지 않은 경우에는 점수가 낮아 물체가 아닌 것으로 판단하게 됩니다.

이렇게, Heatmap 형태로 네트워크를 구성하면 상대적으로 트레이닝이 쉬워지는데, 이는 네트워크가 좌표를 출력하는 법을 배우는 것보다는, Feature 정보를 통해 Heatmap을 출력하는 편이 훨씬 쉽기 때문입니다.

기타 자세한 사항으로는,

  • Backbone Network로는 ResNet-101을 사용했으며, 1x1 Conv. 를 이용해 Dimension을 줄이는 등의 처리를 했습니다.
  • OHEM(Online Hard Example Mining) 적용
  • 마지막 Feature 사이즈를 키우기 위해, 원래의 Resnet에서 stride=2 였던 한 레이어를 1로 변경합니다.

Position-Sensitive Score Maps & RoI Pooling

위에서 Score map에 RoI Pooling을 통해 최종 결과를 얻는 부분을 조금 더 자세히 살펴보겠습니다. 일반적인 heatmap과 조금 다른 점이 있는데, score map이 'position sensitive’하다는 점입니다.

여기서 position이라고 하면, RoI Box 기준으로 Top-Left, Top-Center, … , Bottom-Right 등으로 구분 지을 수 있는데 영역을 말합니다. 즉, Score Map의 각 channel들은 각 position에 알맞는 결과만을 내어주도록 설계되어 있습니다.

각 Position에 해당하는 Score는 Average Pooling을 통해 처리되며, 이렇게 k \times k 개 만큼 얻어진 Score Map은 다시 Average를 통해 해당 클래스에 대한 Confidence정보로 변환됩니다.

그리고 이렇게 얻어진 C + 1 개의 Class별 정보는 Softmax를 통해 각 class별 confidence 로 변환됩니다. 즉, 각 RoI region에 대한 Softmax Cross Entrypy Loss로 최종적으로 표현되어 End-to-End Learning이 가능합니다.

추가적으로는 Bounding Box Regresson도 수행했다고 되어 있습니다.

Experiments

Faster R-CNN+++에 비해 꽤 괜찮은 성능을 보이면서 속도는 수십배 이상 빠릅니다. 특히 일반적인 R-CNN 과 비교햇을 때에는 월등히 성능이 좋습니다.

COCO에서도 마찬가지입니다.

Conclusion

Network Output을 잘 디자인해 R-CNN이 갖는 속도 상의 이슈를 단번에 해결하면서도, 아주 좋은 성능을 보여준 모델입니다. 사실상 1번의 Network Forwarding으로 모든 처리가 끝나면서도, Translation에 취약한 네트워크가 잘 학습할 수 있는 형태로 만듦으로써 좋은 결과를 냈다고 생각됩니다.


#2

Figure 3,4 에서 Heatmap 9개가 다 다른모양인 것같은데
어떤식으로 Heatmap을 뽑는건가요?
답변부탁드립니다.ㅠ