SVDFormer项目配置(Windows10+CUDA12.6)

项目地址

一、环境配置

1. 安装CUDA Toolkit 12.6(若无)

(CUDA Toolkit 的版本可以与 CUDA 版本不一致,CUDA 可以向后兼容,比如 CUDA VERSION: 13.0,CUDA Toolkit VERSION: 12.9)
1.1 下载网址,注意事项如下
image
1.2 安装步骤如下
image

2. 安装miniconda

2.1 下载网址,下载“Miniconda3-py310_23.11.0-2-Windows-x86_64.exe”这个版本,如图所示
image
2.2 安装中注意勾选如下内容(重点是PATH那条必须勾选)
image

3. 安装Visual Studio Build Tools(轻量化编译工具,相较于完整VS)

(编译器,Windows环境下用于编译安装后续的cuda extension——PointNet++, Chamfer Distance和EMD损失扩展)
3.1 下载网址,进去即自动下载2022版
3.2 安装时需勾选 C++ 编译环境
3.3 安装完成结果如下
image
3.4 另:兼容自用机(CUDA 11.4),需安装 VS 2017 ~ VS 2019 中的任一一版,安装结果如下(避免安装多版本)
image

4. 安装vscode

4.1 下载网址,点击“Download for Windows”
4.2

5. 安装Pytorch

5.1 下载网址,按实际情况勾选(特别要与CUDA版本匹配),然后运行命令(这一步需要点时间,勿急)
5.2 验证安装: 在Python环境中运行以下命令,确认PyTorch能正确识别您的CUDA:


import torch
print(torch.__version__)
print(torch.cuda.is_available()) # 应该输出 True
print(torch.version.cuda)         # 应该输出 12.1 或 12.6 (版本号可能略有差异,但只要不是None且能is_available()即可)

6. 安装项目依赖

6.1 下载项目代码,下载网址
6.2 安装基础的Python依赖库(根据官网README.md),运行pip install easydict opencv-python transforms3d h5py timm open3d tensorboardX Ninja tensorboard(额外补充一个Ninja和一个tensorboard,前者“项目运行”需要,后者“项目可视化”需要)
6.3 编译并安装PointNet++扩展(→cuda extension,Windows环境下需要 Visual Studio 进行编译,故需要先安装第3步中的 Visual Studio Build Tools )
6.3.1 切换到PointNet++扩展目录cd pointnet2_ops_lib
6.3.2 运行python setup.py install(需修改 setup.py 中的os.environ["TORCH_CUDA_ARCH_LIST"] = "3.7+PTX;5.0;6.0;6.1;6.2;7.0;7.5"os.environ["TORCH_CUDA_ARCH_LIST"] = "5.0;6.0;6.1;6.2;7.0;7.5;8.0"
6.4 编译并安装Chamfer Distance和EMD损失扩展(→cuda extension,Windows环境下需要 Visual Studio 进行编译,故需要先安装第3步中的 Visual Studio Build Tools )
运行下面代码(报错解决方案见“bug汇总——拼接路径bug”


cd metrics/CD/chamfer3D/
python setup.py install
cd ../../EMD/
python setup.py install
cd ../../

二、数据准备

1. 下载数据(根据README.md)

1.1 下载网址,见PointTr项目
1.2 分别下载 PCN 和 ShapeNet55/34 数据集(注*:下载的 PCN 数据集名字叫 ShapeNetCompletion ,下载好后重命名为 PCN ,与项目代码里面的命名统一)

2. 浏览 PCN 数据

2.1 先看一下数据存放方式,目录结构如下( val、test 同 train )


   Data/PCN/
   ├── train/
   │   ├── complete/
   │   │   └── %s/  # 类别目录(总共8个类别)
   │   │        └── %s.pcd  # 模型文件(这个类别的某个物体)
   │   └── partial/
   │       └── %s/  # 类别目录
   │           └── %s/  # 模型ID目录
   │               └── %02d.pcd  # 这个模型的不同残缺云
   ├── val/
   │   ├── complete/
   │   └── partial/
   └── test/
       ├── complete/
       └── partial/

2.2 检查一下数据(这里以“~\Downloads\Data\PCN\train\complete\02691156\1a04e3eab45ca15dd86060f189eb133.pcd”为例)
2.2.1 可视化complete下面的这个模型文件,如下图所示(可以看得出来是一架飞机)
image
2.2.2 可视化partial下面的这个模型文件对应的不同残缺点云,如下图所示
image

3. 浏览 ShapeNet55/34 数据

三、关键路径修改

1. 数据路径

1.1 PCN(“~\Downloads\Project\SVDFormer_PointSea-main\config_pcn.py”)


__C.DATASETS.SHAPENET.PARTIAL_POINTS_PATH        = '~/Downloads/Data/PCN/%s/partial/%s/%s/%02d.pcd'
__C.DATASETS.SHAPENET.COMPLETE_POINTS_PATH       = '~/Downloads/Data/PCN/%s/complete/%s/%s.pcd'

1.2 ShapeNet55/34(“~\Downloads\Project\SVDFormer_PointSea-main\config_55.py”)


# ShapeNet55
__C.DATASETS.SHAPENET55.COMPLETE_POINTS_PATH       = '~/Downloads/Data/shapenet_pc/%s'
# ShapeNet34

2. checkpoints路径

2.1 PCN(“~\Downloads\Project\SVDFormer_PointSea-main\config_pcn.py”)


__C.CONST.WEIGHTS                                = '~/Downloads/Project/SVDFormer_PointSea-main/models/Weights_SVDFormer/PCN.pth'

2.2 ShapeNet55/34(“~\Downloads\Project\SVDFormer_PointSea-main\config_55.py”)

四、项目运行

1. 在项目根目录下运行命令(根据README.md)


# 测试(with checkpoints)
python main_*.py --test (pcn/55)
# 训练
python main_*.py (pcn/55)

报错解决方案见“bug汇总——拼接路径bug”

五、项目可视化

1. 项目根目录下运行命令tensorboard --logdir=SVDFormer_PCN/logs/

2. 按照提示打开网址(一般为:http://localhost:6006/)进入TensorBoard界面查看

2.1 Scalars界面查看:loss曲线(如train_loss、val_loss)、metrics(如CD、EMD)

六、bug汇总

1. 水土不服类(原平台为Linux,现平台是Windows)

1.1 拼接路径bug
1.1.1 “~\Downloads\Project\SVDFormer_PointSea-main\metrics\CD\chamfer3D\dist_chamfer_3D.py”


# 修改前代码
chamfer_3D = load(name="chamfer_3D",
        sources=[
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["chamfer_cuda.cpp"]),
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["chamfer3D.cu"]),
            ])
# 修改后代码
current_dir = os.path.dirname(os.path.abspath(__file__))
chamfer_cpp_path = os.path.join(current_dir, "chamfer_cuda.cpp")
chamfer_cu_path = os.path.join(current_dir, "chamfer3D.cu")
chamfer_3D = load(
    name="chamfer_3D",
    sources=[chamfer_cpp_path, chamfer_cu_path],  # 使用正确的绝对路径
    verbose=True  # 可选:打印编译细节(便于排查错误)
)

1.1.2 “~\Downloads\Project\SVDFormer_PointSea-main\metrics\EMD\emd_module.py”


# 修改前代码
emd = load(name="emd",
        sources=[
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["emd.cpp"]),
            "/".join(os.path.abspath(__file__).split('/')[:-1] + ["emd_cuda.cu"]),
            ])
# 修改后代码
current_dir = os.path.dirname(os.path.abspath(__file__))
emd_cpp_path = os.path.join(current_dir, "emd.cpp")
emd_cu_path = os.path.join(current_dir, "emd_cuda.cu")
emd = load(
    name="emd",
    sources=[emd_cpp_path, emd_cu_path],  # 使用正确的绝对路径
    verbose=True  # 可选:打印编译细节(便于排查错误)
)

1.2 环境变量未添加cl.exe文件路径bug(需手动添加,添加后重新启动一下VSCode)
1.2.1 验证安装(可跳过)
image
1.2.2 获取 cl.exe 文件路径
image
1.2.3 将路径添加到环境变量中
<右键点击“此电脑”➡点击“属性”➡点击“高级系统设置”➡点击“环境变量”➡双击“系统变量”中的“Path”➡添加获取到的 cl.exe 文件路径>
1.3 时间戳(含冒号)作为目录名bug
<出现在“~\Downloads\Project\SVDFormer_PointSea-main\core\train_pcn.py”>


# 修改前代码,output_dir 为 checkpoints 存放目录
output_dir = os.path.join(cfg.DIR.OUT_PATH, '%s', datetime.now().isoformat())
# 修改后代码
timestamp = datetime.now().strftime("%Y-%m-%dT%H_%M_%S.%f")
output_dir = os.path.join(cfg.DIR.OUT_PATH, '%s', timestamp)

2. 导入模块类

from torchvision.models.utils import load_state_dict_from_url(❌)
⬇👇
from torch.hub import load_state_dict_from_url(✔)

posted @ 2025-09-03 17:26  Elina-Chang  阅读(41)  评论(0)    收藏  举报