WWDC ARKit 세션 중 일부만 발췌했습니다.
많은 분들의 예상대로 ARKit4에서는 추가된 라이다를 적극적으로 활용합니다.
ARKit4에서는 depth API가 제공됩니다.
해당 API를 통해 초당 60프레임의 깊이정보가 매핑된 이미지를 얻을 수 있습니다.
파란색일수록 가까이 위치해 있다는 뜻입니다.
우선 라이다 모듈을 잠깐 보고 가겠습니다.
손톱만한 모듈 안에 필요한 구성요소가 모두 들어있습니다.
위 방출부에서 VCSEL레이저가 방출됩니다. 64개의 점이지만 회절 렌즈를 거쳐 약 600개의 점이 방사됩니다.
방사된 레이저가 사물에 부딪히고 돌아오면 SPAD 센서가 스위칭하며 얻은 값으로 각 점의 거리를 계산합니다.
하이브리드 본딩 기술을 사용해 센서와 로직을 연결하여 SPAD 센서를 구현했습니다.
소니는 자사 ToF센서에서 처음으로 3D 적층기술을 적용했습니다.
또한 픽셀간 구획을 물리적으로 나눠 간섭을 줄였습니다.
소비자용으로는 처음 상용화된 dToF로서, 아주 짧고 강한 펄스를 쏘아 빛이 강한 야외에서도 사용이 가능하고 측정거리, 정확도가 높습니다. 또한 경로간섭 문제가 적습니다. 그리고 프레임도 높습니다.
야외에서도 정확도와 프레임이 높은 값을 측정하는 높은 범용성의 소비자용 라이다 모듈이 상용화 된것입니다.
라이다 모듈에 대한 분석글을 쓴 저자는 센서에서 소니의 기술적 성취를 달 착륙에 비유했습니다.
라이다 센서의 해상도에 비해 세밀한 깊이매핑 이미지를 얻을 수 있는 이유는
카메라로 캡쳐한 이미지에 라이다로 얻어낸 깊이 정보를 조합해 머신러닝 알고리즘을 거치기 때문입니다.
이런 식입니다.
테슬라는 올해 초 머신러닝 컨퍼런스에서 라이다 센서를 사용하지 않고 여러대의 카메라와 머신러닝 알고리즘을 이용해 재작년 발표된 논문에 등장한 Pseudo-Lidar를 구현해서 깊이 정보를 얻어낸다고 밝힌 바 있습니다.
참고로 자기지도학습이 가능하기 때문에 사람이 일일이 라벨링 하지 않고도 학습을 할 수 있습니다.
ARKit4에서는 Pseudo-Lidar에 실제 라이다 데이터를 더한 하이브리드 방식을 쓰는것으로 보입니다.
깊이매핑 이미지는 이런 식으로 얻어냅니다.
그런데 여기에 문제가 있습니다.
라이다의 고질적 문제점인데, 반사 표면이나 주변 환경에 따라 신뢰도가 낮은(부정확한) 값이 얻어집니다.
이때 신뢰도가 낮은 값이라도 활용해야 할때가 있고, 신뢰도가 높은 값만 필요할 때도 있습니다.
여기서 등장하는것이 컨피던스 맵입니다.
컨피던스 맵에서는 깊이 값을 신뢰도를 단계에 따라 구분합니다.
파란색이 가장 신뢰도가 높고, 초록색이 중간, 빨간색이 가장 낮습니다.
개발자는 위 라벨링된 데이터중 필요한 범위를 취사선택할 수 있습니다.
아래는 ARKit4에서 라이다와 카메라를 활용하여 얻어낸 포인트 클라우드를 컨피던스 맵의 신뢰도 범위에 따라 나눈것입니다.
내려갈수록 점점 신뢰도가 높은 포인트만 추려냅니다.
이렇게 내려갈수록 노이즈가 적어지고 신뢰도가 높은 데이터만 추려진 것을 볼 수 있습니다.
개발자는 여기서 필요한 수준의 신뢰도를 갖는 값을 선택할 수 있습니다.
아래는 ARKit4에서 라이다와 카메라를 이용해 포인트 클라우드를 생성하는 모습입니다.
사실 이 정도면 프레임이나 품질이 상당히 높은 편입니다.
상용화된 솔루션은 어느정도인지 궁금하신 분을 위해 아래에 영상을 가져와 봤습니다.
아래는 드론에서 인텔 리얼센스 D435 3D카메라로 포인트 클라우드를 생성하는 영상입니다.
해당 카메라에는 2개의 스테레오 IR카메라와 RGB카메라, VCSEL이 들어갑니다.
(드론 소리가 큽니다)
포인트 클라우드 생성이 상당한 컴퓨팅 파워를 요구하기 때문에 해당 드론에는 인텔 8세대 i7 CPU가 탑재되어 있습니다. 초당 1프레임으로 생성 하고 있으나 설정을 통해 좀 더 높일수도 있다고 합니다.
참고로 인텔이 밝힌바에 의하면 포인트 클라우드를 생성할때 i5-6600K로 1프레임에 약 110ms가 소요되며, 초당 9프레임을 연산해낼수 있다고 합니다.
이를 보면 손톱만한 모듈을 달고 전력소모도 극히 제한된 모바일 환경에서 높은 성능을 보이는게 쉬운게 아님을 알 수 있습니다.
ARKit4에서는 머신러닝 모델 실행은 NPU를 활용하고 이미지 처리에 GPU를 사용하는 식으로 가속기의 성능을 최대한 끌어내는 최적화를 거쳐 높은 성능을 달성한 것으로 생각됩니다.
부족한 글 읽어주셔서 감사합니다. ㅎㅎ 흥미가 생기셨을지 모르겠네요...