AI/컴퓨터비전(CV)

[CV 논문] HUGSIM: A Real-Time, Photo-Realistic and Closed-Loop Simulator for Autonomous Driving

CSE 2026. 4. 20. 17:16

 

 

아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.

읽은 논문들 정리

 

이번 논문은 최근 내 관심사와 매우 유사한 논문이다.

3DGS를 사용하여

1. 실시간 렌더링 가능

2. 사실적

3. close loop

를 가능하게 하는 자율주행 시뮬레이터를 고안한 논문이다.

좀 자세하게 읽고 글을 써보려한다.


 

이전 연구들

먼저 기존의 static scene 구성 방법을 point-based, mesh-based, NeRF-based, 3DGS-based로 나눠 방법들을 먼저 정리해준다.

포인트와 매쉬 기반은 재구성은 잘하지만 고품질로 모델링 하는데 문제가 있다.

NeRF기반은 고품질 모델링과 새로운 시점에서의 렌더링을 가능하게 한다.

3DGS기반은 실시간 렌더링까지 지원한다.

 

dynamic scene에 대해서도 설명한다.

많은 모델들이 배경과 객체를 분리하기 위해 3D BB에 의존한다.

즉 외부 모델이 알려준 객체의 정보를 믿고 렌더링에 사용한다.

한단계 더 나아가 실습을 해봤던 streetGaussian같은 모델들은 자체적으로 객체의 위치/방향을 최적화하기는 한다.

그러나 그냥 매 프레임마다 이미지와 잘 맞게 최적화를 하는데, 물리적으로 불가능한 움직임이 나올 수 있다.

 

따라서 이 논문에서는 물리적 제약을 하나 추가해 해결하려 했다.


또 기존 모델들은 차선변경을 했을 떄와 같은 학습데이터에 없는 뷰를 잘 그리지 못했다.

이를 해결하기 위해 나온 모델들은 라이다 데이터가 필요하거나 너무 많은 가우시안을 사용해서 비효율적이었다.

HUGSIM은 가우시안의 위치/크기를 최적화하고 RGB만으로도 높은 품질이 나온다.

 

 

HUGSIM은 시뮬레이터로 3DGS를 활용해 실시간 렌더링을 구현하고, 경로를 벗어난 시점의 뷰에서도 높은 퀄리티를 보여주고 주변 차량의 행동을 효율적으로 보여준다.


3. Urban Scene Reconstruction

3.1. Preliminaries

3DGS

이미 많이 다뤄봤던 3dgs이므로 넘어가자.

 

Coordinate System Definition

좌표계는 첫 프레임의 앞쪽 카메라의 뷰를 기준으로 한다.

관습에 따라 x축은 오른쪽, y축은 아래쪽, z축은 앞쪽으로 정한다.

 


3.2. Decomposed Scene Representaion

논문은 장면을 여러 요소로 나눠 생각한다.

 

Non Ground Static Gaussians

건물, 나무 같은 움직이지 않지만 지면도 아닌 것들을 얘기한다.

 

기존 3dgs에 semantic logit을 추가해서 2D semantic segmentation을 할 수 있게 했다.

즉 가우시안들의 이 logit 값을 블렌딩해서 해당 픽셀이 확률적으로 어떤 대상인지를 보여준다.

 

또, 다른 두 개의 시간 $t_1, t_2$에서 가우시안 중심의 이동량을 구한다.

3D가 아닌 카메라 화면(2D)에서 어떻게 움직이는지를 게산한다.

 

Ground Gaussians

이전 모델들에서는 시점을 임의로 바꾸면 차선이 심하게 뭉개지는 일들이 벌어진다.

그래서 땅을 따로 다루게 되었다.

 

기본적으로는 도로를 평면으로 취급해버리는 것이지만, 하나의 평면으로 퉁쳐버리면 길이 평지에서 오르막으로 바뀌거나 할 때 문제가 발생하므로, 카메라를 기준으로 좁은 거리 내에서의 지면만 하나의 평면으로 가정한다.

 

수학적으로는 해당 지역(좁은 거리내)에서 샘플링된 가우시안들의 높이 분산을 0에 수렴하도록 학습과정에서 강제하는 식이 들어간다.

$$\text{minimize } (1 - \lambda_{SSIM})||\hat{I} - \tilde{I}||_1 + \lambda_{SSIM}SSIM(\hat{I}, \tilde{I})$$$$\text{subject to } \lim_{\Delta Z \to 0} \sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(\mu_{y_i}^{cam} - \bar{\mu}_{y}^{cam})^2} = 0$$

 

$\mu_{y_i}^{cam}$는 해당 카메라 좌표계에서 가우시안의 높이이다.

$\bar{\mu}_{y}^{cam}$는 해당 좁은 공간안의 가우시안들의 평균 높이이다.

이때 가우시안들이 항상 위를 향해 납작하도록 가우시안의 속성을 고정시킨다.

따라서 가우시안은 x,z축으로만 늘어나 땅바닥에 딱 붙게 될 것이다.

 

Native Dynamic Vehicle Gaussians

원래 데이터셋에 있던 움직이는 자동차들을 다룬다.

RGB이미지에서 BB를 예측하는 방식을 사용하는데 당연히 오차가 있기 때문에 unicycle 모델이란 것을 사용한다.

$(x_t,z_t,\theta_t)$는 $t$프레임에서의 차량 중심점의 x,z좌표이다.(차량 중심점은 차의 로컬 좌표계의 원점이다)
y좌표는 지면 가우시안의 높이 값을 가져다 쓴다.

$\theta$는 차량이 바라보는 yaw각도이다.

 

전진속도와 각속도는 제어변수로 들어간다.

위치변화를 계산하는 식은 아래와 같다.

$$x_{t+1} = x_t + \frac{v_t}{\omega_t}(\sin \theta_{t+1} - \sin \theta_t)$$$$z_{t+1} = z_t - \frac{v_t}{\omega_t}(\cos \theta_{t+1} - \cos \theta_t)$$$$\theta_{t+1} = \theta_t + \omega_t$$

 

여기서 좌표와 속도는 모두 학습되는 변수이다.

이 방식을 도입했기 때문에 어떤 프레임에서 BB가 이상한 곳에 찍혀있어도 그 앞뒤의 올바른 프레임에 맞게 차의 움직임을 계산한다.

 

Non Native Full Observed Vehicle Gaussian

데이터셋에서 볼 수 있던 뷰가 아닌 다른 뷰에서 주변의 차들을 보면 해당 각도에서는 완성도가 높지 않은 것을 알 수 있다.

따라서 360도의 데이터가 모두 있는 셋을 사용해서 이를 시뮬레이터에 넣는다.

 


3.3. Holistic Urban Gaussian Splatting

Novel View Synthesis

일반 3D처리에 비해 도시 표현은 빛 조건이 복잡하다.

각 화면을 찍을 때 카메라는 알아서 노출과 화이트밸런스를 조절하게 된다.

NeRF방식은 신경망에 외형 임베딩을 넣어 해결하지만 3DGS는 신경망이 없다.

따라서 해결책으로 카메라의 외부 파라미터를 입력으로 받는 작은 MLP를 만들고 affine행렬과 벡터를 생성하게 했다.

$\tilde{C} = A \times C + b$ 

$C$는 원본 가우시안의 색상이다.

이 색상에 affine을 곱하고 b를 더해 광조건 차이를 보정한다.

 

Semantic Reconstruction

기존 방식은 여러 가우시안의 logit을 다 더한 후 Softmax를 한다.

근데 HUGSIM은 블렌딩 전 가우시안 마다 미리 softmax를 한다.

이렇게 하면 공중에 떠다니는 이상한 가우시안을 제거할 수 있다.

이 방식의 의미가 각 가우시안이 자신이 어디에 속하는지(예: 도로)를 먼저 확인하고 계산이 들어가는 것이기 때문이다.

 

아래그림의 좌측에서 더 오차가 없는 맵이 그려진다는 것을 볼 수 있다.

 

 

Optical Flow

가우시안의 3D 중심점($\mu$)을 $t_1$ 시점과 $t_2$ 시점의 카메라 화면($\mu'_1, \mu'_2$)으로 각각 투영하고

두 2D 좌표의 차이를 통해 모션 벡터($f = \mu'_2 - \mu'_1$)를 구한다.
이 벡터 값들을 알파블렌딩하여 최종 2D optical flow 지도를 만든다.

의미는 이 2D이미지에서 해당 픽셀이 어디로 이동할 것 같은지를 나타내는 것이라고 생각하면된다.

자율주행에서는 저 픽셀들이 나한테 다가오고 있구나 와 같은 내용을 파악할 수 있다.

 

Depth

깊이 맵도 같은 방식(알파 블렌딩)을 사용해 얻어진다.


3.4. Loss Function

손실 함수는 크게 두 파트로 나뉜다.

이미지 기반 손실물리기반 정규화이다.


이미지 기반 손실은 우리가 익숙한 원본이미지와 비교를 하는 것이다.

 

렌더링 손실은 아래와 같다.

픽셀 단위 차이 + SSIM이다.

$\mathcal{L}_{I}=(1-\lambda_{SSIM})||\hat{I}-\tilde{I}||_{1}+\lambda_{SSIM}SSIM(\hat{I},\tilde{I})$

 

시멘틱 손실($\mathcal{L}_{S}$)은 렌더링된 시맨틱 라벨과 모델을 통해 얻은 값의 cross entropy를 계산한다.

 

알파 마스크 손실($\mathcal{L}_{A}$)은 외부에서 차량을 삽입할 때, 차량이 아닌 배경이 포함되지 않도록 하는 것이다.

여기서 $I_M$은 GT마스크이다.


물리 기반 정규화는 물리적 제약을 따르도록 하는 것이다.

먼저 위에서 살펴봤던 지면 정규화($\mathcal{L}_{ground}$)이다.

높이 분산을 최소화한다.

$\mathcal{L}_{ground}=\frac{1}{N-1}\sum_{z_{i}-z_{0}<\Delta z}(\mu_{y_{i}}^{cam}-\overline{\mu}_{y}^{cam})^{2}$

 

BB 정규화($\mathcal{L}_{t}$)는 최적화된 차량위치가 인식 모델이 예측한 초기 3D BB와 너무 멀어지지 않게 한다.

 

유니사이클($\mathcal{L}_{uni}$)제약은 위에서 알아봤던 속도를 통해 물체의 움직임을 자연스럽게 해주는 것이다.

부드러운 궤적을 만든다.

가속도 제약($\mathcal{L}_{reg}$)은 차량의 속도의 변화가 급격하지 않게 한다.


4. Simulation

4.1. Graphicial Configuration Interface

이 논문의 좋은 점이다. GUI를 제공한다.

카메라 설정, 자율주행 차량 설정, 주변 객체 설정을 할 수 있다.

 


4.2. Closed loop Simulation

자율주행 알고리즘이 waypoint를 보내면 시뮬레이터는 이걸 보고 조향각/가속도 명령으로 변환한다.

이 변환된 명령을 받으면 $$S = \begin{pmatrix} x \\ y \\ \theta \\ v \end{pmatrix}, \quad \frac{dS}{dt} = \begin{pmatrix} v \cos \theta \\ v \sin \theta \\ \frac{v \tan \delta}{L} \\ \dot{a} \end{pmatrix} \quad \text{[cite: 416, 417]}$$

위 식을 통해 다음 상태를 계산한다.

$L$은 차량의 길이이다.

 

실시간 충돌 감지도 된다.

자율주행 차량과 주변 차량의 박스가 겹치는지 확인한다.

또 차가 배경(나무)등과 박을 수도 있는데 이는 차량의 박스안에 배경 가우시안이 얼마나 들어왔는지를 통해 확인한다.

 


4.3. Actor Driving Behaviors

논문에서는 세 종류의 운전 패턴을 만들었다.

각각 replayed, normal, aggressive이다.

 

replayed

앞에서 설명한 unicycle모델을 사용해서 복원된 원래 데이터셋 그대로 주행하는 것이다.

상호작용이 없다.

주변 상황이 단순한 시나리오에서 사용된다.

 

normal

IDM이라는 지능형 운전자 모델을 사용한다.

앞차와 거리를 유지하며 따라간다.

하지만 데이터셋 제약이 있다. 도로의 규칙을 알아야하기 때문에 HD map이 제공되는 nuScenes데이터에서 활성화된다.

이 HD map이 없는 데이터셋에서는 미리 정의된 방향으로 정속주행하는 방식이다.

 

Aggressive

이 모드는 위험한 상황을 만드는 것이라고 할 수 있다.

먼저 궤적을 생성한다.

그리드 기반으로 목표 지점을 샘플링하고 보간을 통해 부드러운 곡선형태의 후보 궤적들을 만든다.

이후 물리적으로 불가능한 궤적을 제거한다.

이 후보들 중 자율주행 차량을 잘 공격할 수 있는 경로를 수학적으로 선택한다.$$\min_{i} C_{total}(s_{1:T}^{a(i)}) = C_{attack}(s_{1:T}^{a(i)}) + \lambda C_{collision}(s_{1:T}^{a(i)})$$

 

$C_{attack}$ : 자율주행 차량과 나(공격자)의 거리를 계산한다. 이값이 작을수록 좋은 공격이다.

$C_{collision}$ : 자율주행 차량 말고 다른 것들과는 부딪히지 않도록 패널티를 준다.

 

이 때 궤적을 고르는 방식에서 변화를 줄 수도 있다.

 

 


4.4. Evaluation

이 논문에서 만든 평가 지표인 HD-Score에 대해 설명한다.

$$HD-Score_t = \left( \prod_{m \in \{NC, DAC\}} score_m \right) \times \left( \frac{\sum weight_w \times score_w}{\sum weight_w} \right)$$

 

크게 두 가지로 나눠져 있다.

하나는 주행정책 항목, 하나는 기여 항목이다.

 

주행정책 항목은 

1. NC : No Collisions 충돌이 없을 것

2. DAC : Drivable area compliance 주행가능 구역을 지킬 것

3.  곱셈 : 곱하기로 연결되어있어 하나라도 0점이 되면 전부 0점이 된다.

 

기여항목

1. TTC : Time to Collision 충돌까지의 시간. 이는 위험한 근접 주행을 하는지 평가한다.

2. COM : Comfort 승차감. 급가속, 급감속 등을 평가한다.

3. 방식 : 가중평균 사용

 

기존 시뮬레이터들은 다른 차와의 충돌 위주로만 봤는데, 이 HUGSIM은 시맨틱 정보도 쓴다.

나무 같은 배경과 부딪히는 것도 계산에 들어간다.

 

또 기존 방식들은 전문가(사람)의 운전을 정답으로 취급했다.

하지만 HUGSIM은 항상 사람이 정답인 것은 아니며 정답이 하나가 아니라 여러가지 있을 수 있기 때문에 이는 부적절하다고 한다.

따라서 최종 목적지까지 거리 중 몇 %를 완주했는지를 점수로 도입했다.

최종 점수는 아래와 같다.

$$HD-Score = R_c \times \frac{\sum_{t=0}^{T} HD-Score_t}{T}$$


정리 / 결론

이 HUGSIM은 3DGS를 사용해 실시간 closed loop가 가능한 시뮬레이터를 최초로 제안했다.

 

future work로 날씨 / 조명 등의 변화도 원하는대로 바꿀 수 있는 기능이 필요하다고 얘기하고

조명 효과를 물리기반으로 바꾸는 것도 필요하다.

차량을 제외한 다른 객체에 대해서도 보강이 필요하다.