AI/컴퓨터비전(CV)

[CV 논문] UniSim: A Neural Closed-Loop Sensor Simulator

CSE 2026. 4. 10. 13:49

 

 

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

 

읽은 논문들 정리

[목차]지속적으로 업데이트 중, 번호는 모델발전 순서가 아닌 읽은 순서에 따라 정렬.1. Computer Vision 분야 논문Classification 모델들의 발전Detection 모델들의 발전Segmentation3D 처리2. Natural Language Process

april2901.tistory.com

 

 

이번 논문은 UniSim이라고 불리는 모델에 대한 설명이다.

자율주행 학습에서 시뮬레이션을 하는데 유용하게 사용될 수 있다.


자율주행 모델에게 어떤 주행 영상을 주고 액션을 취하라고 하는 상황을 생각해보자.

주어진 영상 속의 어느 지점에서 차가 영상에서 나오는 행동과 다른 행동을 했다면 어떻게 될까?

이 문제를 해결하기 위해 나온 논문이다.

 

즉 새로운 결정에 따른 주변 환경의 변화를 시뮬레이션하게 해준다고 할 수 있다.

크게 다음과 같은 기능들이 가능하다.

1. 객체 수정 : 차 지우기, 위치 수정, 생성
2. 가상 시나리오 : 다른 차가 더 빨리 달렸다면?, 차선을 바꿨다면? 등을 시뮬레이션
3. 센서 데이터 수정 : 위 변화에 따라 센서 데이터도 생성한다.

 

 

이를 위해서는 아래 기술들이 필요하다.

1. 넓은 도로를 효율적으로 표현.
2. 배경과 객체 분리
3. 시각적 완성도 높이기
4. 보이지 않는 부분 유추
5. 이미지+LiDAR데이터 통합

전체 과정 요약

아래 사진을 참고해 전체 과정을 훑어보자.

먼저 객체가 배경과 분리된 모습을 볼 수 있다.

 

GT데이터에서 얻은 정보로 어떤 점이 배경인지 객체인지를 알 수 있는데,

이 점의 종류에 따라 배경일 경우 sparse feature grid를, 객체일경우 learnable latent를 hypernetwork에 통과시켜 특징을 뽑아낸다.

 

카메라로부터 나오는 광선 위에 있는 점들의 특징을 모두 더해 해당 픽셀의 2D특징을 완성한다.

이 특징 정보를 CNN에 넣어 우리가 보는 이미지가 만들어진다.


Compositional Neural Scene Representation

Unisim은 공간을 정적배경과 동적액터로 나눈다.

정적배경은 월드 좌표계를 기준으로 표현된다.

동적 액터는 차량 같은 움직이는 걸 얘기하는데, 각각 바운딩 박스의 크기와 시간에 따른 포즈를 정보로 가지고 있다.

물체의 개인적인 로컬 표계 기준이다.

 

Sparse Background Model

배경을 모두 저장하면 메모리가 많이 필요하기 때문에 다른 방법이 필요하다.

LiDAR데이터를 통해 point cloud를 만들고, voxel화 한다.

각 voxel에 점이 있는지 없는지 나타내는 걸 점유grid ($V_{occ}$)라고 한다.

물체 표면 근처의 복셀만 남기고 나머지는 빈 공간 취급해서 계산에서 제외한다.

 

특징 그리드라는 것도 가지고 있는데 이는 점유 그리드 근처의 복셀들에 대해 꼭짓점에 학습 가능한 특징벡터를 부여한다.

UniSim은 multi-resolution grid를 사용한다.

 

그래서 어떤 점의 특징은 주변 꼭짓점으로부터 interpolate되어 계산된다.

특정 방향에서 본 최종적인 특징값을 구하기 위해 MLP헤드에 (방향, interpolate된 특징값)이 들어가 (SDF, 최종특징벡터)가 나온다.

SDF는 배경 표면과의 거리를 얘기한다. 예를 들어 벽 표면의 점이라면 0이 될 것이다.

 

Generalized Actor Model

단순히 모든 차를 따로 학습하면 메모리가 많이 들고, 찍히지 않은 각도의 모습이 깨지는 문제가 있을 것이다.

이를 해결하기 위해 하이퍼네트워크를 도입했다.

 

latent code ($\mathbf{z}_{\mathcal{A}_i}$): 각 차량은 아주 작은 저차원 벡터인 latent code를 가지고 있다. 이는 학습되는 값이다.

하이퍼네트워크 ($f_{\mathbf{z}}$): 이 코드를 입력받아 해당 차량의 전체 특징 그리드($\mathcal{F}_{\mathcal{A}_i}$)를 생성한다.

배경과 똑같이 각 그리드의 꼭짓점에 고차원 벡터를 저장하고 특정 점의 값은 interpolation으로 구한다.

이는 물체 기준 좌표계이므로 월드 좌표계로 변환 후 해당 점을 보는 시점 정보와 같이 MLP헤드에 들어간다.

역시 출력은 SDF와 최종특징 벡터이다.

 

 

Composing Neural Feature Fields

방금 본 두 파트를 더하는 방법이다.

배경 그리드의 비어있는 공간에 액터의 그리드를 넣는다.

물론 이때 액터의 그리드는 월드 좌표계로 변환이 된 상태이다.

 

보통 물체를 놓을 곳은 배경이 비어있는 공간이겠지만 겹치더라도 액터에게 우선순위가 부여된다.

 

이 방식의 좋은 점은 쉬운 조작이 가능하다는 것이다.

 

추가를 할 때는 위처럼 액터의 그리드를 가져다 놓으면 되고,

삭제를 할 때는 그 공간을 배경의 그리드로만 다시 채우면 된다.

 


Multi-modal Sensor Simulation

카메라 이미지 생성

위에서 MLP헤드에 통과되어 나온 SDF($s$)와 최종 특징벡터($f$)를 사용한다.

이 값은 표면과의 거리를 얘기하므로 거리가 멀수록 투명도가 낮다고 볼 수 있다.

이 값을 사용해 feature에 대해 알파 블렌딩을 하여 픽셀 하나에 대한 특징값을 계산한다.

이때 alpha(투명도)를 구하는 방법은 아래 식과 같다.

$\alpha = 1 / (1+ exp(\beta \times s))$

여기서 하이퍼파라미터 $\beta$의 값이 커지면 물체의 경계가 명확해지게 된다.

$\beta$가 클 경우 물체 표면에서 조금만 떨어져도 (예 : $s=1$) 투명도는 0에 가까워진다.

반대로 물체 안으로 조금만 들어간 지점이어도 투명도는 1에 가까워진다.

따라서 물체의 경계를 표현할 수 있다.

$\beta$가 작을 경우는 물체의 경계가 흐려질 것이다.

 

 

모든 픽셀에 대해 이 과정을 거치면 2D의 특징값 이미지가 나온다.

이 이미지의 해상도는 실제로 얻고 싶은 출력 이미지의 해상도보다 작게 설정한다.(상대적 저해상도)

 

마지막으로 전체 요약부분에서 설명했듯이 이 특징 맵을 CNN에 넣어 해상도가 높아진 최종 이미지를 출력한다.


LiDAR 데이터 생성

Unisim의 장점인 센서 데이터 생성이다.

 

라이다는 빛을 쏘고 돌아오는 시간을 측정하는 방식을 사용한다.

이 데이터를 생성하기 위해 Unisim은 알파블렌딩 식을 조금 변형한다.

광선을 쏘고 광선 위의 점에 대해 각 점이 물체 표면일 확률과 거리를 곱해 해당 방향의 거리 평균을 낸다.

이때 확률로 위에서 계산했던 $w_i$를 사용한다.

 

라이다는 빛 반사율 정보도 수집한다.

따라서 최종 특징 벡터를 전용 MLP ($g_{int}$)에 통과시켜 이 값을 계산한다.


Learning

일단 이 전체 UniSim이 학습시켜야하는 변수들이 무엇이 있는지 살펴보자.

 

$F^*$ : 배경 그리드들

{$z_{A_i}$} : 각 객체(자동차)의 latent code들

$f_z$ : 하이퍼네트워크

$f_{bg} , f_A$ : MLP 헤드들

$g_{rgb}, g_{int}$ : 이미지를 생성하는 CNN, LiDAR데이터를 생성하는 MLP

 

최종 손실함수 식은 아래와 같다.

$\mathcal{L} = \mathcal{L}_{rgb} + \lambda_{lidar} \mathcal{L}_{lidar} + \lambda_{reg}\mathcal{L}_{reg} + \lambda_{adv}\mathcal{L}_{adv}$

 

아래는 각 항에 대한 약간의 설명이다.

추가로

$I_{gt}$는 진짜 촬영이미지, 

$D_{gt}$는 진짜 LiDAR데이터,

$\hat{I}$는 모델이 만든 가짜 이미지,

$\hat{D}$는 모델이 만든 가짜 LiDAR이미지이다.

 

$ \mathcal{L}_{rgb}$ : 생성된 이미지가 실제 카메라 이미지랑 똑같아지게 학습.

시그마 안의 첫번째 항은 픽셀의 RGB값 자체를 비교하고, 

두번째 항은 이미지를 VGG네트워크에 통과시킨 결과에 대해 차이의 합을 구한다.

 

$\lambda_{lidar}\mathcal{L}_{lidar}$ : 생성된 데이터(거리, 반사 정도)가 실제와 똑같아야 한다.

$\lamdba$는 가중치이다.

계산한 거리와 실제 LiDAR의 관측 값의 차이와 계산된 반사율과 실제 반사율의 차이를 구한다.

 

$\lambda_{reg}\mathcal{L}_{reg}$ : SDF의 기울기가 1이 되도록 강제한다.


SDF는 물체표면에서부터 거리인데 카메라를 들고 벽으로 1cm이동하면 실제로 1cm가 변한 것으로 취급해야 사실적이기 때문이다.

이렇게 하면 물체의 표면이 울퉁불퉁하지 않고 매끄러워진다.

 

$\lambda_{adv}\mathcal{L}_{adv}$ : 진짜 사진처럼 보이게 한다.

판별기를 두고 가짜인지 진짜인지를 맞춰보라고 한 후 이걸 속일 정도로 정교한 이미지를 만들도록 훈련시킨다.

 


실험

waymo데이터셋을 메인으로 사용한다.

만든 이미지에 대해 각종 지표에서 최고 성능을 기록했다.

라이다 데이터를 생성하는 다른 모델과 비교했을 때 더 정확한 포인트 클라우드 생성을 하였다.

 

차선 변경 등의 데이터에 없는 조작을 해도 안정적인 이미지 생성이 가능했다.

 

위험한 시나리오의 시뮬레이션도 가능했다.

 

아래그림은 차선변경을 시뮬레이션 한 결과이다.

Ours부분의 퀄리티가 좋은 것을 알 수 있다.