[개요] X-Fields: 내포된 신경 시점, 빛, 시간 이미지 보간법(interpolation)
Interpolation
Time 3
Time 1
Time 0
본 리포트에서 희소 데이터(sparse data), X-Field를 사용하여 2D영상의 시간, 빛, 시점을 매끄럽게 보간(interpolate)하는 새로운 방법을 제안하는 흥미로운 논문을 간략하게 살펴보겠습니다. 이 X-Field는 시간, 빛 또는 시점 좌표(view coordinates)를 2D 이미지에 매핑하기 위해 신경망을 학습함으로써 표현됩니다.
논문 | GitHub | Colab Notebook
서론
새로운 센서는 다양한 포인트(비디오), 앵글(빛 필드)에서의, 또는 다양한 조명(반사 필드) 아래의 장면 이미지를 포착합니다. 이런 다양한 정보를 활용하여 가상 현실(Virtual Reality, VR)의 경험을 향상시킬 수 있습니다. 이 정보를 통해, 새로운 시점, 조명 등이 보간되어 한 장면에서 다른 정면으로 매끄러운 전환이 이뤄질 수 있습니다.
그러나, 원할한 보간(interpolation)에는 조밀한 샘플링이 필요하여, 과도한 스토리지, 캡처 및 프로세싱 요구 사항으로 이어집니다. 희소 샘플링은 대안이긴 하지만, 시간, 빛, 시점에 걸쳐 정확한 보간이 필요합니다.
X-field는 다양한 시점, 시간 또는 조명 조건 (예: 비디오, 빛 필드, 반사 필드 또는 이러한 부분의 조합)에서 촬영된 2D 이미지 세트입니다. 저자들은 이 고차원 X-fields를 나타낼 수 있는 신경망 기반 아키텍처를 제안했습니다.
위의 그림 1을 통해 이 논문의 핵심을 이해할 수 있습니다. 다양한 조건 및 좌표를 가진 희소 이미지 관찰(이 경우 시간)에서 공간, 시간, 빛 좌표를 입력으로 제공하는 경우 관찰된 샘플 이미지를 출력으로 생성하도록 신경망(매핑)이 훈련됩니다. 비관측 좌표(non-observed coordinate)의 경우 출력은 충실히 보간됩니다 (GIF로 표시).
저자의 공식 YouTube 비디오를 확인하시기 바랍니다.
제안된 방법에 대한 개요
제안된 접근법은 다음 두 가지 주요 관찰에서 영감을 얻었습니다:
-
심층 표현은 보간에 도움이 됩니다: 신경망을 사용하여 정보를 표현하면 더 나은 보간을 얻을 수 있습니다.
-
모든 단위(unit)가 구별할 수 있는 한 참(true)입니다: 모든 단위를 구별할 수 있는 한 위의 관측 사항은 모든 아키텍처에 적용됩니다.
X-field는 비선형 함수로 표시됩니다:
Loutθ(x)∈χ→R3×npL_{out}^θ (x) \in \chi \to \mathbb{R}^{3 \times n_p}
훈련 가능한 매개변수 θ를 통하여 ndn_d--차원 X-field 좌표 x∈χ⊂Rndx \in \chi \subset \mathbb{R}^{n_d}에서 nnpn_p 픽셀의 2D RGB 이미지로 매핑할 수 있습니다. X-field(χ)의 차원은 캡처 양식(capture modality)에 따라 달라집니다 (예: 비디오 보간은 1D입니다).
X-field가 고차원 연속 공간(high dimensional continuous space)이라고 가정해봅시다. 우리는 유한하고 다소 희박한 입력 이미지를 가지고 있습니다. 이 희소 관측 X-Field 좌표는 알려진 좌표 yy에서 이미지 Lin(y)L_{in}(y) 가 캡처 된Y⊂χY \subset \chi로 표시될 수 있습니다. ∣Y∣|Y|는 희소합니다. 즉, 3×33 \times 3, 2×32 \times 3와 같이 작습니다.
예를 들어, 3×53 \times 5 빛 필드 이미지의 배열이 주어지면, 입력은 s∈0,1,2s \in {0,1,2} 이고 t∈0,1,2,3,4t \in {0,1,2,3,4} 좌표 (s,t)(s,t)입니다. 테스트 시간 동안, 우리는 ss의 경우 0과 2, tt의 경우 0에서 4사이의 연속 값을 제공할 수 있습니다. 학습된 신경망 아키텍처는 주어진 범위에서 충실하게 보간됩니다.
아래에 표시된 이미지는 희소 입력(YY)로, X- field(χ\chi)에 속합니다. 이 경우, 캡처 양식(capture modality)은 빛(조명) 보간에 적합합니다. 아래의 흰 천사의 그림자를 관찰하시기 바랍니다.
요약하면, 아키텍처 LoutL_{out} 은 관측되지 않은 벡터 x에 대하여 그럴듯한 이미지 Lout(x)L_{out}(x) 도 얻을 수 있기를 바라며 캡처된 이미지 Lin(y)L_{in}(y) **에 벡터 yy를 매핑하도록 훈련됩니다. 이는 위에서 언급한 첫 번째 주요 관측 내용과 일치합니다.
테스트 시간 동안 보간이 예��되나 YY에 의해 한정됩니다. 따라서 훈련은 YY에 있지 않은 어떤 X-filed 좌표 xx 를 평가하지 않습니다. 해당 좌표의 이미지 $L_{in}(x) 가 무엇인지 모르기 때문입니다.
아키텍처 디자인
아키텍처 디자인은 이 논문의 참신한 부분입니다.LoutL_{out} 는 다음의 세 가지 주요 아이디어를 통해 모델링 됩니다.
- 외형(appearance)은 관측된 이미지(Lin(y)L_{in}(y))에서의 외형의 조합입니다.
- 외형은 음영(shading) 및 알베도(albedo)의 산물로 가정합니다.
- xx에서 관측되지 않은 음영(Shading) 및 알베도(Albedo)는 y에서의 관측된 음영(Shading) 및 알베도(Albedo)의 뒤틀린(warped) 버전으로 간주됩니다.
이러한 가정이 지속될 필요는 없으나, 이 경우, 신경망은 좌표와 이미지의 관계를 포착하는 데 훨씬 더 어려움을 겪게 됩니다.
제안된 아키텍처는 다음의 4단계로 구현됩니다.
-
음영(Shading)과 알베도(Albedo) 분리: 음영(Shading)은 어두운 정도를 변화시켜 3D 모델(3D 컴퓨터 그래픽 분야 내) 또는 일러스트레이션(2D 컴퓨터 영역 내)의 깊이 인식(depth perception)의 표현을 말합니다. 알베도(Albedo) 는 표면에서 반사되는 입사광(incident light)의 비율입니다. 즉, 개체의 전반적인 밝기입니다.
-
뒤틀린(wapred) 이미지의 편향된 조합으로서의 보간 이미지
-
신경망을 사용한 “흐름”(flow) 나타내기
-
불일치(inconsistencies) 해결
앞으로 각 단계를 하나씩 살펴보도록 하겠습니다.
음영 및 알베도 분리(디라이팅(De-lighting))
디라이팅(De-lighting)은 외형(appearance)이 음영의 조합으로 분할되며, 이는 X-Field 좌표의 변화에 대응하여 한 방향으로 이동합니다.
관측된 모든 이미지는 다음과 같이 분해됩니다:
Lin(y)=E(y)⊙A(y)L_{in}(y) = E(y) \odot A(y)
EE 는 음영 이미지, AA 는 알베도 이미지, ⊙\odot는 포인트별 결과물입니다.
테스트 시간 동안, 음영(Shading) 및 알베도(Albedo)는 모두 독립적으로 보간되며 관측되지 않은 위치 x에서 곱셈에 의해 새로운 빛(radiance)로 재결합됩니다. 출력의 수학적 등식은 다음과 같습니다.
Lout(x)=int(A(Lin(y)),y→x)⊙int(E(Lin(y)),y→x)L_{out}(x) = int(A(L_{in}(y)), y \to x) \odot int(E(L_{in}(y)), y \to x)
intint 는 앞으로 설명할 연산자(operator)입니다.
보간(Interpolation) 및 뒤틀림(Warping)
뒤틀림(warping)은 관측된 이미지를 관측되지 않은 이미지로 변형시킵니다. 이는 관측된 X-Field 자표 및 관측되지 않은 X-Field 좌표를 조건으로 합니다.
warp(I,y→x)∈I×χ×Y→Iwarp(I, y \to x) \in I \times \chi \times Y \to I
주어진 “플로우”(flow) 맵에 따라 다른 이미지에서 픽셀을 읽음으로써 이중 선형 필터링(bilinear filtering)을 가지는 공간 변형기(spatial transformer(STN))는 한 이미지 내의 픽셀을 계산하는 데 사용됩니다.
보간(interpolation)은 모든 관측된 이미지를 뒤틀고(warp) 개별 결과를 병합합니다. 음영(EE) 및 알베도(AA)에 대한 모든 뒤틀림(warp)와 병합(merge)는 완전히 동일하게 수행됩니다. 이 작업은 II(위에서도 사용됨)에 의해 표기되며 다음가 같이 지정됩니다.
int(I,y→x)=∑y∈Y(cons(y→x)⊙warp(I(y),y→x))int(I, y \to x) = \sum_{y \in Y} (cons(y \to x) \odot warp(I(y), y \to x))
여기서 핵심 질문은 xx i에서의 이미지가 yy에서의 이미지로부터 재구축될 때 위치 “p”의 픽셀을 어느 위치 “q”에서 읽어야 하는가입니다.**
이 답변의 첫 번째 절반은 X-Field 좌표에서 픽셀 위치의 매핑을 통한 야고비안(Jacobians)를 사용하는 것입니다. 예를 들어 야고비안은 시간이 변경되었을 때 특정 시점 및 빛에서 픽셀이 어떻게 움직이는지 포착할 수 있습니다. 수학적으로 주어진 픽셀 “p”에 대하여 이는 다음과 같은 편미분입니다.
flowδ(x)[p]=δp(x)δx∈X→R2×ndflow_{\delta}(x)[p] = \frac{\delta p(x)}{\delta x} \in X \to \mathbb{R}^{2 \times n_d}
여기서 [p]$는 이산 픽셀 배열(discrete pixel array)로 인덱싱(index)됩니다. 위의 공식은 X-Field 좌표의 미소 변화(infinitesimal change)에 대하여 픽셀이 어떻게 이동하는지를 지정합니다. 야고비안 행렬은 모든 nd-차원의 X-Filed 좌표에 대한 두 픽셀 좌표의 모든 편미분을 포함합니다. 그러나, 이것은 유한값 “q”가 아닙니다. “q”를 찾기 위해 X-Field 좌표 y→x의 변화는 유한차(finite differences)를 사용하여 2D 픽셀 모션에 투영됩니다.
flowΔ(y→x)[p]=p+Δ(y→x)flowδ(x)[p]=qflow_{\Delta}(y \to x)[p] = p + \Delta (y \to x)flow_{\delta}(x)[p] = q
이 등식은 X-Field 좌표의 유한 변화(finite change)에 대한 유한한 픽셀 모션을 제공합니다.
흐름(Flow)
흐름(flow) 계산으로의 입력은 X-Field 좌표 xx이고, 출력은 야고비안(Jacobian)입니다. 이것은 합성곱 신경망(Convolutional Neural Network, CNN)을 사용하여 구현됩니다. 아키텍처는 좌표 xx를 포함하는 완전히 연결된 레이어로 시작하여 128개 채널을 포함한 2D 이미지로 재구성됩니다. 이 단계에서 Cord-Conv 레이어가 추가됩니다. 그다음 출력 해상도(output resolution)를 달성하기 위해 다수의 업샘플링(upsampling)이 수행되며, 채널의 수는 nd 출력 채널로 감소됩니다.
일관성(Consistency)
관측되지 않은 X-Field 좌표로 뒤틀린(warped) 모든 관측된 이미지를 결합하기 위해, 각 이미지 픽셀은 흐름 일관성(flow consistency)에 의해 가중치가 지정됩니다. 픽셀 “q”가 “p”의 이미지에 기여하려면, “q”에서의 흐름이 “p”로 다시 매핑되어야 합니다. 좌표 yy 에서 xx 로 뒤틀린 경우 한 픽셀 “p”의 일관성(consistency)은 가중치 함수의 단위 분할(partition of unity)입니다.
cons(y→x)[p]=w(y→x)[p](∑y′∈Yw(y′→x)[p])−1cons(y \to x)[p] = w(y \to x)[p](\sum_{y' \in Y} w(y' \to x)[p])^{-1}
가중치 𝑤는 픽셀 위치 “p”의 델타 1-norm
및 위치 “q”의 역류(backward flow)의 감소함수(decreasing functions)로 여기서 “p”는 다음으로 뒤틀립니다(warped):
w(y→x)[p]=exp(−σ∣p−flowΔ(x→y)[q])∣1)w(y \to x)[p] = exp(-σ|p - flow_{\Delta}(x \to y)[q])|_1)
여기서, σ=10σ = 10 는 밴드폭 매개변수(bandwidth parameter)입니다.
훈련
결과를 재현하려면 Colab Notebook을 확인하시기 바랍니다 →\rightarrow
공식 GitHub 리포는 여기서 이용하실 수 있습니다. 저는 동일한 것을 통해 Weights and Biases를 계측했으며, 여기서 리포를 확인하실 수 있습니다.
링크된 Colab Notebook에서 이용 가능한 데이터세트를 활용할 수 있습니다. 원하는 데이터세트를 선택하고 적합한 Python 명령어를 선택하여 장면의 모델을 훈련시킵니다. 데이터세트에 따라 다소 시간이 걸릴 수 있습니다.
각 모델에 대한 평균 L1 손실은 아래의 미디어 패널에 표시됩니다.