논문리뷰 infoNeRF
낮은 few shot 성능이라는 basic NeRF의 한계점을 해결하기 위한 시도를 한 논문이다. 서울대에서 나온 논문인데 간만에 보는 한국에서 쓴 논문이라 반가웠다. 리뷰에 앞서 여담을 좀 하자면 굉장히 단순한 아이디어로 few shot 성능을 향상 시키고 CVPR까지 간 논문이라 많은 것을 느낄 수 있었다.
NeRF에 관한 리뷰글을 보고 오는 것을 추천한다.
Introduction
infoNeRF는 기존 NeRF에 few shot 성능을 높이기 위하여 고안된 모델이다. 요즘은 거의 모든 NeRF 모델들이 instant ngq를 기반으로 하지만 22년도에 발표된 논문이기 때문에 NeRF를 기반으로 하여 학습 시간은 느리다.
기본적인 모델의 아이디어를 요약하자면 기존 NeRF에 entropy term과 KL divergence loss term을 더해 few shot scene reconstruction이 가능하도록 해주는 모델이다.
InfoNeRF는 기존 few shot NeRF 와 다르게 uv map, depth map과 같은 추가적인 scene 정보가 필요하지 않고, 기존 NeRF에서 entropy term 과 KL divergence loss term만을 추가하면 되기 때문에 학습 속도 저하 또한 없이 scene reconstruction이 가능하다고 설명한다. 그렇가면 앞서 말한 두가지 term이 기존 NeRF에 어떠한 부분을 대체하는지 알아보자.
Few shot 성능에 대한 volumn rendering와 depth map 결과가 infoNeRF가 더욱 우수한 것을 확인할 수 있다.
Ray entropy
기존 NeRF에 ray opacity에 Shannon Entropy(정보 엔트로피)를 더해준다.
Shannon Entropy는 불확실성이 클 수록 더욱 큰 수가 나온다.
다시말해 물체에 가로막힌 point인지 그렇지 않은지가 불명확할 수록 큰 값이 나오게 된다.
따라서 해당값이 ϵ 이하라면 그 이후 point들은 학습하지 않는다.
수식을 통해 그 의미를 알아보겠다.
먼저 p(ri) 위와 같이 정의한다. 한 point에서의 투과도를 ray 상에 모든 투과도의 누적합으로 나눠준 결과이다.
H(r)는 Shannon entropy을 나타내는 식이다. 어떤한 사건에 발생 확률이 낮을수록 정보량이 더욱 크다.
여기까지 정리하여 보면 투과도 즉 opacity값은 0~1 사이의 값을 갖기 때문에 확률값이라 볼 수 있다. 해당 지점에 투명도가 낮을 수록 정보량을 클것이고, 불투명한 부분일수록 정보량은 적을 것이다. 따라서 해당 값이 작아 지도록 학습하면 적합한 point의 위치를 찾는데 도움을 줄 수 있다.
다만 ray 가 아무 물체도 hit 하지않는다면 p식의 분모가 작아지기 때문에 낮은 정보량를 갖는다.
따라서 아래와 같은 별도 과정을 추가해주어 물체를 지나는지 확인한다.
ray 상에 물체가 존재하는지 판단하기 위해 투과도에 누적합을 사용하며 이를 Q(r)로 정의한다.
Q(r)을 통해 얻은 값이 ϵ이하의 entropy의 누적합을 갖는다면
물체를 지나는 ray가 아니라고 판단된다면 학습을 진행하지 않는다.
앞서 구한 함수들을 이용하여 위와 같은 loss function을 정의 한다
KL divergence
마지막으로 ray entropy를 사용할 경우 few shot image에 overfitting되는 이슈가 있다고 한다. 따라서 약간의 불확실성을 주기 위해 KL divergence의 개념을 추가한다. -5~5 도 정도 벗어난 ray와 원본 ray를 이용하여 둘 사이 KL divergence를 최소화하는 loss term을 더해준다. (두 분포 사이를 계산하는 수치) 즉, 기존 NeRF 에 input으로 들어가던 (θ,ϕ) 값을 -5~+5도 정도 조절하여 넣어준 것이다.
개인적인 해석을 한번 해보자면 약간의 데이터 증강 강제적으로 오차를 주는 과정 진행하여 overfitting을 해결한것 같다. 비슷한 시도를 머신러닝 알고리즘에서 본것이 있던것 같다. 해당 방법이 좋은 방법이라고 생각되지는 않지만, NeRF에 경우 positional encoding을 거치기 때문에 저러한 variation 주어도 학습결과를 망치지 않고 overfitting을 방지하는게 아닐까 생각한다.
앞서 설명한 각정 loss function을 이용하여 최종적인 loss function을 정의한다. 각 loss 대한 weighted sum 을 진행한다.
정말 간단하지만 위 내용이 InfoNeRF에 전부이다. 아이디어는 간단하지만 내용은 수학적인 내용이 많아 쉽지만은 않다.
loss function을 잘 설계한 것 많으로 이전 모델을 상당히 개선한 모습이 인상적이다. 아직 공부가 부족해 InfoNeRF의 loss term이 이후 NeRF 모델에 basic하게 적용되는지는 모르겠지만, 실제 코드를 돌려본 결과 custom dataset에 대해 각종 파라미터에 매우 민감한 것 같다.
Reference
궁금한 점이 있다면 남겨주세요! 함께 고민해 보겠습니다.
Gitalking ...