Paper/Neural rendering

IntrinsicNeRF: Learning Intrinsic Neural Radiance Fields for Editable Novel View Synthesis

침닦는수건 2023. 7. 13. 11:09
반응형

내 맘대로 Introduction

NeRF의 color network를 단순히 color, c 값 맞추는 형태가 아니라 reflectance * shading + residual 형태로 분리하여 추정함으로써 추후에 reflectance만 바꾼다거나, shading만 바꾸는 식으로 변형 가능한 형태로 만드는 것이 목적이다.color를 단순화하는 과정에서 여러 가정들이 필요하고 이를 반영하기 위한 loss term들이 추가됨에 따라 loss가 꽤나 많이 추가된 NeRF이다.

 

개인적인 평으로는, 논문이 조금 난잡한 느낌이 있다. Introduction에서 논문의 모든 내용을 다 적으려고 하다보니 Intro 읽을 때도 논문을 앞뒤로 뒤적거리면서 읽어야 하고, method에서 referencing하는 첫 figure가 7번이라 맨 뒷장으로 넘겨야하는 등 구성이 좀... 읽기 불편하다. 그리고 용어에 대한 정의(검색해도 안나옴;;)나 notation 설명을 정확하게 하지 않아 몇 번을 다시 읽게 만드는 논문이다. 내가 멍청해서 그럴 수도 있는데 편하게 읽히진 않는다. 이렇게 쓰지 말아야지 싶은 구조였다.

 

메모하며 읽기


NeRF와 기본 구조가 동일한데 산물이 여러개로 늘어난 것과 loss가 여러개로 늘어난 차이다.

color = reflectance * shading + residual로 묘사했으며 residual이 추가된 이유는 수식을 위와 같이 만들기 위해서 사용한 가정이 모든 scene을 표현할 때 충분하지 않으므로 그 간극을 메우기 위함이다.

IntrinsicNeRF의 출력은 수식(3)과 같으며 조합한 뒤 color로 만들면 이후 과정은 NeRF와 동일하다.


(사실 여기서부터 맘에 안들었다. Sec 3.1인데 이해하려면 Sec 3.2와 저 맨뒤에 Fig.7에 다녀와야 한다는게... 이럴거면 뒤에 쓰지)

point sampling이라고 써서 이게 ray를 상에 point를 뽑는다는건지 ray를 만들 때 어떤 이미지 pixel을 쓴다는건지 헷갈리는데 후자다. 

NeRF에서 ray 1024를 batch로 쓰는데 무작위 선별이다. 하지만 IntrinsicNeRF는 이미지 내 영역이 비슷해보면 reflectance, shading도 비슷할 것이라는 가정을 쓰기 때문에 애초에 ray를 뽑을 때도 rule 기반으로 뽑아야 한다는 얘기 (근데 이거 Sec3.2안 보면 이해못함 ㅋㅋ)

다짜고짜 loss를 설명한다. 여기서 x, y는 3D point 아니고 2D point라는 것을 명심하자. 2D point라고 이해했을 때 뭔가 이상하다면 해당 ray를 따라 모두 aggregation하는 경우라고 해석하면 된다.

이미지 내 영역이 비슷해보이면 r, s도 비슷할 것이란 가정을 이용하기 위해 이미지 pixel 간의 similarity 같은 개념을 정의해야 했다. 그래서 정의한 것이 chromaticity다. 뭐 대충 intensity와 상관없는 색감 같은 느낌인데 pixel color를 normalization한 것이다. 이게 (grayscale shading assumption인 듯, 회색이 intensity니까)

주의할 점은 여기서 저 c(x)가 r*s+re 가 아니라는 것이다. (ch로 쓰던가)

Chromaticity prior는 이미지 pixel에서 얻은 chromacity와 네트워크 output으로 만든 reflectance가 갖도록 loss를 거는 것이다 논문이 거지 같은데 c_r == reflectance 이다. 개념 상 reflectance가 색감, shading이 intensity, residual이 자투리이므로 reflectance가 c(x)를 닮도록 유지해야 reflectance가 이미지를 보고 색감을 잘 찾는다는 것이다. (이걸 저 한 줄만 읽고 어떻게 알아)

reflectance sparsity(검색해도 뜻 안 나옴)는 대충 인접 픽셀 끼리는 chromaticity가 비슷하면 reflectance가 같다는 loss다. 여기서 chromaticity는 입력 이미지 pixel color로 만든 것, r은 네트워크 출력이다. (사실 상 c랑 r 개념이 같은 것인데 하나는 이미지, 하나는 네트워크에서 나온 것이라고 생각하는게 이해하기 편하다.)
Non-local reflectance sparsity는, pixel이 멀어도 색감이 비슷하면 같은 물질일 수 있다는 가정이다. 이는 방과 같은 사람이 만든 인공 구조물에만 통하는 가정일텐데 타겟 데이터셋이 그런 류라 사용한 듯 하다. 그래서 먼 pixel 대상으로 similarity가 높을 경우, refletance가 비슷하도록 한다는 것이다. (사실상 local relfectance sparsity loss랑 똑같은데 대상 pixel만 다르게 한 것이다.)

(거지같은 논문 2)

그럼 그 먼 pixel의 기준은 무엇이냐! 그림 3에 거지같이 설명되어 있는데 일단 1024개의 point 중 512(1st half)개는 마구잡이로 뽑는다. 그리고 나머지 512(2nd half)개는 앞선 512(1st half)의 주변을 둘러싸고 있는 8개 pixel에서 1개를 뽑아 만든다. 

왜 8개인지 모르겠으면 3x3 pixel 그리고 정중앙을 제외한 나머지를 상상해보면 된다. 

이렇게 만들면 i번째 point는 i+512번째 point와 인접하다고 볼 수 있다.  (local reflectance sparity의 대상이 된다는 뜻)

non-local reflectance sparity의 대상인 먼 pixel은, 완전 단순하게 그냥 512개(1st half)를 반으로 쪼갠 뒤, 첫 256개(1st quarter)와 두번째 256개(2nd quarter)가 그냥 서로 멀다고 했다. ;;

다시 말하면 1024개 point를 ((256), (256)), (512) 로 나눌 수 있는 것이다. 256 끼리는 멀다! 256+256 <=> 512 끼리는 가깝다! 

(이걸 어떻게 이해하냐 저자 놈아. 그림도 이해가 안간다)

---
shading smoothness는 비슷한 chromaticity면 shading이 비슷해야한다는 loss

intrinsic residual constraint는, 냅다 c=r*s+re 로 하면 c=re로 수렴할 가능성이 있다. 따라서 r과 s의 효과적인 학습을 위해 re를 최소로 하도록 억제하는 loss다.




이것도 이해하는데 한참 걸렸다. intensity면 shading에 걸어줘야 할 것 같은데 왜 reflectance의 norm에 거는가? 그 답은 다음과 같다.

shading이 폭발적으로 늘어나지 않고 1 언저리 값으로 수렴할 수 있도록 만들기 위해서 reflectance와 pixel intensity가 비슷하도록 loss를 걸어준다. 


3.2까지 추가한 loss를 통해 학습시켰을 때 결과값은 모든 ray 마다 각각 다른 reflectance를 갖게 된다. 사실 마구잡이로 다를 수도 있다. 

하지만 indoor scene에서는 reflectance가 중구난방으로 다를 경우가 적고 사실 상 몇몇 reflectance 정도면 충분히 기술이 가능하기 때문에 이를 다루기 위해 clustering을 넣었다. 

입력 이미지들의 pixel 별로 color를 이용해서 reflectance space를 만들고 거기서 cluster를 만든다. Mean shift로.




대충 이런 느낌인데, 입력 이미지로 만들어 둔 reflectance cluster안에서 네트워크가 reflectance 값을 예측해내도록 억제하는 loss를 추가했다.

디테일까지는 필요없을 것 같다. 컨셉만 이해할거면.
 



clustering까지 넣어서 reflectance가 중구난방으로 안 튀게 노력했는데 그래도 부족했나 뭘 또 넣었다. semantic label에 해당하는 영역만 계산을 했다 (입력으로 semantic segmentation이 필요하다는 얘기...)

이정도면 될 때까지 이것저것 아무거나 붙인 다음 이제 됐다 싶어서 논문 쓴게 아닐까...
ㅋㅋ loss 몇개임

loss 개수만 봐도 예상되는데 학습 엄청 어렵고, generalization 절대 안될 것 같다.
recoloring은 clustering을 통해 reflectance group이 형성되어 있을 텐데, 그 group을 다른 reflectance 값으로 치환해주면 된다.
반응형