1、前言
最近实验室购入3D的摄像机,想要应用于图像识别,钢哥让我找一找相应的3D识别项目。
我在github上面找到了pointnet这个项目,但是由于这个项目采用的是Python 2.7, TensorFlow 1.0.1, 我是想找个基于Pytorch框架, Python3.X版本的,所以根据官方提示,我找到了pointnet.pytorch这个版本.
我其实不太懂这个深度学习这一块,之前有过利用YoloV3的经历也是在网上搜索相应的教程后,经过相当时间的挣扎、痛苦,然后才成功运行的,我搜索了pointnet相关的教程,却是没有找到多少在Windows系统下运行的。多是复现github上的项目,在Linux或是 Ubuntu上运行。奈何我本人对这两种系统一点也不了解,所以在window10成功运行pointnet.pytorch版本后,做一个记录.
2、配置环境
Anaconda+Pycharm
Cuda10.2
Cudnn8.1.0
Python3.7
Cuda和Cudnn版本号需要匹配
3、准备工作
3.1、创建虚拟环境
打开Annaconda Promt,创建一个虚拟环境专门应用于Pointnet.Pytorch项目的运行。
conda create -n <虚拟环境的名字> python=<版本号>
conda create -n pointnet python=3.7
成功创建
输入activate pointnet 激活环境
3.2、下载文件
cd进入E:/lyh文件下
输入
git clone https://github.com/fxia22/pointnet.pytorch
将github上的项目下载下来,若是网络不好,也可以先在github上下载完后解压直接放在指定的目录下
3.3、下载环境所需要的库
在anaconda prompt 下输入进入pointnet.pytorch的命令
输入pip install -e .(包括后面的句号小点)
pip install -e .
程序会按照setup.py文件里的安排,把python相应的库下好
这里在下载torch的时候会出现问题比如ReadtimeOut的超时问题(这个问题我是挂*解决的)。
下载完以后由于怕torch版本过高,所以我卸载程序自动下载的torch1.9版本,安装了一个torch1.5.0的版本。
可以选择离线下载torch库,在这个网址中查询与cuda、cudnn、python对应的版本,像我的话由于怕pytorch版本过高,GitHub这个项目原本就只是用了torch1.0.1的版本,所以我选择了python3.7,cuda10.2所能配置的最低版本
torch-1.5.0-cp37-cp37m-win_amd64.whl
在进入相应路径下,
pip install torch-1.5.0-cp37-cp37m-win_amd64.whl
安装torch库
4、数据集
github文档中 build.sh下载的是可视化的过程,这个暂时我还不知道怎么处理
download.sh的话是下载数据集,可以直接根据
https://shapenet.cs.stanford.edu/ericyi/shapenetcore_partanno_segmentation_benchmark_v0.zip
进行下载
下载完后解压在pointnet.pytorch文件夹下即可.
5、运行过程及出现的问题
用pycharm打开pointnet.pytorch,在终端cd utils 进入utils,输入
python train_classification.py --dataset=E:\lyh\pointnet.pytorch\shapenetcore_partanno_segmentation_benchmark_v0\ --nepoch=5 --dataset_type=shapenet
5.2、问题1
UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and late
r, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`. Failure to do this will result in PyTorch skipping the first value of the learning rate schedule.
这是PyTorch1.1.0版本以后会出现的问题,这里需要更改train.classification.py文件里两句话的位置
5.3、问题二
if __name__ == ‘__main__‘:
freeze_support()
...
? The "freeze_support()" line can be omitted if the program
? is not going to be frozen to produce an executable.
将代码块置于if __name__ == ‘__main__‘:
之下
再次输入对应的命令,即可运行成功!
6、参考
Detected call of lr_scheduler.step()
before optimizer.step()
PyTorch:The "freeze_support()" line can be omitted if the program is not going to be frozen
python进程池multiprocessing.Pool运行错误:The "freeze_support()" line can be omitted if the program is not g