SVDFormer项目配置(Windows10+CUDA12.6)
项目地址
一、环境配置
1. 安装CUDA Toolkit 12.6(若无)
(CUDA Toolkit 的版本可以与 CUDA 版本不一致,CUDA 可以向后兼容,比如 CUDA VERSION: 13.0,CUDA Toolkit VERSION: 12.9)
1.1 下载网址,注意事项如下

1.2 安装步骤如下

2. 安装miniconda
2.1 下载网址,下载“Miniconda3-py310_23.11.0-2-Windows-x86_64.exe”这个版本,如图所示

2.2 安装中注意勾选如下内容(重点是PATH那条必须勾选)

3. 安装Visual Studio Build Tools(轻量化编译工具,相较于完整VS)
(编译器,Windows环境下用于编译安装后续的cuda extension——PointNet++, Chamfer Distance和EMD损失扩展)
3.1 下载网址,进去即自动下载2022版
3.2 安装时需勾选 C++ 编译环境
3.3 安装完成结果如下

3.4 另:兼容自用机(CUDA 11.4),需安装 VS 2017 ~ VS 2019 中的任一一版,安装结果如下(避免安装多版本)

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下面的这个模型文件,如下图所示(可以看得出来是一架飞机)

2.2.2 可视化partial下面的这个模型文件对应的不同残缺点云,如下图所示

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 验证安装(可跳过)

1.2.2 获取 cl.exe 文件路径

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(✔)

浙公网安备 33010602011771号