-
[논문 리뷰] PointPainting: Sequential Fusion for 3D Object DetectionAutonomous Navigation/Perception 2021. 9. 3. 10:55
PointNet 리뷰(2) : 포인트 클라우드를 다루기 위한 딥 러닝 네트워크의 구조
2021.09.01 - [Autonomous Navigation/Perception] - PointNet 리뷰(1) : 포인트 클라우드의 기초 PointNet 리뷰(1) : 포인트 클라우드의 기초 포인트 클라우드란 LiDAR, 스테레오 카메라 등의 센서로 생성 가능한..
wjdghksdl26.tistory.com
PointPillars: Fast Encoders for Object Detection from Point Clouds 리뷰(1)
PointPillars의 작동 방식을 대강 요약하면 다음과 같습니다. 포인트 클라우드 데이터를 적절히 조작하여 2-D 이미지와 비슷한 특성을 지니는 Pseudoimage로 만든 후 이 데이터에 우수한 CNN 기반 object de
wjdghksdl26.tistory.com
지난 글들에서 포인트 클라우드 데이터에 딥 러닝 네트워크를 적용하여 object detection과 semantic segmentation등을 수행하는 방법인 PointNet과 PointPillars에 대해 알아보았습니다. 이 네트워크들은 순수하게 포인트 클라우드만을 입력으로 받아 이러한 task들을 처리합니다. 사람으로 치면 눈을 감고 손으로 더듬기만 해서 무슨 물체인지 알아내는 것과 같습니다!
그러나 눈을 뜨고 하는 게 훨씬 편하고 빠르다는 것은 자명한 사실입니다. 이미지 데이터는 카메라로부터 쉽게 얻을 수 있는데, 그걸 사용하지 않는 게 손해겠죠?? 논문에서도 이러한 언급을 하고 있습니다.
위의 그림은 논문의 figure중 하나인데, 25m 거리에서 얻은 보행자와 전봇대의 포인트 클라우드 데이터입니다. 거리가 멀기 때문에 포인트를 많이 얻지 못했으며, 오른쪽을 보면 알 수 있듯 이것만을 사용해서 object detection이나 semantic segmentation을 하기는 불가능하다고 봐도 될 것 같습니다. 저것만 보고 사람인지 전봇대인지 아니면 그냥 잡음인지 어떻게 아나요?? 아는 게 더 이상합니다.
그러나 왼쪽의 이미지 데이터로부터 semantic information을 얻는다면 이야기가 달라집니다. 제가 볼 때 전봇대는 모르겠지만 저 정도 해상도와 크기의 보행자는 CNN 기반 object detector나 semantic segmentator 등이 충분히 검출할 수 있을 것 같습니다. 그 정보를 포인트 클라우드를 처리하는 네트워크에게 알려주면 됩니다. "저기에서 나온 포인트들은 보행자에서 나온 데이터이다"라는 식으로요. 포인트 클라우드에서 힘든 task인 semantic segmentation을 카메라와 이미지 데이터의 도움으로 쉽게 할 수 있는 것입니다!
물론, 이미지 데이터의 어떤 부분이 포인트 클라우드의 어떤 부분에 해당하는지 알아야 하지만, 이것은 비교적 기초적인 imaging geometry를 알고 있고 distortion correction이 잘 된 카메라를 사용한다면 그렇게 어려운 일은 아닙니다. 논문에서도 수식은 거의 없다시피 합니다. 편안한 마음으로 본격적인 리뷰에 들어가 보겠습니다.
논문에서는 camera-lidar fusion이 어려운 문제인 이유를 viewpoint misalignment라고 합니다. LiDAR 포인트 클라우드를 사용하는 많은 detector들은 포인트 클라우드를 위에서 내려다보았을 때의 모습인 bird's eye view 이미지를 사용합니다. 이 방식은 scale ambiguity가 없는 등의 장점이 있습니다. 하지만 이미지 데이터를 함께 사용하려면 이미지 데이터도 bird's eye view로 바꿔 주어야 하는데, 이게 잘 되지 않습니다.
이 그림만 보아도 알 수 있습니다. Homography transform을 이용하면 bird's eye view로의 변환은 비교적 간단하게 이루어지지만, 이미지 데이터가 형성되는 원리의 특성상 먼 거리의 물체일수록 엄청난 해상도 저하와 왜곡이 일어나며 사용할 수 있는 범위도 꽤 좁습니다. 이 방식으로 lane detection정도까지 하는 것은 OpenCV를 사용한 예제 등으로 쉽게 찾아볼 수 있지만, object detection이나 semantic segmentation까지 한다는 것은 쉽지 않아 보입니다.
PointPainting에서는 bird's eye view를 사용하지 않고 매우 간편하고 효과적인 해결책을 제시합니다. 일단 적절한 변환식을 사용해서 LiDAR 포인트 클라우드의 각 점들을 이미지에 projection시킵니다(그러니까 포인트 클라우드의 각 점들이 이미지에서 어디에 해당하는지 알아낸다고 보면 될 것 같습니다). 그리고 이 이미지에 CNN 네트워크를 돌려서 detection이나 segmentation을 수행합니다. 포인트 클라우드의 각 점들이 이미지에서 어디에 속하는지 알고 있으므로, 포인트 클라우드 데이터에 segmentation을 수행한 것과 같은 결과입니다!
그림으로 보면 쉽게 알 수 있습니다. 1번이 CNN 기반 semantic segmentation을 수행하는 과정이고, 이 데이터를 이용해 포인트 클라우드의 각 점들이 어떤 클래스(보행자, 자동차, 배경 등)에 속하는지에 관한 정보를 각 점에 붙여 놓습니다(이것을 Point Painting이라고 합니다). 이제 어떤 점들이 자동차에서 나온 점들인지 알게 되었으니, bounding box만 찾으면 되겠습니다. 논문에서는 VoxelNet, Point-RCNN, PointPillars에 해당 방식을 적용해 보았다고 합니다만, 딥 러닝을 사용하지 않는 bounding box detector(이 글 참조)같은 걸 사용해도 꽤 괜찮겠다는 생각이 듭니다.
Pseudocode만 봐도 매우 간단하고 깔끔함을 느낄 수 있습니다. 위의 pseudocode에서 PROJECT 부분이 LiDAR 포인트 클라우드 데이터를 이미지 데이터에 project하는 함수입니다. 카메라와 LiDAR 사이의 좌표 변환식만 알고 있다면 매우매우 간단한 연산입니다. 어쨌든 이러한 방식을 개발하고 존재하는 LiDAR 기반 detector등에 붙여서 사용한 결과 SOTA 결과를 얻을 수 있었으며, Point Painting에 추가적으로 소모되는 시간도 0.75ms 정도로 매우 저렴하다고 합니다(2D CNN 기반 semantic segmentation이 많이 발전했기에 가능하다고 보입니다). 참고로 논문에서는 DeepLabv3+라는 네트워크를 사용해 이미지 데이터에서 segmentation을 수행했다고 합니다.
---------- 개인적인 생각 ----------
매우 심플한 방법으로 좋은 결과를 냈다는 것이 참 부럽습니다. 이 방식은 언젠가 LiDAR가 필요하지 않게 되고 스테레오 카메라에서 생성한 포인트 클라우드를 쓰게 되는 날이 오더라도 유효할 것이라고 생각되며, 풍부한 정보를 지녔지만 ambiguity가 큰 이미지 데이터를 보완하는 역할로써 LiDAR를 활용한 모범 사례라고 생각합니다.
'Autonomous Navigation > Perception' 카테고리의 다른 글
[논문 리뷰] Monocular Camera Localization in 3D LiDAR Maps (0) 2021.09.20 Particle Filter를 이용한 Monte Carlo Localization (0) 2021.09.19 [논문 리뷰] PointPillars: Fast Encoders for Object Detection from Point Clouds (1) (0) 2021.09.03 [논문 리뷰] PointPillars: Fast Encoders for Object Detection from Point Clouds (0) (0) 2021.09.02 [논문 리뷰] PointNet (2) : 포인트 클라우드를 다루기 위한 딥 러닝 네트워크의 구조 (0) 2021.09.02