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

自定义数据实现SA3D

SA3D:Segment Anything in 3D with NeRFs
实现了3D目标分割
在这里插入图片描述
原理是利用SAM(segment anything) 模型和Nerf分割渲染3D目标,
SAM只能分块,是没有语义标签的,如何做到语义连续?
SA3D中用了self-prompt, 根据前一帧的mask自己给出提示点,用SAM再预测下一帧的mask.

1.准备数据

这里用llff数据的格式。
它需要的input是图像,colmap建好的poses, 训练好的nerf。

通过llff的fern文件夹说明自定义数据怎么准备。

nerf_llff_data/fern文件夹包含如下数据,

在这里插入图片描述
其中images是相机拍摄的原图,size为4032 * 3024,
由于图片太大,于是有了下采样4倍的images_4, 下采样8倍的images_8.
用的时候images_4就可以了。
sparse和database.db 是colmap生成的相机内外参,colmap怎么用参考其他。
poses_bounds.npy由sparse生成,后面会说。
最后2个用不到。

1.1 拍摄图片或视频

图片的话按照llff github 上的要求,

根据经验,您应该使用视图之间最大视差不超过约 64 像素的图像(观察距离相机最近的物体,不要让它移动超过视图之间水平视场的 1/8)。图片)。我们的数据集通常包含 20-30 张以粗略网格模式手持拍摄的图像。

最好是网格状拍。

在这里插入图片描述
如果拍的是视频,把视频转为图片序列。

把images里面拍到的图片下采样4倍,存入images_4文件夹。

1.2 生成pose

自己安装colmap. 或者用llff github 上的imgs2poses.py
这里用colmap生成。

colmap选Reconstruction -> Automatic Reconstruction.
只需要填workspace folder和image folder.
image folder要选images,而不是images_4.
Dense model的勾可以去掉,节省时间。
然后run, 你就会得到sparse文件夹。

然后你需要用这里的pose_utils.py生成poses_bounds.npy.
需要下载这3个文件。

在这里插入图片描述

2.训练模型

2.1 训练nerf

设置文件:
configs/llff/fern.py
configs/liff/seg_fern.py

调整factor需要的文件
configs/llff/llff_default.py
configs/default.py
configs/llff/llff_seg_default.py
configs/seg_default.py

上面这些设置文件可以修改了直接用,也可以新建类似的。
2个设置文件中修改数据集的路径。

如果你不用下采样4倍的图片,比如要用下采样8倍的,
在后面4个文件中,把factor置8. 如果用原图,factor=1.

训练nerf

python run.py --config=configs/llff/fern.py --stop_at=20000 --render_video --i_weights=10000

你可能会遇到sam3d.py中的bug,
UnboundLocalError: local variable ‘sam_model_registry’ referenced before assignment
解决方法,修改sam3d.py,

class Sam3D(ABC):'''TODO, add discription'''def __init__(self, args, cfg, xyz_min, xyz_max, cfg_model, cfg_train, \data_dict, device=torch.device('cuda'), stage='coarse', coarse_ckpt_path=None):...if args.mobile_sam:...else:from segment_anything import sam_model_registry  #加上这一句,修复bugsam_checkpoint = "./dependencies/sam_ckpt/sam_vit_h_4b8939.pth"...

然后会在log/xx/xx/render_video_fine_last下面得到渲染好的3D场景。

2.2 训练SAM+nerf

python run_seg_gui.py --config=configs/llff/seg/seg_fern.py --segment \
--sp_name=_gui --num_prompts=20 \
--render_opt=train --save_ckpt

会给一个链接,点进webUI,
这第一帧图包括后面训练的图,是上面训练nerf时渲染的图片,
如果你换了数据集,一定要重新训练nerf, 不然这些图片就还是之前的。

在第一帧图上选你要分割的物体。

在这里插入图片描述

训练中不需要再标注,SAM本身是没有语义的,为了保持语义的连续性,采用自标注的方法,
不断在mask上产生新标注的点。
在这里插入图片描述
分割及渲染结果。
在这里插入图片描述

http://www.lryc.cn/news/279348.html

相关文章:

  • 设计模式基础概念:探索设计模式的魅力
  • 【Leetcode】2182. 构造限制重复的字符串
  • Kubernetes(K8S)云服务器实操TKE
  • 设置弹窗随鼠标位置移动
  • Spring Boot实现数据加密脱敏:注解 + 反射 + AOP
  • jmeter和meterSphere如何使用第三方jar包
  • API对象上千个,有啥关联性,kubectl-tree一键搞定
  • java自定义工具类在List快速查找相同字段值对象
  • codeforces Hello 2024 - C - Grouping Increases --- 题解
  • STM32H5培训(一)总览
  • 亚马逊云科技 WAF 部署小指南(五):在客户端集成 Amazon WAF SDK 抵御 DDoS 攻击...
  • 高光谱分类论文解读分享之基于多模态融合Transformer的遥感图像分类方法
  • Trans论文复现:基于数据驱动的新能源充电站两阶段规划方法程序代码!
  • 将抖音视频转成MP3并下载
  • C程序训练:与输入有关的错误
  • 制作 CentOS Stream9 的U盘系统启动盘
  • Vulnhub靶机:driftingblues 1
  • CloudCompare——点云空间圆拟合
  • 解决POI报错POIXMLTypeLoader不存在的问题
  • 关于rewriteBatchedStatements的源码分析
  • 自动化神器 Playwright 的 Web 自动化测试解决方案
  • docker filebeat 将日志多级目录和多维json数据日志同步到es
  • 【机器学习】模型参数优化工具:Optuna使用分步指南(附XGB/LGBM调优代码)
  • webview全屏处理,即插即用
  • 实录分享 | 央企大数据平台架构发展趋势与应用场景的介绍
  • UE5 将类修改目录
  • GPT实战系列-ChatGLM3管理工具的API接口
  • Python 列表、元组、字典区别
  • [足式机器人]Part2 Dr. CAN学习笔记 - Ch03 傅里叶级数与变换
  • 你想使用域名访问一个ip的网页,你应该怎么办呢?