[자율주행] 자율주행 시각화 — 페타바이트를 눈으로 보는 도구
자율주행/시각화
· 2026-07-22
시리즈를 여기까지 왔다. 씬 데이터로 세상을 기록하고, 캘리브레이션으로 좌표계를 맞추고, 3D 데이터 위에서 차선·검출·점유·궤적을 뽑았다. 그런데 이 모든 것에는 공통의 마지막 관문이 있다. 사람이 눈으로 확인할 수 없으면, 아무것도 믿을 수 없다.
자율주행 시각화는 그 확인을 가능하게 하는 도구다. 흔히 '보기 좋은 데모'로 오해받지만, 실제로는 데이터 파이프라인의 필수 층이다.
왜 시각화가 필수인가
자율주행 데이터는 숫자로만 보면 지옥이다. 수백만 개의 3D 점, 프레임마다 수십 개의 박스, 초 단위로 갈라지는 궤적 — 이걸 표로 봐서는 무엇이 틀렸는지 알 수 없다. 시각화는 네 가지 일을 한다.
- 디버깅 — 검출이 왜 저 차를 놓쳤는지, 캘리브레이션이 어긋나 박스가 밀렸는지는 겹쳐 그려봐야 보인다.
- 라벨링 — 사람이 3D 박스를 그리고 차선을 잇는 작업 자체가 시각화 도구 위에서 일어난다.
- 검증·신뢰 — "모델이 이 장면에서 뭘 봤는가"를 눈으로 확인해야 배포를 결정할 수 있다.
- 소통 — 엔지니어·라벨러·의사결정자가 같은 화면을 보며 대화한다.
즉 시각화는 데이터와 사람 사이의 인터페이스다. 파이프라인이 아무리 좋아도, 사람이 들여다볼 창이 없으면 그 데이터는 반쯤 죽어 있다.
무엇을 그리는가
자율주행 뷰어가 한 장면에 겹쳐 그리는 것들:
- 포인트 클라우드 — 라이다 점을 높이·거리·강도로 색칠해 3D로.
- 3D 박스 — 검출·정답 객체를 방향과 클래스 라벨과 함께.
- BEV / 차선 / 도로 경계 — 위에서 내려다본 도로 구조.
- 궤적 — 과거 경로와 예측된 미래 갈래들.
- 점유 격자 — 찬 복셀과 자유 공간.
- 에고 차량과 센서 시야 — 기준이 되는 나 자신.
이것들을 하나의 정합된 3D 공간에 얹으려면, 결국 시리즈 내내 말한 좌표계와 변환이 화면 위에서 다시 한번 맞아떨어져야 한다. 시각화는 캘리브레이션이 맞았는지를 드러내는 리트머스지이기도 하다.
어떻게 그리는가 — 브라우저와 WebGL
과거엔 무거운 데스크톱 툴(RViz 등)에서 봤지만, 최근 흐름은 브라우저다. WebGL/three.js로 수십만~수백만 점을 실시간으로 렌더링하고, 링크 하나로 팀 전체가 같은 장면을 연다. 설치도, 게임엔진도 필요 없다.
브라우저 시각화의 과제는 규모다.
- 점 수 — 수백만 점을 60fps로 그리려면 단일 포인트 버퍼(gl.POINTS)에 다운샘플링·LOD를 얹는다. (박스·화살표 같은 반복 프리미티브는 인스턴싱으로 그린다.)
- 스트리밍 — 페타바이트 로그에서 지금 볼 구간만 골라 받아야 한다.
- 재생(replay) — 시간을 앞뒤로 감으며 장면을 되짚는 타임라인.
무엇으로 그리는가 — 도구 생태계
실무에서 이걸 매번 바닥부터 만들지는 않는다. 자율주행/로보틱스에는 사실상의 표준 도구들이 있다.
- rerun (rerun.io) — 요즘 급부상한 멀티모달 로깅·시각화 SDK. 코드(Python/Rust)에서
rr.log(...)로 3D 점군·박스·이미지·시계열을 시간축과 함께 흘려보내면, 동기화된 3D+2D 뷰로 스크럽하며 본다. 파이프라인 디버깅에 특히 강하다 — "이 프레임에서 모델이 뭘 봤나"를 코드 몇 줄로 눈에 띄운다. - Foxglove Studio — 웹/데스크톱 뷰어. MCAP·rosbag을 열어 3D·이미지·플롯 패널을 붙이고, 링크로 팀과 같은 장면을 공유한다. MCAP을 만든 곳이라 로그 재생 계층과 궁합이 좋다.
- 데이터셋 devkit 뷰어 — nuScenes·Waymo 같은 데이터셋은 자체 렌더러를 devkit에 담아 제공한다.
- RViz — ROS 진영의 데스크톱 고전. 여전히 많이 쓴다.
관통하는 패턴은 하나다. 표준 포맷(MCAP)으로 로깅 → 도구로 열기 → 시간을 스크럽하며 모델 출력을 원본 위에 겹치기. 앞 글의 로그·포맷 이야기가 여기서 도구로 이어진다.
이 사이트가 바로 그 예다
이 블로그의 랜딩에 있는 라이다 퍼셉션 씬(Autonomy 뷰)이 정확히 이 이야기다. 브라우저에서 WebGL로 도는 점 구름 위에, 에고 차량과 3D 박스(거리·클래스 라벨)와 주행 텔레메트리를 실시간으로 겹쳐 그린다. "raw 센서 로그 → 질의 가능한 데이터 → 사람이 탐색하는 도구"라는 파이프라인의 마지막 층을, 데모가 아니라 실제 인터랙션으로 보여주는 것이다.
한 걸음 더 나아가면, 시각화의 대상은 '한 장면'을 넘어선다. 이 사이트의 토폴로지 화면처럼, 데이터 자체의 구조와 관계를 3D로 그리는 것도 같은 계보다 — 결국 모두 "복잡한 것을 사람이 이해하도록 공간에 얹는" 일이다.
데이터 엔지니어의 시선
시각화는 별도의 '앱'이 아니라 데이터 파이프라인의 출력단이다.
- 저장 스키마가 시각화 친화적이어야 한다 — 지금 볼 구간·센서만 빠르게 뽑을 수 있게.
- 좌표·시간이 정합돼야 화면에서 겹쳐진다 — 여기서 캘리브레이션의 값어치가 눈에 보인다.
- 모델 출력을 원본 위에 오버레이해, 실패를 곧바로 유사 장면 발굴 → 라벨링 → 재학습으로 잇는다.
좋은 시각화는 파이프라인의 끝이 아니라, 데이터를 다시 파이프라인으로 되돌리는 순환의 입구다.
시리즈를 마치며
- 시각화는 보기 좋은 데모가 아니라 디버깅·라벨링·검증·소통을 가능하게 하는 데이터의 필수 인터페이스다.
- 점 구름·박스·차선·궤적·점유를 하나의 정합된 3D 공간에 얹으며, 캘리브레이션이 맞았는지를 드러낸다.
- 최근엔 브라우저 WebGL로 옮겨가 링크 하나로 팀이 같은 장면을 열고, 규모(점 수·스트리밍·재생)가 과제다.
- 좋은 시각화는 데이터를 다시 학습 순환으로 되돌리는 입구다.
여덟 편에 걸쳐 자율주행을 데이터의 눈으로 훑었다. 센서가 세상을 기록하는 법에서 시작해, 좌표를 맞추고, 표현을 고르고, 길과 물체와 빈 공간과 미래를 읽고, 마지막으로 그 전부를 사람이 보는 도구까지. 관통하는 하나의 문장은 이것이다 — 자율주행은 모델 이전에 데이터의 문제이고, 데이터는 결국 좌표·시간·구조의 문제다.