논문 요약: 한번에 찍는 3차원 사진(One Shot 3D Photography)
이번 리포트에서, Johannes Kopf가 공동 작성한 One Shot 3D Photography의 주요 구성 요소를 살펴보겠습니다. 링크된 colab notebook을 사용하여 멋진 3D 사진을 생성하고 형성된 즉각적인 결과를 알아보겠습니다.
이 colab에서 결과 재현하기 →\rightarrow
이 논문의 공식 GitHub 저장 소는 논문에 언급된 4가지 방법 중 하나만을 다루고 있습니다. 저자는 첫 번째 구성 요소에 의해 생성된 결과와 함께 3D 이미지를 생성하기 위해서 3D 이미지 인페인팅의 코드 베이스 사용을 제안했습니다.
서론
3D 사진 기법은 2D 이미지로 포착된 순간에 생동감을 불어넣는 새로운 방식입니다. 저자는 3D 사진을 시점을 이동함으로써 유발되는 시차(parallax)를 표현한 사진이라고 언급합니다. 이러한 시점은 “평면” 휴대폰 또는 데스크톱 스크린에서 생성될 수 있습니다. Facebook, Instagram과 같은 이미지 공유(보기) 앱의 경우 추가 기능으로 3D 사진을 포함할 수 있습니다. 따라서 이 논문의 저자는 휴대폰에 최적화된 참신한 3D 사진 기법을 제시했습니다.
하지만, 3D 사진 생성 및 표현에는 다음과 같은 문제가 발생합니다:
- 색상과 더불어 깊이 정보도 필요합니다.
- 시점이 변경되면 채워야 할 이미지에서의 이전에 가려진 부분이 드러납니다.
- 시점을 바꾸는 것이 쉽고 저렴해야만 합니다.
본 논문에서 제안하는 시스템은 앞서 언급된 문제를 해결하는 3D 사진 기법에 대한 실용적 접근법을 제공합니다. 이 방법의 숨은 기능 중 일부는 다음과 같습니다:
-
수고로움: 이 방식에는 3D 이미지로 변환할 단일 이미지가 필요합니다. 따라서 이름은 “One Shot”입니다.
-
접근성: 모든 모바일 장치, 심지어 단일 렌즈 카메라가 장착된 장치에서도 이 방식에 액세스할 수 있습니다.
-
속도: 양자화 인식 훈련(quantized aware training)을 사용하여, 훈련된 모델은 모바일 장치에 최적화되어 있습니다. 제한된 리소스 요구사항으로 모바일 기기에서 모든 처리 단계는 몇 초 밖에 걸리지 않습니다.
-
상호적 상호작용(Interactive Interaction): 3D 사진과의 상호작용은 실시간이며 결과 3d 이미지는 쉽게 공유할 수 있습니다.
논문 | 프로젝트 웹사이트
다음은 놀라운 결과물을 보여주는 논문 저자들의 짧은 비디오입니다.
제안된 방식에 대한 개요
사진 1: 제안된 3D 이미지 사진 기법에 대한 4단계 방식
제안된 방법을 사용하려면 3D 이미지 생성을 위한 단일 이미지가 필요합니다. 입력 이미지는 모바일 기기를 통해 촬영해도 되지만, 여기에만 제한되지 않습니다(모든 이미지 가능). 이 방식은 4단계의 처리 단계를 수반하며 모든 모바일 캡처 기기에서 엔드-투-엔드 방식으로 실행됩니다. iPhone 11 pro에서의 처리 시간은 그림 1에 나타나 있습니다.
깊이 추정
첫 번째 단계는 입력 이미지에서 조밀 깊이 맵(dense depth map)을 추정하는 것입니다. 기존의 방식은 고품질의 결과를 얻을 수 있으나 큰 메모리 공간을 사용하여 모바일용으로는 적합하지 않습니다. 저자는 Tiefenrausch라는 새로운 아키텍처를 제안했습니다. Tiefenrausch는 추론 지연시간(inference latency), 최대 메모리 사용량(peak memory consumption), 모델 사이즈 측면에서 상당히 적은 리소스를 소비하도록 최적화되었으면서도, 여전히 최첨단 결과를 달성하도록 경쟁력 있게 작동합니다.
그림 2: 깊이 추정 네트워크 개념도**
앞서 언급된 최적화를 달성하는 깊이 추정 모델은 다운-/업-샘플링 블록 및 스킵 커넥션(skip connection)을 갖춘 잘 알려진 U-Net 아키텍처입니다. 그러나 언급된 개선점은 세 가지 테크닉을 결합함으로써 달성되었습니다. -
-
효율적인 블록 구조: 업-/다운-샘플링을 위해 설계된 이 블록은 모바일 기기에서의 빠른 추론을 위해 최적화되었습니다. 블록은 포인트별(1x1) 합성곱(point-wise (1x1) convolution) 시퀀스, K가 커널(kernel) 사이즈인 KxK 깊이별 합성곱 및 기타 (1x1) 합성곱을 포함합니다. 이 블록은 그림 3에 나타나 있습니다.
그림 3: 효율적인 블록 구조. ee 는 채널을 확장하는 배수 인자(multiplicative factor)입니다. sus_u및 sds_d는 각각 업/다운 샘플링 스케일 팩터(scale factors)를 나타냅니다.
-
신경 아키텍처 검색(Neural architecture search): 저자는 아키텍처 검색 공간에 주어진 최적의 디자인을 찾기 위해 카멜레온 방법(Chameleon method)를 사용했습니다. 이 방법은 정확도 예측기(accuracy predictor)를 훈련시키기 위해 검색 공간에서 반복적으로 점(points)을 샘플링합니다. 이 정확도 예측기는 지정된 리소스 제약 조건(constraints)을 만족시키면서 예측된 정확도를 최대화하는 모델을 찾기 위해 유전자 검색(genetic search)를 가속화하는데 사용됩니다. 결과 네트워크(resulting network) 정확도, 지연 시간(latency) 및 모델 사이즈 사이에서 보다 유리한 트레이드오프(trade-off)를 얻습니다. 총 검색 시간은 Tesla V100 GPU 800개를 사용하여 약 3일 소요되었습니다. .
-
8-비트 양자화(quantization): 신경 아키텍처 검색의 결과는 최적화된 모델입니다 / FLOP 카운트의 감소 및 매개변수를 줄인 최적화 모델로 양자화 인식 훈련(Quantization Aware Training(QAT)을 사용하여 추가적으로 감소/최적화 될 수 있습니다. 결과 저정밀(8-비트 정수) 모델은 모델 사이즈를 4배까지 줄이고, 약간의 퍼포먼스 저하와 함께 추론 지연시간을 감소시킵니다. Sayak Paul의A Tale of Model Quantization에서 QAT에 대해 더 알아보실 수 있습니다.
아래의 미디어 패널은 제안된 깊이 추정 네트워크의 결과를 나타냅니다
Tiefenrausch 퍼포먼스
그림 4: 여러 최신 기준 방법(baseline methods)에 대한 제안된 깊이 추정 모델 Tiefenrausch의 정량적 평가
저자는 다음과 같은 여러 SOTA 기준 방법을 사용하여 깊이 모델의 네 가지 버전을 평가했습니다:
- 기준(Baseline): 그림 2에 나타난 바와 같이 수동으로 조작된 아키텍처입니다.
- AS + no-quant: 신경 아키텍처 검색의 결과인 최적화된 아키텍처입니다
- AS + quant: 논문에서 제안된 전체 모델입니다. 그림 4에서 이 모델은 최소 FLOPS, 최소 추론 지연시간 및 전체 메모리 사이즈가 3.3 MiB에 불과한 최대 메모리 요구 사항을 갖고 있음을 확인할 수 있습니다.
- AS + quant, MD + 3DP: 또한 2백만 듀얼 카메라 이미지를 포함한 독점 데이터세트를 사용하여 전체 모델을 훈련했습니다. 이것은 생산에 사용되며 품질이 더 우수합니다.
계층적 깊이 이미지(Layered Depth Image)로 리프팅(lifting)
3D 사진은 장면의 기하학적 표현을 필요로 합니다. 저자는 계층적 깊이 이미지(LDI) 표현을 사용했습니다. 일반 이미지와 마찬가지로, 정수 좌표가 있는 일반 직사각격자(rectangular lattice)로 구성되나, 모든 위치는 0, 1, 또는 더 많은 픽셀을 포함할 수 있습니다. 이 표현은 희소성(sparsity) (깊이 및 색상 값만 포함), 토폴로지(로컬에서 이미지와 비슷한), 높은 수준의 디테일을 이유로 선호되며, 쉽게 텍스처 메시(textured meshes)로 변환할 수 있습니다.
깊이 맵을 얻은 뒤, 입력 데이터는 언급된 LDI 표현으로 리프팅(lift) 됩니다. 그러나 그렇게 하기 전에, 조밀 깊이 맵은 전처리(pre-processing) 단계를 거칩니다. 원시 깊이 맵(raw depth map)은 훈련 과정 중 정규화(regularization) 떄문에 지나치게 부드러워집니다. 이 지나친 매끄러움은 깊이 불연속성(depth discontinuity)를 “씻어” 냅니다. 전처리 단계는 깊이 불연속성을 처분(de-clutter) 하고, 선명하게 만듭니다. 그림 5에 나타난 바와 같이, 원시 깊이 이미지는 처음 5x5 커널 사이즈의 weighted median filter를 사용해 필터링 되고, 그 다음 연결된 구성 요소 분석을 수행하여 정리됩니다.
그림 5: 조밀 깊이 맵에 대한 전처리 단계
깊이 맵의 전처리 후, 장면의 가려진 부분에서 새로운 형상(geometry)이 “환영(hallucinated)”을 일으킵니다. 우선, 깊이 이미지가 LDI로 리프팅되어 장면의 여러 레이어를 나타냅니다. 처음에 이 LDI는 모든 곳에 단일 레이어를 갖고 있으며, 모든 픽셀은 임계값(threshold) 이상의 불균형 차이(disparity difference)가 있는 불연속점을 제외하고 완전히 인접 영역에 연결되어 있습니다.
LDI 인페인팅
이 시점에서, 우리는 깊이 불연속점 주변에 여러 레이어가 있는 LDI를 가지고 있으나, 여전히 시차(parallax)(가려진) 영역에는 색상 값이 부족합니다. 이 부분은 3D 사진 사실적이고 매끄러워 보일 수 있도록 맞는 색으로 인페인트(inpaint)됩니다.
인페인팅에 대한 단순 접근법으로는 스크린 공간에서 인페인트 하는 것 이겠으나, 실행 시간에 각 뷰(view)를 채우는 것은 오래 걸립니다. 더 나은 방식은 LDI 구조에서 인페인트하는 것입니다. 따라서 인페인팅은 한 번에 수행되어야 합니다. 그러나 불규칙적인 연결 구조(connectivity structure)로 인해 신경망을 통한 LDI 처리는 쉽지 않습니다. 이 문제의 해결방안으로 LDI는 일반 이미지와 같이 로컬로 구성된다는 점을 이용하는 것이 있습니다. 따라서 합성곱 신경망(convolutional neural network) 기반 아키텍처는 2D에서 완전히 훈련될 수 있으며, 그 다음, LDI와 함께 어떠한 훈련없이, LDI 인페이팅을 위한 사전 훈련된 가중치를 사용합니다.
LDI 인페인팅 모델 아키텍처
그림 6: LDI 인페인팅에 대한 제안된 Farbrausch 아키텍처.
저자는 LDI에서 시차(parallax) 영역의 고품질 인페인팅이 가능하고 모바일 기기에 최적화된 Farbrausch 라는 새로운 아키텍처를 제안했습니다. 저자는 5단계의 다운 샘플링과 함께 기존 2D 부분 회선 기반 U-Net 네트워크(2D Partial Convolutional based U-Net network)로 시작했습니다. 그 다음, 모든 PConv 레이어를 LDIPconv로 대체함으로써 이 네트워크는 LDI 표현을 포함하도록 변환됩니다. 이 레이어는 LDI와 마스크(mask)를 허용합니다. 부분 회선(Partial Convoultion)에 대해 좀 더 알아보시려면 Introduction to image inpainting with deep learning 을 확인하시기 바랍니다.
카멜레온 방법(Chameleon method)을 사용한 신경 아키텍처 검색은 또한 인코더의 각 단계에 대한 출력 채널의 수를 인코딩하는 최상의 초매개변수 세트를 식별하기 위해 사용됩니다. FLOP 카운트는 유효성 세트에 대한 Partial Conv 인페인팅 손실과 균형을 유지합니다.
메시 표현(Mesh Representation)으로 변환
단일 이미지에서 시작해서, 깊이를 추정하고, LDI 표현을 얻기 위해 이를 사용했으며, 시점의 변화로 인한 시차(parallax) 때문에 가려진(occluded) 부분을 인페인트하기 위한 모델을 훈련시켰습니다. 이러한 다층의 인페인트된 LDI는 최종 표현인 텍스처 메시(textured mesh)로 변환됩니다. 이 작업은 다음 두 부분으로 수행됩니다.
- 텍스처 아틀라스 생성(Texture Atlas Generation)
- 메싱(Meshing)