提示:最近开始在三维深度学习方面进行研究,从PointNet开始入手,对这个系列的网络进入深入学习,记录相关知识点,分享学习中遇到的问题已经解决的方法。
PointNet是由斯坦福大学的Charles R. Qi等人在《PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation》【论文地址】一文中提出的模型,是点云神经网络的鼻祖,它提出了一种网络结构,可以直接从点云中学习特征。
在详细解析PointNet网络之前,首要任务是搭建PointNet【Pytorch-demo地址】所需的运行环境,并模型完成训练和测试工作,展开后续工作才有意义。
CloudCompare是一个三维点云(网格)编辑和处理软件,百度云链接【提取码:q56f】。
解压运行"CloudCompare.exe"安装完成。
点云中每个点都包含了空间坐标信息,这些信息之间构成一定的集合空间特性:
如何对点云数据进行特征提取是需要解决的任务
ModelNet10/40是一个基础的3d点云图像分类的数据集,它里面全部都是CAD手工绘制的点云数据,在pointnet和pointnet++都有使用这个数据集进行分类。官网下载(部分可直接下载,其它需要邮件作者):
百度云链接【提取码:ca89】:
ShpaeNet是一个大规模的3d点云部件分割的形状数据集,在pointnet和pointnet++都有使用这个数据集进行部件分割。官网下载需注册审核才能下载,审核较慢):
百度云链接【提取码:evqi 】
在Windows10环境下,建议安装安装anaconda环境,方便搭建专用于PointNet模型的虚拟环境。
# 创建虚拟环境
conda create -n PointNet-Pytorch python==3.7.4
# 查看新环境是否安装成功
conda env list
# 激活环境
activate PointNet-Pytorch
# 下载githup源代码到合适文件夹,并cd到代码文件夹内
cd pointnet.pytorch-master
# 通过清华源,下载所需的第三方包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -e .
# 查看所有安装的包
pip list
conda list
提示(我也是第一次接触,感觉挺有用,分享大佬博客供大家参考)
pip install -e . 解析
setup.py 解析
最终的安装的所有包。
检查torch版本发现安装的是torch-cpu版本
# 查看pytorch版本
import torch
print(torch.__version__)
# 查看cuda版本
print(torch.version.cuda)
# 查看cuda是否可用
print(torch.cuda.is_available())
# 查看可用cuda数量
print(torch.cuda.device_count())
卸载torch-cpu版本,手动安装符合主机的torch-gpu版本,解决后续会出现的“AssertionError: Torch not compiled with CUDA enabled”问题。
1.打开cmd,执行下面的指令查看CUDA版本号:
nvidia-smi
2.安装GPU版本的torch:【官网】
conda/pip安装都行:
# 通过清华源,下载所需的第三方包
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
# 安装opencv
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
# 安装matplotlib
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib
win10系统下还是有点麻烦,需要保证主机安装了以下环境!!!【可跳过到本小节最后我会提供需要编译得到的dll和数据集】
win10配置GCC/G++运行环境
win10配置wget
win10配置gitbash
Windows下需打开修改build.sh 文件内容,因为.so文件是Linux动态链接库,相对应Windows的动态链接库则是.dll。
g++ -std=c++11 $SCRIPTPATH/../utils/render_balls_so.cpp -o $SCRIPTPATH/../utils/render_balls_so.so -shared -fPIC -O2 -D_GLIBCXX_USE_CXX11_ABI=0
#修改为
g++ -std=c++11 $SCRIPTPATH/../utils/render_balls_so.cpp -o $SCRIPTPATH/../utils/render_balls_so.dll -shared -fPIC -O2 -D_GLIBCXX_USE_CXX11_ABI=0
# 打开gitbash进入到pointnet的script文件夹内
cd script
#编译可视化工具
bash build.sh
# 下载数据集
bash download.sh
打开gitbash在script目录下执行上述命令。
可能执行完、"bash build.sh "后没有产生dll文件,原因是因为gcc/g++编译过程缺少"libisl-*.dll"文件。
解决方式是下载x86_64-4.9.1-release-posix-seh-rt_v3-rev0.7z文件【百度云链接 提取码:mh6n】,解压后将所有文件拷贝/替换到MinGW的安装路径之下。
正确编译后产生render_balls_so.dll文件,或者通过提供的百度云链接下载解压。
用命令下载完成的数据集,或者通过提供的百度云链接下载解压。
跳到这里的朋友 需要分别把下列文件放到正确的文件夹
render_balls_so.dll 百度云链接【提取码:8oam】
ShapeNet 百度云链接【提取码:evqi】下载解压
# pointnet.pytorch-master/utils文件夹下
cd utils
# 训练
python train_classification.py --dataset=E:\deep-learning-for-image-processing-master\3dPointCloud\pytorch\pointnet.pytorch-master\shapenetcore_partanno_segmentation_benchmark_v0\ --nepoch=4 --dataset_type=shapenet
解决出现的“RuntimeError: An attempt has been made to start a new process…”问题:
1.关闭多线程: 设置train_classification.py中的workers=0。
2.加上if name==‘main’: 将要运行的部分放进if name==‘main’:中【强烈推荐】。
# pointnet.pytorch-master/utils文件夹下
cd utils
# 测试 cls_model_3.pth是训练好的模型
python show_cls.py --model cls/cls_model_3.pth
解决出现的“FileNotFoundError: [Errno 2] No such file or directory: 'shapenetcore_partanno_segmentation_…synsetoffset2category.txt’”问题:
1.修改show_cls.py中root中的路径:
2.修改和添加部分代码【强烈建议】:
同时测试命令增加dataset路径
python show_cls.py --model cls/cls_model_3.pth --dataset=E:\deep-learning-for-image-processing-master\3dPointCloud\pytorch\pointnet.pytorch-master\shapenetcore_partanno_segmentation_benchmark_v0\
# pointnet.pytorch-master/utils文件夹下
cd utils
# 训练
python train_segmentation.py --dataset=E:\deep-learning-for-image-processing-master\3dPointCloud\pytorch\pointnet.pytorch-master\shapenetcore_partanno_segmentation_benchmark_v0\ --nepoch=5 --class_choice=Chair
出现的“RuntimeError: An attempt has been made to start a new process…”问题,解决方法如上。
# pointnet.pytorch-master/utils文件夹下
cd utils
# 测试 cls_model_3.pth是训练好的模型
python show_seg.py --model seg/seg_model_Chair_4.pth --dataset=E:\deep-learning-for-image-processing-master\3dPointCloud\pytorch\pointnet.pytorch-master\shapenetcore_partanno_segmentation_benchmark_v0\ --class_choice Earphone
界面交互快捷键 | 功能 |
---|---|
q | 程序是死循环的, 退出程序 |
t+q | 变换颜色 |
q | 放大 |
m | 缩小 |
r | 恢复原状 |
s | 保存图片 |
尽可能简单、详细的介绍PointNet的安装流程以及解决了安装过程中可能存在的问题。后续会根据自己学到的知识结合个人理解讲解PointNet的原理和代码。