X-KANeRF [KANeRF基准测试]:基于KAN的NeRF与各种基函数
是否存在可以解释NeRF公式的基函数?!
$$\mathbf{c}, \sigma = F_{\Theta}(\mathbf{x}, \mathbf{d}),$$ 其中$\mathbf{c}=(r,g,b)$是RGB颜色,$\sigma$是密度,$\mathbf{x}$是3D位置,$\mathbf{d}$是方向。
为探讨这个问题,我使用了Kolmogorov-Arnold网络(KAN)和各种基函数,基于nerfstudio拟合NeRF方程。
代码可能有些粗糙,欢迎任何建议和批评!
X-KAN 模型(这里有各种 KAN!)
待办事项 | 基函数 | 数学表达式 | 致谢 |
---|---|---|---|
1 | B 样条 | $$S_i(x) = a_i + b_i(x - x_i) + c_i(x - x_i)^2 + d_i(x - x_i)^3$$ | Efficient-Kan |
2 | 傅里叶 | $$\phi_k(x) = \sin(2\pi kx), \phi_k(x) = \cos(2\pi kx)$$ | FourierKAN |
3 | 高斯径向基函数 | $$\phi(x, c) = e^{-\frac{|x - c|^2}{2\sigma^2}}$$ | FastKAN |
4 | 径向基函数 | $$\phi(x, c) = f(|x - c|)$$ | RBFKAN |
5 | FCN | - | FCN-KAN |
6 | FCN-插值 | - | FCN-KAN |
7 | 第一类切比雪夫多项式 | $$T_n(x) = \cos(n \cos^{-1}(x))$$ | ChebyKAN |
8 | 第二类切比雪夫多项式 | $$U_n(x) = \frac{\sin((n+1)\cos^{-1}(x))}{\sin(\cos^{-1}(x))}$$ | OrthogPolyKANs |
9 | 雅可比多项式 | $$P_n^{(\alpha, \beta)}(x) = \frac{1}{2^n n!} \frac{d^n}{dx^n} \left[ (1-x)^{\alpha+n} (1+x)^{\beta+n} \right]$$ | JacobiKAN |
10 | 埃尔米特多项式 | $$H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2})$$ | OrthogPolyKANs |
11 | 格根鲍尔多项式 | $$C_{n+1}^{(\lambda)}(x) = \frac{2(n+\lambda)}{n+1}x C_n^{(\lambda)}(x) - \frac{(n+2\lambda-1)}{n+1}C_{n-1}^{(\lambda)}(x)$$ | OrthogPolyKANs |
12 | 勒让德多项式 | $$P_n(x) = \frac{1}{2^n n!} \frac{d^n}{dx^n} \left( x^2 - 1 \right)^n$$ | OrthogPolyKANs |
13 | 拉盖尔多项式 | $$L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} \left( x^n e^{-x} \right)$$ | OrthogPolyKANs |
14 | 贝塞尔多项式 | $$J_n(x) = \sum_{k=0}^{\infty} \frac{(-1)^k}{k!(n+k)!} \left( \frac{x}{2} \right)^{2k+n}$$ | OrthogPolyKANs |
15 | 斐波那契多项式 | $$F_n(x) = xF_{n-1}(x) + F_{n-2}(x), \quad \text{对于 } n \geq 2.$$ | OrthogPolyKANs |
16 | 卢卡斯多项式 | $$L_n(x) = xL_{n-1}(x) + L_{n-2}(x)$$ | OrthogPolyKANs |
17 | 墨西哥帽小波 | $$\psi(x) = \frac{2}{\sqrt{3a}\pi^{\frac{1}{4}}} \left(1 - \frac{x^2}{a^2}\right) e^{-\frac{x^2}{2a^2}}$$ | Wav-KAN |
18 | 莫莱特小波(加博尔小波) | $$\psi(t) = \pi^{-\frac{1}{4}} e^{i\omega_0 t} e^{-\frac{t^2}{2}}$$ | Wav-KAN |
19 | 高斯差分(DoG) | $$\text{DoG}(x, y) = \frac{1}{\sqrt{2\pi}\sigma_1} e^{-\frac{x^2 + y^2}{2\sigma_1^2}} - \frac{1}{\sqrt{2\pi}\sigma_2} e^{-\frac{x^2 + y^2}{2\sigma_2^2}}$$ | Wav-KAN |
20 | 梅耶小波 | $$\psi(x) = \sqrt{\frac{2}{T}} \sum_{k=1}^{N} \left(1 - \left(\frac{k}{N}\right)^2\right) \left[ \cos\left(\frac{2\pi x k}{T}\right) - \frac{\sin(\pi x k / T)}{\pi x k / T}\right]$$ | Wav-KAN |
21 | 香农小波 | $$\psi(t) = \frac{\sin(\pi t) - \sin\left(\frac{\pi t}{2}\right)}{\pi t}$$ | Wav-KAN |
22 | 凸起小波 | $$\psi(t) = e^{-\frac{1}{1 - t^2}}$$ | Wav-KAN |
更多!!! | - | - | - |
RTX-3090 上的性能比较
-
模型设置 -> train_blender.sh |模型|隐藏维度|颜色隐藏维度|层数|颜色层数|几何特征维度|外观嵌入维度| |:----:|:---:|:---:|:----:|:----:|:-----:|:-----:| Nefacto-MLP-A| 32 | 32 | 2 | 2 | 7 | 8 | Nefacto-MLP-B| 8 | 8 | 8 | 8 | 7 | 8 | 其他| 8 | 8 | 1 | 1 | 7 | 8|
-
nerf_synthetic: lego / 30k
注意:当前的"训练光线/秒"和"训练时间(预计时间)"并不准确,它们是迭代次数达到100时的值。 |模型| 层参数 $\downarrow$ |训练射线/秒 $\uparrow$ | 训练时间 $\downarrow$ | FPS $\uparrow$ | PSNR $\uparrow$| SSIM $\uparrow$ | LPIPS $\downarrow$ | |:---:|:---:|:----:|:----:|:-----:|:-----:|:----:|:-----:| |Nerfacto-MLP-A| 9902 | ~170K | ~14分钟 | 0.71 | 32.53 | 0.968 | 0.0167 | |Nerfacto-MLP-B | 3382 | ~165K | ~14分钟 | 0.75 | 27.11 | 0.915 | 0.0621 | |Nerfacto-MLP| 1118 | ~190K | ~13分钟 | 0.99| 28.60 |0.952 |0.0346 | |BSplines-KAN|8092| ~37K | ~54分钟|0.19|32.33|0.965|0.0174| |GRBF-KAN|3748 | ~115K | ~19分钟 |0.50|32.39|0.967|0.0172| |RBF-KAN| 3512 | ~140K | ~15分钟 |0.71|32.57|0.966| 0.0177| |Fourier-KAN| 5222 | ~80K | ~25分钟 |0.42 | 31.72 |0.956|0.0241| |FCN-KAN(迭代次数: 4k)| 5184 | ~4K | ~90分钟 | 0.02 | 29.67 | 0.938 | 0.0401 | |FCN-Interpolation-KAN| 6912 | ~52K | ~40分钟| 0.21 | 32.67 | 0.965 | 0.0187 | |一阶切比雪夫-KAN | 4396 | ~53K | ~40分钟| 0.34 | 28.56| 0.924 | 0.0523 | |一阶切比雪夫-KAN(更快) | 4426 | ~86K | ~23分钟| 0.45 | 28.54| 0.924 | 0.0514 | |雅可比-KAN | 3532 | ~72K | ~30分钟| 0.37 | 27.88 | 0.915 |0.0553| |贝塞尔-KAN | 3532 | ~76K | ~28分钟| 0.33 | 25.79 | 0.878 |0.1156| |二阶切比雪夫-KAN | 4396 | ~55K | ~39分钟| 0.33 | 28.53 | 0.924 |0.0500| |斐波那契-KAN | 4396 | ~65K | ~32分钟| 0.34 | 28.30 | 0.922 |0.0521| |盖根鲍尔-KAN | 4396 | ~53K | ~40分钟| 0.32 | 28.39| 0.922 |0.0514| |埃尔米特-KAN | 4396 | ~55K | ~38分钟| 0.37 | 27.58 | 0.913 |0.0591| |勒让德-KAN | 4396 | ~55K | ~38分钟| 0.33 | 26.64 | 0.893 |0.0986| |卢卡斯-KAN | 3532 | ~75K | ~28分钟 | 0.42 | 27.95 | 0.916 |0.0550 | |拉盖尔-KAN | 3532 | ~74K | ~28分钟 | 0.39 | 27.39 | 0.912 |0.0593 | |墨西哥帽-KAN | 3614 | ~66K | ~32分钟 | 0.35 | 31.23 | 0.961 |0.0221 | |莫雷-KAN | 3614 | ~67K| ~31分钟 | 0.38 | 13.06 |0.686 |0.2583 | |DoG-KAN |3614 | ~75K | ~28分钟 | 0.41 | 32.59 | 0.966 | 0.0174 | |梅耶-KAN | 3614 | ~36K | ~55分钟 | 0.17 | 11.91 | 0.728 | 0.2991 | |香农-KAN | 3614 | ~73K | ~28分钟 | 0.49 | 9.15 | 0.738 |0.4434 | |凸起-KAN | 3614 | ~70K | ~28分钟 | 0.33 | 1.79 | 0.147 | 0.9072 |
Nerfstudio 安装
# 创建 Python 环境
conda create --name nerfstudio -y python=3.8
conda activate nerfstudio
python -m pip install --upgrade pip
# 安装 torch
pip install torch==2.0.1+cu117 torchvision==0.15.2+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
conda install -c "nvidia/label/cuda-11.7.1" cuda-toolkit
# 安装 tinycudann
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
# 安装 nerfstudio
pip install nerfstudio==0.3.4
# pip install torchmetrics==0.11.4
# Tab 命令
ns-install-cli
# !!! 如果您使用 `ns-process-data`,请安装此版本的 opencv
pip install opencv-python==4.3.0.36
运行
# 训练
############# kan_basis_type #############
# mlp, bspline, grbf, rbf, fourier,
# fcn, fcn_inter, chebyshev, jacobi
# bessel, chebyshev2, finonacci, hermite
# legendre, gegenbauer, lucas, laguerre
# mexican_hat, morlet, dog, meyer, shannon, bump
bash train_blender.sh [kan_basis_type]
# 评估
bash run_eval.sh [exp_path]
# 渲染 RGB 和深度
bash run_render.sh [exp_path]
文档
引用
如果您在研究中使用了这个基准测试,请引用本项目。
@misc{xkanerf,
title={X-KANeRF: 基于 KAN 的 NeRF 与各种基函数},
author={Linfei Li},
howpublished = {\url{https://github.com/lif314/X-KANeRF}},
year={2024}
}
致谢
- KANeRF,非常感谢这项出色的工作!
@Manual{kanerf, title = {Hands-On NeRF with KAN}, author = {Delin Qu, Qizhi Chen}, year = {2024}, url = {https://github.com/Tavish9/KANeRF}, }
- nerfstudio
@inproceedings{nerfstudio, title = {Nerfstudio: 神经辐射场开发的模块化框架}, author = { Tancik, Matthew and Weber, Ethan and Ng, Evonne and Li, Ruilong and Yi, Brent and Kerr, Justin and Wang, Terrance and Kristoffersen, Alexander and Austin, Jake and Salahi, Kamyar and Ahuja, Abhik and McAllister, David and Kanazawa, Angjoo }, year = 2023, booktitle = {ACM SIGGRAPH 2023 Conference Proceedings}, series = {SIGGRAPH '23} }