Abstract
이 논문에서 object detection 문제를 풀기 위해서 segmentation과 같은 per-pixel prediction를 이용하는 fully convolutional one-stage object detector를 제안합니다.
Fcos는 anchor box free라는 특징을 가집니다 → complicated computation X, anchor-box X, hyperparameter X
Introduction
주로 objetct detection의 mainstream인 one-stage or two-stage architecture들은 anchor-box를 이용하는게 대다수입니다.→ Retinanet, SSD, Faster R-CNN, YOLOv3…..
이러한 anchor-based detector의 단점?
- anchor-box의 numbers, size, aspect ratio에 sensitive
- 정해진 anchor-box의 size와 aspect ratio로 인해, large shape variation를 가지는 object, 특히, small object를 다루기 어렵다. 이 경우, detector의 generalization ability가 떨어지게 되고, 다른 사이즈의 object에 대해서는 다시 새롭게 모델 개발이 필요해집니다.
- anchor-based detector는 high recall 위해서 anchor를 densly 놔두지만, 이 대부분은 negative 샘플들입니다. 이렇게 negative 샘플들이 많을 때, 훈련중에 class imbalance 문제를 일으킵니다.
- anchor-based detector는 positve, negative 샘플들을 분류하기 위해서, gt와 IOU를 계산하는데 이 computation cost는 상당합니다.
위의 anchor-based detector의 4가지 단점이 보여진 가운데, FCN(Fully Convolutional Netrwork)와 같은 구조를 이용해서 semantic segmentation, depth estimation, keypoint estimation 등 task에서 좋은 성능을 보여주었습니다. 그럼 object detection또한 자연스레 이와 같은 방법(per pixel prediction)적용시키고자 FCOS를 통해 시도할 수 있습니다.
FCN 구조에서 object detection을 할 때, semantice segmantataion와 같이 pixel 단위로 classification을 하는 것뿐만 아니라 픽셀 별로 4개의 값을 가지는 4D vector를 가집니다.
- 4D vector는 위의 왼쪽 그림처럼, 해당 위치에서의 bounding box의 경계인 상/하/좌/우 거리를 나타냅니다.
- 이와 같은 방법을 사용할 때, 오른쪽 테니스 그림을 보면, 두개이상의 box들 overlap 되는 경우가 있습니다. 이럴 때, 어떤 박스에 대해서 4D vector를 regress해야되는지 모호해질 수 있습니다.
위에서 설명한 어느 한 지점에서 bounding box사이에서 overlap되는 경우 FPN(Feature Pyramid Network)를 통해 문제를 해결할 수 있다고 보여줍니다. FPN 구조를 통해 다양한 크기의 feature들을 사용할 수 있습니다. 구체적인 방법은 아래에서 다시 언급하겠습니다.
FCOS에서는 center-ness라는 개념을 도입해서 실제 물체의 중심점에서 멀리 떨어진 bounding box를 예측하는 경우를 제한하였습니다.
Contiribution
- semantice segmantation과 같은 task들을 풀 수 있는 FCN을 사용하셔 다른 task들로부터 idea들을 쉽게 가져오고 재사용할 수 있습니다.
- FCOS는 Region proposal과 anchor가 free한 one-stage detector구조이다. 이는 hyperparameter튜닝이 필요없는 간단한 구조입니다.
- anchor free일때, gt와 IOU를 계산하는 복잡한 과정이 필요없습니다.
- FCOS는 one-stage detector에서 SOTA이며, two-stage detector에서 RPN으로도 사용할 수 있습니다.
- 구조를 조정하면 다른 task에서 사용가능하며, 특히, instance-wise prediction을 할때 좋은 방법이 될 수 있습니다.
Related work
Anchor-based Detector
Slice windowing/proposal과 같은 Region Proposal에 대해 반복적으로 image feature를 compute하는 것을 없애기위해, Anchor box를 개념을 도입하여 Faster R-CNN, YOLOv2, SSD등을 개발해왔습니다. 앞에서 언급한 것처럼, Anchor box에는 많은 hyperparmeter들이 있어 모델 개발하는데 있어서 어려움을 야기하고, negative sample들이 많아지는 문제점이 있어왔습니다. Anchor기반의 Detector들은 feature map에서 어떤 하나의 픽셀에 대해 object의 center라고 생각하고 미리 만들어진 anchor가지고 regression를 진행합니다. 이 중에서, IOU가 낮은 anchor들은 negative sample이 되므로, 실제 학습과정에서 object의 위치를 추정하는 데에서 사용되는 픽셀들은 실제 object의 center근처에 있는 픽셀들 전부입니다.
Anchor-free Detector
기존에 유명한 anchor-free detector로는 YOLOv1이였습니다. 하지만, YOLOv1는 center 근처에 있는 points를 bounding box을 예측하는데 사용하였기에, low recall을 보였습니다. 그래서 YOLOv2에서는 anchor box를 도입하였습니다. YOLOv1과 달리, FCOS는 gt안에 있는 모든 points에 대해서 bounding box 예측에 사용하고 center-ness branch를 도입하여 low quality bounding box들 제거하였습니다. 이러한 방법으로 anchor-based detector와 비슷한 recall를 보여주었습니다.
기존의 anchor-free detector는 post processing이 복잡하거나, 겹치는 bounding box를 처리하는데 어렵고, 상대적으로 low recall를 가지고 있었습니다. 하지만, FCOS는 multi-level FPN 와 center-ness를 도입하여 문제를 개선하였고 더 간단한 구조로 구현할 수 있었습니다.
또한 앞에서 언급한 거 처럼, anchor-based detector는 negatvie sample들이 많고 object 위치 추정에 사용되어지는 pixel들이 적다라는 문제를 안고 있습니다. 하지만, FCOS는 gt내의 모든 픽셀에 대해서 특정 object에 속하는지 아닌지 확인하고, 속한다면 해당 픽셀에서 예측한 bounding box는 무엇인지 계산합니다.
Our Approach
위의 구조를 확인해봅시다. Backbone에서 세개의 feature map을 뽑아내고, 그 feature들을 이용해서 총 5개의 level을 가지는 Feature Pyramid를 생성합니다. 마지막에 각각의 level에서 head를 통과하여 classification, center-ness, regression branch를 통해 세개의 결과가 생성됩니다. 여기서 classification 부분이 FCN의 per-pixel prediction 과 비슷하다고 볼 수 있습니다. 나머지 Center-ness는 object detection 성능 개선을 위한 만들어진 구조이고, regression는 bounding box의 예측에 사용됩니다.
주된 Approach는 크게 세가지입니다.
- object detection 문제를 per-pixel prediction 문제로 fomulate 하여 풉니다.
- low recall, overlap box에 의한 ambiguity 문제를 해결하기 위해 multi-level predcition 이용합니다.
- low-quality box를 제거하기 위해 Center-ness branch를 제안합니다.
Fully Convolutional One-Stage Detector
- 먼저, CNN bacbone의 layer \(i\)에 있는 feature map을 \(F_i\), 그 layer까지의 stride를 \(s\)라고 합니다.
- 각 이미지의 gt를 \(B_i\)라고 두고, \(B_i=(x_0^i, y_0^i,x_1^i, y_1^i, c^i)\)의 형태를 가집니다. 차례대로 left-top, right-bottom, class를 뜻합니다. 하나의 픽셀에서 최대 클래스 갯수만큼의 값을 가질 수 있으면 하나의 픽셀에서 같은 클래스가 두개 이상의 클래스는 나타내지 않습니다.
- feature map \(F_i\)에서 위치 \((x,y)\)에 대해서 실제 input image에서의 좌표 위치는 다음과 같이 정의합니다.
기존의 anchor box를 통한 추정이 아닌 직접적으로 input level에서의 위치를 추정합니다. 즉, 각각의 좌표를 학습해야할 대상으로 바라보게 됩니다. 이는 anchor-based detector와 다른 차이점이면서 semantic segmentation의 FCN의 구조와 같습니다.
- 하나의 좌표 \((x, y)\)가 gt box안에 있고, 클래스가 gt box의 클래스와 일치할때, positive sample로 간주합니다. 다른 경우는 negative sampel로 간주합니다(클래스=background).
- 여기서, Bouding box까지의 거리를 4D real vector (\(l^{\ast}\), \(t^{\ast}\), \(r^{\ast}\), \(b^{\ast}\))를 정의합니다. 위에서 보여준 그림을 보면 각각의 의미를 알 수 있습니다. 아래의 식처럼, 어떤 좌표와 gt사이의 거리라고 생각해봅시다!
- 만약에 좌표가 두개이상의 gt box 안에 있을 때는 더 작은 box를 target box로 지정합니다. 이와 같은 방식으로 target box를 지정하는 이유는 multi-level prediction과 관련되어 있어 이는 뒤에 설명합니다. 이는 multi-level prediction를 사용하기에 성능에 영향을 끼치지 않습니다.
- FCOS는 가능한 많은 forground sample을 학습에 사용할 수 있습니다. anchor-based detector는 gt와 높은 IOU를 가지는 positive sample에 대해서만 학습을 하는 점과 다릅니다. 이 차이가 FCOS과 다른 anchor-based detector보다 outperform하다고 주장합니다.
Network Outputs
- 학습시에는 mutil-class classifier를 사용하지 않고, 클래스 갯수 만큼의 binary classifier를 사용합니다.
- FCOS는 하나의 픽셀에 대한 anchor 박스 배수 만큼 적은 output variable을 가집니다.
Loss Function
Inference
- 인퍼런스를 할 때에는 이미지를 네트워크에 feedforward한 후에 각 feature map인 \(F_i\)의 각 \((x, y)\) 위치에 대하여 classification score 와 regression prediction를 얻습니다. classification score가 일정 threshold이상인 위치를 찾아 bounding box를 구할 수 있다.
Multi-level prediction with FPN for FCOS
FCOS에서 문제가 될만한 부분은?
- 마지막 큰 stride를 가지는 feature map에서는 작은 물체에 검출하기 어려운 문제가 있습니다. → low recall
- 겹쳐진 gt box 내부에 있는 point에 대해 모호함이 생길 수 있습니다.
- 먼저, 첫번째 문제를 살펴보아요. 예를 들어 마지막 feature map에서 stride가 16라면 CNN는 상대적으로 low best possible recall(BPR)를 얻을 수 있습니다. 큰 output stride를 가지면, 작은 object들이 해당 feature map에 표현되지 않기에 찾기가 어려우므로 낮은 recall의 원인이 됩니다.
- 이 경우, anchor기반 detector는 gt와 predicted bounding box 사이 IOU의 threshold를 낮춰서 positive sample를 증강시켜서 recall을 개선시켰다고 합니다. 반면, FCOS는 recall 올리기위한 다른 방법을 생각할 수 있습니다. 각 FPN에서 나오는 작은 stride와 큰 stride feature map으로부터 각각 작은 물체와 큰 물체를 찾을 수 있기 때문입니다.
- 다음으로 두번째 문제를 보아요. 이 문제는 overlap된 구간에 존재하는 pixel들이 어떤 겹쳐진 두 bounding box에 속하게 될 때, 어떤 bounding box와 class를 대상으로 학습을 해야하는 지에 대한 모호성입니다.
- 이러한 문제가 FPN에 의해서 개선될 수 있습니다. 이유는 bounding box 크기 차이가 발생하는 두 물체들 간의 모호성이 발생하는데 물체 크기의 차이가 발생하면 서로 다른 feature map에서 찾게되므로 이 문제가 개선 될 수 있습니다.
전반적인 FPN 구조에 대해 살펴봅시다.
최종적으로 이용하는 feature map은 \((P_3, P_4, P_5, P_6, P_7)\)이다. \(P_3, P_4, P_5\)는 \(C_3, C_4, C_5\)에서 1x1 convolution에 의해 얻어져서 top-down으로 얻어진 feature이고, \(P_6, P_7\)는 \(P_5\)에서 차례로 stride 2를 적용시킨 feature입니다.
- Anchor-based detector는 서로 다른 크기에 feature map에 대해서 서로 다른 크기의 anchor-box를 적용시킨 거에 반해 FCOS는 각 level에 대해서 regression range를 지정합니다.
- 예를 들어 bounding box의 중심점에서 각 bounding box 까지의 좌/상/우/하 까지의 거리를 \(l^{\ast}\), \(t^{\ast}\), \(r^{\ast}\), \(b^{\ast}\)라고 하면 각 i 번째 feature 에서의 regression의 거리 범위는 아래와 같습니다.
- 위 식에서 \(m_2, m_3, m_4, m_5, m_6, m_7\)은 0, 64, 128, 256, 512, 무한대가 됩니다.
- 인덱스 i 가 작을 수록 stride가 작기 때문에 더 좁은 범위를 찾을 수 있고 i가 클수록 stride가 더 크기 때문에 더 넓은 범위를 찾을 수 있습니다. 이 방식과 대응하여 i 가 작을수록 찾고자 하는 거리 범위의 제한도 작아 작은 물체를 찾도록 하고 i 가 클수록 찾고자 하는 거리 범위도 커져서 넓은 범위에서 큰 물체를 찾도록 합니다.
- 만약 이와 같은 multi-level FPN 구조를 사용하였음에도 불구하고 한 위치에 여러개의 gt 박스가 할당이 되면 면적이 가장 작은 gt box를 사용하는 것으로 기준을 정하여 모호함을 제거하였습니다.
- Detection performance을 끌어올리기위해 head간에 parameter를 공유하는게 좋지만, feature level마다 서로 다른 사이즈따라 regression을 수행하는 것이 효과가 있기때문에 head간의 parameter를 공유하지 않는다.
Center-ness for FCOS
- 앞에서 설명한 multi-level predcition을 사용함에도 불구하고 anchor-based detector보다 성능이 떨어졌습니다. 그 이유는 물체의 center에서 많이 벗어난 low-quality predicted bounding box를 예측하는 경향이 있었기 때문인데요. low-quality bounding box의 정의는 IoU와 classification score 중에서 IoU의 스코어가 더 낮은 box를 의미합니다. 이와 같은 box는 위치는 부정확한 하지만 높은 확률을 가지므로 box를 오인식 할 수 있기 때문입니다.
- 여기서 말하는 Center-ness는 hyperparameter없이 실제 물체 중앙 부근에 있는 점들을 예측하도록 도와주는 역할을 합니다. center-ness는 중심점에서 거리를 정규화하여 표현합니다. 중심에 가까우면 1, 멀면 0에 가까운 값을 가지도록 합니다.
- inference시, 각 location에서 center-ness와 classification score 를 곱하여 center에서 멀리 떨어질수록 down-weighting을 자동적으로 해주기에 low-quality bounding box를 제거하는 게 가능합니다.
- 위의 결과는 center-ness를 사용하지 않은 경우(left)와 사용한 경우(right)를 나타내고 있습니다. 세로축은 inference box와 gt box사이의 IOU, 가로축은 classification score와 classification*center-ness입니다. 가로축, 세로축 모두 1에 가까울수록 좋습니다.
- 왼쪽 그래프는 classification score는 높지만 IOU가 낮은 샘플들이 많이 있습니다. 이러한 샘플들이 low-qualtity sample들이다. 특히, 오른쪽 그래프를 보면 classification에 center-ness를 곱하여서 IOU가 낮고 classfication이 높은 샘플들을 IOU가 상대적으로 classification(*center-ness)보다 높도록 만들어주었습니다.
- 처음에 제기된 low-quality bounding box와 연결시켜 보면 왼쪽 그래프에서 y=x 선 아래에 있는 점들은 IoU가 Classification score보다 상대적으로 낮아서 오인식할 수 있는 가능성이 있는 집단을 표현하였습니다. 반면 오른쪽 그래프에서는 low-quality bounding box에 해당하는 집단의 수가 현저히 줄어들었습니다. 즉, Classification score가 상대적으로 높아서 출력 대상으로 뽑혔으나 IoU가 낮아서 잘못된 위치에 객체를 인식할 수 있는 대상들을 없앤 것입니다.
'Computer Vision > Object Detection' 카테고리의 다른 글
YOLO(You Only Look Once) (0) | 2022.08.24 |
---|---|
Fast/Faster RCNN 한눈에 비교 (0) | 2022.08.23 |
RCNN(Regions with CNN) (0) | 2021.04.25 |