GitHub项目地址:Jumpat/SegAnyGAussians: The official implementation of SAGA (Segment Any 3D GAussians) (github.com)
一、项目准备
1、下载原项目的zip包解压
2、下载third_party目录下的两个模块,放到对应目录下
3、下载预训练模型和数据集
数据集和预训练模型放到项目目录下,项目结构可以参考下图(之后的参考命令也是以此项目结构为基础):
二、项目配置
1、配置CUDA 11.6环境,使用nvcc -V命令确认
2、配置pytorch环境,使用命令:
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
3、配置pytorch3d,使用命令:
conda install https://anaconda.org/pytorch3d/pytorch3d/0.7.1/download/linux-64/pytorch3d-0.7.1-py37_cu116_pyt1121.tar.bz2
4、分别cd到以下几个目录,通过命令安装子模块
在以下目录:
./submodules/diff-gaussian-rasterization
./submodules/diff-gaussian-rasterization_contrastive_f
./submodules/simple-knn
./third_party/kmeans_pytorch
./third_party/segment-anything分别使用命令:
pip install -e .
5、其他需要的模块使用 pip install即可
pip install plyfile==0.8.1
pip install tqdm
pip install jupyter
pip install opencv-python
pip install matplotlib
pip install numba
6、一些常见的报错
# (1)No such file or directory: ':/usr/local/cuda-11.6/bin/nvcc': ':/usr/local/cuda-11.6/bin/nvcc'
解决:终端执行export CUDA_HOME=/usr/local/cuda
# (2)subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1
解决:setup.py中的“cmdclass={'build_ext': BuildExtension}”改为“cmdclass={'build_ext': BuildExtension.with_options(use_ninja=False)}”
# (3)Unable to create environments file. Path not writable.
解决:终端执行sudo chown -R 1000:1000 /home/userName/.conda,然后重启电脑。其中,userName就是当前登陆用户的用户名。
三、项目运行
1、extract_features.py的第18行加上parser.add_argument("--downsample", default="4", type=str)
说明:设置一次。以防使用下采样4倍的数据集时报错。
2、特征提取。
python extract_features.py --image_root <path to the scene data> --sam_checkpoint_path <path to the pre-trained SAM model> --downsample <1/2/4/8>例如:python extract_features.py --image_root data/360_v2/bicycle --sam_checkpoint_path dependencies/sam_ckpt/sam_vit_h.pth --downsample 4
3、mask生成。
python extract_segment_everything_masks.py --image_root <path to the scene data> --sam_checkpoint_path <path to the pre-trained SAM model> --downsample <1/2/4/8>例如:python extract_segment_everything_masks.py --image_root data/360_v2/bicycle --sam_checkpoint_path dependencies/sam_ckpt/sam_vit_h.pth --downsample 4
4、预训练3DGS模型。
python train_scene.py -s <path to COLMAP or NeRF Synthetic dataset>例如:python train_scene.py -s data/360_v2/bicycle
5、训练三维特征。
python train_contrastive_feature.py -m <path to the pre-trained 3DGS model>例如:python train_contrastive_feature.py -m output/1c7b8dc0-0其中:1c7b8dc0-0是预训练的3DGS模型
6、分割。
执行prompt_segmenting.ipynb,也可以将其另存为prompt_segmenting.py并执行
其中需要设置这些参数:
参数 | 参数值 |
DATA_ROOT | data/360_v2/bicycle |
MODEL_PATH | ./output/1c7b8dc0-0 |
FEATURE_GAUSSIAN_ITERATION | 30000 |
SAM_CKPT_PATH | ./dependencies/sam_ckpt/sam_vit_h.pth |
mask_id | 0,1,2 |
input_point | Np.array([[392,500]]) |
说明:
(1)mask_id根据需要设置为0或1或2。
(2)input_point:提示点。来源于数据集的第一张图片。例如使用下采样4倍后的数据集,那么应该使用images_4的第一张图片来指定提示点。此处使用了一个提示点。实际训练时根据需要可使用多个提示点。
7、在SIBR_Viewers工具中执行:./install/bin/SIBR_gaussianViewer_app -m output/1c7b8dc0-0
说明:
(1)需要把seg_no_mask_point_cloud.ply重命名为point_cloud.ply。
(2)-m后面的是模型的路径。