外行人浅测一下高德的视频转 3D 空间工具 ABot-Recon

起因

自 2022 年把以前拍的行车记录 POV视频发到网上,收获不少流量后,我拍了不少行车 POV视频。虽然发出来都加速,但是考虑到将来可能有别的用处,我还是保存着原始的视频。于是,这些视频就累积到了10 个多 TB。

至于“别的用处”,我倒是想把这些视频打包卖给需要做街景数据分析的企业,但是我也不知道渠道,也不知道有没有企业愿意买,毕竟只是非专业的单方向画面。对于我,2023- 2024 年的时候,我把这些分段视频按项目合并起来,缩小到 1080P,然后使用kplayer,24小时直播回放这些行车视频。当然后来哔哩哔哩不允许这么做了,同时还提高了用推流码直播的门槛,于是也搞不下去了。

时间到了 2026 年 9 月。我偶然看到高德发布了 ABot-Recon,可以通过图片序列转3D 空间,示例里面就有将行车POV视频的转换效果。我想着自己有那么多这样的视频资源,不用这种工具实在是可惜——实际上我还想尝试搞驾驶游戏,场景用真实的街景数据生成。

高德在 HuggingFace 上提供了 Demo,用户可以上传视频,生成结果。视频要求12 fps,我为了减少空间,就找了自己的一个行车视频,缩小到1080P,按要求转码了。不过,线上 Demo只支持非常小一部分的展示,需要看实际效果还是在本地运行好一些。

适配之路

9 月末,权重发布,我下载了代码和权重文件,拿上面提到的视频测试。

我用的显卡是 NVidia RTX 4060 Ti,显存 16 GB。官方用的A100、H100,个人想都不要想了。我也只是抱着试一试的心态测试能不能在我这张显卡上跑通。不过,我对这种大模型相关的项目几乎是一窍不通,多亏AI,我才得以快速实现自己想要的功能。

尽管 Demo 是上传视频获得结果,但是 README里面的输入方式只提供了图片序列这一个方式。明明读取视频就是把它拆成图片序列就行了。我就让AI 帮忙扩展了功能,使其能够读取视频。

之后就是 PyTorch 的问题了。如果按项目提供的依赖,默认装的是 CPU版本的 PyTorch,需要自己安装 CUDA 版本的。

然后依然报错:

于是让 AI 排查问题,得出以下原因:

  • Windows 版 PyTorch 2.5.1 没有编译 FlashAttention CUDA backend。
  • 代码里 FlashAttention.forward() 对 bfloat16 强制使用了_sdpa_flash_ctx()。
  • _sdpa_flash_ctx()只允许:SDPBackend.FLASH_ATTENTION
  • FlashAttention 不可用时,PyTorch 没有被允许回退到 math/efficientkernel,于是直接报 No available kernel。

于是它:

  • 将 bf16 的 SDPA backend 从“仅FlashAttention”改为:[FLASH_ATTENTION, EFFICIENT_ATTENTION, MATH]
  • 在支持 FlashAttention 的环境中仍然优先使用 FlashAttention。
  • 在当前 Windows/PyTorch 环境中自动回退到可用 kernel。

加快速度

修改代码后,问题解决。不过,生成速度太慢了,4 ~ 30 s才能处理一帧,一个快 7 分钟的 12 fps视频,处理起来就要花六个小时。因此,还是要获得 CUDA 编译版本的RoPE2D。还好 AI 告诉了我在 Windwos 上怎么编译,只是很麻烦。

至于文档里面提到的 flashinfer,在 Windows 上跑不通。

下载工具

首先要下载 VS 2022 生成工具。注意,一定要注意版本(2026的不行),否则之后编译时会报错:

同时安装以下组件:

  • (工作负荷)使用 C++ 的桌面开发
  • (单个组件)MSVC v143 - VS 2022 C++ x64/x86生成工具(v14.38-17.8)(必须是这个版本的,尽管标注不受支持。新版本的和CUDA 12.1 不兼容。)
  • (单个组件)Windows 11 SDK(看你的系统)

以及 CUDA Toolkit 12.1。我的电脑上已经安装了13.0,但还是要下载这个版本的。好在可以共存。安装的时候注意,只需要安装CUDA 相关的,其他的不用安装。

安装好后,要在开始菜单中找到“x64 Native Tools Command Prompt for VS2022”,点击进入对应环境。以下的过程都在相同的会话中运行,因为会用到临时的环境变量。

然后,因为上面安装生成工具时,安装了多个版本,所以接下来还要指定生成工具的版本:

强制本次编译使用 CUDA 12.1

进入项目根目录,激活 Python 虚拟环境后:

验证:

安装 Python 编译工具

编译 cuRoPE2D

验证扩展已能导入

回到项目目录后:

之后就可以以更快速度运行了,只要确保环境变量设置了ABOT_RECON_ROPE2D_BACKEND=cuda。实测 15 分钟就完成了之前 6个多小时的任务。

至此,命令如下:

--video 这个参数是我让 AI添加的。如无特殊说明,接下来的一些命令也是如此,与原版不一样。你可以在我 Fork的仓库的 video 分支 使用对应的代码。

--loop-closure在序列有重访区域时可以使用。需确保有对应模型:

预览点云场景

demo.py 生成了各种 npy 文件。通过scripts/export_reconstruction_ply.py 能够生成点云,如:

但是生成的文件,我用在线的点云查看器,效果不好,并不像我预想中的能够查看第一视角的场景。

于是我让 AI 做了交互查看 + 展示行车过程的网页 Demo,也放在前面提到的video 分支。

交互查看的使用例:

参数:

它提到了高斯泼溅,但是追问才发现,高德的这个工具并不是为高斯泼溅准备的,只用它的生成结果只能搞搞伪高斯泼溅:

  • 把点变成带 opacity / scale / quaternion 的 Gaussian
  • 用 SuperSplat 或本地 WebGL viewer 查看
  • 不需要原始视频
  • 很快就能看到“泼溅渲染风格”
  • 但它不是真正从图片训练出来的 3DGS,只是点云的高斯化显示

不过还是能搞的。于是之后就让它这么干了。

需要先把现有 RGB 点云转换成标准 3DGS PLY 结构:

  • 每个点变成一个 isotropic Gaussian
  • 保留 RGB 颜色
  • 写入f_dc、opacity、scale、rot
  • 支持 voxel 降采样
  • 输出标准 Gaussian Splat PLY

命令如下:

对应的网页预览放在了tools/pseudo_gaussian_viewer.html,需要打开服务器浏览。

我对这结果不满意。看到官方的演示中,能够看到比较模糊的交通标志信息。于是我让AI 又做了类似于官方示例的效果tools/point_cloud_viewer.html:

尽管做了很多调整,但是这个工具应该不适合我。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论