Jumpat / SegmentAnythingin3D

Segment Anything in 3D with NeRFs (NeurIPS 2023)
Apache License 2.0
831 stars 52 forks source link

TypeError: RayGenerator.__init__() takes 2 positional arguments but 3 were given #79

Open dadaaichifan opened 2 weeks ago

dadaaichifan commented 2 weeks ago

我在使用nerfstudio版的sa3d时候,运行 image 碰到了这样的bug image 请您帮我解决一下,万分感谢🙇

Jumpat commented 2 weeks ago

你好,这看上去应该是nerfstudio的版本没有对齐。请检查nerfstudio是否是0.2.0版本

dadaaichifan commented 2 weeks ago

你好,我的cuda和torch版本安装不了nerfstudio 0.2.0,请问有其他的解决办法吗?谢谢你🙏

Zanue commented 2 weeks ago

你好,请问你能安装torch1.12么?

dadaaichifan commented 2 weeks ago

非常抱歉,我安装不了,因为我的cuda版本是11.8,torch1.12没有cuda11.8对应的版本

Zanue commented 2 weeks ago

你好,一般来说cuda版本高于torch版本就可以,你可以安装torch1.12的cuda11.6或者cuda11.3版本

dadaaichifan commented 2 weeks ago

好吧,我明天尝试一下。之前我尝试安装过cuda版本不对应的torch来运行你们的代码,会出现段错误的问题,https://github.com/Jumpat/SegmentAnythingin3D/issues/75

dadaaichifan commented 2 weeks ago

你好,我今天遇到了这个问题 image 我的torch版本为1.13.1+cu117,functorch=1.13.1,nerfstudio=0.2.0

Jumpat commented 2 weeks ago

似乎还是配置版本的问题,我们这里没有遇到过类似的报错。可能需要检查这个lib的配置:https://github.com/nerfstudio-project/viser

dadaaichifan commented 2 weeks ago

非常抱歉打扰你,我今天又碰到了新的错误。 image 非常感谢你🙏

Zanue commented 2 weeks ago

看上去是GroudingDINO没有预测出box

dadaaichifan commented 2 weeks ago

看上去是GroudingDINO没有预测出box

请问我该怎么去排查这个错误

Zanue commented 2 weeks ago

报错有一行

Get Box from GroundingDINO: [ ]

如果是正常情况,这个括号里会出现Box的坐标。这里括号内是空的,说明text prompt并没有query到物体。你需要修改text prompt,或者在代码里手动指定point prompt

dadaaichifan commented 2 weeks ago

报错有一行

Get Box from GroundingDINO: [ ]

如果是正常情况,这个括号里会出现Box的坐标。这里括号内是空的,说明text prompt并没有query到物体。你需要修改text prompt,或者在代码里手动指定point prompt 请问,我想检测一组图片里的螺丝刀。 我的命令语句是 ns-train sa3d --data /data/zkx/colmap/gaizhui --load-dir "/data/zkx/nerf-output/gaizhui/nerfacto/2024-06-20_173728/nerfstudio_models/" --pipeline.text_prompt screwdriver --pipeline.network.num_prompts 1 我的命令语句这样写对吗?

Zanue commented 2 weeks ago

--pipeline.network.num_prompts 建议使用一个大一点的数字,比如3~10。

不过你的报错的原因似乎是screwdriver这个text prompt并没有让GroundingDINO定位到图中的螺丝刀。可能是因为螺丝刀在图片中太小了?

dadaaichifan commented 2 weeks ago

--pipeline.network.num_prompts 建议使用一个大一点的数字,比如3~10。

不过你的报错的原因似乎是screwdriver这个text prompt并没有让GroundingDINO定位到图中的螺丝刀。可能是因为螺丝刀在图片中太小了? --pipeline.network.num_prompts 这个参数代表的是在图片里提取物体的数量吗? 应该不是螺丝刀在图片里太小的问题,因为我的一组图片是围绕着螺丝刀360°拍摄的一组图片,比如 image image image

Zanue commented 2 weeks ago

--pipeline.network.num_prompts是模型的一个超参数,指定SAM在self-prompting过程中的最大prompt数量,详情可参考我们的论文。

图中的螺丝刀应该没啥问题,请检查两件事情:

  1. nerfstudio重建好的图片是否有问题(可以使用ns-viewer查看)
  2. text prompt是在训练集第一帧里query物体,请手动保存用于query物体的帧,查看该图是否有问题
dadaaichifan commented 2 weeks ago

你好,我现在又碰到了ZeroDivisionError: float division by zero这个问题。 image 非常感谢和期待您的解答🙏,此外请问你们当初运行ns-train sa3d这条命令时,运行了多长时间?

Zanue commented 2 weeks ago

我们并没有遇到过这样的问题。。。

一般训练集有三四十张图片时,训练sa3d大概需要2,3分钟

Zanue commented 2 weeks ago

试试将--pipeline.network.num_prompts 设置成10~20

Zanue commented 2 weeks ago

Nerfstudio版本的SA3D使用了nerfacto

dadaaichifan commented 2 weeks ago

试试将--pipeline.network.num_prompts 设置成10~20

好的,我后面再去试试,谢谢你

dadaaichifan commented 2 weeks ago

Nerfstudio版本的SA3D使用了nerfacto

image run.py里面是用了基础的NeRF方法还是类似nerfacto这种经过改良的NeRF

Zanue commented 2 weeks ago

这里的run.py是DVGO版本的SA3D,使用的重建模型是DVGO

dadaaichifan commented 1 week ago

试试将 设置成10~20--pipeline.network.num_prompts

我设置成了20,效果还不是太好,只分割出了刀柄部分。 image image 请问有办法只export分割的那部分吗?就是这样 image

Zanue commented 1 week ago

nerfstudio版本的SA3D暂时不支持导出mesh

Zanue commented 1 week ago

一般来说第一帧能把螺丝刀身分割出来的话,后面是能继续把刀身分出来的,可能还有一些参数设置有问题?

可以先检查一下第一帧是否分对,如果对了,再尝试调节--pipeline.model.mask_fields.mask_threshold,该参数表示滤去该值以下的mask,你可以尝试把这个数从默认的0.1调小一点

dadaaichifan commented 1 week ago

一般来说第一帧能把螺丝刀身分割出来的话,后面是能继续把刀身分出来的,可能还有一些参数设置有问题?

可以先检查一下第一帧是否分对,如果对了,再尝试调节--pipeline.model.mask_fields.mask_threshold,该参数表示滤去该值以下的mask,你可以尝试把这个数从默认的0.1调小一点

请问怎么查看第一帧分割的图像?

dadaaichifan commented 1 week ago

nerfstudio版本的SA3D暂时不支持导出mesh

请问可以从coarse_segmentation_gui.tar这个文件中导出成网格吗?