Notes

NeRF gradients from instant-ngp

Basic notations: (assume single color channel denoted as RR)

αi=1eσiδiTi={1,i=1(1αi1)(1αi2)(1α1),i>1wi=αiTiRi=j=1iwjrjR=RN\begin{align} \alpha_i &= 1 - e^{- \sigma_i \delta_i} \\ T_i &= \begin{cases} 1, & i = 1 \\ (1 - \alpha_{i-1})(1 - \alpha_{i-2})\cdots(1 - \alpha_1), & i > 1 \end{cases} \\ w_i &= \alpha_i T_i \\ R_i &= \sum_{j=1}^i w_j r_j \\ R &= R_N \end{align}

Gradient towards color:

Lri=LRRri=LRwi=LRαiTi\begin{align} \frac {\partial L} {\partial r_i} &= \frac {\partial L} {\partial R} \frac {\partial R} {\partial r_i} \\ &= \frac {\partial L} {\partial R} w_i \\ &= \frac {\partial L} {\partial R} \alpha_iT_i \end{align}

Gradient towards sigma:

Lσi=LRRσi=LRRαiαiσi\begin{align} \frac {\partial L} {\partial \sigma_i} &= \frac {\partial L} {\partial R} \frac {\partial R} {\partial \sigma_i} \\ &= \frac {\partial L} {\partial R} \frac {\partial R} {\partial \alpha_i} \frac {\partial \alpha_i} {\partial \sigma_i} \\ \end{align}

We have:

Rαi=j=1NαjTjrjαi=j=iNαjTjrjαi=(αiTiri+αi+1Ti+1ri+1++αNTNrN)αi=(αiTiri+αi+1[(1αi)(1αi1)(1α1)]ri+1++αNTNrN)αi =Tiriαi+1(1αi1)(1αi2)(1α1)ri+1αN(1αN1)(1αi+1)(1αi1)(1α1)rN=11αi((1αi)Tiriαi+1Ti+1ri+1αNTNrN)=11αi(Ti+1rij=i+1NαjTjrj)=11αi(Ti+1ri(RRi))\begin{align} \frac {\partial R} {\partial \alpha_i} &= \frac {\partial \sum_{j=1}^N \alpha_jT_jr_j } {\partial \alpha_i} \\ &= \frac {\partial \sum_{j=i}^N \alpha_jT_jr_j } {\partial \alpha_i} \\ &= \frac {\partial (\alpha_iT_ir_i + \alpha_{i+1}T_{i+1}r_{i+1} +\cdots + \alpha_NT_Nr_N)} {\partial \alpha_i} \\ &= \frac {\partial (\alpha_iT_ir_i + \alpha_{i+1}[(1-\alpha_i)(1-\alpha_{i-1})\cdots(1-\alpha_1)] r_{i+1} +\cdots + \alpha_NT_Nr_N)} {\partial \alpha_i} \\ &\ \begin{aligned} = T_ir_i &-\alpha_{i+1}(1-\alpha_{i-1})(1-\alpha_{i-2})\cdots(1-\alpha_1)r_{i+1} \\ &-\cdots \\ &-\alpha_{N}(1-\alpha_{N-1})\cdots(1-\alpha_{i+1})(1-\alpha_{i-1})\cdots(1-\alpha_1)r_{N} \\ \end{aligned} \\ &= \frac {1} {1-\alpha_i} ((1-\alpha_i)T_{i}r_i - \alpha_{i+1}T_{i+1}r_{i+1} -\dots -\alpha_NT_Nr_N) \\ &= \frac {1} {1-\alpha_i} (T_{i+1}r_i - \sum_{j=i+1}^N\alpha_jT_jr_j) \\ &= \frac {1} {1-\alpha_i} (T_{i+1}r_i -(R - R_i)) \end{align}

And since:

αiσi=δieσiδi=δi(1αi)\frac {\partial \alpha_i} {\partial \sigma_i} = \delta_ie^{-\sigma_i\delta_i}=\delta_i(1-\alpha_i)

We finally have:

Lσi=LRRαiαiσi=LRδi(1αi)11αi(Ti+1ri(RRi))=LRδi(Ti+1ri(RRi))\begin{align} \frac {\partial L} {\partial \sigma_i} &= \frac {\partial L} {\partial R} \frac {\partial R} {\partial \alpha_i} \frac {\partial \alpha_i} {\partial \sigma_i} \\ &= \frac {\partial L} {\partial R} \delta_i (1-\alpha_i) \frac {1} {1-\alpha_i} (T_{i+1}r_i -(R - R_i)) \\ &= \frac {\partial L} {\partial R} \delta_i (T_{i+1}r_i -(R - R_i)) \end{align}

And this is the form used in instant-ngp.

A more beautiful form:

Ti+1rij=i+1NαjTjrj=(1αi)Tirij=i+1NαjTjrj=TiriαiTirij=i+1NαjTjrj=Tirij=iNαjTjrj=Tiri(RRi1)\begin{align} T_{i+1}r_i - \sum_{j=i+1}^N\alpha_jT_jr_j &= (1-\alpha_i)T_ir_i - \sum_{j=i+1}^N\alpha_jT_jr_j \\ &= T_ir_i - \alpha_iT_ir_i - \sum_{j=i+1}^N\alpha_jT_jr_j \\ &= T_ir_i - \sum_{j=i}^N\alpha_jT_jr_j \\ &= T_ir_i - (R-R_{i-1}) \end{align}

Type to search.