본문 링크 (Original Link)

왜 ARKit이 다른 대안보다 더 나을까요?

2017.08.27

#

by Matt Miesnieks, translated by pilgwon

image1

WWDC 2017에서 애플이 발표한 ARKit은 증강 현실 생태계에 엄청난 충격을 주었습니다. 개발자들은 처음으로 강력하고 넓게 사용되는 AR SDK가 iOS 11을 사용하고 있다면 자신들의 앱에서 “그냥 작동”한다는 것을 알게되었습니다. 게다가 주위를 마커나 초기화 또는 깊이 카메라 또는 이 기술을 위한 어떠한 제작 도구도 필요하지 않습니다. 당연하게도 이 점은 데모에서 폭발적인 반응을 일으켰습니다. (최신 정보는 트위터 @madewitharkit 에서 볼 수 있습니다.) 하지만 많은 개발자들이 ARKit이 어떻게 작동하는지, 또는 왜 다른 SDK들보다 잘 작동하는지 모릅니다. ARKit의 속을 뜯어보는 작업은 어떤 것이 필요하고, 왜 필요한지 이해하게 되어 그것의 한계를 이해하는데에 도움을 줄 것이고, 앞으로 비슷한 대안들이 안드로이드와 헤드 마운트 디스플레이 (VR, AR 두 가지 모두) 에 언제쯤 가능할 지 예측할 수 있을 것입니다.

저는 AR 업계에서 9년을 일해왔고, 과거에 ARKit과 동일한 기술을 만들어 본 적이 있습니다. (슬프게도 하드웨어가 이 기술을 충분히 지원할 수 있기 전이었습니다.) 저는 이 시스템들이 어떻게 만들어졌고 왜 그렇게 만들어졌는지에 대한 내부자의 견해를 가지고 있습니다.

image2

이 게시글은 컴퓨터 비전 공학자는 아니지만 약간 기술적인 사람들을 위해서 설명을 하기 위한 글입니다. 제가 만든 몇몇 단순화들은 과학적으로 100% 완벽하지 않은 것을 알고 있지만 저는 이 글을 통해 사람들이 적어도 한 단계만이라도 깊어지길 바랍니다.

ARKit은 어떤 기술로 만들어졌을까요?

image3

기술적으로, ARKit은 약간의 2D 평면 인식 기능을 추가한 VIO(시각 관성 측정법, Visual Inertial Odometry) 시스템입니다. VIO는 어떤 공간에서 당신의 위치(6dof, 6자유도)를 실시간으로 추적해주는 소프트웨어를 의미합니다. 즉 당신의 위치는 매 프레임마다 재계산되어 디스플레이에 보여지고, 이 작업들은 보통 1초에 30번 이상 수행됩니다. 이 계산들은 병렬로 두 번씩 수행됩니다. 당신의 위치는 매 프레임마다 카메라의 픽셀과 실제 세계의 점을 잇는 방식으로 시각(카메라) 시스템을 통해 추적됩니다. 당신의 위치는 또한 관성 시스템 (당신의 가속도계 및 자이로 스코프 - 이 둘을 합쳐서 관성 측정 기계 (Inertial Measurement Unit) 또는 IMU라고 부릅니다.)을 통해 추적됩니다. 그리고 Kalman Filter가 두 시스템 (Visual, Inertial)의 결과값 중 어떤 시스템이 더 실제 값(Ground Truth 라고 부릅니다.)에 가까운 측정값을 제공하는지 결정하고, ARKit SDK를 통해 위치 정보를 업데이트합니다. 간단하게, 차에 있는 주행 거리계가 차가 어느 거리만큼 움직였는지 측정하는 것처럼, VIO 시스템은 당신의 iPhone이 6D 공간에서 얼마나 움직였는지 측정해줍니다. 6D는 xyz모션(이동)을 뜻하는 3D와 pitch/yaw/roll(회전)의 3D가 합쳐진 용어입니다. 링크 참고

VIO가 가져온 큰 이점은 IMU로 읽는 방식이 가속(유저 행동)을 통해 1초에 1000번의 계산을 할 수 있게 만들어준다는 점입니다. Dead Reckoning은 IMU 판독값 사이의 장치 이동을 계산하는데에 사용됩니다. 이 Dead Reckoing은 추측에 가깝습니다(!). 만약 제가 당신에게 한 걸음 움직이고 그 한 걸음이 몇 인치였는지 물어본다면 당신은 그 거리를 측정하기 위해 Dead Reckoing 방법을 사용할 것입니다. 이 추측법이 얼마나 높은 정확도를 가진지는 나중에 설명하겠습니다. 관성 시스템에서의 오류들은 시간이 지남에 따라 쌓이기 때문에, IMU 프레임 사이의 시간이 길거나 관성 시스템이 길어질수록 VIsual System에서 “리셋”되지 않고 더 많은 추적이 Ground Truth로 부터 멀어집니다.

시각적 / 광학적 계산은 카메라 프레임의 비율에 의해 수행되고, 보통 30fps 입니다. 그리고 거리(프레임 사이의 배경의 변화)에 기반합니다. 광학 시스템은 종종 거리에 따라(그리고 시간에 따라 쌓기도 하지만 더 적은 범위입니다.) 오류를 쌓기 때문에, 당신이 멀리 움직일수록 오류가 많이 생깁니다.

좋은 소식은 두 시스템 각자의 강점이 서로의 약점을 없애준다는 점입니다.

시각 추적 시스템과 관성 추적 시스템은 상호 의존하지 않는 완전히 다른 계산 시스템을 기반으로 하고 있습니다. 이 말은 카메라가 가려졌거나 광학 기능이 거의 없는 (예. 흰 벽)에서는 짐 옮기는 것을 관성 시스템이 인식하는 것처럼 시각 시스템보다 더 잘 작동하는걸 의미합니다. 또는 장치가 가만히 있을 경우엔 시각 시스템이 관성 시스템보다 더 정확한 위치를 제공할 수 있음을 의미합니다. Kalman Filter는 최고의 위치를 고르는 작업을 끊임없이 하고, 이 작업은 안정적인 추적 결과를 제공합니다.

지금까지 좋았지만, 흥미로운 점은 VIO 시스템은 몇년동안 업계에서 잘 이해되고 있으며 이미 시장에 구현된 사례가 많다는 것입니다. 그래서 사실은 애플이 VIO 시스템을 사용한다는 점 자체는 별로 큰 의미가 아닙니다. 우리는 그들의 시스템이 왜 강력한지 봐야합니다.

ARKit의 두 번째 큰 조각은 간단한 평면 인식입니다. 이 기능은 당신이 당신의 컨텐츠를 놓을 “바닥”을 필요로 하며, 그렇지 않으면 허공에서 끔찍하게 떠다닐 것입니다. 이것은 광학 시스템에서 감지하는 기능(데모에서 볼 수 있는 작은 점들)에서 계산되며, 알고리즘은 3개의 점으로 평면을 정의하고 충분히 감지되면 실제 땅이 어디인지 추정할 수 있습니다. 이 점들은 종종 “포인트 클라우드”라고 불리는데 이것은 혼란스러운 또 다른 용어입니다. 이 점들(dots/points)는 모두 광학 추적에 사용되는 sparse point cloud 입니다. Sparse Point Cloud들은 적은 메모리와 적은 CPU 타임을 사용하며 관성 시스템의 지원이 있다면 시각 시스템은 추적할 점이 적게 있더라도 잘 작동합니다. 이것은 Point Cloud의 종류 중에 진짜 사진 처럼 보이는 Dense Point Cloud와는 다른 종류입니다. (연구중인 몇몇 추적기들은 Dense Point Cloud를 추적에 사용할 수 있습니다. 그래서 더 혼란스럽습니다.)

일부 미스테리에 대한 설명

가외로 ARKit을 SLAM(Simultaneous localization and mapping, 동시적 위치추정 및 지도작성)이라고 부르거나 추적을 SLAM이라고 부르는 사람을 본 적이 있습니다. 설명하자면, “multi-media”를 부르는 것 처럼 SLAM을 꽤 광범위한 용어로 취급합니다. 주행 거리 측정계가 구채적인 의미라면 추적이라는 용어는 일반적인 의미를 가지지만, AR과 관련해서 실제로 충분히 근접합니다. 그것은 혼란스러울 수 있습니다. SLAM을 하기 위한 많은 방법들이 있고 추적은 포괄적인 SLAM 시스템의 한 구성품일 뿐입니다. 저는 ARKit을 가볍거나 간단한 SLAM 시스템이라고 봅니다. Tango나 Hololens의 SLAM 시스템들은 주행 거리계를 넘어서 더 많은 수의 기능을 가지고 있습니다.

ARKit에 대한 두 가지 미스테리는 “하나의 렌즈로 어떻게 3D를 가져오는지”와 “어떻게 측정 척도를 구현 하는지 (예. tape measure demo 링크)”입니다. 비밀은 정말 좋은 IMU 오류 제거기가 있어야 한다는 것입니다. (즉, Dead Reckoning 추측의 정확도를 높게 만드는 것입니다.) 당신이 그렇게 할 수 있을 경우 생기는 현상을 말씀드리겠습니다.

서로 다른 위치에서의 2가지 화면이 당신 위치의 입체적 계산을 하기 위해서 필요합니다. 이것이 우리의 눈이 3D를 보는 방법이고, 그것이 몇몇 추적기들이 입체적인 카메라에 의존하는 이유입니다. 당신이 두 가지 카메라를 가지고 있고 그 사이의 거리를 알면서 프레임이 같은 시간에 찍혔다면 계산하기 쉽습니다. 카메라가 하나라면, 당신은 하나의 프레임을 캡쳐하고, 움직이고, 두 번째 프레임을 캡쳐합니다. IMU Dead Reckoning을 사용하면 당신은 두 프레임 사이의 거리를 계산할 수 있고 정상적으로 입체적 계산을 할 수 있습니다. (실제로 더 높은 정확도를 위해서 2개 이상의 프레임을 사용할 수 있습니다.) IMU가 충분히 정확하다면, 두 프레임 사이의 “움직임”은 손을 잡으려고 하는 작은 근육 움직임에도 탐지됩니다. 그래서 이것은 마치 마법처럼 보입니다.

측정 척도를 구현하기 위해서, 또한 시스템은 IMU의 정확한 Dead Reckoning에 의존합니다. IMU가 제공하는 가속과 시간 측정을 통해서 당신은 거꾸로 계산하여 속도를 알 수 있고, 다시 거꾸로 계산하면 IMU 프레임들 사이에 움직인 거리도 알 수 있습니다. 이 수학은 그렇게 어렵지 않습니다. 정말 어려운 것은 IMU에서 오류를 삭제하여 가속 계산에 있어서 완벽함에 가까워 지는 것입니다. 폰을 움직이는데 걸리는 몇 초 동안 초당 1000회 누적되는 작은 오류는 30%이상의 측정 척도 오차를 의미할 수 있습니다. 애플이 이 오차를 10% 미만으로 내렸다는 것은 매우 인상적입니다.

Tango & Hololens & Vuforia 등은 어떨까요?

image4

그래서 Tango는 브랜드지, 제품이 아닙니다. 이것은 하드웨어 참조 디자인(RGB, 어안, 깊이 카메라와 몇몇 CPU/GPU 스펙)과 VIO(움직임 추적), Sparse Mapping(공간 학습), Dense 3D 재구성 (깊이 인식)으로 이루어진 소프트웨어 스택으로 이루어져 있습니다.

Hololens도 정확히 동일하게 같은 소프트웨어 스택을 가지고 있지만, CPU/GPU에서 처리과정을 줄이고 전력을 절약할 수 있는 ASIC를 가지고 있습니다. (Holographic Processing Unit이라고 불립니다.)

Vuforia는 꽤 많은 부분이 똑같지만 하드웨어가 독립적입니다.

위에서 설명한 모두가 VIO 시스템을 사용하고 있습니다. (Tango와 ARKit도 FlyBy에서 개발한 같은 코드 기반을 가지고 있습니다!) Hololens와 Tango는 둘 다 추적용으로 깊이 카메라를 사용하지 않습니다. (하지만 저는 몇몇 구석의 경우에 도움을 받기 위해 추가하기 시작했다고 믿습니다.) 그런데도 ARKit이 왜 더 좋을까요?

그에 대한 대답은 ARKit은 Hololens보다 더 좋지 않지만, Hololens의 하드웨어가 널리 사용 가능하지 않기 때문에 좋다고 할 수 있습니다. (저는 심지어 Hololens의 추적기가 시장에서 최고라고 생각합니다.) Microsoft는 Hololens 추적기를 Windows 스마트폰에 장착할 수 있었지만 상업적인 이유로 선택하지 않았다고 생각합니다. (즉 핸드폰용으로 만들 센서를 보정할 시간, 그 동안 들 비용들이 핸드폰을 더 적게 팔리게 할 것이고 게다가 Microsoft 버전의 ARKit만으로는 iOS/Android에서 전환하도록 설득할 순 없을 것입니다.)

Google 또한 12개월 전에 Tango의 VIO 시스템을 큰 시장인 Android에 장착할 수 있었지만, 그들도 추가하지 않았습니다. 그들이 추가했다면, ARKit은 혁신이 아니라 그냥 따라잡기 하는 식으로 보였을 것입니다. 저는 (확실한 증거 없이) 그들이 넣지 못 한 이유는 모든 OEM마다 개별적으로 센서 보정 과정이 필요할 것이고 OEM의 버전에 따라 Tango가 다른 것들만큼 잘 작동하지 않을 것이기 때문에 Google은 그들이 만들어내기 보다는 만들어내는 기기의 양이 아주 많아서 장착하는 일에 보람이 있을 만한 큰 OEM들에게 요청하는 방향으로 돌렸을 것입니다. (예를 들면 삼성, 화웨이 등) 대신 그들은 OEM들에게 “이것은 하드웨어를 위한 참고일 뿐 넣는 것은 자유” 라고 말했을 것입니다. (당연하게도 그건 절대 말처럼 간단하지 않고, 하지만 그것은 OEM 업체가 저에게 준 피드백의 요지입니다.) Android는 보편화된 스마트폰 기기이기고, 카메라와 센서의 성능은 차별화할 수 있는 마지막 영역이기때문에 OEM이 Google이 원하는 정도에 수렴할 방법이 없습니다. Google은 또한 깊이 카메라가 휴대폰의 BOM 비용을 많이 늘린 (배터리를 급격하게 소비하는) 패키지의 일부라고 규정헀습니다. 그리고 그것은 OEM들이 “아니요 괜찮습니다!”라고 하는 또 다른 이유입니다. 하지만 ARKit의 출시 이후로 세상을 바뀌었습니다…. (a) OEM이 Tango의 대체 시스템을 찾을 것인지 (그들은 찾고 있습니다.) 또는 (b) Google이 하드웨어 참조 디자인에 대한(플랫폼에 대한 제어에 대한) 양보가 있을 지 보는 것은 매우 흥미로울 것입니다.

ARKit이 더 좋은 궁극적인 이유는 애플이 VIO 알고리즘을 더 긴밀하게 작업할 수 있고 오류나 위치 계산에서의 부정확함을 줄이는데에 아주 많은 시간을 들일 수 있기 때문입니다.

큰 OEM 시스템들에게는 대안이 있다는 사실은 주목할 만 합니다. 학문적 용도로 만들어진 추적기가 많이 있지만, (ORB Slam도 좋고, OpenCV는 몇가지 옵션도 있습니다.) 그것들은 전부 시각만 사용해서 추적합니다. (단일이나 이중의 RGB나 깊이 카메라 기반이고, 어떤 것은 Sparse 지도를 쓰고, 어떤 것은 Dense 한 지도를 쓰고 일부 깊이 지도 및 기타는 센서의 준-직접 데이터를 사용합니다. 이것들을 다루는 방법은 많이 있습니다.) 많은 스타트업들이 추적 시스템을 만들고 있는데, Augmented Pixels는 그 중에서도 잘 하고 있는 한 회사입니다. 하지만 결국 VIO 시스템은 경쟁하기 위해 하드웨어 모델링 및 보정이 필요합니다.

저는 개발자입니다. 무엇을 써야하고 왜 그래야할까요? a.k.a. 쪽집게 강의

image5

당신의 AR 아이디어를 ARKit으로 시작하세요. 그것은 이미 작동하고 있고, 당신은 이미 그것을 지원하는 폰을 가지고 있을 것입니다. 배경을 컨트롤 할 수 없는 실제 세상에서 작동되는 앱(AR)을 디자인하고 개발하는 것과 모든 픽셀을 제어할 수 있는 앱/VR의 큰 차이점에 대해 알아보세요.

Tango와 Hololens를 봅시다. 당신의 컨텐츠가 제어 불가능한 배경의 3D 구조물과 상호 작용 할 수 있을 때 어떤 일이 일어나는지 알아보세요.

이 학습은 매우 가파른 러닝 커브를 자랑합니다. 웹에서 모바일로 가는 것이나 모바일에서 VR로 가는것과는 아주 다릅니다. 당신은 앱이 어떻게 작동하는지와 사용 방식 또는 UX가 알맞는지를 완전히 새롭게 생각해야 할 것입니다. 저는 최근 4년 동안 Vuforia로 만들어진 AR 데모들을 봐왔고, 그 전 4년 동안은 Layar에서 봐왔습니다. 개발자들은 같은 학습을 반복하고 있지만 점점 갈수록 그 학습의 규모가 커지고 있습니다. 저는 몇년동안 거의 모든 종류의 AR 앱을 보았고 피드백과 지원을 줄 수 있어 기쁩니다. 저에게 손을 뻗으세요!

저는 개발자들에게 참신한 앱을 만드는 것을 무서워 하지 마라고 응원합니다. 스마트폰에서 가장 먼저 성공한 앱은 방구 소리를 내는 앱이었습니다 (…) 또한 스마트폰에서 AR을 통해 유틸리티를 제공하는 사용 방안을 찾는 것은 매우 어려운 일입니다.

이곳은 아주 작은 세계입니다. 아주 소수의 사람들이 이런 시스템을 잘 구축할 수 있습니다.

image6

좋은 품질의 추적기가 만들어지는 방법에 있어서 매혹적이고 비현실적인 측면은 바로 말그대로 아주 소수의 사람들만이 그것을 만들 수 있다는 것입니다. 이 엔지니어들의 상호 연관된 경력들은 모바일 추적을 위한 최고의 해결책으로 알려진 단초점 VIO가 나오는 결과로 이어졌습니다. 다른 방법으로는 UX를 제공하지 않습니다. (오늘까지는요.)

VIO는 보스턴에서 군사/산업용 공급자인 Intersense에 의해 2000년대 중반에 처음으로 이 세상에 나왔습니다. 공동 발명자 중 한 명인 Leonid Naimakr는 2011년에 제 회사였던 Dekko에 있었습니다. 센서 제한으로 인해 아이패드 2에서 VIO가 돌아가지 않는 다는 것을 Dekko가 증명한 이후로, Leonid는 군사 산업으로 다시 돌아갔고, Dekko의 CTO였던 Pierre Georgel도 지금은 Google Daydream 팀의 시니어 엔지니어로 있습니다. Ogmento는 저의 Super Ventures 파트너인 Ori Inbar에 의해 만들어졌습니다. Ogmento는 FlyBy가 되었고, 이 팀은 iOS에서의 VIO 시스템을 성공적으로 구축하여 어안 카메라를 본 딴 애드온을 만들었습니다. 이 코드 기반은 Google에 라이센스 되었으며, Tango의 VIO 시스템이 되었습니다. 애플도 나중에 FlyBy를 샀고 Tango와 같은 코드 기반이 ARKit의 핵심 VIO입니다. FlyBy의 CTO인 Chris Broaddus는 Daqri의 추적기를 제작했으며, 지금은 자율 로봇 회사에 Oxford에서 포스트닥터 과정을 끝낸 Zoox의 전 수석 과학자와 함께 있습니다. (지금 Active Vision Lab을 이끌고 있는 저의 6D.ai 공동 창업자도 함께 있습니다.) 첫번째 모바일 SLAM 시스템은 Oxford Active Computing lab (PTAM)에서 George Klein에 의해 만들어졌습니다. George Klein은 Tesla의 자율 주행 시스템을 만든 David Nister와 함께 Hololens를 위한 VIO 시스템을 만들었습니다. George의 동료이면서 박사과정 학생인 Gerhard Reitmayr는 Vuforia의 VIO 시스템 개발을 이끌었습니다. Vuforia의 영국 지도자인 Eitan Pilipski는 지금 Snap에서 AR 소프트웨어 개발을 이끌고 있습니다. Oxford, Cambridge & Imperial 의 핵심 연구 멤버들은 Kinect 추적 시스템을 개발했고, 지금은 Oculus와 Magic Leap의 추적 팀을 이끌고 있습니다.

흥미롭게도 저는 작은 재능에서 비롯된 엔지니어링 실력이 AR 추적 도메인에 있는 AR 스타트업을 이끄는 경우는 한 번도 본 적이 없습니다. 기계공학이나 컴퓨터 비전의 배경을 가진 사람들도 광범위한 환경에서 강력하게 움직이는 시스템을 보여주지 못 했습니다.

현재 세대의 연구 과학자들이 어떤 것을 연구하고 있는지는 조금 있다가 말씀드리겠습니다. 힌트: VIO는 아닙니다.

성능은 곧 통계입니다.

image7

AR 시스템은 절대 “작동한다”, “작동하지않는다” 두 가지로 나눠지지 않습니다. 그것은 항상 충분히 넓은 범위의 상황에서 충분히 잘 작동하는지에 대한 질문입니다. 궁극적으로 더 나은 결과를 얻는 것은 통계를 더 부각시키는 것입니다.

그러한 이유로 AR 앱의 데모를 절대 믿지 마십시오. YouTube에서 놀라워 보인 영상이라면 특히요. 제한된 환경에서 잘 작동하는 것과 아무데서나 잘 작동하는 것 사이에는 엄청난 차이가 있습니다. 이 현상은 스마트폰 앱이나 VR앱에서는 존재하지 않는 현상입니다. (예를 들어 카메라가 어디롤 보고있는지나 손목을 어떻게 움직였는지에 따라 슬랙의 작동 여부가 정해지는 것을 생각해보십시오.)

여기 왜 통계가 시스템이 잘 작동하는지 여부만 결정하는지에 대한 구체적인 기술적 예제가 있습니다.

위의 이미지를 보시면 카메라의 디지털 이미지 센서를 나타내는 이차원 그리드가 있습니다. 각 박스가 픽셀입니다. 안정적인 추적을 위해서는, 각 픽셀에 대응하는 실제 세계의 점이 존재해야 합니다. (기기가 완벽하게 멈춰있다 가정하에) 하지만… 두번째 이미지는 광자들이 그렇게 고분고분하지 않고 그들이 원하는 빛의 강도를 보여주고 있습니다. 그리고 각 픽셀은 그 곳에 부딪힌 광자의 총합이라는 것을 알 수 있습니다. 배경에서의 빛의 변경은 (예를 들어, 구름이 해를 지날 때나 형광등의 깜빡임 등) 센서에 부딪히는 광자의 구성을 바꿉니다. 그렇게 되면 이제는 다른 픽셀이 실제 세계의 점에 대응하게 됩니다. 시각 추적 시스템에 의하면, 당신은 움직였습니다! 다양한 ARKit 데모에서 점들이 깜빡거리는 이유는 시스템이 어떤 점들이 신뢰성 있는 것인지 아닌지를 정해야하기 때문입니다. 그런 다음 위치를 계산하기 위해 그 점들에서 삼각 측량하고 실제 위치가 어떤것인지에 대한 최고의 추정치를 얻기 위해 계산을 평균해야 합니다. 따라서 이 과정에서 통계적 오류가 제거되었음을 보증하는 작업이 많아질수록 시스템은 더 강력해집니다. 이것은 카메라 하드웨어 스택과 IMU 하드웨어, 소프트웨어 알고리즘 사이의 긴밀한 통합 및 보정하는 과정을 필요로 합니다.

하드웨어와 소프트웨어 통합하기

image8

재미있게도, VIO는 그렇게 다가가기 어렵지 않습니다. 게다가 이미 발표된 알고리즘이 많이 있고, 구현 방식들도 이미 존재합니다. 그대신 잘 다루기는 아주 어렵습니다. 무슨 말이냐면, 능력에 따라 관성 및 광학 시스템이 거의 즉시 입체 지도에 도달하고 측정 척도가 낮은 한 자리수 정확도 수준으로 만들어 질 수 있다는 뜻입니다. 우리가 Dekko에서 만들었던 구현 방식은 사용자가 특정 동작을 수행하고 나서 30초 동안 핸드폰을 앞뒤로 움직여야 했습니다. 좋은 관성 추적 시스템을 만드는 일은 경험이 많은 엔지니어가 필요했습니다. 운이 없게도, 저희에게 필요한 능력과 경험을 가지고 있는 엔지니어는 지구에 20명 정도밖에 없었고 대부분은 크루즈 미사일 추적 시스템이나 화성 탐사선 네비게이션 시스템등을 만드는 일을 하고 있었습니다. 소비자들의 모바일 기기에 들어갈 작업을 하는 엔지니어는 아무도 없었죠.

당신이 이 사람들을 만날 수 있다고 치더라도, 오류들을 줄이기 위한 모든것은 여전히 하드웨어와 소프트웨어가 서로 협조적으로 잘 작동하는지에 달려있습니다. 핵심은 소프트웨어에서 정확하게 모델링할 수 있는 IMU, 모든 카메라 스택과 각 스택의 컴포넌트들의 상세한 사양을 의미합니다. 그리고 가장 중요하게도, IMU와 카메라는 아주 정확하게 시계 동기화 되어야 합니다. 시스템은 어떤 IMU 판독값이 프레임 캡쳐의 시작에 해당하는지, 그리고 어떤 값이 마지막에 해당하는지를 정확히 알아야 합니다. 이것은 두 시스템의 상관 관계를 분석하는데에 필수적이며, 하드웨어 OEM 업체들이 이 분야에 투자할 이유가 없었기 때문에 최근까지는 불가능했습니다. 이러한 것들이 Dekko의 iPad2 기반 시스템이 나오기 꽤 오래 걸린 이유입니다. Tango의 첫 번째 폰인 Peanut은 모든 것을 정확하게 시계 동기화할 수 있는 첫 번째 기기였고, 좋은 품질의 추적을 제공하는 첫 번째 소비자를 위한 폰이었습니다. 현재 Qualcom 등이 만든 칩의 시스템에는 모든 컴포넌트에 사용할 수 있게 동기화된 센서 허브를 가지고 있습니다. 이것은 VIO가 대부분의 요즘 기기에서 적절한 센서 보정만으로도 사용가능하다는 것을 의미합니다.

하드웨어와 소프트웨어의 이러한 끈끈한 의존성 때문에, 소프트웨어 개발자에겐 OEM 업체가 적절한 하드웨어를 만들어주는 것과 같은 깊은 지원이 없다면 대단한 시스템을 만드는 것은 거의 불가능에 가까웠습니다. 그래서 Google은 OEM 업체들에게 Tango 하드웨어 스펙을 지원하게 하도록 투자를 아주 많이 했습니다. Microsoft, Magic Leap 등은 그들만의 하드웨어를 만들었고, 궁극적으로 왜 Apple이 하드웨어와 소프트웨어를 함으로써 ARKit에 성공적이었는지를 알려줍니다.

광학 보정

image9

소프트웨어가 카메라 센서에 있는 픽셀과 현실 세계의 점을 서로 정확하게 연결하기 위해서, 카메라 시스템은 더 정확하게 보정될 필요가 있습니다. 보정의 종류는 두 가지 입니다:

기하학적 보정: 이 보정은 카메라의 핀홀 모델을 사용하여 렌즈의 시야각 및 렌즈의 배럴 효과와 같은 것을 보정합니다. 기본적으로 모든 이미지는 렌즈의 모양때문에 뒤틀립니다. 대부분의 소프트웨어 개발자들은 OEM의 도움 없이도 체커보드와 기본 공용 카메라 스펙을 통해 이 작업을 수행할 수 있습니다.

광도 보정: 이 방법은 매우 진화한 방법이고 보통 OEM의 이미지 센서 자체의 특성 그리고 내부 렌즈의 코팅등에 대한 참여가 필요합니다. 이 보정은 색상 및 강도 매핑을 처리합니다. 예를 들어 멀리 있는 별을 찍기 위해 망원경이 달려있는 카메라는 빛의 강도의 아주 약간의 변화가 별인지 아니면 그냥 센서나 렌즈의 수차인지 알 수 있어야 합니다. AR 추적기를 위해서 하는 이 보정의 결과는 센서위의 픽셀이 현실 세계의 점과 맞는지를 더 높은 확실성을 가지게 되고 그러므로 시각 추적의 오류가 더 적어져서 강력해집니다.

위의 슬라이드를 보면, 이미지 센서위의 한 픽셀을 의미하는 양동이에 떨어지고 있는 다양한 RGB 광자들의 그림은 그 문제를 나타냅니다. 그 픽셀에 대한 현실 세계의 점에서 오는 빛은 보통 여러개의 픽셀의 경계를 지나고 각 픽셀은 그들을 친 광자들을 평균화 합니다. 유저 행동의 아주 작은 변화나 배경의 그림자, 또는 형광등의 반짝임은 현실 세계의 점을 가장 잘 나타내는 픽셀을 변경합니다. 이것이 이 모든 광학적 보정들이 최대한 제거하려고 하는 오류입니다.

관성 보정

image10

IMU에 관해 생각해보면, IMU가 거리나 속도가 아닌 가속을 측정하는 것을 기억하는 것이 중요합니다. IMU 판독에서의 오류는 시간이 지남에 따라, 아주 빠르게 쌓입니다. 우리가 보정과 모델링을 하는 목표는 거리 측정이 X분의 1초동안 충분히 정확하도록 보장하는 것입니다. 이상적으로 기서은 유저가 렌즈를 가리거나 배경에 어떤 일이 생겼을 경우에 카메라가 몇 프레임동안 추적을 하지 못 할 때 커버할 수 있는 충분한 시간입니다.

IMU를 사용해서 거리를 측정하는 방법을 Dead Reckoning 이라고 부릅니다. 기본적으로 이것은 추측이지만, IMU가 어떻게 움직이는지를 모델링하고 오류를 누적하는 모든 방법을 찾은 다음 이 오류들을 위한 필터를 작성하여 오류를 완화함으로써 추측이 정확해집니다. 당신이 한 걸음 걸은 후에 몇 인치를 움직였는지 추측해보라고 질문 받는 것을 상상하면 됩니다. 앞의 한 걸음 후 추측하기는 높은 오차 범위를 가집니다. 만약 당신이 몇 천 걸음을 반복하면서 각 걸음을 측정하고 어떤 발로 걸었는지 알고, 바닥의 덮개, 어떤 신발을 신었는지, 얼마나 빨리 움직였는지, 얼마나 피곤했는지 등을 배웠다면 당신의 추측은 결국 아주 정확하게 될 것입니다. 이것이 기본적으로 IMU 보정과 모델링에 어떤 일이 일어나는지를 설명한 내용입니다.

오류가 발생하는 이유는 아주 많습니다. 로봇 팔은 보통 동일한 방식으로 장치를 반복적으로 움직이는 데 사용되며 IMU의 출력이 로봇 팔의 Ground Truth 움직임과 정확하게 일치할 때 까지 IMU의 출력을 캡쳐하고 필터링을 합니다. Google과 Microsoft는 심지어 추가적인 오류를 없애기 위해서 ISS의 저중력 공간이나 무중력 비행 공간으로 그들의 장치들을 보냈습니다.

image11 이것은 위 그래프의 삼색선과 같은 추적에서 식별해야 하는 오류입니다…

이것은 실제로 정확 해지는 것보다 훨씬 더 어렵습니다. 그것은 또한 OEM이 포트폴리오의 모든 장치에 대해 이 과정을 수행해야 하는 골치덩어리이기도 하지만 많은 장치가 다른 IMU를 가질 수도 있습니다. (예를 들어 Galaxy 7은 Invensense나 Bosch의 IMU를 가지고 있고, 당연하게도 Bosch를 위한 모델링 과정을 Invensense에서는 작동하지 않습니다.) 이것이 Apple이 Android OEM들에 비해 이점을 가질 수 있는 영역입니다.

추적 기능의 미래

image12

만약 VIO가 지금 작동하는 것이라면, 어떤것이 다음으로 나타날까요? 그리고 그것이 ARKit의 대항마가 될 수 있을까요? 놀랍게도 VIO는 몇 백 미터 범위를 추적하기 위한 최고의 방법으로 남을 것입니다. 그 이유는 다른 어떤 다른 광학 전용 시스템이 VIO만큼 정확할지라도, 그들은 많은 전력(GPU나 카메라를 위한)을 필요로 할 것인데, 이 전력은 헤드 마운트 디스플레이에서는 매우 중요하기 떄문입니다. 렌즈가 하나인 VIO는 가장 적은 전력과 가장 적은 비용으로 가장 높은 정확도를 가지는 해결책입니다.

딥 러닝은 연구 커뮤니티에서 추적에 실제로 영향을 미치고 있습니다. 지금까지 딥 러닝 기반 시스템은 상위 VIO 시스템이 한 자리 수 %의 오류를 낼 때 오류를 10%대로 내왔었습니다. 하지만 그들은 따라잡고 있고 실외의 위치 재조정과 함께 정말로 도움이 될 것입니다.

깊이 카메라는 VIO 시스템을 여러가지로 도와줄 수 있습니다. 낮은 기능의 배경에 대한 Ground Truth 및 측정 척도 그리고 에지 추적의 정확한 측정이 가장 큰 이점입니다. 그들은 매우 전력을 많이 먹고, 아주 낮은 프레임 속도로 실행하고 프레임 사이에 VIO를 사용하는 것이 좋습니다. 또한 햇빛의 배경 적외선 산란이 카메라에서의 IR을 씻어내기 떄문에 야외에서도 작동하지 않습니다. 그리고 전력 소비에 따른 범위 의존성이 있기 때문에(핸드폰에서를 의미합니다), 아주 짧은 범위에서만 작동합니다(몇 미터정도요). 게다가 그들은 BOM 비용 측면에서 매우 비싸고, 그래서 OEM 업체들은 고용량 핸드폰에는 피하려고 합니다.

스테레오 RGB나 어안 렌즈 둘 다 더 큰 배경을 볼 수 있게 도움을 주고 (그리고 잠재적으로 더 많은 광학 기능을 가지고 있습니다. 예를 들어, 보통의 렌즈가 하얀 벽만 본다면 어안 렌즈는 패턴 모양인 천장과 카펫을 프레임에서 볼 수 있습니다. - Tango와 Hololens가 이 접근을 사용하고 있습니다.), 비록 VIO는 더 낮은 BOM 비용과 전력으로도 똑같이 정확하게 하지만, VIO와 비교해서 더 적은 컴퓨팅 비용으로 깊이를 계산할 수 있습니다. 핸드폰(또는 헤드 마운트 디스플레이)의 다중 카메라들이 가까이 있기 때문에, 깊이 계산에서의 그들의 정확도 범위는 아주 제한되어 있습니다 (몇 cm 떨어져있는 카메라들은 몇 미터까지만 정확할 수 있습니다).

파이프 라인을 통해 내려오는 일중에 가장 흥미로운 것은 더 넓은 공간으로의 추적, 특히 실외에서 몇 km 거리를 추적하는 것을 지원하는 것입니다. 이 부분에서 AR을 위한 추적과 자율 운전을 위한 추적이 AR 시스템의 것이 적은 수의 센서와 낮은 전력을 사용한다는 것 말고는 다른 점이 없습니다. 결국 어떤 기기도 큰 영역을 그리려면 공간이 부족할 것이기 때문에, 클라우드가 지원하는 서비스가 필요할 것이고, Google은 최근에 이런 이유로 Tango Visual Positioning Service를 발표했습니다. 우리는 앞으로 몇 개월 동안 이 서비스의 많은 것을 보게 될 것입니다. 이것은 또한 모두가 왜 3D 지도에 관심을 갖는 이유이기도 합니다.

AR Computer Vision의 미래

image13

6자유도 위치 추적은 12개월에서 18개월 안에 모든 기기에서 상용화 될 것입니다. 여전히 남아있는 해결해야 하는 문제를 알아봅시다:

3D 재구성 (Hololens의 용어 중 공간 매핑(Spatial Mapping)이나 Tango의 용어 중 깊이 인식(Depth Perception)). 이것은 배경에 있는 현실 세계의 실제 객체의 모양이나 구조를 알아낼 수 있게 해주는 시스템입니다. 그리고 이게 가상 컨텐츠가 현실 세계와 충돌하고 뒤에 숨도록 허용하는 역할을 합니다. 또한 사람들이 AR이 “혼합된” 현실이라고 생각하게 하여 혼란스럽게 하는 기능이기도 합니다(Magic Leap 덕분에요!). 사람들이 지금까지 봐 온 대부분의 AR 데모에서는 3D 재구성을 지원하지 않으므로, 컨텐츠는 현실 세계의 앞쭉에 나타납니다. 3D 재구성은 배경에 있는 빽빽한 점 구름 (Dense Point Cloud)을 캡쳐하고(요즘은 깊이 카메라를 사용합니다.) 그것들을 매쉬로 변환해서 Unity(현실의 좌표와 함께)에게 “보이지 않는” 매쉬를 공급합니다. 그리고 현실 세계를 통해 만든 매쉬를 카메라에 보이는 현실 세계 위에다 배치합니다. 이것은 가상 컨텐츠가 현실 세계와 상호 작용한다는 것처럼 보인다는 의미입니다. 참고. ARKit은 2D 평면을 감지하여 현재 2D 버전을 수행합니다. 이것은 필요한 최소값입니다. Ground Plane이 없다면, Unity 컨텐츠는 말그대로 서 있을 바닥이 없고 주위를 떠다닙니다.

image14 위의 Magic Leap의 데모는 테이블 다리 뒤에 있는 로봇의 폐색을 보여줍니다. 테이블 다리가 실시간으로 재구성되어서 Unity에 공급되었는지 아니면 그들이 이전에 모델링 해두고 가상으로 저 위치의 실제 테이블 위에 수동으로 배치하였는지 알 수는 없습니다.

위의 깊이 카메라와 관련된 모든 문제는 여전히 여기 적용되고, 그것이 널리 사용되지 않는 이유입니다. 하나의 RGB 카메라로 실시간으로 사실적 3D 재구성을 지원하기 위한 활발한 연구가 진행 중입니다. 그 결과가 제품으로 나오려면 12개월에서 18개월 정도 걸릴 것 입니다. 그것이 바로 제가 “진정한” 유저를 위한 AR 헤드마운트 디스플레이가 아직도 멀었다고 생각하는 주요 이유 중 한 가지 입니다.

image15 저의 오래된 스타트업인 Dekko의 3D 재구성 시스템은 2012년 iPad 2에서 돌아왔습니다. 우리는 그리드를 포함시켜야 했고 그렇지 않으면 유저들은 그들이 보고 있는 것(시스템이 현실 세계를 이해할 수 있다는 것)을 믿지 않으려고 했습니다. 그림 속의 버기는 방금 점프를 한 후 티슈 뒤에 부분적으로 숨겨져 있습니다.

3D 재구성 후에는 의미론적으로 3D 장면을 이해하는 많은 흥미로운 연구가 진행됩니다. 당신이 봐 온 거의 모든 신기한 컴퓨터 비전 딥 러닝 2D 이미지(보통의 사진)를 사용하지만 AR(그리고 자동차, 드론 등)은 3D 세계에 대한 의미론적 이해가 필요합니다. ScanNet과 같은 새로운 의제들은 ImageNet이 2D 의미론에 도움이 많이 된 방식과 유사하게 많이 도움이 될 것입니다.

image16 한 화면의 3D 의미론적 세분화의 예제입니다. An example of 3D semantic segmentation of a scene. 가장 밑에 있는 이미지가 원래 이미지이고, 그 바로 위 이미지가 3D 모델이고(아마도 다중 카메라나 LIDAR로 만들어졌을 것입니다.), 가장 위에 있는 것이 Deep Learning을 통한 세분화입니다. 그래서 우리는 도로 옆에 인도가 있다는 것을 말 할 수 있습니다. 이것은 또한 Pokemon Go에서 포켓몬이 바쁜 도로 한 가운데에 그려지지 않게 배치하는데에도 유용합니다.

그런 다음 실시간으로 여러 동시 유저를 지원하기 위해 이 놀라운 기술을 확장하는 방법을 찾아야합니다. 그것이 궁극적인 MMORG입니다.

image17 3D 재구성이 커질수록 3D 재구성을 호스팅하고 여러 사용자가 그 모델을 공유(그리고 확장)할 수 있는 방법을 찾아야 합니다.

AR의 다른 부분들의 미래

AR의 다른 부분들을 알아보는 것은 이 게시물의 범위를 벗어나는 정도입니다 (미래의 게시글이 될 수도 있겠죠?). 그러나 기술 스택을 더욱 발전시킬 수 있는 작업이 많이 있습니다:

이렇게 멀리까지 와주셔서 감사합니다! 질문이나 댓글 또는 향후 게시글에 대한 요청이 있으면 연락주세요.