Motivation
모노큘라 시퀀스에서 3D scene flow 추정 문제는 근본적으로 ill-posed 문제 → 현재의 정확도에는 한계가 있고, 효율성 / 리얼 타임에도 문제가 있음 (Hur의 이전 연구). 이전에 제시한 모델의 성능과 real-time 이슈를 더 끌어 올리기 위한 연구
Related Works
이전에는 이미지 2장으로 태스크를 수행함 → 그러나 multiple consecutive frame이 리얼 월드 시나리오에 더 알맞음. 물론 Joint learning을 하면서 또 multi-frame을 활용하긴 했으나, 실행 시간이 느린 문제 → 더 빠르게 만들 필요가 있음
Contribution
저자는 이전 연구에서 separate decoder보다 single decoder가 성능이더 낫다고 주장. (scene flow와 disparity를 하나의 네트워크 path에서 추정하는) 그러나 다시 재관찰해본 결과, decoder 문제가 아니라 이를 하나로 엮는 context network에서 문제. context 네트워크를 없애서 성능이 올라감을 발견 → splited decoder가 문제없다고 판단. 점진적으로 last layer로부터 디코더 스타팅부터 시작해서, 마지막으로부터 몇 번째 레이어로부터 splitting하는 것이 유리할지 조사
- ConvLSTM을 통한 prev frame의 hidden state를 propgation → 리얼 월드 시나리오에 알맞는 세팅
이때 propagation을 그냥 하지 않고 forward warping을 통해서 하는데, occlusion 핸들링에 더 적절함 그리고 backward warping보다 안정적임 Temporal consistency를 이용하는 방법은 옵티컬 플로우의 정확도를 올리고, 특히 가려지거나 영역 밖으로 벗어난 부분 에 대해서 핸들링이 쉬워짐 - Occlusion-aware mask
SSL 로스에 brightness diff를 더 robust하게 measure할 수 있는 cue를 제공- Reference 영상의 윈도우 (Census Window)와 Target 영상의 각각의 윈도우 내에 존재하는 중심 픽셀과 주변 픽셀의 값의 대소 비교로 1 or 0의 패턴을 가지는 바이너리 마스크를 생성
- Reference 영상 윈도우의 마스크와 Target 영상 윈도우의 마스크를 비교해서 Hamming Distance를 계산
→ Hamming distance는 문자열 중 어떤 문자를 바꾸어야 서로 같아지는지 계산하는 것
그러나 Census Transform 자체는 recon 이미지의 outlier에 대해서 취약함 → 이것은 occlusion 때문으로 추정. 따라서 outliter 부분은 occlusion mask로 element-wise product를 하여 제거해줌 (0이면 occlusion, 1이면 visible). 두 census patch의 계산 함수는 Geman-McClure function을 사용 → 각 픽셀 값이 같으면 0, 다르면 1을 할당하여 교환해야할 비용을 계산 occlusion mask는 이 계산 결과에 1을 빼서 얻음 (이것은 나의 생각)
- Gradient detaching strategy
디스패리티 디코더를 분리해서 설계하는데 학습 과정을 더 안정적으로 만듬
Experiments
Scene flow를 추정하는 태스크 이므로 관례대로 해온 KITTI Benchmark Scene flow로 결과를 보임
Multi-frame을 사용하여 추론 속도를 더욱 빠르게 개선한 실험 테이블이 있음
- 멀티프레임을 사용했을때 성능 개선 (O)
- Occ mask를 사용했을때 성능 개선 (O)
- 이 둘을 모두 사용했을때 성능이 가장 좋음 (O)
Conclusion
- Hur의 연구는 아직까지 카메라 모션을 명시적으로 넣지는 않음
→ 이것은 저자도 나중에 할 것이라고 밝힘. 이 연구는 현재 내가 하고 있는 것, 빨리 할 것 - Cost Volume + Conv LSTM 모듈을 Recurrent하게 작동하는 Attention으로 할 수 있지 않을까?
→ 코스트 볼륨이 attention과 같이 correlation을 보는 것과 동일, 차이점이라면 코스트 볼륨은 기준 픽셀의 주변 영역만 보지만 어텐션은 전부다 관측함. 코스트 볼륨을 Conv LSTM에 넣어주는 형태인데, 코릴레이션을 본 결과를 다시 LSTM에 넣어주는 것과 이전에 관측한 어텐션을 다시 현재 어텐션 모듈에 Cross Attention으로 넣어주는 것과 행위가 유사하지 않을까? → Perceiver에서 아이디어를 얻음