PointNet复现中遇到的坑

PointNet复现中遇到的坑

  • 1. PointNet下载
    • 项目地址
    • 数据集
  • 2. 复现过程
    • 分类任务
    • 分割任务

1. PointNet下载

项目地址

github
可以在Windows上实施的PointNet网络。

数据集

1.Shapenet
2.Modelnet40

2. 复现过程

分类任务

把上面github的整个文件下载下来,首先打开各个文件检查一遍里面的路径,全改成自己的项目文件路径。
1.训练分类模型

python .\utils\train_classification.py --dataset=c:\dataset\shapenetcore_partanno_segmentation_benchmark_v0 --nepoch=4 --dataset_type=shapenet --feature_transform

把dataset改为自己的数据集路径,记得把__workers改为0;
分类任务训练的模型会保存在项目目录下的 2.测试分类模型

python .\utils\show_cls.py --model=C:\PointCloud\PointNet-master\cls\cls_model_0.pth

注:这里模型的路径也要用绝对路径,不能.\cls\这样
第一个Error及解决办法:
PointNet复现中遇到的坑_第1张图片

分割任务

1.训练分割模型

python train_segmentation.py --dataset=shapenetcore_partanno_segmentation_benchmark_v0 --nepoch=5
--class_choice=Chair

2.测试分割模型

 python .\utils\show_seg.py --model=c:\PointCloud\PointNet-master\seg\seg_model_Chair_3.pth --class_choice=Chair --idx=0 

第二个Error:OSError: [WinError 126] 找不到指定的模块。
PointNet复现中遇到的坑_第2张图片
问题出在dll文件上,在VS2017中重新编译render_balls_so.cpp并生成render_balls_so.dll替换原文件中的dll。
新建一个动态链接库dll工程,在头文件中新建一个.h的头文件,把render_balls_so.cpp的内容复制过去,再打开源文件,添加#include “dlltest.h”,dlltest.h是之前新建的头文件,生成解决方案即可出现dll文件,复制到PointNet目录下,替换原本的dll文件。

第三个Error:OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
PointNet复现中遇到的坑_第3张图片
必须在x64下生成的dll文件才可以在64位的python环境中使用,因此回到VS中,把解决方案平台改成x64再生成一次,替换掉之前的dll。
第四个Error:AttributeError: function ‘render_ball’ not found
PointNet复现中遇到的坑_第4张图片
虽然可以使用dll文件了,但却提示找不到function,似乎是因为C++生成的dll无法被python调用,在之前VS的头文件中的函数前加上一句__declspec(dllexport)后,重新生成并替换即可。
PointNet复现中遇到的坑_第5张图片

你可能感兴趣的:(windows,pytorch)