개인 생각
Object query에 대한 접근과 활용을 진짜 기가막히게 해버린 논문.
2D domain과 3D domain을 fusing하기 위해 진짜 다양한 논문들을 참고하고, 녹여냈다는 것을 느낄 수 있었다.
Abstract
문제
- Image condition을 고려한 fusion 방법이 없음
- Bad illumination
- Sensor misalignment
- 존재하는 fusion 방법들은 calibration matrix에 크게 의존
- 카메라가 다르거나, calibration이 정교하지 않거나 하면 성능이 낮아짐
- 이를 hard association이라고 표현
해결
- Transformer decoder 구조 사용
- Object query를 기반으로 image feature 와 point cloud를 fusing
- Soft-association
- Image feature와 LiDAR BEV feature를 cross-attention
- Calibration matrix에 덜 의존
- Image-guided query initialization
- Soft-association으로 만들어진 feature를 사용
- Point cloud의 약점을 image를 활용하여 극복
Introduction
왜 LiDAR랑 Camera를 섞어야 하는가?
Point cloud는 객체의 정확한 위치와 이미지에 없는 depth 정보를 제공하기 때문에 유용하다.
그러나 Point cloud는 너무 sparse해서 3D detection을 robust하게 만들기에는 충분하지 않다.
- 객체 크기와 point의 개수는 비례
- 사람, traffic cone같은 경우는 반사된 point의 개수가 너무 적음
하지만 image에서는 확실하게 잡을 수 있다.
그래서 image와 point cloud를 섞는(fusion) 방식이 나오게 됐다.
현존하는 fusion 방식의 문제점
여러가지 fusion 방법 중, point-level fusion의 성능이 가장 좋지만 몇가지 문제가 존재한다.
1. Point cloud랑 image feature를 너무 단순하게 다룬다.
- 단순하게 element-wise로 addition or concatenation
- Image feature의 quality가 낮아지면, 성능이 급격하게 떨어진다.
2. Hard association은 image pixel의 낭비가 심하다.
- Image에 비해 point cloud가 너무 sparse함
TransFusion overview
Object query를 사용하는 다른 2D 방식은 입력과 독립적인 query를 사용한다.
TransFusion은 object query를 2D 방식과 다르게 생성한다.
- Input과 category(class)가 관여한다.
TransFusion의 두번째 transformer decoder는 spatial, contextual 관계를 활용한다.
- Point cloud로부터 만들어진 object query (spatial) 와 image feature (contextual) 를 적절하게 섞는다.
Network가 객체의 위치를 더 잘 찾을 수 있게, initial bounding box 주변에서만 cross attention을 사용했다.
- Locality inductive bias를 줬기 때문에 수렴이 더 빨라짐
Image-guided query initialization module을 제안
- Image의 특징을 object query에 섞음
- Point cloud의 단점을 보완
Methodology
[Query Initialization] Input-dependent
Object query의 query position과 관련해서 이전 연구들은 두 가지중 하나의 방법을 사용했다.
1. 랜덤 생성
2. 학습시키기
이런 방식들로 객체를 찾기 위해서는 추가적인 layer가 필수적이었다.
- Layer더 깊게 쌓을수록 성능이 올라감
Object query의 초기화를 잘 할 수 있다면, 추가되는 layer의 개수가 많을 필요가 없다는 연구가 있었다.
TransFusion은 이에 영감을 받아 새로운 initialization strategy를 제안한다.
- Center heatmap 활용한 initialization strategy를 통해 1개의 layer만 사용
Center heatmap 활용방안
Heatmap에서 category에 상관없이 상위 N개만 뽑아서 initial query로 사용한다.
- 뽑힌 위치 기준 주변 8개중에 뽑힌 위치의 값이 제일 큰 경우만 남김
- Maxpooling과 100% 일치
- Query끼리 너무 가까이 위치하는 걸 방지
Input-dependent한 방향을 사용하지 않는다면 어떻게 될까.
- 광활한 BEV 평면에서 객체를 찾기 위해 상당히 많은 query들을 뿌려야한다.
[Query Initialization] Category-aware
Query에 category 정보도 포함시킨다.
- BEV 평면에 존재하는 객체는 실제 크기를 기준으로 표현된다.
- 따라서 category가 같으면 객체의 크기는 크게 차이나지 않는다.
Category 활용방안
Heatmap에서 뽑은 후보들은 category 정보를 가지고 있다.
1. 이를 one-hot vector 형태로 변환한다.
2. 다시 d차원으로 linear-projection한다.
3. Category embedding 완성!
생성된 category embedding과 위에서 뽑아진 query feature를 element-wise로 더한다.
[Transformer Decoder and FFN]
Object query끼리는 self-attention 해서 서로 다른 객체 후보끼리의 관계를 추론하게 한다.
Query position의 경우 MLP를 통해 query feature와 같은 차원으로 encoding 한 후, feature와 더해준다.
- Network가 context와 position을 jointly하게 추론할 수 있도록 해준다.
Object query와 feature끼리는 cross-attention 해준다.
- 객체 후보들과 관련있는 context를 수집
[LiDAR-Camera Fusion] Image Feature Fetching
Image는 dense한 반면 point cloud는 sparse하다.
따라서 모델에 넣기 전에 둘을 fusion하면, image의 dense함을 낭비하게 된다.
TransFusion은 image feature를 미리 만들어서 memory bank에 저장한다.
- 이후 cross-attention의 입력으로 쓴다.
Memory bank에 저장한다는 말이 거창하게 들릴 수 있지만 별말이 아니다.
학습된 모델을 사용할때, freezing시킨 상태로 GPU올려서 inference만 시킬수도 있다.
그러나 이는 길게 봤을때, GPU 공간만 낭비하는 것과 같다.
이를 해결하기 위해 inference된 결과(image feature)를 미리 뽑아서 파일로 저장해놓고, 필요할때 단순히 읽어서 사용하도록 한다.
결론적으로 "Memory bank를 사용한다"는 "Inference 결과를 파일로 저장해서 쓰겠다"와 같은 말이다.
[LiDAR-Camera Fusion] SMCA for Image Feature
Object query의 query postition은 주어진 multi-view 이미지들 중 하나로 대응될 것이다.
1. 전에 쓰인 prediction과 calibration matrix를 통해 대응되는 이미지로 projection 시킨다.
2. Object query들과 대응되는 image feature를 cross attention 시킨다.
LiDAR feature랑 image feature를 무턱대고 cross-attention시키면 수렴이 너무 느려진다.
- LiDAR feature와 image feature는 서로 다른 domain으로부터 생성됐다.
- 따라서 object query가 image에서 엉뚱한 배경부터 객체를 찾기 시작할 가능성이 높다.
- 학습 시간이 너무 길어짐.
SMCA는 이 논문으로부터 영감을 받아서 projection된 object query의 2D center에 가중치를 높게 주는 방식을 사용해서 해결했다.
- 2D center 주변의 gaussian형태로 가중치를 높게 주고, 나머지는 낮게 만든다.
- 이를 mask 형태로 만들어서 attention할때 활용
[Image-Guided Query Initialization]
Point cloud 입력만 써서 object query 만드는 건 이미 좋은 성능을 냈지만, image도 사용해보려 한다.
이 논문으로부터 영감을 받아, multiview image feature의 height차원에 대해 최대값을 뽑아낸 feature를 사용한다.
- 새로 만들어진 feature는 attention의 key 및 value로 사용하여 Fused BEV Feature를 만든다.
- Soft-association하는 부분이 이 부분이다.
- 논문에서는 height차원에 대해 최대값을 뽑는 것을 collapsing 한다고 표현했다.
Height차원을 collapsing한 이유는 위와 같다.
- 위의 Z축이 3차원 상에서 높이(height)에 해당하는 부분이다.
- Multi-view image는 결국 XZ 평면에 있는 것과 같다.
- BEV는 XY 평면에 있기 때문에 image plane의 Z축은 collapsing해도 된다고 생각한것이다.
- 일반적으로 image plane의 column 하나당 많아봐야 한개의 객체만 있기 때문에 height collapsing은 정보의 손실이 적다.
결론적으로 만들어진 LiDAR-camera feature(Fused BEV feature)는 heatmap을 생성할때 쓰인다.
- LiDAR-camera feature로부터 만들어진 heatmap은 LiDAR-only feature로부터 만들어진 heatmap과 평균내서 사용한다.