简介:面向3D高斯溅射(3D Gaussian Splatting)技术研究的中英文论文合集,覆盖ECCV、CVPR、NeurIPS、SIGGRAPH等顶会成果,适合作为毕业设计、课程设计或科研入门阶段的参考资料。合集共收录785个文件,其中783个为Markdown格式的论文笔记、会议索引及更新日志,另有2个Python脚本用于辅助检索与整理,压缩包仅1.26MB,轻量便于快速同步。目前已有102人学习浏览,内容保持持续更新,涉及渲染、三维重建、动态场景、医学影像、自动驾驶等多个应用方向。通过该合集可以系统梳理3D高斯溅射的算法演进与最新动态,每篇笔记提炼了论文核心思路与要点,并保留原文链接,能显著降低文献调研成本,也可为后续复现或选题提供参照,适合计科、人工智能、电子信息等专业学生及算法工程师参考使用。
1. 拿到 3D 高斯溅射论文集 zip,先别急着解压
一份「3D 高斯溅射论文集」zip 通常有几十上百篇 PDF,覆盖渲染加速、动态场景、SLAM、生成编辑、医学影像、自动驾驶等多个方向。90% 的人解压之后只会按文件名翻摘要,最后变成硬盘里的收藏夹。真正的问题不是「有没有这份资料」,而是「怎么把它变成毕业设计/课程设计的选题依据和复现路线」。下面按检索、分类、精读、复现的顺序,讲一套从 zip 到产出的一线做法:用脚本管理文献、按可复现性选题目、跑通最小训练管线,并处理 zip 损坏、重复、增量更新等实际问题。适合正在选题的本科生、刚进组的研究生,以及想快速跟进 3DGS 的工程师。
2. 3D 高斯溅射论文在讲什么——先建技术地图再做结构化
3D 高斯溅射(3D Gaussian Splatting,3DGS)在 2023 年提出后,迅速成为神经渲染方向的基础工具。它把场景表示为一组带位置、协方差、球谐颜色和不透明度的 3D 高斯函数,通过可微光栅化把高斯投影到图像平面,用光度损失端到端更新参数。与 NeRF 的逐点体渲染相比,3DGS 训练快、推理能到实时帧率,所以你会看到大量「基于 3D 高斯溅射的某某改进」类论文,从表示、光栅化、密度化到后处理都有人动刀。面对这类论文集,第一步不是逐篇精读,而是把方向理清楚。
2.1 论文集里最常见的研究方向与论文关键词
根据近年公开论文的主题分布,大部分工作会落在这六类里。
| 方向 | 要解决的问题 | 标题里常见关键词 |
|---|---|---|
| 快速重建与渲染 | 降低训练和高斯栅格化开销 | real-time, fast, acceleration, pruning |
| 动态场景与 4D | 处理运动物体和多视角视频 | 4D, dynamic, video, deformable, temporal |
| SLAM 与增量建图 | 在线恢复相机位姿并更新地图 | SLAM, mapping, localization, odometry |
| 场景编辑与生成 | 可控修改、再生成、与扩散模型结合 | editing, generation, diffusion, inpainting |
| 压缩与蒸馏 | 减少高斯数量与模型体积 | compression, distillation, quantization |
| 行业应用 | 医学影像、工业测量、自动驾驶等 | medical, surgical, endoscopy, automotive |
这张表的用途是给解压后的 PDF 快速归档。3DGS 论文的标题通常会把「改了什么组件」写进关键词,比如标题含 deformable 的大概率是动态方向,含 distill 的大概率是压缩方向。拿到一篇新论文,先看标题关键词,再看摘要里「we propose」之后的那句话,就能确定它的主线地位。归档做得越细,后面按主题检索时越省事,这也是「毕业设计选题」阶段最值得投入的一步。
2.2 用几十行脚本把论文 zip 解压成主题目录
常见做法是:先统计再解压,不要把所有 PDF 倒进一个文件夹。用 Python 的 zipfile 读成员列表,按文件名关键词分类,再解压到对应目录。脚本可直接保存为 classify_and_extract.py 复用。
import zipfile import shutil from pathlib import Path ZIP_PATH = Path("3dgs_papers.zip") OUT_ROOT = Path("papers_lib") RULES = { "dynamic": ["4d", "dynamic", "video", "deform", "temporal"], "slam": ["slam", "mapping", "localization", "odometry"], "editing": ["edit", "generation", "inpaint", "diffusion", "llm"], "compression": ["compress", "distill", "quantiz", "lightweight"], "medical": ["medical", "surgical", "endoscopy", "ct", "mri"], "baseline": ["splatting", "3dgs", "gaussian", "survey", "review"], } def classify(name: str) -> str: low = name.lower() for topic, keys in RULES.items(): if any(k in low for k in keys): return topic return "other" with zipfile.ZipFile(ZIP_PATH) as zf: for member in zf.namelist(): if not member.lower().endswith((".pdf", ".md")): continue pure_name = Path(member).name if pure_name.startswith((".", "._")): # 跳过 macOS 元数据 continue topic = classify(pure_name) dest_dir = OUT_ROOT / topic dest_dir.mkdir(parents=True, exist_ok=True) with zf.open(member) as src, (dest_dir / pure_name).open("wb") as dst: shutil.copyfileobj(src, dst)zipfile.ZipFile 负责读压缩包成员列表;先过滤非 PDF 和隐藏文件,避免把 __MACOSX 目录里的垃圾文件带出来。classify() 是关键词匹配,按 RULES 里定义的六类主题逐项检查文件名,未匹配的文件归入 other。解压时用 shutil.copyfileobj 边读边写,压缩包很大也不会占满内存。参数上,RULES 的关键词需要按实际文件命名习惯调整,比如有些论文集用编号「paper_0001.pdf」,文件名不含关键词,此时 classify 基本失效,要把归档依据换成 PDF 首页的标题文本,也就是第 3 章要讲的元数据提取。
2.3 生成索引文件,让「持续更新」有据可查
分类完成只是第一步。还要生成一个索引,记录每个主题下有多少篇、每篇的路径和更新时间,这样后续每次新增论文都能对照。
from pathlib import Path from datetime import datetime lib = Path("papers_lib") lines = ["# 3D 高斯溅射论文集", f"updated: {datetime.now():%Y-%m-%d}", ""] for topic in sorted(p.name for p in lib.iterdir() if p.is_dir()): pdfs = sorted(p.glob("*.pdf")) lines.append(f"## {topic} ({len(pdfs)})") lines += [f"- {f.stem}" for f in pdfs] Path("README.md").write_text("\n".join(lines), encoding="utf-8")这个脚本做的事是:遍历 papers_lib 下的主题目录,统计 PDF 数量,按主题生成二级标题和文件列表,把更新时间写进 README 第一行。README 建议纳入版本管理,比如用 git 跟踪,每次新增论文后重跑一次,就能看到「这个主题昨天 12 篇、今天 15 篇」的增量变化,对应论文集标题里的「持续更新」。归档与索引合起来,才是这份资料从 zip 变成知识库的关键。
3. 从 3D 高斯溅射论文集里找毕业设计题目——把可复现性放第一位
做毕业设计或课程设计,选题质量决定了后面两个月是顺还是坑。3DGS 方向论文多、代码也多,但「有代码」和「能复现」是两回事。我一般会按三个标准筛:可复现性、可改进性、数据可得性。三个标准里,可复现性最优先,因为 3DGS 论文很多依赖特定 CUDA 扩展,有的代码只在自己机器上能跑,换环境就卡编译。
3.1 选题的三个判断标准,以及适合毕设的方向
可复现性看三点:论文是否开源、代码是否依赖私有数据、环境安装是否完整。3DGS 主线论文大多开源且用公开数据集,比较适合入手;工程型方向比如 SLAM,代码要接相机驱动、标定、在线渲染,工作量容易被工程问题吃掉。可改进性判断法是「找一个子模块替换」:比如把密度化策略从固定阈值改成区域自适应,把球谐阶数改成可学习的截断,都属于论文创新点里「点」的改动,适合课设周期。数据可得性看是否要审批:医学方向数据要伦理审核,3DGS 常用的公开场景数据集下载即可用。
| 方向 | 复现难度 | 改进空间 | 数据获取 |
|---|---|---|---|
| 渲染加速与剪枝 | 中 | 中 | 公开场景 |
| 压缩与蒸馏 | 中 | 高 | 公开场景 |
| 场景编辑与生成 | 中 | 高 | 公开场景 + 掩码 |
| 动态场景 / 4D | 高 | 中 | 多视角视频 |
| SLAM / 增量建图 | 高 | 低 | 实拍序列 |
| 医学应用 | 中高 | 高 | 需伦理审批 |
表格不是绝对打分,而是提醒你:选题时先确认「这条路的默认数据我能不能现在就下到」。3DGS 方向常见公开数据包括 NeRF Synthetic、Mip-NeRF360、Tanks & Temples,这些在论文附录里都会给下载地址,论文集的「数据」子目录有时也附了说明文档,优先选有现成数据的题。
3.2 精读路线:综述 → 主线 → 消融
泛读主要靠摘要做分类,精读则按「1 篇综述 + 2 篇主线 + 3 篇对比」来读。一篇 3DGS 综述能帮你建立术语表:密度化、各向异性协方差、球谐系数、可微光栅化,这些词在后续所有论文里高频出现。主线论文建议选原始方法及其直接扩展,读的时候在纸上画数据流:多视角图像 → SfM 初始化点云 → 高斯参数(位置、协方差、颜色、不透明度)→ 可微光栅化 → 光度损失 → 每 100 次迭代做一次密度化。画完这张图,任何一篇改进论文都能对应到「它改了管线里的哪一格」。最后读对比方法和消融实验,重点不是数值,而是「改进点放在哪一阶段效果最好」这个结论。这是毕设开题报告里最值钱的内容。
阅读笔记不要长篇抄摘要,按「问题、方法、改了哪个组件、实验结论、你能改什么」五栏记录。五栏式笔记一天能过 5 篇论文,且每篇留下的信息足够支撑后续开题和对比实验。
3.3 批量提取 PDF 元数据,自动生成 BibTeX
手动敲 BibTeX 容易错,还会漏 arXiv 编号。常见做法是用 PyMuPDF 提取 PDF 首页文本,用正则抓标题和 arXiv 编号,再生成 bib 文件。
import fitz import re from pathlib import Path def extract_metadata(pdf_path: Path) -> dict: doc = fitz.open(pdf_path) first_page = doc[0].get_text() title = first_page.strip().splitlines()[0] if first_page.strip() else pdf_path.stem m = re.search(r"arXiv:(\d{4}\.\d{4,5})(v\d+)?", first_page) return {"title": title, "arxiv": m.group(1) if m else ""} def to_bibtex(meta: dict, filename: str) -> str: key = re.sub(r"[^a-zA-Z0-9]", "", filename)[:32] eprint = f"archivePrefix={{arXiv}}, eprint={{{meta['arxiv']}}}," if meta["arxiv"] else "" title = meta["title"].replace("{", "").replace("}", "") return f"@article{{{key},\n title = {{{title}}},\n {eprint}\n}}\n\n" for pdf in Path("papers_lib", "baseline").glob("*.pdf"): meta = extract_metadata(pdf) Path("references.bib").open("a", encoding="utf-8").write(to_bibtex(meta, pdf.stem))fitz.open 打开 PDF,取第一页文本作为标题来源,正则\d{4}\.\d{4,5}匹配 2023 年后常见的 arXiv 编号格式,(v\d+)?把版本号过滤掉。to_bibtex 用文件名清洗后的内容做 citation key,arxiv 为空时省略 eprint 字段,避免生成无效条目。注意标题直接取第一行只是近似,遇到标题跨行、带日期的情况需要再清洗,但用来生成开题报告和参考文献列表已经够用。有大量文献时也可以导入 Zotero 自动抓元数据,但对批量文件,脚本更可控,还能顺带统计各主题论文数量。重复运行脚本会在 references.bib 里累积重复条目,建议每次跑之前先清空文件。
4. 跑通 3D 高斯溅射最小训练管线——从论文标题到可重现指标
论文看了十几篇,选题也定了,接下来要把「某篇论文的改进」落到「我能跑通的代码」上。3DGS 方向最常见的开源基础实现是 graphdeco 团队维护的版本,绝大多数改进论文都基于它,或者给的是 fork。先把这条最小管线跑通,再谈改代码。
4.1 环境准备:CUDA、PyTorch、COLMAP 三件套
3DGS 的核心光栅化是自定义 CUDA 扩展,训练前要确认三件事:GPU 驱动支持的 CUDA 版本、PyTorch 的 CUDA 版本、COLMAP 的可用性。先用 nvidia-smi 看驱动版本,再决定装哪个 CUDA 的 PyTorch,否则训练时会在 import 阶段报「找不到 CUDA runtime」。
conda create -n 3dgs python=3.10 -y conda activate 3dgs pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 conda install -c conda-forge colmap -yPyTorch 的 --index-url 要和本机驱动匹配,cu121 表示 CUDA 12.1 的预编译 wheel;驱动太老就降级到 cu118。COLMAP 是特征提取与增量式 SfM 工具,它生成的稀疏点云是高斯的初始位置,缺了它 train.py 无法启动。如果你的数据集不是论文自带的,而是自己的照片,需要先跑两条 COLMAP 命令:
colmap feature_extractor --database_path db.db --image_path images colmap mapper --database_path db.db --image_path images --output_path sparsefeature_extractor 提取图像特征,mapper 做增量式重建,输出在 sparse/0 目录。之后 train.py 的 -s 参数指向包含 sparse/0 的数据集根目录即可。这一步失败最常见的原因是图片太少或纹理重复,建议至少 30 到 50 张有重叠、光线一致的照片。
4.2 训练、渲染、评估三条命令与核心参数
最小可跑流程是三步:训练、渲染、评估。
python train.py -s /data/chair -m /output/chair --eval python render.py -m /output/chair python metrics.py -m /output/chairtrain.py 做的事是:读取 sparse/0 点云初始化高斯参数,在迭代中更新位置、协方差、球谐系数和不透明度,并按预设间隔执行密度化和低不透明度剪枝。--eval 会把数据集划分出测试视角,在第 7000 次迭代后周期性评估。render.py 用训练好的模型渲染所有测试视角的图片。metrics.py 对比渲染图和原图,输出 PSNR、SSIM、LPIPS 三个指标。注意:如果训练时不加 --eval,所有视角都参与训练,指标会明显虚高,毕设的对比实验写出来也没有说服力。
| 参数 | 默认行为 | 作用 | 调整建议 |
|---|---|---|---|
| --iterations | 30000 | 总训练迭代数 | 数据少可降到 15000,质量略降 |
| --eval | 不启用 | 划分测试集并周期评估 | 对比实验必须开 |
| --test_iterations | 7000, 30000 | 做评估时保存模型 | 按论文设置覆盖写 |
| --save_iterations | 7000, 30000 | 保存完整模型的迭代点 | 磁盘紧张可只留 30000 |
| --densify_until_iter | 15000 | 该迭代后停止密度化 | 场景闪烁时提前到 8000 |
| --opacity_reset_interval | 3000 | 重置不透明度避免漂移 | 默认即可 |
| --sh_degree | 3 | 球谐阶数 | 显存不足降到 2 |
调参不是拍脑袋,而是要跟你在第 3 章画的「数据流图」对应起来:densify 参数影响高斯数量,sh_degree 影响颜色表达精度,iterations 影响最终收敛。论文的附表通常会给不同参数下的指标,照着论文的实验设置跑一遍,能最快验证你的环境是否正确。
4.3 训练中常见的三类实际问题
第一类是显存不足。3DGS 的显存占用和图像分辨率、高斯数量强相关,训练 2K 以上分辨率时 8G 显存很容易爆。常见做法是把输入图片缩小到 1~1.6K,或者把 --sh_degree 降到 2,牺牲一点颜色精度换训练可行性。
第二类是渲染画面全黑。这通常是 COLMAP 稀疏点太少或根本没有输出,检查数据集目录下 sparse/0 是否存在,以及 images 路径是否含中文或空格。路径问题在 Windows 上最容易踩,建议数据集和代码都放在纯英文路径下。
第三类是「GitHub 下载的 zip 包解压后安装失败」。很多开源代码是 Code 下拉菜单里 Download ZIP 的方式分发,解压后通常是创建 conda 环境、按 requirements.txt 装依赖、再编译子模块三步。如果卡在编译,优先检查 CUDA 版本和 gcc 版本,不要为了过编译而降 PyTorch 大版本。
提示:训练前先跑一个 2000 次迭代的短训练,确认 loss 能下降、渲染输出有画面,再开完整训练。这比直接跑 30000 次迭代后才发现环境问题省时间。
5. 3D 高斯溅射论文 zip 的验收、去重与增量归档
前面几章把论文变成选题和代码,现在回到 zip 本身:这份压缩包要能长期用,就得会验收、去重、增量更新。很多毕设资料在网盘转存或下载中断后会出现文件损坏,解压时才报错,浪费的时间可能比读论文还多。
5.1 解压前先验证 zip 完整性
拿到 zip 先验包,再解压。两条命令都可以:
7z t 3dgs_papers.zip python -m zipfile -t 3dgs_papers.zip7z t 会逐个解压成员并比对 CRC 校验码,能发现下载中断造成的损坏;python -m zipfile -t 是 Python 自带模块,任何装了 Python 的机器都能直接用。如果报 error read zip archive 之类的错误,多半是文件没下完,重新下载后再验一次。对加密的 zip,正确做法是回到来源处确认密码或换公开版本,不要用破解工具——这是版权问题,也解决不了「内容版本不对」的根本矛盾。
5.2 增量合并与去重,保持资料库可维护
论文集要「持续更新」,就要让新增 PDF 的合并是一个可重复执行的流程。把新下载的文件放到 new/ 目录,复用在 2.2 节写的 classify 函数,按文件名分类合并进 papers_lib,再用文件内容哈希去重:
import hashlib import shutil from pathlib import Path def file_hash(p: Path) -> str: return hashlib.sha256(p.read_bytes()).hexdigest() seen = set() for pdf in Path("papers_lib").rglob("*.pdf"): seen.add(file_hash(pdf)) for pdf in Path("new").glob("*.pdf"): if file_hash(pdf) not in seen: shutil.move(str(pdf), str(Path("papers_lib", "other", pdf.name))) seen.add(file_hash(pdf))脚本按文件内容哈希去重,避免同一篇论文在多个子目录里重复出现。合并后重跑 2.3 节的 README 生成脚本,更新时间自动刷新。归档完成后,用find papers_lib -name "*.pdf" | wc -l核对数量,与 zip 内的成员数一致才算归档成功。这套流程跑一遍只要几十秒,却能让「毕业设计论文集」从一次性下载变成随时可查、可回溯的个人文献库。
本文还有配套的精品资源,点击获取