아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.
읽은 논문들 정리
[목차]지속적으로 업데이트 중, 번호는 모델발전 순서가 아닌 읽은 순서에 따라 정렬.1. Computer Vision 분야 논문Classification 모델들의 발전Detection 모델들의 발전Segmentation3D 처리2. Natural Language Process
april2901.tistory.com
이전에 알아봤었던 NeRF의 단점을 보완하기 위해 나온 논문이다.
그럼 NeRF의 단점이 뭔지 간략히 알아보자.
NeRF는 선(ray)를 쏴서 렌더링을 한다.
학습된 거리에서는 좋지만 만약 멀리있는 곳의 이미지를 그려야할 때는 문제가 발생할 수 있다.
그 중 하나가 앨리어싱(aliasing)이다.
한국어로 하면 계단현상 정도로 표현할 수 있다.
아래 그림을 보면 이해하기 쉬울것이다.
한 픽셀이 감당하는 이미지는 거리가 멀어질수록 넓어진다.
이럴 때는 해당 픽셀이 이 넓은 지역의 평균적인 정보를 담아야하는데, NeRF는 굵기가 없는 선을 사용하기 때문에 아주 좁은 지점의 색을 가져오게 된다.
반대로 너무 가까운 곳을 보려고 할 때도 문제가 발생한다.
사람이 초점이 맞지 않는 것처럼 뿌옇게 되는 현상이 생긴다.

Mip-NeRF는 이를 선이 아닌 원뿔을 사용하므로써 해결했다.
NeRF 복습
선에서 원뽈로 도구를 바꾸면서 기존 NeRF의 PE, Positional Encoding에 해당하는 개념인 IPE, Integrated Positional Encoding을 만들었다.
논문에서도 2.1절에 따로 NeRF복습 코너를 만들어놓았듯이 NeRF에서 나온 내용들을 좀 알아야 수월하게 읽히기 때문에 조금 내용정리를 해보자.
NeRF 논문 자체에 대한 리뷰 글은 아래를 클릭하면 볼 수 있다.
[CV 논문] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.읽은 논문들 정리 읽은 논문들 정리[목차]지속적으로 업데이트 중, 번호는 모델발전 순서가 아닌 읽은 순
april2901.tistory.com
먼저 $r(t) = o + td$라는 식은 카메라의 중심 $o$에서 $d$방향으로 광선을 쏘는 것을 의미한다.
$t$의 값으로 거리를 조절한다.

점의 좌표를 나타낼 때 단순히 3차원으로 나타내지 않고 변화를 더 잘 탐지할 수 있게 PE, Positional Encoding를 통해 차원 수를 늘린다.
3차원 좌표 $x$를 PE하는 식은 아래와 같다.
$$\gamma(x) = [\sin(x), \cos(x), \dots, \sin(2^{L-1}x), \cos(2^{L-1}x)]^T$$
$L$은 사람이 결정하는 하이퍼파라미터이다.
어떤 점 $t_k$가 있을 때 이 점의 색상과 밀도를 정하기 위해 MLP를 사용한다.
밀도는 $\tau_k$, 색상은 $c_k$로 표시하자.
$$[\tau_k, c_k] = MLP(\gamma(r(t_k)); \Theta)$$
이제 한 광선에 대해 그 위의 점들의 색상과 밀도를 통합해 특정각도에서 특정위치를 바라봤을 때의 픽셀 정보를 산출한다.$$C(r; \Theta, t) = \sum_{k} T_k (1 - \exp(-\tau_k(t_{k+1} - t_k))) c_k$$
원래는 적분을 해야하지만 컴퓨터는 적분할 수 없으므로 이산 합으로 바꿔 계산을 했었다.
위 식에서 $T_k$는 투과도를 얘기한다.
광선이 그 점까지 가면서 얼마나 가려지지 않았는지를 얘기한다.
광선에서 점을 균등하게 뽑아서 더하는 것보다 물체가 놓여있는 핵심 지역에 많은 점을 배치해 계산하는 것이 더 정확할 것이다.
그래서 Coarse, Fine이라는 두 개의 MLP를 사용한다.
먼저 Coarse MLP는 광선을 균등하게 나눠서 각 구간에서 점을 하나씩 뽑는다.
이를 통해 대략적으로 물체가 어디있는지 파악한다.
Fine MLP는 이 정보를 바탕으로 물체가 있을 것이라고 예상되는 지점에 더 많은 점을 배치한다.
최종적으로 이 두 모델에서 나온 샘플을 모두 합쳐서 계산을 한다.
$$L = \sum_{r \in \mathcal{R}} \left[ \| C^*(r) - C(r; \Theta^c, t^c) \|_2^2 + \| C^*(r) - C(r; \Theta^f, t^f) \|_2^2 \right]$$
Mip-NeRF
위에서 얘기했듯 크기가 없는 광선을 쏘는 대신 픽셀의 크기를 고려한 원뿔을 캐스팅한다.
NeRF에서는 점들을 샘플링했지만, Mip-NeRF는 원뿔 Frustum을 샘플링한다.
이 Frustum은 뿔 종류에 대해 밑면과 평행하게 잘라는 밑부분을 가리키는 용어이다.
한국어로는 뿔대 정도라고 생각하면 된다.

이제 이를 수학적으로 모델링하고 계산해보자.
$o$ : 카메라의 중심, 툭히 Mip-NeRF에서는 원뿔의 꼭짓점이라고도 볼 수 있다.
$d$ : 원뿔을 쏘는 방향.
$x$ : 점의 좌표
$F$ : 특정 원뿔대에 속한 점 $x$들의 집합.
$t_k$ : 중심선($d$)을 따라 이동한 거리 (NeRF)와 동일.
$\dot{r}$ : 이미지 평면에서의 원뿔의 반경.
이때 값을 단순히 픽셀 안에 내접하도록 설정하는 것은 아니다.
픽셀의 너비에 $2/\sqrt(12)$를 곱해 설정한다.
이렇게 하는 이유는 픽셀의 분산과 원의 분산을 동일하게 맞추기 위해서이다.
픽셀의 한 변이 $w$이면 uniform을 가정했을 때 분산은 $\frac{w^2}{12}$이고,
원의 분산은 $\frac{r^2}{4}$이다.
이 두 값이 같다고 하고 식을 정리하면 위와 같은 식이 나온다.
특정 구간 $[t_0, t_1]$ 사이의 원뿔대 내부에 있는 점 $x$의 집합 $F$는 다음과 같이 정의된다.
$$F(x, o, d, \dot{r}, t_0, t_1) = \mathbb{1} \left\{ (t_0 < \frac{d^T(x-o)}{\|d\|_2^2} < t_1) \wedge (\frac{d^T(x-o)}{\|d\|_2 \|x-o\|_2} > \frac{1}{\sqrt{1+(\dot{r}/\|d\|_2)^2}}) \right\}$$
\mathbb{1} \left\{ \right\}라는 것은 { } 안의 내용이 만족되면 1을, 아니라면 0을 내뱉는 함수이다.
이 안의 내용을 보면, $\wedge$으로 연결되어 있다.
이를 기준으로 앞부분은 x를 뿔의 중심축에 내렸을 때 해당 범위($[t_0,t_1]$)에 있는지를 판별하고,
뒷부분은 원뿔의 범위안에 있는지(중심축으로부터의 각도)를 판별한다.
$$\gamma^*(o, d, \dot{r}, t_0, t_1) = \frac{\int \gamma(x) F(x, \cdot) dx}{\int F(x, \cdot) dx}$$
이 식은 원뿔대 내부의 모든 점에 대한 PE의 기대값이다.
$\gamma(x)$는 점 $x$를 위치 인코딩을 통해 변환시킨 값이다.
$F$를 곱해 모두 더한 값을 $F$를 모두 더한 값으로 나누기 때문에 이 점들의 위치 인코딩의 평균을 구할 수 있다.
수학적으로는 이렇다.
하지만 위 적분을 계산할 수가 없기 때문에 Multivariate Gaussian Approximation를 사용해 원뿔대를 근사한다.
이 $F$의 평균과 분산을 구해보자.
먼저 표현의 편의를 위해 두 가지 변수를 만들자.
$t_{\mu} = (t_0+t_1)/2 , t_\delta = (t_1-t_0)/2$이다.
의미는 각각 광선방향 기준으로 원뿔의 중간 좌표, 원뿔대 높이(길이)의 반을 의미한다.
이를 이용해 광선 방향의 평균거리와 분산, 광선 수직 방향의 분산을 구하면 아래와 같다.
대학교 수준의 미적분을 할 수 있다면 구할 수 있지만 아래 링크의 파일에 잘 정리되어있으니 궁금한 사람은 보면 좋을 듯 하다.
광선 방향의 평균 거리: $\mu_t = t_\mu + \frac{2t_\mu t_\delta^2}{3t_\mu^2 + t_\delta^2}$
광선 방향의 분산: $\sigma_t^2 = \frac{t_\delta^2}{3} - \frac{4t_\delta^4(12t_\mu^2 - t_\delta^2)}{15(3t_\mu^2 + t_\delta^2)^2}$
광선 수직 방향의 분산: $\sigma_r^2 = \dot{r}^2 \left( \frac{t_\mu^2}{4} + \frac{5t_\delta^2}{12} - \frac{4t_\delta^4}{15(3t_\mu^2 + t_\delta^2)} \right)$
이 값들은 광선 방향을 축으로 잡고 계산한 값이므로 이를 월드좌표계로 변환하면,
원뿔대의 평균과 공분산을 얻을 수 있다.
$$\mu = o + \mu_t d, \quad \Sigma = \sigma_t^2(dd^T) + \sigma_r^2(I - \frac{dd^T}{\|d\|_2^2})$$
위치 인코딩 $\gamma (x)$은 sin과 cos의 조합이었다.
$$\gamma(x) = [\sin(x), \cos(x), \dots, \sin(2^{L-1}x), \cos(2^{L-1}x)]^T$$
이를 아래처럼 바꿀 수 있다.
$$P = \begin{bmatrix} 1 & 0 & 0 & 2 & 0 & 0 & \dots & 2^{L-1} & 0 & 0 \\ 0 & 1 & 0 & 0 & 2 & 0 & \dots & 0 & 2^{L-1} & 0 \\ 0 & 0 & 1 & 0 & 0 & 2 & \dots & 0 & 0 & 2^{L-1} \end{bmatrix}^T \quad$$
3차원 좌표 $x$에 대해 $Px$를 계산해보면 위와 같다는 것을 확인할 수 있다.
NeRF에서 PE를 했듯이 이 $P$행렬을 사용해 Mip-NeRF에서 IPE를 해보자.
$\mu_\gamma = P \mu$
$\Sigma_\gamma = P \Sigma P^T$
먼저 수학적으로 정규분포를 따라는 변수에 대한 sin,cos함수의 기댓값은 아래처럼 구해져있다.
$$E_{x \sim \mathcal{N}(\mu, \sigma^2)}[\sin(x)] = \sin(\mu) \exp(-(1/2)\sigma^2) \quad$$
$$E_{x \sim \mathcal{N}(\mu, \sigma^2)}[\cos(x)] = \cos(\mu) \exp(-(1/2)\sigma^2) \quad$$
이 식들에 우리가 구한값을 넣으면된다.
$$\gamma(\mu, \Sigma) = \begin{bmatrix} \sin(\mu_\gamma) \circ \exp(-(1/2)\text{diag}(\Sigma_\gamma)) \\ \cos(\mu_\gamma) \circ \exp(-(1/2)\text{diag}(\Sigma_\gamma)) \end{bmatrix} \quad$$
이때 보통 $L=16$을 사용하므로 전체 인코딩변환 후에는 96x1의 차원을 갖는 벡터가 나오게된다.
아키텍처
기존 NeRF는 Coarse와 Fine 두 개의 MLP가 있었다.
Mip-NeRF에서는 이를 하나로 줄여 연산량을 반절 가량으로 줄일 수 있었다.
NeRF는 점을 입력으로 받았기 때문에 점 정보만 가지고는 이게 얼마나 멀리 떨어져있는 것인지 몰랐다.
하지만 Mip-NeRF는 분산 자체가 식에 들어가기 때문에 얼마나 멀리있는 대상인지를 알 수 있다.
IPE수식에서 의미를 보자면, 분산이 커지면 고주파 성분의 값이 지수함수 스케일로 줄어드는 것을 볼 수 있다.
따라서 MLP 입장에서 지금 처리 중인 데이터에서 고주파 성분이 0에 가깝다면 알아서 멀리있는 대상을 처리하는 중이라는 것을 알 수 있는 것이다.
NeRF에서 쓰이던 계층적 샘플링 전략은 그대로 사용된다.
다만 MLP가 하나로 줄어들었으므로,
일단 균등하게 구간을 잘라 대략적인 밀도를 파악 후 중요한 구간은 추가로 쪼개서 똑같은 MLP를 통해 더 정밀하게 계산한다.
손실함수는 아래와 같다.
$$\min_{\Theta} \sum_{r \in \mathcal{R}} (\lambda \| C^*(r) - C(r; \Theta, t^c) \|_2^2 + \| C^*(r) - C(r; \Theta, t^f) \|_2^2)$$
방금 설명했듯이 NeRF에서 두 MLP의 Loss를 더해 손실함수를 만든것처럼,
여기서는 같은 함수를 두 번 사용하므로 같은 함수에 대한 Loss를 두번 더한다.
다만 Coarse역할을 하는 항은 상대적으로 부정확하기 때문에 $\lambda=0.1$을 주었다.

이 그림이 두 모델의 차이를 잘 설명해준다.
NeRF는 x축 방향으로 얼마나 멀리 가든 점을 샘플링해서 Encoded Sample도 각 색의 구분이 명확하지만
Mip-NeRF는 멀어지면 회색 부분들로 뭉쳐 두리뭉실하게 표현되는 것을 확인할 수 있다.
이는 멀리 있으면 더 큰 범위의 정보를 한 픽셀에 담아야하기 때문에 각 세부 부분들의 평균을 낸 것이라고 생각할 수 있다.
결과적으로 에러유 압도적으로 감소하고, 모든 해상도에서 우위였으며 더 빠른 속도까지 잡게 되었다.
'AI > 컴퓨터비전(CV)' 카테고리의 다른 글
| [CV 논문] Segment Any 3D Gaussians (0) | 2026.04.02 |
|---|---|
| 3DGS 학습시켜보기 (3) | 2026.03.18 |
| [CV 논문] Structure-from-Motion Revisited (5) | 2026.03.10 |
| [CV 논문] Auto-Encoding Variational Bayes (2) | 2026.03.05 |
| [CV 논문] Mask R-CNN (0) | 2026.02.27 |