안녕하세요, 오늘 읽은 논문은 CenterNetv2, Probabilistic two-stage detection 입니다.
해당 논문은 one-stage 모델을 RPN으로 사용하여 class-agnostic한 region proposal을 생성한 후에 region proposal을 분류하는 head를 추가하여 two-stage 모델로 변경합니다. CenterNet에 FPN구조를 추가하고, CenterNet이 생성한 proposals들을 추가한 head로 분류하여 최종 결과를 나타내는 CenterNetv2는 2021년에 SOTA를 달성합니다. one-stage 모델을 RPN으로 사용한다니 신박하네요..ㅎㅎ
two-stage에서 사용하는 RPN은 recall을 최대화하는 목적으로 region proposals를 생성합니다. recall을 최대화할 목적이므로 정확한 가능도를 추정하지 못합니다. 반면에 one-stage model은 ground-truth와 예측값 사이에 log-likelihood를 최대화하는 목적으로 학습합니다. 따라서 one-stage model이 class를 무시하고 객체와 배경을 log-likelihood를 최대화하는 방향으로 region proposals를 생성한 후에 Faster R-CNN의 head또는 Cascade 분류기로 region proposals를 분류합니다. 이 외에도 여러가지 기법을 추가하는데, 논문에서 제안하는 probabilistic two-stage detection의 손실 함수에 하한값을 설정합니다. 또한 one-stage와 two-stage의 손실 함수를 하나로 묶습니다. 기존의 two-stage 모델은 one-stage와 two-stage의 손실함수가 각각 존재했었습니다.
위 그림은 RPN과 one-stage모델을 RPN으로 사용한 경우에 region proposals의 비교입니다. recall을 최대화 하는 방향으로 region proposals를 생성하는 RPN보다, 가능도를 최대화하는 one-stage 모델을 RPN으로 사용하는 것이 훨씬 좋네요
Probabilistic interpretation of two-stage detection
기존의 two-stage 모델은 RPN이 객체=1, 배경=0 정보를 담은 region proposals를 생성합니다. 또한 head는 객체=1인 경우에만 분류를 진행했습니다. 즉, RPN에서 P(O)를 예측하고, second-stage에서 P(ClO)를 예측했었습니다. 해당 논문에서는 두 확률을 하나로 묶습니다.
P(O)는 class-agnostic한 객체=1, 배경=0 정보이며, 위와 같이 확률식을 설정하면 RPN이 recall을 최대화하는 방향으로 예측하는 것이 아니라, 각 proposal의 가능도를 예측한다고 설명합니다.
Training objective
손실 함수는 다음과 같이 설정합니다.
객체가 존재하는 경우에는 first-stage와 second-stage를 구분하여 손실함수를 구성합니다.
이렇게 설정하는 경우에 first, secone stage에 대해 각각 최대 가능도 손실 함수를 독립적으로 감소시킬 수 있다고 합니다.
배경인 경우에는 first와 second stage를 하나로 묶습니다.
손실 함수를 위와같이 설정하는 경우에 학습속도가 엄청나게 느려질 수 있다고 합니다. 따라서 최적화를 위해 두 가지 손실 함수의 하한값을 설정합니다.
이렇게 손실함수를 구성하여 RPN이 recall을 최대화하는 방향이 아닌 likelihood를 추정하도록 학습한다고 설명합니다.
CenterNetV2
기존의 CenterNet 구조에 FPN 구조를 추가합니다. 다양한 scale에서 객체를 탐지할 수 있도록 한것입니다. 그리고 이 것을 fitst stage로 사용하여 region proposals를 생성하도록 합니다. 뒤에 추가적인 head를 부착하여 class를 예측합니다. CenterNet이외에도 여러 one-stage 모델을 probabilistic two-stage 로 변경할 수 있으며, two-stage 모델 또한 probabilistic two stage로 변경할 수 있습니다.
Performance
FasterRCNN-RetinaNet은 RetinaNet을 first-stage로 사용하고, FasterRCNN의 head를 second stage로 사용한 것을 의미합니다.
참고자료