当前位置:   article > 正文

【深度学习网络复现总结】_cutler复现网络

cutler复现网络

深度学习环境配置总结

HAIS环境配置:Spconv1.x的编译安装

今天在电脑上成功编译安装了Spconv1.x,所以记录一下。
电脑配置:RTX 2080ti
CUDA10.0
cudnn7.6.5
pytorch1.1.0
python3.7
gcc5.4.0
Ubuntu20.0
pyyaml5.1
cmake3.14.4

Spconv1.x的版本不如2.x的好用,现在的最新Spconv版本可以直接使用命令行进行安装,比之前版本方便很多。看网上说的Spconv1.x版本对CUDA、cudnn、gcc、g++等版本要求比较高,如果不兼容的话很难编译上。我前几天一直编译安装不上,可能是因为cudnn版本太低,之前的配置是CUDA10.0+cudnn7.4.2。今天换成了cudnn7.6.5试了一下,结果就成功了。gcc版本不能太低,至少是gcc5或以上才行。对g++版本好像也有要求,不能太低。在作者提供的requirement.txt中并没有指明需要哪个版本的pyyaml,所以如果pyyaml太高的话运行train.py就会报错,所以我选择安装pyyaml的版本为5.1。
HAIS(Hierarchical Aggregation for 3D Instance Segmentation)是ICCV2021年的文章提出的网络,用于三维点云室内场景的语义分割和实例分割。其中比较新颖的一点是,作者提出了intra-instance prediction network,可以用于预测欠分割的点云集群,将其中的点分为前景点和背景点从而分割出物体实例。
在S3DIS上的表现: link

在复现HAIS网络时遇到的问题:

RuntimeError: CUDNN_STATUS_EXECUTION_FAILED
  • 1

在网上搜了,说出现该问题的原因可能是cuda的版本与pytorch的版本不对应,导致cuda不能加速模型的训练同时执行失败。
我的解决方法是在train.py和test.py代码的顶部增加:

import torch
torch.backends.cudnn.enabled = False
  • 1
  • 2

该方法只是个临时解决方法,而且该方法的实质是禁用了cudnn加速,让代码在运行时使用pytorch的基本GPU操作而不是依赖于cudnn,这可能是代码运行速度降低。

2023年8月13日更新:HAIS的配置和数据接口更改使用自己的数据集训练模型

昨天分别在两台电脑RTX 2080TI 和 RTX 3090TI配置了HAIS的实验环境,现在将自己的一点儿心得总结如下:
①在3090ti上配置HAIS环境:由于CUDA版本较高,所配置torch的时候不要照requirements.txt中直接pip install,要上pytorch官网搜适用于你自己的CUDA版本的安装命令行。比如我的是CUDA11.1,所以我使用的命令行如下

pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
  • 1

因为torch版本高所以就不能直接使用HAIS原代码包中的spconv来编译安装spconv1.0,需要按照作者提供的README中的步骤,重新git下来spconv1.2的包,然后进行编译。整个安装过程还算是顺畅,注意有一步是hais_ops的C++ 和CUDA扩展编译安装

cd HAIS/lib/hais_ops
export CPLUS_INCLUDE_PATH={conda_env_path}/hais/include:$CPLUS_INCLUDE_PATH
python setup.py build_ext develop
  • 1
  • 2
  • 3

这里的{conda_env_path}指的是你的conda环境所安装的位置,比如我的是/home/hmy/anaconda3/envs/

②在2080ti上配置HAIS环境:如我上述所说,在spconv1.0的安装时,需要注意pytorch的版本,还需要注意pyyaml的版本,昨天配置的时候结果还是出现了spconv的编译报错
‘remove_const_t’ is not a member of ‘std’,后来查了一下发现可能是cmake的版本问题。requirements.txt中要求cmake不能低于3.13.2,所以我将cmake从3.20.0的版本更换为了3.14.4,然后进行编译就一次通过了。

③更改HAIS数据接口,使用自己的数据集训练(training on custom data):由于数据集的制作比较针对scannet V2这种室内场景的.ply格式,正好有个海外研究者Meida Chen的团队公开了STPLS3d数据集然后采用了HAIS作为baseline对STPLS3d进行了测试,该数据集是.txt格式的在GitHub上可以找到,他们也公开了baseline的代码,所以我就照着他们更改后的HAIS数据集制作的代码来生成我自己的数据集制作代码。
制作好了数据集以后,就要更改HAIS的hais.py、train.py、test.py,以及/HAIS/lib/hais_ops/src /hierarchical_aggregation/hierarchical_aggregation.cpphierarchical_aggregation.cu中的class_radius_mean和class_numpoint_mean_dict。
注意:因为hierarchical_aggregation.cpphierarchical_aggregation.cu是HAIS模型的C++ CUDA编译扩展,所以编译好了之后,再改代码内容,不会对这个模型有任何的影响。所以如果更改了这两个扩展代码后,需要先卸载以前的扩展,然后再删除/HAIS/lib文件夹下,之前生成的那些.so文件和build文件夹、HAIS_OPS.egg-info文件夹,最后重新编译这个扩展。使用下面的命令行卸载原扩展。

cd HAIS/lib/hais_ops
python setup.py develop --uninstall
  • 1
  • 2

2023年11月28日更新:在4090上配置HAIS环境以及如何调参训练

背景

为什么会接二连三的在不同的电脑配置HAIS环境呢,因为第一次在2080ti上配置环境但是发现在跑ScannetV2的时候,电脑会卡住(推测GPU内存不够)所以更换了3090ti,果然效果很好,速度也提升了不少。后来在GitHub上发现STPLS3D数据集的公布团队更改了HAIS来对STPLS3D进行测试,所以后续工作都是基于Meida Chen等人更改后的HAIS模型上的。再后来,模仿着STPLS3D-HAIS进行了自己的数据集制作(custom data),并成功在HAIS上进行了训练,我的custom data 是Xiang B.等人(2023)发布的FOR-Instance数据集,该数据集是一个开源的国际综合无人机激光点云(ULS),GitHub地址:PanopticSegForLargeScalePointCloud
但是由于custom data的点云数量确实太多,导致训练一半就容易出现报错:

CUDA Kernel failed: illegal argument
  • 1

刚开始不知道这是为什么,只知道如果因为这个报错训练中断了的话,直接接着训练就ok了,但是10月下旬那会儿,当我训练并测试完一次之后,电脑就卡住不动了,不管怎么样都没有反应,强制关机重启后就无法正常开机了,最后托人检查之后才发现是固态被烧坏了。所以我揣测,可能是因为HAIS模型在分层聚合阶段内存消耗大,GPU跑的太厉害同时散热跟不上导致训练中断,而我当时不知道就直接让显卡接着训练,正常操作应该是等几个小时让温度降下来再训练,因为我的操作不当和无知,导致3090ti那台电脑被我搞崩了。

RTX 4090配置HAIS环境

我感觉最好配置环境的还得是3090ti,在那台电脑上配置是最顺畅的。当然,在4090上跑实验是最爽的,毕竟流处理器、核心频率比3090ti都要高,使用同样的custom data 在3090ti上会出现训练中断的情况而4090则不会。
在4090这台电脑上,从安装ubuntu20.04,到配置环境我都做了一遍,现在说一些之前配置过程中没遇到过的问题。

电脑配置:RTX 4090
CUDA 11.1
cudnn 8.9.5
pytorch 1.8.0+cu111 
python 3.7
gcc 9.4.0
Ubuntu 20.04
pyyaml 5.1
cmake 3.27.7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里没有出现像RTX 2080ti上出现的cmake不兼容的问题,所以在安装编译spoconv之前,所有步骤都和在RTX 3090ti上配置步骤差不多,在下载好spocnv1.2后,运行命令

cd HAIS/lib/spconv
python setup.py bdist_wheel
  • 1
  • 2

出现报错:nvcc fatal : Unsupported gpu architecture 'compute_89',说明是RTX4090 GPU 算力太高,需要降算力,使用以下命令降算力:

1. unset TORCH_CUDA_ARCH_LIST  # 清除TORCH_CUDA_ARCH_LIST    
2. export TORCH_CUDA_ARCH_LIST="8.0"  # 设置cuda算力为8.0            
  • 1
  • 2

降完算力之后,接着重新编译spconv,结果出现报错:spconv/include/spconv/box_iou.h:21:10: fatal error: boost/geometry.hpp: 没有那个文件或目录,这说明我们的虚拟环境缺少spconv的依赖项,需要先更新,再下载依赖项,使用以下命令:

3. sudo apt-get update  # 更新
4. sudo apt-get install libboost-all-dev   # 下载依赖项
5. python setup.py bdist_wheel  # 重新执行编译程序
  • 1
  • 2
  • 3

如果成功的话,则会生成一个.whl文件,接着就是编译这个生成的.whl文件,先cd到.whl所在的文件夹,再使用pip安装命令安装这个.whl文件(wheel_file_name就是这个.whl文件的名字,编译的时候替换一下就行):

cd HAIS/lib/spconv/dist
pip install {wheel_file_name}.whl
  • 1
  • 2

最后一步是编译C ++ 和 CUDA扩展(Compile the external C++ and CUDA ops.),先进入hais_ops文件夹内,再将conda环境路径({conda_env_path},我的是/home/lidar/anaconda3/envs/)暂时写进环境变量,最后运行setup.py:

6. cd HAIS/lib/hais_ops
7. export CPLUS_INCLUDE_PATH={conda_env_path}/hais/include:$CPLUS_INCLUDE_PATH  # 记得把{conda_env_path}替换为自己的conda环境路径
8. python setup.py build_ext develop
  • 1
  • 2
  • 3

但是在这里出现了报错:error: command ':/usr/local/cuda-11.1/bin/nvcc' failed: No such file or directory: ':/usr/local/cuda-11.1/bin/nvcc',出现这个报错的原因是因为权限不够,所以我们需要先确定python路径,再给sudo权限运行命令行:

1. which python  # 确定python路径,比如我的是 /home/lidar/anaconda3/envs/hais/bin/python
2. sudo /home/lidar/anaconda3/envs/hais/bin/python setup.py build_ext develop  # 给python赋root权限,运行setup.py
  • 1
  • 2

但是在这里又出现了一个报错:fatal error: google/dense_hash_map: 没有那个文件或目录,这个错误说明我们缺少依赖项,所以还是需要先下载依赖项,再使用root权限运行setup.py来编译扩展:

1. sudo apt-get install libssl-dev build-essential g++ libboost-all-dev libsparsehash-dev git-core perl  # 下载依赖项
2. sudo /home/lidar/anaconda3/envs/hais/bin/python setup.py build_ext develop  # 编译扩展
  • 1
  • 2

到这里环境配置就已经结束啦~如果有需要交流的问题可以

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/458713
推荐阅读
相关标签