LERF: 语言嵌入辐射场
这是LERF的官方实现。
安装
LERF遵循此处描述的Nerfstudio自定义方法集成指南。
0. 安装Nerfstudio依赖
按照这些说明进行操作,直到包括"tinycudann"在内,以安装依赖项并创建环境
1. 克隆此仓库
git clone https://github.com/kerrj/lerf
2. 将此仓库作为Python包安装
导航到此文件夹并运行python -m pip install -e .
3. 运行ns-install-cli
检查安装
运行ns-train -h
:您应该看到一个"子命令"列表,其中包括lerf、lerf-big和lerf-lite。
使用LERF
现在LERF已安装,您可以开始使用了!
- 使用
ns-train lerf --data <data_folder>
启动训练。这指定了要使用的数据文件夹。有关更多详细信息,请参阅Nerfstudio文档。 - 通过转发查看器端口(我们使用VSCode进行此操作)连接到查看器,然后单击训练脚本输出中提供的
viewer.nerf.studio
链接 - 在查看器中,您可以在文本框中输入文本,然后选择
relevancy_0
输出类型来可视化相关性地图。
相关性地图归一化
默认情况下,查看器显示使用turbo色图缩放的原始相关性。由于低于0.5的值对应于不相关区域,我们建议将range
参数设置为(-1.0, 1.0)。要匹配论文中的可视化效果,请勾选Normalize
复选框,这会将值拉伸以使用完整的色图。
下图显示了查询"Lily"的rgb、原始、居中和归一化输出视图。
分辨率
Nerfstudio查看器动态改变分辨率以达到所需的训练吞吐量。
要增加分辨率,请暂停训练。以高分辨率(512或以上)渲染可能需要一两秒钟,因此我们建议以256px进行渲染
lerf-big
和lerf-lite
如果您的GPU内存不足,我们提供了lerf-lite
实现,它减少了LERF网络容量和光线采样数量。如果您发现仍需要减少内存占用,对内存影响最大的参数是num_lerf_samples
、hashgrid级别和hashgrid大小。
lerf-big
提供了一个更大的模型,使用ViT-L/14代替ViT-B/16,适用于具有大内存GPU的用户。
扩展LERF
请注意,随着更多功能集成到Nerfstudio中,可视化代码会发生变化,因此如果您fork此仓库并在此基础上进行开发,请定期检查额外的更改。
问题
请为任何安装/使用问题开启Github问题。我们已尝试通过lerf-lite
支持尽可能广泛的GPU,但可能需要提供更多低内存占用版本。谢谢!
已知待办事项
- 集成到
ns-render
命令中,以便从命令行使用自定义提示渲染视频
使用自定义图像编码器
我们设计了代码以模块化方式接受任何实现BaseImageEncoder
接口(image_encoder.py
)的图像编码器。不同编码器实现的示例可以在clip_encoder.py
和openclip_encoder.py
中看到,它们分别实现了OpenAI的CLIP和OpenCLIP。
代码结构
(待扩展此部分)
用于编辑和构建LERF的主要文件是lerf.py
,它扩展了Nerfstudio的Nerfacto模型,添加了额外的语言字段、损失和可视化。CLIP和DINO预处理由pyramid_interpolator.py
和dino_dataloader.py
完成。
引用
如果您觉得这个项目有用,请引用以下论文!
@inproceedings{lerf2023, author = {Kerr, Justin and Kim, Chung Min and Goldberg, Ken and Kanazawa, Angjoo and Tancik, Matthew}, title = {LERF: Language Embedded Radiance Fields}, booktitle = {International Conference on Computer Vision (ICCV)}, year = {2023}, }