2025 Feb

三维重建与时间序列
街景重建
gaussian splatting 论文和repo列表
-Baseline
- street gaussian
- gaussianpro
- pvg
- 普通(效果不怎么好的)
- HUGS
- Holistic
- 4D Gaussian系列
- drivingGaussian
- 4DGaussian
- S3Gaussian
- 扩散模型
- DriveDreamer4D
- SGD
- 超分辨率
- mariner
收获
0. 了解很多传统CG知识与传统算法(包括三角化算法,摄像机参数知识)至今觉得这个基础很重要
1. 最早研究是对数据集进行适配,了解自动驾驶常用数据集(Waymo,Kitti,nuScene,vKitti)与处理办法
2. 了解很多自动驾驶前沿领域的动态与科技趋势
3. 深入理解3d gaussian splatting,虽然最后是从应用层面进行开发
4. 在此致谢王逸群老师,非常非常厉害且耐心的好老师。
写了很多版代码,分别对很多方向进行尝试,记录如下:
重要:前期准备
1. 研修CG领域课程(GAMES系列课程、CS231a)及传统三维重建算法与NeRF
2. 阅读3d gaussian splatting 原论文与其分支的综述
3. 深入dynamic gaussian splatting领域,复现street gaussian源代码(python层面,cuda只知道功能,其他完全不懂)
目标:增强新视角合成(NVS)方面的效果
1. 通过近邻视角rgb图像先验作为监督信号
2. 受mariner启发,通过特征匹配模块,注意力机制,自动寻找相应匹配模块。
初始工作
0. 梦开始的地方:(street_first)使用vgg-based特征提取器以及残差网络,由于取代了核心attention.py的特征匹配操作,效果变差。
1. street2:根据最初的优化方案写的,相当于复写mariner每一行代码,而不考虑它能不能用[详见scheme_old.txt]
2. street3:直接从论文原理出发,尝试mariner与street gaussian的暴力融合[写了mariner integration,把mariner封装进module并且尝试放到train.py里面]
3. street4:street gaussian渲染[1066,1600]分辨率的图像,而mariner渲染[160,160]分辨率的图像,所以尝试mariner原论文的real-ESRGAN第三方库,就是[1066,1600] --> downsample to [160,160] (Image.Resampling.LANCZOS即lanczos方法) --> mariner处理生成[160,160]增强图像 --> [1066,1600]使用real-ERSGAN上采样
进一步工作
1. street5:{加强版} street4自己瞎写的,跑不通,拿去给claude进行代码重构,然后爆显存了。
2. street6:基于PIL库,想利用时间换取空间,每次结果保存在文件夹中,用的时候PIL读取,显存大幅下降,可以运行,但是耗时96h。简单来说,读取内存图像,到CPU图像,到GPU图像,实在太慢了。
原因分析:
CPU-GPU管道阻塞(Ⅰ) 与 内存碎片化(Ⅲ) 的叠加效应。Lanczos缩放与Real-ESRGAN子进程调用导致:
1.高频的CPU-GPU数据交换
2.可控的显存释放模式
建议优先优化图像缩放方案,采用纯GPU实现,并引入内存池管理
验证效果表明:
1.lanczos_resize函数使用CPU-PIL导致频繁设备数据传输,存在高频的CPU-GPU数据交换问题
2.Real-ESRGAN子进程调用破坏CUDA内存复用
成果:
1. street7:{唯一稳定版本的加强版}
说明:
1.创建了一个完整的 MaRINeR 模块,其中包含:
用于多级特征提取的编码器
记忆匹配模块,用于遮挡处理的对应匹配
具有特征融合和域自适应的解码器
损失函数包括感知损失和 GAN 损失
用于处理大图像的图像处理实用程序
2.创建了连接 Street Gaussian 和 MaRINeR 的集成层,将训练流程更新为:
启用后初始化并使用 MaRINeR
选择匹配的参考视图
处理动态对象的遮挡蒙版
在迭代过程中应用细化
保存并评估两个模型
相当于双模型封装,loss互不打扰,但是mariner增强图像对street gaussian进行监督。
2. street8:使用内存管理策略,[1066,1600]-->[960,1600]-->6x10个块分批次由mariner处理,很明显,失败了,因为显存又又又不够了。
3. steet9:只取小车的图像给mariner进行优化
4. street10:只用encoder和loss模块,所有mariner的loss都用于street gaussian的训练