반응형
내 맘대로 Introduction
알고리즘적 개선이 아닌 파이프라인 논문. NeRF + diff.renderer를 이용한 refinement를 붙여서 품질 좋은 mesh를 얻어내는 파이프라인을 만들고 그 속도를 최대한 가속한 논문. 최종 출력이 Blender나 unity 같은 상용툴에 입력으로 쓰일 수 있는 OBJ 같은 형태.
상용툴에서 색상을 diffuse + specular로 분리해서 다루므로 논문에서도 diffuse, specular로 색깔을 나누어 다루었을 뿐 나머지는 전부 기존 논문들과 같다. 가져다 쓴 조합형 논문. 가속화하고 구현해낸 것에 의의가 있음.
메모
총 2 stage 1) stage1 - grid-based NeRF로 빠르게 coarse geometry + appearance 복원 2) stage2 - mesh vertex마다 offset 주고 diff.rendering으로 최적화 반복 - color도 같이 최적화함. |
|
stage1 grid based NeRF 학습함. 그냥 MLP 아니고 voxel grid feature를 뽑아내는 방식 (속도 이슈 때문에 그런 것, InstantNGP 활용 때문 같기도.) 참고할 점은 activation function을 exponential activation 쓴 점. 이걸 쓰면 sharp surface modeling에 도움된다고 함. color는 diffuse, specular network 분리함 diffuse 먼저 추정 -> diffuse+feature로부터 specular 추정 후자의 specular용 MLP2는 나중에 최종 출력에 같이 포함됨.(specular color를 Blender 나 unity에 넣어주려면 SH 여야하는데 그게 안되니까 MLP를 같이 끼워 출력) |
|
loss는 NeRF loss 그대로가 핵심 대신 specular color는 diffuse 위에 쌓는 개념이므로 0으로 regularization 가하면서 diffuse가 먼저 학습될 수 있도록 함 sharp surface에 신경 많이 쓰는 느낌인데 per-point rendering weight (alpha compositing할 때 alpha)가 0 아니면 1로 극단적이도록 유도하는 loss를 추가함. smoothing된 surface를 억제하는 regularization. |
|
뒤에 따라붙는 stage 2, diff.rendering을 이용한 최적화 먼저 color per-point color는 NeRF에서 찾아낼 수 있음. 따라서 vertex color를 찾은 뒤, diff.rendering 수행 -> color loss 수식(6) 그대로 사용해서 업데이트. |
geometry는 per-vertex offset을 최적화하는 방식. vertex 수랑 face 구성을 그대로 하고 위치만 바꾸면 표현력이 부족할 수 있으므로 vertex 증가/감소가 가능하도록 하고 매번 face 정의를 새로하는 adaptive control 추가 face 별로 reprojection error 계산, 높은 순으로 정렬 하위 5% (error 최소)는 face subdivision으로 증가 상위 50%는 삭제 vertex의 증식과 삭제를 반복하고, 매번 per-vertex offset을 0으로 초기화하고 face를 다시 정의하면서 최적화를 반복함. |
복원 공간이 object centric이면 큰 상관없지만 열린 공간이면 장거리 영역에 대한 처리가 들어가야 메모리/속도 이슈가 없음. 따라서 InstangeNGP의 규칙을 따라 복원 공간을 나누고, 장거리 영역이라면 해상도를 낮춰서 관리함. marching cube든 뭐든. |
핵심은 rendering loss(color)로 모든게 refinement되도록 하는건데 추가로 vertex를 움직이는 것이다보니 laplacian smoothing loss 추가. |
coarse-to-fine 전부 다 복원되고 나면 1) mesh unwrapping -> texture UV map 획득 - diffuse, specular 2개를 얻음 2) specular의 경우, MLP2( view-dependent specular color 예측용)을 같이 envelope해서 상용툴 fragement shader 안에 넣어버려야함. (추가 구현이 필요하단 소리) |
|
512x512x512로 초기화하고 refinement 돌리는 식 대충 3만번 정도 돌리면 충분하다고 함. |
NeuS도 충분히 좋은데 너무 dense한게 문제라고 함. ㅇㅈ |
|
|
한계는 반투명이나 털, 반짝이는 것들 (당연히 안되는 것들) |
반응형