카메라 캘리브레이션과 2D 검증
모든 3D 직육면체를 캘리브레이션된 각 카메라 이미지에 투영해, 주석자가 3D에서 편집하고 2D에서 검증하도록 합니다. 이것이 없는 3D 라벨링에 피드백 고리가 없는 이유.
포인트 클라우드에 3D 박스를 그리면, 그것을 촬영한 사진 속 객체 위에 정확히 얹히는 것을 볼 수 있습니다. 항목마다 제공한 카메라 캘리브레이션이 모든 직육면체를 모든 카메라 뷰에 투영하고, 박스를 움직일 때마다 다시 그립니다.
yaml
annotation_schemes:
- annotation_type: spatial_annotation
name: objects
source_field: point_cloud
calibration_field: calibration # the item field holding the rig
tools: [cuboid_3d]
labels:
- {name: car, color: "#FF6B6B"}동작하는 예시: examples/spatial/kitti-cuboids/.
들리는 것보다 중요한 이유
40미터 떨어진 자동차는 라이다 반사점 수십 개입니다. 박스가 꼭 맞는지, 길이가 맞는지, 회전이 옳은지는 모두 클라우드만으로는 거의 답할 수 없고, 카메라 이미지에서는 한눈에 보입니다.
그래서 주석자는 3D에서 편집하고 2D에서 검증합니다. 뷰포트 아래 패널에는 박스가 투영된 각 카메라의 뷰가 표시됩니다.
이것이 없으면 3D 라벨링에는 피드백 고리가 없습니다. 궤도 카메라에서 맞아 보이는 박스가 시선 방향으로 몇 미터 어긋나 있어도, 3D 뷰에는 그것을 알려줄 것이 아무것도 없습니다.
좌표계가 일을 그르치는 지점
캘리브레이션은 변환의 사슬이고, 모든 고리가 조용히 틀릴 수 있는 지점입니다.
- 기준 좌표계와 카메라 좌표계. 보정된 기준 좌표계가 필요한 자리에 특정 카메라의 변환을 쓰면 모든 박스가 그 카메라의 스테레오 기선만큼 밀립니다. 몇 센티미터짜리 체계적 오차이며, 주석자의 부주의로 오해되기 쉽습니다.
- 위치 관례. KITTI의 3D location은 박스 아랫면의 중점입니다. 이것을 중심으로 읽으면 모든 객체가 자기 높이의 절반만큼 땅에 묻힙니다.
- 치수 순서와 축 배정. KITTI의 dimensions는
h w l이고, 박스 자신의 좌표계에서 길이는 X를 따라, 높이는 Y의 아래 방향으로, 너비는 Z를 따라 뻗습니다. 길이가 카메라의 전방 축을 따른다고 가정하면 — 자연스러운 선택처럼 읽힙니다 — 정확히 90° 회전한 박스가 나옵니다.
마지막 항목이 배울 것이 많은 사례입니다. 왕복 테스트로는 잡히지 않습니다. 역변환이 같은 가정을 하기 때문에 둘이 서로 들어맞아 버리기 때문입니다. devkit 자체의 꼭짓점 계산식과 비교해야만 잡히고, 바로 그것을 위한 테스트가 있습니다.