Abstract
문제
False Negative (FN)
- 객체가 있는데 모델이 놓친것을 의미
- 즉, 모델이 탐지하지 못한 객체
자율주행에서 어떤 객체든 모델이 탐지하지 못한다는건 굉장히 큰 문제다.
- 교통사고로 이어질 수 있기 때문
해결
FocalFormer3D는 다음 방법들을 통해 false negative들을 줄이고자 한다.
- HIP (Hard Instance Probing)
- FN을 줄이는 pipeline 제시
- Multi-stage query generation
- 탐지하기 어려운 객체를 multi-stage로 해결
- Box-level transformer decoder
- 방대한 객체 후보로부터 객체를 효과적으로 구별
Introduction
3D object detection에 대한 여러 연구들이 있지만, 모델이 객체를 놓치는 것에 대한 연구는 많이 이루어지지 않았다.
이런 false negative들 혹은 missed object들이 발생되는 이유는 다음과 같다.
- 가려짐(occlusion)
- 배경이 지저분함(clutter background)
그래서 FocalFormer3D는 이를 해결하기 위한 pipeline인 HIP(Hard Instance Probing)을 제시한다.
HIP는 여러 층(stage)으로 구성되는(cascade-style) decoder로부터 영감을 받아 만들어졌다.
Pipeline을 간단하게 소개하자면 다음과 같다.
1. 각 stage 별로 heatmap을 생성한다.
2. Heatmap에서 잘 탐지한 객체(true positive)에 해당하는 위치를 mask에 기록한다.
3. 다음 stage에서 생성한 heatmap에서 mask에 기록된 위치는 지운다(masking).
층별로 위치 기록이 mask에 쌓이기 때문에 이 mask를 "Accumulated Positive Mask"라고 부른다.
- 이전 층들에서 이미 탐지한 객체들은 다음 층에서 중복되어 학습되지 않는다.
- 따라서 탐지하기 어려운 객체(hard instance)들에 모델이 집중할 가능성을 높아진다.
False negative를 줄이는 것은 false positive의 증가로 이어질 수 있다.
- 숨어있는 객체를 찾기 위해 예측을 남발할 수 있기 때문이다.
- 따라서 이를 대비할 장치가 필요하다.
FocalFormer3D는 box-level refinement step을 통해 과도한 예측을 억제한다.
- Deformable transformer decoder를 활용한다.
- 객체 후보들을 box-level query로 표현한다.
객체 후보들을 box-level query로 표현하는것은 몇가지 이점을 가진다.
1. Query간의 상호작용을 통해 여러 decoder를 거치면서 반복적인 refine이 가능해진다.
2. RoIAlign과 query가 가진 충분한 context로 더 정밀한 refine이 가능해진다.
Methodology
[HIP] Formulation of Hard Instance Probing
먼저 단순히 예측된 객체 후보중, groud truth에 해당하는 객체와 매칭된 후보들을 true positive로 결정한다.
이후 groud truth에서 true positive들을 빼면, false negative들이 남는다.
이런 방식으로 HIP가 동작한다.
1. True positive를 encoder의 각 stage마다 걸러내면
2. 각 stage는 남아있는 false negative에 집중하게 된다.
[Multi-stage Heatmap Encoder] Preliminary of center heatmap in BEV perception
BEV heatmap head는 객체의 center에 peak을 만들도록 학습된다.
따라서 객체들은 하나의 점(point)으로 표현이된다.
객체를 점으로 표현하게 되면, 객체끼리 겹치지 않는다는 가정을 할 수 있게 된다.
- 점은 넓이가 1x1 이므로 점끼리 겹치는게 불가능하다.
- BEV space에서 heatmap이 만들어지기 때문에 높이(z-axis)로 인한 겹침도 존재하지 않는다.
같은 흐름에서 positive한 후보들도 단순히 점의 형태로 표현할 수 있게 된다.
[Multi-stage Heatmap Encoder] Positive mask accumulation
Introduction에서 말했듯, 각 stage에서 같은 객체를 탐지하지 않도록 mask를 만든다고 했었다.
매 stage마다 postive한 객체 후보들에 대한 기록을 mask에 쌓아나가기 때문에 accumulated positive mask(APM) 이라고 부른다.
매 stage마다 positive한 객체 후보들은 heatmap을 기준으로 선택된다.
- Heatmap에서 값의 크기를 기준으로 내림차순 정렬한 뒤, 상위 N개를 뽑는다. [코드]
- Class에 상관없이 값만 기준으로 뽑는다.
- 이를 test-time selection stratgy라고 한다.
그리고 뽑힌 후보들의 위치에 맞게 mask에 기록해준다. [코드]
가장 이상적으로 positive 후보를 masking하는 방법은 매칭된 ground-truth 객체의 box 크기만큼 가리는 것이다.
- 이는 객체끼리 겹치지 않는다는 가정이 들어간다.
하지만 inference때는 ground-truth 정보를 알 수가 없으니 현실적인 방법은 아니다.
따라서 세가지 방식이 제안된다.
1. Point masking
- 객체 center위치만 mask에 기록하는 방식
2. Pooling-based Masking
- 객체 center위치에서 3x3 dilation을 적용하는 방식 [코드]
- Pooling based 라고 하는 이유는 dilation을 stride 1의 max-pooling으로 구현했기 때문이다.
3. Box Masking
- 아예 box prediction을 한 뒤에 예측된 box 크기만큼 가리는 방식
Table 5를 보면, 2번 방식을 사용했을때 성능이 가장 높다는 것을 알 수 있다.
이렇게 만들어진 APM은 매 stage마다 heatmap을 만든 뒤, 적용된다. [코드]
[Multi-stage Heatmap Encoder] Discussion on implementation validity for HIP
매 stage마다 positive 후보들을 가려나가는 아이디어 자체는 좋지만, "잘" 가려야한다.
이상하게 가리면, 다음 stage에서 탐지할 수도 있었을 객체를 가릴 수도 있기 때문이다.
- False negative를 가리는 것을 의미한다.
위에서 설명했던 3가지 masking 방법 중, 가장 기본이 되는 point masking 방식은 잘 못 가릴 위험이 없다.
- 가리는 범위가 1x1 이므로 항상 하나의 객체만 가린다는 것이 보장된다.
그러나 가리는 범위가 너무 작으므로 false positive가 생성될 위험이 생긴다.
결국 다음 두가지 요인 사이의 trade-off를 조절해야한다.
1. 다음 stage로 false negative들 잘 넘겨주기
2. 다음 stage에서 false positive들 생성을 줄이기
따라서 3가지 masking 방법에 대해 ablation study를 수행했다.
- 위에서도 한번 언급했듯, pooling-based masking이 가장 성능이 좋았다.
[Box-level Deformable Decoder]
Encoder에서 뽑아낸 query들은 positional object query로 취급될 수 있다.
- Heatmap에서 값이 가장 컸던 N개의 위치로부터 feature를 뽑아오기 때문
Encoder에서 나온 query들은 initial한 후보이며, query의 개수와 recall은 비례한다.
그러나, recall과 precision은 trade-off 관계이므로 false positive가 증가할 수 있다.
앞서 false negative를 줄였기 때문에(의미없는 후보의 증가) false positive를 억제할 refinement의 필요성이 커지게 된다.
FocalFormer3D는 객체 후보들을 box-level query로 표현한다.
- 이전에 제안됐던 방법들의 positional object query에서 확장됐다고 볼 수 있다.
[Box-level Deformable Decoder] Box-pooling module
객체의 context와 positional한 정보를 합쳐서 decoder의 query로 사용하려한다.
객체 context의 경우, 바로 전 decoder layer에서 prediction됐던 bounding box정보(box query)를 활용해서 7x7 RoI-pooling을 시도한다. [코드]
이후 RoI-pooling의 결과로 얻은 feature와 encoder의 output이었던 query feature를 더한다.
- RoI-pooling 결과 : 객체의 context 정보
- Encoder의 query feature : 객체의 positional 정보
[Box-level Deformable Decoder] Decoder implementation
Decoder로 demormable DETR의 decoder를 사용한다.
- Head : 8개
- Scale : 3개
- Sampling point : Scale당 4개
Box-pooling module에서 사용되는 객체의 bounding box 크기는 1.2배 해서 사용한다. [코드]
[Model Training]
모델은 2 stage로 학습한다.
- Stage 1 : LiDAR backbone 학습
- Stage 2 : FocalFormer3D detector 학습
Deformable decoder를 bipartite graph matching을 통해 학습시키는 경우, 수렴 속도가 낮다.
- Bipartite matching을 사용하는 경우, 매 epoch마다 target 객체와 매칭되는 query가 일관되지 않아 수렴속도가 낮다는 분석이 있다. DN-DETR (CVPR 2022)
- Ground-truth 객체들로부터 noise가 적용된 query를 생성하여 학습하는 식으로 해결. [코드]
추가적으로 매칭된 ground truth 객체와 예측된 객체의 L2 거리가 7m 보다 멀면, 매칭에서 제외시켜서 효과적으로 학습시킬 수 있었다. [코드]
- 실제 학습때는 5m가 사용됐다.