오랜만에 쓰는 NeRF 논문 리뷰 

CVPR 2025 NeRF 논문 리뷰 

논문 링크: https://arxiv.org/pdf/2410.16271

프로젝트 페이지: https://linjohnss.github.io/frugalnerf/

코드는 아직 미공개

 


 

Main Figure 

 

Over all Comments 

2장의 input으로도 빠른 학습과 좋은 성능을 동시에 달성

기존의 few-shot 논문들이 쓰는 여러가지 방법(Frequeuncy regularization, voxel grid, external prior) 등을 

적절히 활용하여 상호보완한 논문 

 

여전히 depth-prior(Ld)를 쓴다는 단점은 있고 학습의 복잡도를 아주 해결하지는 못했지만

복잡하다 =/= 나쁘다 이니 괜찮은 결과를 냈으니 Good.

그리고 모델을 엄청 타는 방법들도 아니라서 fexlible하다고 생각 

 

 

 

 

아래는 논문 요약 

의견은 회색 글씨 또는 (괄호)에 작성

그 외의 대부분의 내용은 논문에서 발췌 


Abs

눈에 띄는 점은 Abs 완전 초반부터 특정 논문을 언급하면서 해당 논문들과 비교할 것임을 명시한다. 

: ~~ FreeNeRF and SparseNeRF, use frequency regularization or pre-trained priors but struggle with complex scheduling and bias.

 

보통 few-shot NVS 계열들은 pre-trained prior가 필요하기 마련인데 

Abs만 봤을때는 이런 prior 없이도 잘 작동하고 별도의 복잡한 학습 테크닉도 없는 것으로 보인다 

(but, figure를 봤을 땐 depth prior가 있는 버전, 없는 버전으로 두가지가 존재하는 것 같다)

 

* leverages weight-sharing voxels across multiple scales

* cross-scale geometric adaptation scheme that selects pseudo ground truth depth based on reprojection errors across scales.

 

그 외 논문에서 명시하는 main contribution은 두 가지 

weight-sharing voxel이라는 특이한 개념과 cross-scale geometric adaption을 사용한다.

 

 

Intro

 

 

기존 방법들 a,b,c는 각각의 단점이 있다 

(a) 대표적으로 FreeNeRF : 학습이 오래 걸림 

(b) 다양한 scene에 잘되진 않음 

(c) Pre-trained 된 prior 의존성이 높음 

(-> 본인도 Pseudo GT를 쓰기 때문에 c에 대한 ablation이 있는지 확인 필요)

 

=> FrugalNeRF는 이 모든 방법들을 결합하여 빠른 수렴과 동시에 높은 퀄리티를 달성 

 

* The most accurate scale becomes the pseudoground truth and guides the training across scales, thus eliminating the need for complex voxel upsampling schedules and enhancing generalizability across diverse scenes.

: Abs에서 언급했던 adaptation scheme에 대한 힌트를 살짝 준다 

다양한 scale의 voxel grid를 사용해서 학습을 하되, 가장 reprojection error가 적은 scale이 pseudo GT가 되어 다른 두 scale의 학습을 주도한다. 단순한 sensitivity 기반의 방법으로 complex한 scheduling의 필요성을 줄여준다. 

 

 

Methods

3.2 Overview of FrugalNeRF

The key feature is hierarchical subsampling with weight-sharing multi-scale voxels, ~ (Sec. 3.3).

To prevent overfitting in extreme few-shot scenarios, we apply geometric adaptation for regularization (Sec. 3.4),

along with novel view sampling and additional regularization losses to reduce artifacts (Sec. 3.5).

 

Related works에서 언급했던, voxel 구조가 일반적으로 갖는 overfitting 이슈를 해결하기 위해 

geometry adaptation을 사용했고, 추가적으로 novel view sampling과 regularization loss를 적용했다는 스토리 

 

 

 

 

 

3.3 Weight-Sharing Multi-Scale Voxels

FreeNeRF에서 사용했던 frequency regularization과 동일한 아이디어로,

lower resolution voxel이 전체적인 특성을 잡고 higher resolution voxel이 fine detail을 잡아주는 역할 

 

특이한 점은 FreeNeRF처럼 순차적으로 학습하는 것이 아니라 

Higher resolution voxel을 뽑아서 downsampling 으로 Lower resolution voxel을 만든다. (= weight-sharing)

이렇게 함으로써 geometry consistency를 유지할 수 있다고 함 

추가적으로 model size나 memory size를 추가적으로 사용하지 않아도 됨 

(그러나 향후 loss를 보면 각 scale별로 loss를 계산하기 때문에 코드를 봐야겠지만 memory 추가가 제로는 아닐듯)

 

loss는 각 크기의 voxel에서 각각 rendering 한 후 각 scale의 이미지에서 나온 loss를 전부 더해서 학습 

l은 각 voxel의 scale level

 

 

3.4 Cross-scale geometric adaptation

cross-scale geometric adaptation은 few-shot scenarios의 한계를 GT depth data없이 해결하기 위해 도입한 방법

3.3에서 설명하듯이 다양한 scale의 voxel을 사용하게 되면 optimal scale을 찾는 것이 essential하기 때문 

 

train view i 에서 각 voxel scale에 대해 depth 값을 계산 한 후 

인접 view인 j에 i에서 계산한 RGB 값을 warping한다. 

이를 실제 j의 RGB와 MSE 계산을 해서 그 error가 가장 적은 scale을 pseudo GT로 선정

pseudo GT scale의 Depth에 맞춰서 타 scale의 Depth를 학습한다 (eq(9)) 

 

 

개념적으로 설명하면 어느 정도 학습을 한 뒤, depth값을 계산해서 인근 view로 projection을 해보고 (일종의 validation view)

NeRF의 최종 loss은 color MSE loss가 가장 낮게 나오는 scale을 GT로 삼아서 나머지의 scale의 Depth를 학습시킨다는 것

 

특이한 점은 novel view과 train view (= train view i와 novel view j) 모두 해당 depth loss를 적용한다 

\

(albation을 보니까 Lgeo랑 후술할 Ld를 둘다 안쓴 실험이 없는 것 같은데 이 부분은 좀 마이너스다 

section 3.4라는 중요한 위치를 내어준 것 치고는 ablation이 완벽히 변인통제된 것 같진 않다)

모쪼록 아래 Figure6를 보면 효과는 확실히 알 수 있다 

depth 관련 loss다 보니 확실히 PSNR등 보다는 depth map에서 그 효과가 확실히 보인다 

 

 

3.6 Total Loss 

추가적으로 Lreg, Lsd, Ld를 사용함 (Ld는 depth prior loss로 선택적으로 적용)

 

 

Experiments

Eval: ViP-NeRF와 동일한 방법을 사용 

공부 참고자료: https://gaussian37.github.io/ml-concept-t_sne/

 

t-SNE 개념과 사용법

gaussian37's blog

gaussian37.github.io

 

위 글로 공부하면서 내가 필요한 포인트만 정리:

t-분포는 소표본으로 모평균을 추정하는 분포로, 

모집단이 정규분포와 유사하나, 모표준편차를 모를때 주로 사용한다 

 

일반적으로 정규분포보다 큰 표준편차를 갖는다고 가정하는데, 

이는  정규분포 상에서는 i 번째 변수와 적당히 떨어진 j, 멀리 떨어진 k의 확률이 꼬리로 갈수록 차이가 나지 않기 때문이다.

큰 표준편차를 갖는(=꼬리가 두터운) 분포를 가정하면 변수끼리의 거리가 확률의 차이에 반영된다. 

 

 

 

 

t-sne는 비선형적 방법 / PCA는 선형적 방법이다 

t-sne는 iterative한 방법으로 feature 집단을 계산하고 sklearn을 이용하는 방법은 아래 매뉴얼을 따라하면 된다

https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html 

'딥러닝 공부 > 짧은 AI' 카테고리의 다른 글

어쩌다보니 공부한 domain adaptation  (0) 2023.01.09
Representation Learning  (0) 2022.08.18

Lecture: Computer Vision by Andreas Geiger 

본 게시글은 아래 링크의 Andreas Geiger 교수님의 튀빙겐 대학의 CV 강의를 듣고 사견과 함께 요약/정리한 글입니다 

https://www.youtube.com/playlist?list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_ 

 

Computer Vision — Andreas Geiger

Lecture: Computer Vision (Prof. Andreas Geiger, University of Tübingen) Course Website with Slides, Lecture Notes, Problems and Solutions: https://uni-tuebin...

www.youtube.com


Artificial Intelligence

: AI란 추상화과 컨셉화를 통해 사람에게 주어진 문제를 해결(또는 해결 보조)하려는 시도이다. 

아래와 같은 세부 분화들을 포함하고 있다. 

https://www.youtube.com/watch?v=mQgjfvjjW3Q&list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_&index=2

 

Computer Vision

: Computer Vision은 light를 의미로 재구성하는 것이다 

그 응용으로는 Robotics, Medial applications, 3D modeling, Autonomous Driving 등이 있다 

 

Computer Vision vs Computer Graphics

Computer Vision vs Image Processing

: IP에 CV가 관여하기도 한다. IP는 본 강의의 주요 범위는 아님

Computer Vision vs Machine Learning

: ML의 많은 툴들이 CV에 적용되고 있으며

ML이 CV의 실행 시간을 많이 줄여주었기 때문에 CV가 상업적으로 성공할 수 있었던 요인중 하나이다. 

특히 2015년 ImageNet Classification Challenge에서 ResNet이 

사람의 오차범위를 넘는 성능을 보여주면서 CV의 전반에 ML이 자리잡았다

 

https://www.youtube.com/watch?v=mQgjfvjjW3Q&list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_&index=2

 

 

Why is Visual Perception Hard?

: 우리가 사진을 보는 방식과 컴퓨터가 사진을 보는 방식이 다르다

같은 사진을 0~255 사이의 픽셀값으로 본다면 의미를 찾는 것이 더 어렵다. 

 

또한 이미지는 3D 세상의 Projection이고, 그 과정에서 소실되는 정보가 있다

(사족: 그러한 소실되는 정보에 대해 추상화가 가능한 사람은 의미를 파악하는게 쉽지만,

Machine은 그러한 추상화를 할 수 없다.)

또한 View point와 illumination 등에 따라 물체의 pixel이 바뀐다. 

같은 의자라도 다양한 모양을 갖기 때문에 추상화가 더더욱 필요하다

'딥러닝 공부 > 주제별 정리' 카테고리의 다른 글

[CV] 1.1 Introduction - Organization  (0) 2023.08.20

Lecture: Computer Vision by Andreas Geiger 

본 게시글은 아래 링크의 Andreas Geiger 교수님의 튀빙겐 대학의 CV 강의를 듣고 사견과 함께 정리한 글입니다 

https://www.youtube.com/playlist?list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_ 

 

Computer Vision — Andreas Geiger

Lecture: Computer Vision (Prof. Andreas Geiger, University of Tübingen) Course Website with Slides, Lecture Notes, Problems and Solutions: https://uni-tuebin...

www.youtube.com

 


Computer Vision이란 무엇인가? 

: 사람의 인지 능력을 machine으로 구현하려는 시도이며, light(이미지)를 의미로 재해석하는 방법이다. 

 

예를 들어, 2D-3D의 예시를 들었을 때 아래와 같이 unconstrained된 이미지의 모음을 

재해석하고 조립하여  새로운 view와 새로운 appearance의 이미지를 생성할 수 있다. 

 

https://www.youtube.com/watch?v=YW1cIaOBkI8&list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_&index=1

 

 

'딥러닝 공부 > 주제별 정리' 카테고리의 다른 글

[CV] 1.2 Introduction  (0) 2023.08.20

상황: 현재 AI 이용한 손글씨 인식 챌린지를 참여중인데 (순위가 out of domain,,,)  train test set의 domain이 다른게 

결국 문제인 것 같아 간단하게 domain adaptation 공부하면서 요약 중

상황: test set(=target domain)은 이미지만 있고 label은 없는 상황

validation  set accu는 97%인데 test set accu는 82% (ㅜㅜ)

 

* domain adaptation은 결국 transfer learning의 한 종류이다

 

* target domain의 labeling에 따라 4가지 종류로 나눌 수 있다

  1. Supervised DA
  2. Semi-Supervised DA
  3. Weakly Supervised DA
  4. Unsupervised DA

=> 그중 내 setting 은 4번

 

Unsupervised Domain Adaptation by Backpropagation(2015)

: backprop의 구조만 약간 바꿈

'딥러닝 공부 > 짧은 AI' 카테고리의 다른 글

t-sne 요약  (0) 2023.09.10
Representation Learning  (0) 2022.08.18

https://89douner.tistory.com/339

 

1. Representation Learning 이란?

안녕하세요. 이번글에서는 representation learning이라는 개념에 대해서 설명하려고 합니다. 개인적으로 2021년 동안 논문을 살펴보면서 가장 눈에 많이 띄었던 용어가 representation learning 이었습니다.

89douner.tistory.com

Representation Learning을 공부하면서 위 블로그 글을 일부 참고하여 작성하였습니다. 

스스로 다시 공부할 때 5-10분내로 복습하는 것을 목표로 했기 때문에 최대한 간소화하여 적었습니다


Representaion Learning이 뭔지 알기위해서는 먼저 Representation의 개념부터 잡아야한다 

https://www.deeplearningbook.org/contents/representation.html

 

https://www.deeplearningbook.org/contents/representation.html

 

www.deeplearningbook.org

먼저 Deep Learning 교과서에는 이런 구절이 있다. 

"Many Information processing tasks can be very eay or very difficult depending on how the information is represented"

: 정보처리과정은 그 정보를 어떻게 표현하는 지에 따라 매우 쉬울수도, 매우 어려워질수도 있다. 

 

여기서 느낄 수 있듯이 representation이란 결국 어떠한 task를 위해 input을 잘 가공하는 것을 의미한다.

 => CNN기반의 deep learning network도 해당 task를 잘 수행하기 위한 feature를 뽑아내는 과정으로 볼 수 있다.

예를 들어 softmax classifier를 사용하는 모델은 이에 맞게 잘 표현할(=representation) feature를 뽑아낼 것이다. 

 

단순하게 비유하자면 classifier로 학습된 model에서 뽑은 feature는 classify를 위한 representation이기 때문에

이를 segmentor의 input으로 넣는다고 잘 작동하지 않을 것이라는 사실과 비슷하다. 

 


여기까지 무슨소린지는 알겠는데, 내가 궁금했던 것은

그래서 굳이 "Representation Learning이라는 점이 pre-training과 다른점이 무엇인가"이다

=> 보통 Representation Learning은 Unsupervised Learning에서 많이 사용하는 듯하다.  

(혹은 pretraining도 Representation Learning의 범주 안에 속한다고 봐야하나? )

VAE같이 explicit한 distribution을 따르도록 학습시키는 경우를 그 예시로 들 수 있다. 

VAE의 경우 normal distribution이 인풋이미지를 가공하여 만든 new representaion이 되는 것이다. 

 


 

예시를 들면 조금 더 이해하기가 쉬운데, CLIP이 좋은 예시가 된다. 

 

 

 

최종 목표는 zero-shot prediction을 위한 pretraining이기 때문에 

이를 잘표현할 수 있는 방식으로 text encoder와 image encoder가같은 도메인의 feature를 표현할 수 있게 학습을 유도하는 것이다. 이것이 representation learning의 한 종류로 볼 수 있다. 

 

=> meta-learning은 이와 달리 few shot task를 잘하기 위한 스킬적인 측면이라고 볼 수 있다.

학습의 결과물이 fewshot을 잘 할수있는 domain을 학습시키는 것이 아니라

스킬적인 측면에서 gradient update를 few-shot 시나리오에 맞춰해주는 것이라 차이가 있다. 

'딥러닝 공부 > 짧은 AI' 카테고리의 다른 글

t-sne 요약  (0) 2023.09.10
어쩌다보니 공부한 domain adaptation  (0) 2023.01.09

 

위 그림은 유명한 generative model 도식.

의외로 처음 GAN을 가르칠때는 대부분 스킵하지만 

공부할 수록 정말 공부할게 많은 그림이라고 생각이 든다. 

 

-----------------------------------------------------------------------------------

 

첫번째 분류인 Explicit / Implicit 구분은 명시적으로 어떠한 분포를 적고 모델링하느냐 아니냐의 차이

Explicit : 명시적으로 어떠한 확률 분포를 정해서 분석 (수식으로 분포를 정의할 수 있는 경우 )

Implicit : 명시적으로 확률 분포를 정하지 않고 모델링 (ex. GAN, NeRF)

 

Explicit의 두 갈래 중 

Tractable : 식을 적당하게 풀 수 있는 선에서 작성하되, 그 풀이는 명확하게

Approximate : 식은 정확하게 쓰되, 그 풀이가 간단하지 않으니 대체 식을 사용해서 풀이를 적당히 우회 

 

 

Generative model을 공부하기 위한 초석

 

머신러닝은 Probability Density를 찾기 위한 과정이다.

예를 들어 Classification 모델의 결과물은 입력 이미지가 각 Class에 해당할 확률을 의미한다.

모델의 출력물을 확률로 해석하도록 학습하거나, 모델의 출력물이 확률 분포를 담을 수 있도록 수식을 설계하는 것  

 

Generative model도 결국 random성을 가진  noise가 들어가서
train data의 분포를 닮은 inference image가 나오는 것 처럼 언뜻 생각되지만,
그건 inference 과정에서의 해석이고 

train 과정을 잘 살펴보면 train data의 집합이 들어가서 distribution을 출력하도록 학습이 된다. 

 

Prior vs Posterior

Prior는 말그대로 사전확률.

어떠한 사건이 관측되기 전에 선험적으로 알고 있는 확률이다.  EX) P(A)

Posterior는 어떠한 사건이 관측되고 나서 업데이트된 확률이다.  EX) P(A|B) : B라는 사건이 관측되고 나서의 A의 확률

 

 

 

위와 같은 식에서 P(A)는 사전 확률, P(B|A)는 likelihood, P(A|B)는 posterior 확률이다. 

 

따라서 Posterior ∝ likelihood * prior라는 식을 얻을 수 있다. (P(B)도 하나의 사전확률로 고정이니까)

 

 

이러한 분포를 추정하는 방법에서는 Maximum Likelihood와 Maximum a Posterior 방식 두가지가 있다.

prior는 구할 수가 없으니, likelighood를 구해서 가장 높은 모델을 고르거나

Posterior가 가장 높아지는 모델을 고르거나 하는 상황이다. 

 

경험적으로 Maximum likelihood의 결과가 더 좋다고 알려져있다. 

 

따라서 초창기의 GAN을 비롯한 VAE등의 generative model 들은 Maximum likelihood를 loss로 사용한다 

 

 

'딥러닝 공부 > Generatives' 카테고리의 다른 글

03. Generative model 분류  (0) 2022.02.16
01. GAN의 성능지표 비교 설명 - IS vs FID  (0) 2022.02.04
[GAN] Intro - GAN이란?  (0) 2020.11.10

+ Recent posts