본문 바로가기
AI 관련/논문 리뷰

[논문 리뷰] Efficient Stereo Depth Estimation for Pseudo-LiDAR: A Self-Supervised Approach Based on Multi-Input ResNet Encoder

by 세계 최고의 AI Engineer_naknak 2023. 7. 29.

읽고 난 후

너무 어렵습니다...

제목 그대로 3D object Detection이 아니라 Stereo Depth 추정을 중심으로 실험한 논문입니다. U-Net Architecture를 사용한 모델로 이전 여러 모델을 수정해서 제안된 모델로 실시간 operating performance가 가능하다고도 하네요.

기존에는 이미지 한 장을 넣어서 특징을 추출했다면 본 논문에서 제안한 모델은 이미지 한쌍을 요구합니다. 그래서 하나를 특징을 추출하는 주요 이미지로 삼고요. 이 두장의 이미지를 이용해서 depth 를 뽑아내고 뽑아낸 depth z를 가지고 point cloud를 그리는 방식인 듯 합니다. 이때 U-Net을 사용하구요. 더 자세한 부부은 제가 이해를 못해서 개괄적인 부분만 설명드렸습니다!

 

 

Abstract

이 논문이 제안하는 전략은 real-time pseudo point cloud를 얻는데 카메라 같은 image sensor에서 부터 랍니다. 이전 여러 연구들은 정확도를 높이는 쪽으로 알고리즘을 작성했지만 실시간으로 동작하는 건 실패했다고 합니다. 그래서 다른 depth estimator를 제안합니다. 그리고 본 논문에서 제안하는 방법이 더 빠르고 더 정확한 결과를 냈다고도 하네요.

과연... 이게 맞는지 한번 들어가 볼까요?

 

 

1. Introduction

 - 왜 이걸 시작했나?

3차원 세계에서 중요한 건 객체 인식이예요. 사람은 쉽게 할 수 있지만 컴퓨터가 이를 하는 건 정말 어렵죠. 그게 풀리지 않은 연구 과제라고 합니다.

자율주행 시스템에서 이런 depth-predicting 은 필수지만 이를 위한 LiDAR은 너무 비싸다고 하면서 이를 대체 할 수 있는 여러가지 idea를 연구자들이 연구하고 있다고 하네요.

 

본 논문도 당연히 LiDAR를 대체할 depth-predicting 을 위한 어떤 방법을 제안할 거라는 생각이 마구 드네요.

 

아무튼 이런 예시로 PSMNet이라는 게 있고 이 친구는 image-based 라고 합니다. 그렇지만 너무 무겁고 depth estimation을 할 때 시간을 필요로 한다는 걸 봐선 자율주행과는 어울리지 않다고 할 수 있겠죠.

 

그래서 본 논문이 제안한 방법은 self-supervised stereo Monodepth2를 사용한 접근 법으로 저 친구를 통해서 starting point를 잡고 네트워크 training 의 성능을 향상시켰다고 합니다. 그리고 나서 point cloud를 만들었다고 하네요. 이때 두 이미지의 차이점을 이용했다고 하는 거 같아요.

 

다른 논문과의 차이점으로 PSMNet 을 사용하지 않고 U-Net-based encoder-decoder 아키텍처를 depth network로 사용했고 training step에 대한 encoder network를 수정했는데 이게 Monodepth2를 사용한 모든 depth prediction modes보다 뛰어난 성능을 보였다고 합니다.

 

정확도와 속도를 잡기 위해서 최적의 방법은 self-supervised learning을 사용하는 것이라고 주장하네요. 

 

 

요약하자면 아래의 Figure1을 이해하면 될 거 같습니다. 어떤 알고리즘을  썼는지 간략하게 확인할 수 있습니다.

2. Related Works

기존의 ResNet을 사용하는 모델은 본 논문에서 제안하는 모델보다 파라미터가 5배가 많다고 합니다.

최근 연구는 깊은 신경망이 시각적 신호를 사용해 데이터로부터 모델 사전을 직접 학습하고 이를 통해 이미지에서 더 정확하고 효율적인 3차원 객체 인식과 깊이 추정을 가능하게 한다고 합니다. 그래서 데이터셋을 기반으로 깊이 추정을 향상시키는게 가능해졌다고 합니다. 

그리고 stereo pair 데이터가 얻기 쉬워지면서 학습 중에 동기화된 stereo pair를 사용하면서 깊이 추정을 출력하도록 학습될 수도 있다고 합니다. 한마디로 Real-time이 가능해졌다는 말 같습니다. 

그리고 정답 이미지에 대한 원본 이미지로부터 상대적인 방향과 위치를 비교해서 원래의 이미지 좌표와 3D 모델을 투영해서 얻은 이미지 좌표의 차이를 최소화 해서 깊이를 예측하는 방식도 있다고 합니다. 결국 Stereo type으로 깊이를 추정하는 여러 가지 방법에 대해서 이야기하고 있습니다. 

 

그리고 많은 모델들에 대해서 언급하면서 마지막 단락에서 현존하는 깊이 추정 모델이 높은 품질의 결과를 만드는데에 적용될 수 있다고 합니다. 이때 stereo pair를 input layer에 combine 해서 넣는다고 합니다. 원래는 그 짝을 relative pose loss를 계산하기 위해서만 사용했다고 하니 기존 방식과 다른 부분이라면 이 부분을 언급할 수 있을 것 같습니다.

 

그리고 수정된 모델이 실시간으로 point clouds를 생성할 수 있도록 사용했다고 하네요!

 

 

 

3. Method

어떤 modified deep network를 사용했는지 어떤 전략을 사용했는지 소개한다고 하십니다.

 

A proposed pipeline

 

3.1. Stereo Training Using Depth Network

제안된 아키텍처는 encoder-decoder-based classic U-Net이라고 합니다. 이때 encoder는 학습된 ResNet 모델이라고 하네요. 그리고 decoder는 sigmoid output을 depth map으로 변환한다고 합니다. 

U-Net은 scale features를 병합하고 별개의 크기로 pooling된 upsamping된 feature map을 연결해줍니다. 

보통 ResNet은 하나의 RGB 이미지를 input 값으로 받지만 제안된 모델은 이미지 한쌍을 input으로 받으며 이를 기반으로 측정을 합니다.

그래서 ResNet이 두개의 이미지를 받도록 해야하기 때문에 기본 shape 3,192,640 => 6, 192,640으로 수정했습니다. 그리고 decoder에서 병합과 concatenate가 진행됩니다.

 

그리고 monocular mode에서 Monodepth2 저자는 temporal frame을 사용했는데 우리는 거기에 의존하지 않을 거다. Reprojection loss는 SSIM을 사용해서 계산될 거다.

encoder 즉, ResNet에는 이미지 한쌍이 입력됩니다. 이는 약간 다른 관점에서 촬영한 두 이미지로 이를 통해 깊이 정보를 추출할 수 있다고 합니다. 그래서 이 중 한 이미지가 주요 입력으로 사용되어 스테레오 이미지 쌍을 형성한다는 내용입니다.

훈련 과정에서 두 이미지 쌍이 ResNet 아키텍처에 동시에 입력되며, 이 중 하나는 주요 입력으로 간주되어 소스 이미지의 스테레오 쌍으로 간주됩니다. 예측된 깊이와 변환 행렬을 사용하여 대상 이미지가 스테레오 쌍에서 재투영되고, 이때 본래 이미지의 내부 행렬이 사용됩니다. 그런 다음 이 방법은 바이리니어 샘플링을 사용하여 대상 이미지에서 소스 이미지를 샘플링합니다.

이런 방식을 통해, 이 연구는 소스 프레임과 대상 프레임 사이의 매핑을 계산하고, 이미지 간의 차이를 최소화하는 방식으로 깊이를 예측합니다. 이는 3D 객체 감지, 환경 인식, 물체 추적 등 다양한 컴퓨터 비전 태스크에서 중요한 역할을 합니다.

여기서 이야기하는 대상 이미지는 Target image로 정답 데이터라고 생각하시면 좋을 거 같습니다.

 

Ist = Isprj(K, D, Tst)

3D 정보를 이용해서 이미지를 다른 시점으로 재투영하는 과정을 표현한 식입니다.

소스 이미지 Is에서 3D 정보를 이용하여 대상 프레임 t로 재투영한 결과를 계산하는 과정

L = μLp + λLs

μ(뮤)는 0 또는 1값인 마스크입니다. 그리고 람다는 smoothness term입니다.이를 통해 edge-aware smoothness loss를 조절합니다.

 

 

 

3.2. Dataset Splitting

Zhou et al 데이터 분할 방식을 따르며 KITTI 의 데이터셋을 사용했다고 합니다.

KITTI [4]에 의해 제공된 내부 파라미터가 사용됩니다. 이 파라미터는 초점 거리와 이미지 중심을 포함하며, 이미지 해상도에 대해 정규화됩니다

 

 

3.3. Point Cloud Back-Projection

스테레오 이미지에서 깊이를 추정하고 그 결과를 3D 포인트 클라우드로 변환하는 과정을 설명합니다.

 

 

 

3.4. Post-Processing Step

3.5. Evaluation Metric

4. Experiment and Results

이미지 한쌍을 input으로 넣었을 때 output으로  3D point cloud of the environment 를 내보내는 알고리즘은 아래와 같다.

1. encoder, decoder 모델을 초기화한다.

2. 적절한 모델과 input size를 초기화시킨다.

3. intrinsic, projection 행렬 같은 파라미터를 적절한 값으로 초기화한다.

4. 이미지 frame가 이용 가능할 때까지 반복한다

5. 이미지 쌍을 읽고

6. torch tensor로 초기화하고

7. 그 이미지 쌍을 연결시킨다.

8. encoder network를 사용해서 특징들을 추출한다

9. Decoder network를 사용해서 depth를 출력합니다.

10. 입력 데이터와 출력 데이터의 크기가 다를 때, 데이터 간의 상호작용을 보정하는 보간 기법을 사용합니다

11. 출력을 배열로 압축합니다

12. disparity를 점으로 투사합니다.

13. 시각화를 위해 point field를 변환합니다.

 

[이미지 처리에서는 종종 이미지의 해상도를 변경해야 할 때가 있습니다. 이 때, 원본 이미지의 픽셀 그리드와 대상 이미지의 픽셀 그리드가 일치하지 않을 수 있습니다. 이 문제를 해결하기 위해, 우리는 보간(interpolation)이라는 기법을 사용합니다. 보간은 주어진 데이터 포인트 사이에 새로운 데이터 포인트를 생성하는 과정]

 

 

 

5. Conclusion

U-Net architecture

Both versions of our resolution(average 57.2 and 31.9 FPS, respectively) indicate real-time operating performance.

we improved the network input layer by introducing stereo pairs to the input layer

we adopted the approach of stereo pairs since themodel has no experience with stereo pairs

 

그래서 해당 논문은 여러 input 값을 넣어서 Stereo Depth 추정의 정확도를 높인 것입니다.

이때 사용한 encoder는 ResNet이고 decoder로는 U-Net인듯 싶습니다.

 

ㅁㅁㅁㅁ

댓글