Jumpat / SegmentAnythingin3D

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

训练Nerf阶段,渲染生成的视频只有部分,感觉相机路径只用了部分。且运行sa3d时报错 #40

Closed iloveming closed 7 months ago

iloveming commented 7 months ago

我的脚本如下: python run.py --config=configs\nerf_unbounded\motuo_bonsai_video.py --stop_at=20000 --render_video --i_weights=10000, 配置文件只是复制重命名了一下,然后把里面的文件路径改了,是我自己的数据集。 数据集制作的方式是,利用llff的脚本(https://github.com/Fyusion/LLFF/blob/master/imgs2poses.py)生成poses.npy文件,然后训练,渲染的视频如图所示out 请问是什么问题? 然后还有一个问题是,我拿这个训练完的结果,去运行sa3d, 脚本如下:

python run_seg_gui.py --config=configs\nerf_unbounded\seg_motuo_bonsai_video.py --segment --sp_name=_gui --num_prompts=20 --render_opt=train --save_ckpt 报错如下: Loading images from ./data/motuo_garden\images_4 100%|███████████████████████████████████████████████████████████████████████████████| 443/443 [00:02<00:00, 167.67it/s] Loaded image data (540, 962, 3, 443) [540. 962. 700.22906946] Loaded ./data/motuo_garden 1.2512208185991929 41.334755104635775 D:\WORK\SegmentAnythingin3D\lib\load_llff.py:252: UserWarning: Optimal rotation is not uniquely or poorly defined for the given sets of vectors. R = scipy.spatial.transform.Rotation.align_vectors( Data: (443, 3, 5) (443, 540, 962, 3) (443, 2) HOLDOUT view is 141 Loaded llff (443, 540, 962, 3) torch.Size([200, 3, 5]) [540. 962. 700.22906] ./data/motuo_garden Auto LLFF holdout, 8 DEFINING BOUNDS near_clip 0.29413895308971405 original far 10.796710014343262 NEAR FAR 0 2.3278315 train: start compute_bbox_by_cam_frustrm: start C:\software\miniconda3\envs\sa3d\lib\site-packages\torch\functional.py:478: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ..\aten\src\ATen\native\TensorShape.cpp:2895.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined] compute_bbox_by_cam_frustrm: xyz_min tensor([-0.9019, -0.8944, -0.7016]) compute_bbox_by_cam_frustrm: xyz_max tensor([0.8534, 0.8608, 1.0537]) compute_bbox_by_cam_frustrm: finish SAM initializd. Traceback (most recent call last): File "D:\WORK\SegmentAnythingin3D\run_seg_gui.py", line 103, in train_seg(args, cfg, data_dict) File "D:\WORK\SegmentAnythingin3D\run_seg_gui.py", line 52, in train_seg gui.run() File "D:\WORK\SegmentAnythingin3D\lib\gui.py", line 58, in run init_rgb = self.Seg3d.init_model() File "D:\WORK\SegmentAnythingin3D\lib\sam3d.py", line 83, in init_model assert reload_ckpt_path is not None and 'segmentation must based on a pretrained NeRF' AssertionError

请问这个怎么解决,是哪里出了问题,我理解只要文件结构和项目文档一样,应该就可以运行吧。还请您帮忙看看,谢谢

iloveming commented 7 months ago

您可以去对照下数据集的原视频,这两个是有差别的,感觉顶部被削低了

Jumpat commented 7 months ago

感谢您对我们工作的关注!请检查下logs文件夹下的文件结构,根据该报错所对应的代码,应该是last_ckpt_path对应的文件为空导致的错误,引起问题的原因有很多,如文件命名错误,logs下文件夹命名错误,config文件中对应名称错误。我需要更多相关信息来帮助定位问题。

iloveming commented 7 months ago

您好,通过修改配置文件,举例来说,就是将bicycle.py和seg_bicycle.py中的expname改成一致解决sa3d报错问题(目前nerf_unbounded的两个配置文件不同,是否是bug?)

iloveming commented 7 months ago

还有一个问题,就是在训练nerf阶段,在render_video_nerf_unbounded文件夹中渲染的视频,感觉poses只用了一部分。但我看源码发现render_video模式下采用的是i_test的poses。debug后发现i_test也是均匀采样的,那为什么会出现感觉就只用了一部分的Poses的问题呢?我没发现原因,您那边有没有什么思路。

原视频如下:

https://github.com/Jumpat/SegmentAnythingin3D/assets/131581553/7414ed3d-bbb7-4ca7-929a-e080b704d542

渲染后的视频如下: ![Uploading out.gif…]()

Jumpat commented 7 months ago

您好,通过修改配置文件,举例来说,就是将bicycle.py和seg_bicycle.py中的expname改成一致解决sa3d报错问题(目前nerf_unbounded的两个配置文件不同,是否是bug?)

这里的expname会决定模型参数存档的路径,通过更改expname可以实现对同一个场景重复多次具有不同参数/分割目标的实验,因此在分割和3D重建的两个阶段expname应该保持一致。

Jumpat commented 7 months ago

渲染视频和原始数据集对应的视频有差异是正常的,这是由于渲染的脚本不同,渲染时选用的相机视角也不同,通过修改相机的内外参数可以实现渲染一样的视频

iloveming commented 7 months ago

好的,谢谢您的不吝赐教