3DGS语义分割之LangSplat

2024-06-04 00:04
文章标签 分割 语义 3dgs langsplat

本文主要是介绍3DGS语义分割之LangSplat,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LangSplat是CVPR2024的paper. 实现3DGS的语义分割(可文本检索语义)
github: https://github.com/minghanqin/LangSplat?tab=readme-ov-file

主要思想是在3DGS中加入了CLIP的降维语义特征,可用文本检索目标,实现分割。

配置环境:
environment.yml一步一步执行。

conda create -n langsplat python=3.7.13
conda activate langsplatpip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
pip install numpy
pip install tqdm
pip install matplotlib
pip install submodules/langsplat-rasterization
pip install submodules/simple-knn
pip install open-clip-torch
pip install mediapy
pip install tensorboard
pip install opencv-pythonpip install submodules/segment-anything-langsplat
pip install submodules/langsplat-rasterization
pip install submodules/simple-knn

作者有训练好的ckpt 和 output, 直接下载下来,按照issues里面的step操作了一下。
https://github.com/minghanqin/LangSplat/issues/18

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

执行成功,但是在本机效果很差,有点像模型没有被训练,直接用随机值预测的一样。
iou=0.02, localization accuracy=0.1

结果图

RGB:
在这里插入图片描述

apple gt:

在这里插入图片描述

预测的:

在这里插入图片描述

其他的目标也都一样效果不好。

于是决定重新训练一遍。

首先,准备数据集:
下载lerf_ovs。

刚开始里面是images, sparse这两个要用到的文件夹。

然后按github的说明,运行3DGS, 得到一个权重和点云文件。
也就是output这个文件夹全部。
在这里插入图片描述

进入到3DGS的github:https://github.com/graphdeco-inria/gaussian-splatting
按照它的说明。

# HTTPS
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursivepython train.py -s ~/dataset/lerf_ovs/teatime

这个模块是要安装的,每修改一次都要重新安装,

pip install submodules/diff-gaussian-rasterization

训练好了,但是没有pth文件
需要这样训练才会保存pth文件

python train.py -s ~/dataset/lerf_ovs/teatime --checkpoint_iterations 30000

然后把输出的output文件夹整个copy到~/dataset/lerf_ovs/teatime下面。

下一步,
提取语言特征

python preprocess.py --dataset_path ~/dataset/lerf_ovs/teatime

训练autoencoder

cd autoencoder
python train.py --dataset_path ~/dataset/lerf_ovs/teatime --dataset_name teatime --encoder_dims 256 128 64 32 3 --decoder_dims 16 32 64 128 256 256 512 --lr 0.0007

训练3D语义特征

python test.py --dataset_path ~/dataset/lerf_ovs/teatime --dataset_name teatime

下面要训练不同feature_level的LangSplat模型
–start_checkpoint是上面训练的3DGS模型

python train.py -s ~/dataset/lerf_ovs/teatime -m output/teatime --start_checkpoint ~/dataset/lerf_ovs/teatime/output/teatime/chkpnt30000.pth --feature_level 1
#同样的训练level 2 和 level 3

渲染

 python render.py -s ~/dataset/lerf_ovs/teatime -m output/teatime_1 --include_feature#同样的渲染level 2 和 level 3

最后eval, 需要改一下eval.sh中的gt路径。

cd eval
sh eval.sh

现在的效果好多了。
iou=0.5514, localization accuracy=0.7966

现在产生的apple mask

在这里插入图片描述

render.py产生的并不是ply文件,而是npy和png文件, 每张图片分别对应一个.

output/teatime_1/train/ours_None/renders里面是png文件,
是3DGS根据相机的位姿生成对应的渲染语义图片。

在这里插入图片描述
所以其实LangSplat生成的结果是3DGS,
即output/teatime下面的cnkpnt30000.pth,
里面存的有语义信息,通过渲染可以得到不同视角下的语义图片。

这篇关于3DGS语义分割之LangSplat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028495

相关文章

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

基于YOLO8的图片实例分割系统

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 segment_app.py 二、核心代码介绍篇2.1 segment_app.py2.2 scan_taskflow.py 三、结语 代码资源:计算机视觉领域YOLO8技术的图片实例分割实

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

图像分割分析效果2

这次加了结构化损失 # 训练集dice: 0.9219 - iou: 0.8611 - loss: 0.0318 - mae: 0.0220 - total: 0.8915  # dropout后:dice: 0.9143 - iou: 0.8488 - loss: 0.0335 - mae: 0.0236 - total: 0.8816 # 加了结构化损失后:avg_score: 0.89

linux分割和合并文件命令

split命令: for i in {1..30}; do num=$(printf "%05d\n" "$i");name="model-$num-of-00030.safetensors";split -b 3G $name tmp/$name-;echo $name;done 合并命令: for i in {1..30}; do num=$(printf "%05d\n" "$i")

力扣86.分割链表

class Solution {public ListNode partition(ListNode head, int x) {// 初始化两个链表的头节点和尾节点,分别用于存储小于x和大于等于x的节点ListNode leftHead = null, leftTail = null;ListNode rightHead = null, rightTail = null;// 临时变量,用于遍历

力扣416-分割等和子集(Java详细题解)

题目链接:416. 分割等和子集 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话,建议可以去学一学,01背包问题可以说是背包问题的基础。 如果大家感兴趣,我后期可以出一篇专门讲解01背包问题。 dp五部曲。 1.确定dp数组和i