当前位置: 首页 > news >正文

Horizon-GS 部署全攻略:从数据集下载到三维重建实战

Horizon-GS 部署全攻略:从数据集下载到三维重建实战

手把手教你搭建大规模航拍-地面联合三维重建环境,跑通 Horizon-GS 完整流程

写在前面

在数字孪生、自动驾驶、VR/AR 等领域,能够同时融合航拍视角(俯视大范围)与地面街景视角(近景细节)的三维重建技术一直是个挑战。现有的 3D Gaussian Splatting(3D-GS)方法大多只针对单一视角,跨视角融合时容易出现视角差异大、数据不均衡、梯度冲突等问题。

Horizon-GS 正是为了解决这一痛点而生的。它通过创新的两阶段训练策略(粗阶段 + 精阶段)和分块合并机制,实现了对超大城市级场景的统一高质量重建,并且支持实时渲染。

本文将为你提供一份从零开始、精确到每条命令的部署指南,涵盖环境配置、数据集下载(重点解决国内网络和磁盘空间问题)、预处理、训练(小场景 & 大场景)、评估及常见问题排错。跟着做,你一定能跑通。


一、准备工作:检查你的硬件与系统

在敲任何命令前,请先确认你的服务器满足以下最低要求:

项目推荐配置
操作系统Ubuntu 20.04 / 22.04 (Windows/WSL2 也可,但更复杂)
GPUNVIDIA RTX 3090 / 4090 / A5000 或同等算力
显存24GB 以上(小场景可降至 12GB,需调低 batch_size)
磁盘空间至少50GB(用于代码、数据集、训练输出)
CUDA 版本11.6 或更高(使用nvidia-smi查看)
Python 版本3.11(项目环境文件已锁定)

⚠️重要:如果你的/data分区已满(比如只剩 0% 可用),请提前规划好数据存放路径(例如/home分区)。后面会详细教你怎么处理。

二、一键配置环境(Conda + 依赖)

2.1 克隆项目代码(含子模块)

# 克隆主仓库,--recursive 会同时拉取依赖的子模块(如 gsplat 变体)gitclone https://github.com/city-super/Horizon-GS.git--recursivecdHorizon-GS

2.2 创建 Conda 环境

项目根目录下已经提供了environment.yml文件,它会自动安装 Python 3.11、PyTorch、CUDA 工具包以及专用的gsplat库。

condaenvcreate--fileenvironment.yml conda activate horizon_gs

如果下载依赖缓慢,可以给 conda 换国内源(如清华源),但environment.yml中也可能包含 pip 包,请耐心等待。

2.3 验证环境

python-c"import torch; print(torch.cuda.is_available())"# 应输出 Truepython-c"import gsplat; print(gsplat.__version__)"# 应输出版本号(如 1.2.0)

如果以上命令报错,说明环境没装好,请重新执行conda env create或手动补装缺失包。

三、下载 HorizonGS 数据集(核心难点)

Horizon-GS 官方提供了三个数据集:HorizonGS、UCGS、MatrixCity。本文以最核心的HorizonGS为例,讲解完整的下载与组织方法。

3.1 选择国内镜像源(解决下载慢/连不上)

Hugging Face 官方源在国内访问极不稳定,我们使用镜像站hf-mirror.com

3.2 方法一:使用hf命令行工具(推荐)

# 安装 huggingface_hub 并启用 hf 命令pipinstall-U"huggingface_hub[hf]"# 设置镜像源exportHF_ENDPOINT=https://hf-mirror.com# 创建数据目录(假设存放在 /home/admin/HorizonGS,因为 /data 可能没空间)mkdir-p/home/admin/HorizonGScd/home/admin# 开始下载(支持断点续传)hf download BoDai/HorizonGS\--repo-type dataset\--local-dir ./HorizonGS\--resume

参数解释

  • --repo-type dataset:告诉工具下载的是数据集(而不是模型)
  • --local-dir:本地保存路径
  • --resume:如果中断,下次执行会继续

预期结果:你会看到进度条,最终在/home/admin/HorizonGS下得到完整的数据集文件。

3.3 方法二:使用wget递归下载(备用方案)

如果你不想安装huggingface_hub,或者担心其缓存占用双倍空间,可以用wget直接拉取:

cd/home/adminmkdir-pHorizonGS&&cdHorizonGSwget-r-np-nH--cut-dirs=4-R"index.html*"-erobots=off\https://hf-mirror.com/datasets/BoDai/HorizonGS/resolve/main/

该命令会递归下载所有文件,并剔除index.html等无用文件。

3.4 处理磁盘空间不足(经典问题)

如果你在执行hf download时遇到OSError: [Errno 28] No space left on device,说明目标分区已满。解决方案:

  1. 检查各分区剩余空间

    df-h

    找到可用空间大的分区,例如/home有 212GB,/有 796GB。

  2. 更改下载目录到有空间的分区:

    cd/home/admin# 或 cd /root# 然后执行上面的下载命令
  3. 软链接到项目的数据目录(让项目能找到数据):
    假设你的项目代码在/home/admin/Horizon-GS,数据集实际在/home/admin/HorizonGS

    cd/home/admin/Horizon-GSmkdir-pdataln-s/home/admin/HorizonGS data/HorizonGS

    这样项目就能通过data/HorizonGS访问数据了,无需移动实际文件。

3.5 验证数据集结构

下载完成后,数据目录应大致如下(具体以官方提供的为准):

HorizonGS/ ├── aerial/ │ ├── images/ # 航拍原始图片 │ └── sparse/0/ # COLMAP 输出的相机参数与点云 ├── street/ │ ├── images/ # 街景图片 │ └── sparse/0/ └── config.yaml # 数据集全局配置(可能不存在,需预处理生成)

注意:原始下载的文件夹可能不叫HorizonGS,请根据实际名称调整软链接。

四、数据预处理:生成训练配置

在正式训练前,必须运行预处理脚本,它会解析相机参数、划分训练/验证集、生成后续训练所需的cameras.json等文件。

cd/home/admin/Horizon-GS# 进入项目根目录# 执行预处理(以 HorizonGS 为例)python preprocess/data_preprocess.py--configconfig/HorizonGS/config.yaml

如果项目提供的config/HorizonGS/config.yaml不存在,你可以参考其他数据集的配置文件手动创建一个,或者直接修改路径。核心内容如下:

# config/HorizonGS/config.yaml 示例(需根据实际调整)data:root_dir:"data/HorizonGS"# 数据集根目录aerial_dir:"aerial"# 航拍子文件夹street_dir:"street"# 街景子文件夹output_dir:"processed"# 预处理输出目录

预处理完成后,会在data/HorizonGS/processed下生成cameras.jsonpoints3D.ply等文件,并输出类似下面的日志:

Preprocessing finished. Total aerial images: 1200, street images: 3400. Saved cameras to data/HorizonGS/processed/cameras.json.

五、模型训练(粗→细两阶段)

Horizon-GS 的核心创新就是两阶段训练。你必须先执行 coarse 阶段,再执行 fine 阶段,不能跳过。

5.1 小场景训练(如 Block_small)

粗阶段 (Coarse)

该阶段主要依赖航拍图像学习全局几何骨架。

python train.py--configconfig/HorizonGS/coarse.yaml
  • 配置文件coarse.yaml中,max_iters默认 30000,aerial_sample_weight通常设为 2~5(比地面权重高)。
  • 训练过程中会定期保存模型到output/HorizonGS/coarse/point_cloud/iteration_xxxxx/
  • 可以在另一个终端运行tensorboard --logdir output/来监控 loss 曲线。
精阶段 (Fine)

粗阶段完成后,加载粗阶段最后的模型,启用地面图像的精细化训练。

python train.py--configconfig/HorizonGS/fine.yaml
  • fine.yaml中会指定load_from = "output/HorizonGS/coarse/point_cloud/iteration_30000"这类路径。
  • 此阶段会冻结航拍高斯的空间属性(位置、协方差),只优化颜色和不透明度;同时地面高斯全参数优化并启用密度控制。

5.2 大场景训练(如 Block_A)

对于超过 1 平方公里的城市级场景,需要使用分块训练避免显存爆炸。

步骤概览:预处理 → 对各块分别执行 coarse → 对各块分别执行 fine → 合并所有块。

# 1. 预处理(生成分块信息)python preprocess/data_preprocess.py--configconfig/Block_A/config.yaml# 2. 训练每个块的 coarse(假设分成了 16 块,项目脚本会自动循环或手动指定)python train.py--configconfig/Block_A/coarse_chunk0.yaml python train.py--configconfig/Block_A/coarse_chunk1.yaml# ... 依次执行# 3. 训练每个块的 finepython train.py--configconfig/Block_A/fine_chunk0.yaml# ...# 4. 合并所有块的最终模型python merge.py-moutput/Block_A--configconfig/Block_A/config.yaml

具体 chunk 的数量和名称在预处理时自动生成,你可以在config/Block_A/下看到多个 yaml 文件。

六、评估与渲染

训练完成后,使用以下命令生成渲染结果并计算指标。

# 渲染测试集的所有视角图片python render.py-moutput/HorizonGS/fine/point_cloud/iteration_30000# 计算 PSNR, SSIM, LPIPSpython metrics.py-moutput/HorizonGS/fine/point_cloud/iteration_30000# 导出为 mesh 文件(.ply 或 .obj)python export_mesh.py-moutput/HorizonGS/fine/point_cloud/iteration_30000

渲染的图片会保存在<model_path>/renders下,指标会打印在终端并保存到results.json

七、常见问题与解决方案(FAQ)

错误现象可能原因解决方法
hf: command not found没有安装 huggingface_hub 或未启用 hf 命令pip install -U "huggingface_hub[hf]"
No space left on device磁盘分区已满使用df -h查看,换到/home等有空间的分区下载;或清理旧数据(如sudo rm -rf /data/mengjun释放 3.8T)
Permission denied读取子目录文件夹权限不够sudo du -sh查看,或用sudo chown -R $USER:$USER /path修改所有者
ModuleNotFoundError: No module named 'gsplat'gsplat 没装好pip install gsplat,或重新执行conda env create
CUDA 报错invalid device functionPyTorch CUDA 版本与驱动不匹配检查nvcc --versionpython -c "import torch; print(torch.version.cuda)",不一致则重新安装 PyTorch
训练 loss 一直不下降预处理错误或配置文件路径不对检查coarse.yaml中的source_path是否指向processed目录;确认航拍和地面图像都能被正确加载
合并后出现明显接缝分块重叠区域太小或融合权重不合适增大预处理时的overlap参数(如 20→30 米),或修改merge.py中的加权平滑半径

八、写在最后:你的下一步

现在,你已经成功将 Horizon-GS 跑通了!你可以在自己的数据上尝试:只需将自己的航拍和街景图像用 COLMAP 重建出相机位姿,然后模仿data/HorizonGS的结构组织文件夹,再运行预处理和训练即可。

如果你在部署过程中遇到其他奇怪的问题,欢迎在评论区留言(记得附上完整的错误日志)。希望这篇博文能帮你节省大量踩坑时间,让你专注于三维重建本身的研究与应用。

Happy Reconstructing! 🚁🚗


参考链接

  • Horizon-GS 官方项目页
  • 论文 PDF
  • Hugging Face 镜像站 hf-mirror.com
http://www.gsyq.cn/news/1526423.html

相关文章:

  • SillyTavern性能调优最佳实践:从延迟优化到内存管理的完整指南
  • 深圳全屋定制支持免费上门量尺出方案的公司有哪些?空间装配前置服务的学术评估与规范筛选
  • 可变参数*args与**kwargs底层原理、混用顺序、生产实战
  • trace.moe完整教程:构建你自己的AI动漫场景搜索引擎
  • 3分钟搭建OBS RTSP服务器:obs-rtspserver插件完整教程
  • 5分钟快速上手猫抓Cat-Catch:浏览器资源嗅探神器的终极指南 [特殊字符]
  • 烘焙食品厂主要分布在哪里?国内主要产区对比
  • 哪家快递最便宜?比价后我选它 - 快递物流资讯
  • 告别混乱!用Ba-IdCode-U插件统一获取UniAppX中的设备ID(OAID/AndroidID/IMEI)
  • CS149ParallelComputing_NotesAssignmentsd
  • python核心基础,这关于基于Moveltg加 Ros2实战Python编程基础实课
  • 2026年厦门正规靠谱婚恋服务/婚介门店TOP6排行大盘点:严肃婚恋平台专项测评 - 互联网科技品牌测评
  • 别再死记硬背了!用一张图搞懂HDLC、X.25、帧中继和ATM的演进关系
  • Python 高手编程系列三千五百零二:处理错误与速率限制
  • 终极指南:使用DDrawCompat在现代Windows上完美运行经典游戏
  • 用Python开发自动化脚本:提高工作效率的利器
  • HashCheck:Windows资源管理器的极速文件哈希校验神器
  • 13ft Ladder终极指南:三步轻松绕过任何付费墙,免费阅读所有付费文章
  • 企业级 Agent 产品:知识库权限隔离与多级审批流的架构设计
  • 如何用Mac Mouse Fix让普通鼠标在macOS上获得专业级体验:终极指南
  • 2026东莞中央空调回收避坑拆机扣费报价缩水怎么防 - 广东再生资源回收
  • 创业团队技术选型:容器编排与资源调度的成本-效率优化
  • 2026广州变压器回收油浸vs干式差价与铜铁分离算价 - 广东再生资源回收
  • 终极指南:免费让老款Mac焕发新生,体验最新macOS系统
  • 构建可扩展的后端系统:架构设计的核心考量
  • 2026年6月国内做得好的X-Ray智能点料机品牌推荐,AI自动插件机/波峰焊机,X-Ray智能点料机厂家口碑推荐 - 品牌推荐师
  • 手机高效使用技巧实战指南
  • Matplotlib的AnnotationBbox太难用?手把手教你实现PyQt图表悬停提示与光标线(避坑指南)
  • 影刀RPA新手教程_魔法指令入门用自然语言生成自动化流程
  • 飞书接入智能体