ubuntu 18.04 从零开始复现 OpenPCDet 训练kitti数据集并评估 可视化 损失函数_kitti在线评估-程序员宅基地

技术标签: ubuntu  深度学习  linux  

ubuntu 18.04 复现OpenPCDet

前言:

我已经装好了nvidia460.91.03版本驱动,并且也装了10.1版本的cuda。
但由于OpenPCDet中要装spconv(巨坑的库),10.2以上版本的cuda才能pip安装2.0版本的spconv,不然老版本的spconv太难装了(踩坑无数)。所以为了避开spconv太难安装,我选择用高版本的cuda,后续配环境的话直接pip岂不香

所以第一步就是 多版本cuda安装/切换 (非多版本cuda的谨慎借鉴哈!)

  1. 下载11.1版本的cuda run文件(官方下载网址 有其他很多版本)
wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
sudo sh cuda_11.1.0_455.23.05_linux.run

(再多一句,wget不想用的话,可以直接把wget后面(即https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run)的网址复制到浏览器,就可以下载了。该方法适合任何wget带网址的下载)

然后就是安装11.1版本的cuda。首先在sudo sh cuda_11.1.0_455.23.05_linux.run后选择continue,然后输入accept,进入安装选项cuda installer
这里面的X代表选择,按enter键取消X消失(即不选择)。
我因为装过驱动了,所以驱动那个选项不选,其他全选了,然后就是选install,进行安装,一会就安装好了。

此时cuda11.1安装完毕,然后就是在~/.bashrc里面添加路径

原本只装一个版本的话,路径添加如下:

export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.1/bin:$PATH
export CUDA_HOME=/usr/local/cuda-10.1

多版本的话需要换种写法,如下:

export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin 
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${
    LD_LIBRARY_PATH:+:${
    LD_LIBRARY_PATH}}

nvcc -V后还是10.1,这是因为软连接还没有变,所以接下来就是换软连接。

sudo rm -rf /usr/local/cuda                                      #删除之前创建的软链接
sudo ln -s /usr/local/cuda-11.1  /usr/local/cuda      #创建新 cuda 的软链接

此时再换个终端nvcc -V,就会变为cuda11.1。

然后就是安装cudnn (cudnn官方下载地址)
然后选择和cuda版本相匹配的版本,这里因为我要为cuda11.1装cudnn,所以我选的是cudnn-11.1-linux-x64-v8.0.5.39.tgz
下载之后解压:

tar zxvf cudnn-11.1-linux-x64-v8.0.5.39.tgz

然后就是:

sudo cp include/cudnn*.h /usr/local/cuda/include/  #没*的话后面会报错
sudo cp lib64/lib* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

然后建立cudnn的软连接

cd /usr/local/cuda/lib64/
sudo chmod +r libcudnn.so.8.0.5
sudo ln -sf libcudnn.so.8.0.5 libcudnn.so.8
sudo ln -sf libcudnn.so.8 libcudnn.so
sudo ldconfig  

若是有下面的错误:
在这里插入图片描述借用下别人的图哈,我自己的忘记截图了!
解决办法:
对于不是符号链接的文件,执行以下操作:

sudo mv /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.org

sudo mv /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.org

sudo mv /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.org

sudo mv /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.org

sudo mv /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.org

sudo mv /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.org

然后再sudo ldconfig 就没问题了。

然后查看cudnn版本:

cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

但又来问题了:
在这里插入图片描述
解决办法是用下面的命令即可正确查看cudnn版本:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

在这里插入图片描述
至此,多版本cuda并存/切换完成。
后面开始配OpenPCDet环境

在这里插入图片描述1. 创建虚拟环境

conda create -n pcdet python=3.7

安装pytorch、torchvision和torchaudio
(注意版本匹配问题,不然容易出各种问题,尽量使用我这套版本,很多人用都没问题的,我用的版本:torch1.8.1+cu111 torchvision0.9.1+cu111 torchaudio==0.8.1):

whl轮子下载地址 推荐用
官网下载地址(但这种方法下载很慢,巨慢的,建议第一种)

我就用的是whl安装的,在whl轮子下载地址里面找到匹配版本的torch和torchvision,然后cd到下载目录pip安装他们
在这里插入图片描述
再安装torchaudio==0.8.1(因为我没看到它,笑死,可能眼小把!)
在这里插入图片描述
然后验证下成功与否和能用否:

python
import torch    # 如正常则静默
torch.__version__ #查看torch版本
import torchvision
 torchvision.__version__ #查看torchvision版本
 torch.cuda.is_available() #正常的话返回“True”
a = torch.Tensor([1.])    # 如正常则静默
a.cuda()    # 如正常则返回"tensor([ 1.], device='cuda:0')"
from torch.backends import cudnn # 如正常则静默
cudnn.is_acceptable(a.cuda())    # 如正常则返回 "True"

在这里插入图片描述
然后就是重头戏了!!!!安装spconv!!!

前面我们说过,10.2以上的cuda可以直接pip安装spconv如下:

pip install spconv-cu111   #我的cuda是11.1,自己根据cuda版本来选择spconv版本

在这里插入图片描述
安装完成(是不是很简单啊?哈哈哈!)
在这里插入图片描述
然后验证安装的spconv能用不:

import spconv.pytorch as spconv

在这里插入图片描述
哈哈,无误!!!

至此,OpenPCDet还差一小部分就OK了。

克隆OpenPCDet

git clone https://github.com/open-mmlab/OpenPCDet.git

然后安装pcdet库和一些依赖。

python setup.py develop

接下来就等把,会需要一段时间,其中scikit-image llvmlite等库 比较难下载(应该是外网的原因,科学上网应该可以轻松解决),容易超时报错(本人试了两次都超时),解决方法(拿scikit-image举个例子,其他的类同):
在这里插入图片描述
打开上面圈起来的网址,然后本地下载(确实好慢,下了十来分钟),下载完毕后在离线安装
在这里插入图片描述
再接着来

python setup.py develop

成功后如下图;
在这里插入图片描述

再贴一张conda list 图:
在这里插入图片描述
接下来就是准备训练拉!

首先就是准备数据(数据格式如下图)和生成数据的一些信息:

python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
接下来就可以训练模型了,cd到tools下面:

python train.py --cfg_file ./cfgs/kitti_models/pointpillar_pyramid_aug.yaml  --batch_size 4 --epochs 50

训练中的亚子

在这里插入图片描述
训练结束后会自动评估最后一个模型,然后是下面的亚子:
在这里插入图片描述
在这里插入图片描述
训练结束后,我们来demo一下看看效果:

首先安装可视化工具mayavi(这次方法不太对,总有错误,正确方法看文章最后,有正确安装方法

pip3 install mayavi 

(可以尝试下pip install mayavi 后续的错或许就没了呢?后续发现貌似先安装VTK,在安装mayavi就好了,具体可以看我下面最后有详细介绍

静等安装完成,然后测试下能用不:

python
import mayavi

在这里插入图片描述
发现一切正常,心中窃喜,赶紧输入可视化命令:

python demo.py --cfg_file ./cfgs/kitti_models/pointpillar_pyramid_aug.yaml --ckpt /home/juzhen/OpenPCDet/output/cfgs/kitti_models/pointpillar_pyramid_aug/default/ckpt/checkpoint_epoch_50.pth --data_path /home/juzhen/OpenPCDet/data/kitti/testing/velodyne/000517.bin(其中的ckpt和点云数据路径根据自己的情况改下)

然后报错ModuleNotFoundError: No module named ‘importlib_resources’:
在这里插入图片描述那就安装呗:pip install importlib_resources

成功后继续可视化,傻眼了,又错ModuleNotFoundError: No module named 'vtkCommonCorePython'

在这里插入图片描述
这次pip安装不了了,尝试解决,未果!不明白为啥,那就放弃用mayavi。 改用open3d

pip install open3d 

太慢,取消掉重新来
在后面添加镜像源

pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple

芜湖,速度起飞!
在这里插入图片描述
然后安装完成测试;
在这里插入图片描述
没问题,继续可视化(心想总可以了把?),然而…报错ImportError: numpy.core.multiarray failed to import

那就继续克服困难把,找了半天,可算有个方法可行了(大致就是有多个numpy把)。。。。

pip show numpy
pip uninstall numpy

在这里插入图片描述
卸载numpy1.20.0,然后再pip show numpy

在这里插入图片描述
果然还有一个版本的numpy1.19.2(这个貌似是创建虚拟环境的时候安装的),后面安装pcdet0.5.2的时候,貌似又装了(依稀记得的哈!)
卸载它!远离它!!!!
这时候pip show numpy 彻底没了,那我就再装回numpy1.20.0
在这里插入图片描述

然后就是见证奇迹的时刻,继续可视化!!

python demo.py --cfg_file ./cfgs/kitti_models/pointpillar_pyramid_aug.yaml --ckpt /home/juzhen/OpenPCDet/output/cfgs/kitti_models/pointpillar_pyramid_aug/default/ckpt/checkpoint_epoch_50.pth --data_path /home/juzhen/OpenPCDet/data/kitti/testing/velodyne/000517.bin(再说一次,注意路径哈)
在这里插入图片描述
OK,可视化木得问题啦,稍微开心下!

后面我又去看了下损失函数的图像:

pip install tensorboardX
pip install tensorflow

然后在/home/juzhen/OpenPCDet/output/cfgs/kitti_models/pointpillar_pyramid_aug/default/tensorboard(也就是events.out.tfevents.文件夹下)打开终端激活pcdet的虚拟环境,输入:

tensorboard --logdir=/home/juzhen/OpenPCDet/output/cfgs/kitti_models/pointpillar_pyramid_aug/default/tensorboard

在这里插入图片描述
右键打开红色框网址,查看训练过程中的损失函数可视化:
在这里插入图片描述
从图上可以看出损失函数并没有平滑的收敛,这是因为图片上显示的是每个batch的loss,不是epoch的loss,想看epoch的loss需要自己加点代码(我还没弄),加完后如下如所示(图片是别人的借用下。上面是每个epoch的loss图,很平滑。下面是openpcdet原始loss):在这里插入图片描述

至此,完结。撒花!!

注:
后续我又重装了一遍,可视化使用的是mayavi工具包。下面我记录下mayavi的使用记录!**使用了不同的安装命令**
在你的虚拟环境下

pip install vtk==8.1.2
pip install mayavi
python
import mayavi

在这里插入图片描述
看起来和我前面一样,估计还会有错,果然,我用的时候提示:

ImportError: Could not import backend for traitsui.  Make sure you
        have a suitable UI toolkit like PyQt/PySide or wxPython
        installed.

解决方法:

pip install pyside2

在这里插入图片描述
然后就再试一下:
在这里插入图片描述O了,木的问题!!!

以上内容仅为自己学习记录,原创不易。转载请标明出处,拜谢!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jin15203846657/article/details/122735375

智能推荐

[python刷题模板] 字典树trie、xor-trie(01-trie)_python 字典树-程序员宅基地

文章浏览阅读504次。python刷题模板之字典树_python 字典树

转-程序员致富的若干方法探讨-程序员宅基地

文章浏览阅读1k次。本文来自程序员宅基地,转载请标明出处:http://blog.csdn.net/zhangxiaoxiang/archive/2010/10/27/5969301.aspx 前一阵收到一封网友的来信,信中提到了他在提高个人收入和未来发展中的一些困惑,这也是我们许多学员和网友经常找我咨询的一件事情,颇具普遍性,故写此博与大家探讨和分享一下。 原信内容如下:--------

我的Unity(17)工作中遇到的一些问题总结_unity driveinfo.getdrives()-程序员宅基地

文章浏览阅读355次。一 使用Webservice 1webservice就不用介绍了,各种语言都可以写,服务端和客户端分别来写。个人理解,大致的流程,服务端开发,部署网站上,客户端生成代理类,判断是否可以连接,直接调用。很方便。2写一下客户端的使用吧,用的是C# 将服务转成代理类放在工程项目中直接使用就好,关键就是如何生成代理类,使用Vs中的tool工具打开后就是命令行(1)输入:wsdl.exe/language..._unity driveinfo.getdrives()

allure与pytest集成配置详解_pytest 集成 allure-程序员宅基地

文章浏览阅读2k次。allure是什么有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例执行过程和结果。allure是一款开源的,专门用来展示测试结果的工具,目的是希望团队内部每一个人都可以看到非常清楚的测试结果。allure可以与非常多的著名测试框架做集成。 像java语言,可以与junit4,junit5,TestNG测试框架集成。 python语言,可以与pytest,behave,nose测试框架集成。allure会将测试用例的执行数据保存到xml..._pytest 集成 allure

爬虫框架scrapy--5模拟登陆_scrapy session-程序员宅基地

文章浏览阅读96次。一、利用已有的cookies:通过在spiders下的爬虫文件中重写start_requests方法,在回调函数中提取数据class BaiduSpider(scrapy.Spider): name = 'baidu' allowed_domains = ['baidu.com'] start_urls = ['http://baidu.com/'] # 重写start_requests方法 def start_requests(self): _scrapy session

统计假设测验------(四)方差分析(F测验、多重比较原理与方法)_比较假想试验与实际试验结果是否存在实质性差异-程序员宅基地

文章浏览阅读2.4w次,点赞11次,收藏46次。一、方差分析基本原理1、方差分析(analysis of variance):k(k>=3)个样本平均数假设测验方法。 与j无关的变量都看成常数,此时summation代表的是次数 方差分析基本步骤: (1)将资料总变异的自由度和平方和分解为各变异原因的自由度和平方和,并算的其均方 (2)计算均方比,做出F测验,以明了各变异因素的重要程度..._比较假想试验与实际试验结果是否存在实质性差异

随便推点

基于mybatis的增删改查_mybatisutil.closesqlsession(sqlsession);出现异常-程序员宅基地

文章浏览阅读265次。1.db.propertiesmysql.driver=com.mysql.jdbc.Drivermysql.url=jdbc:mysql://127.0.0.1:3306/mybatismysql.username=rootmysql.password=123456oracle.driver=oracle.jdbc.driver.OracleDriveroracle.url=jd_mybatisutil.closesqlsession(sqlsession);出现异常

Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 14.1 分布式事务概述-程序员宅基地

文章浏览阅读636次。14.1 分布式事务概述在构建微服务的过程中,不管是使用什么框架、组件来构建,都绕不开一个问题,跨服务的业务操作如何保持数据一致性。14.1.1 什么是分布式事务?首先,设想一个传统的单体应用,无论多少内部调用,最后终归是在同一个数据库上进行操作来完成一向业务操作,如图14-1:随着业务量的发展,业务需求和架构发生了巨大的变化,整体架构由原来的单体应用逐渐拆分成为了微服务,原来的3个服务...

Unity Shader总结(三)——顶点变换之蕾姆的呆毛在哪里_蕾姆呆毛-程序员宅基地

文章浏览阅读230次。注意,以下求法的原理不再赘述。最简单的求法请直接跳转文末总结。文章目录概述一、模型空间——>世界空间(模型变换)二、世界空间——>观察空间(观察变换)(右手坐标系)法一:法二:三、观察空间——>裁剪空间3.1 透视投影3.2 正交投影四、裁剪空间——>屏幕空间五、总结概述蕾姆睡醒发现头上有跟呆毛,这根呆毛在屏幕上的坐标到底是多少?流程为:模型空间(PmodelP_{model}Pmodel​)——>世界空间(PworldP_{world}Pworld​)——>观_蕾姆呆毛

实时通信技术的架构设计_通讯服务器技术架构图-程序员宅基地

文章浏览阅读1.8k次。一、WEB端实时通信技术对比在WEB端的实时通信技术中,主要有以下几种方式: 1)轮询技术轮询是最简单的一种实时通信技术,易于实现,非常适用于一些小型的应用。其基本原理是这样的,先在客户端设定一个时间间隔,然后在每个间隔里从服务器拉取一次数据,如此反复,进行实时通信。轮询的缺点是显而易见的,若时间间隔过大,则会影响实时性,若时间间隔过小,又会对服务器产生非常大的负担,并_通讯服务器技术架构图

Unix系列shell程序编写_unix bsh-程序员宅基地

文章浏览阅读581次。http://bbs.chinaunix.net/thread-557642-1-1.htmlUnix系列shell程序编写(上) *Shell是什么?   任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。   为了不_unix bsh

谈技术文章翻译的信雅达-下_技术文件翻译 直译 也需要信雅达翻译吗-程序员宅基地

文章浏览阅读4.2k次。 谈技术文章翻译的信雅达-下 Horin|贺勤 Email: [email protected] Blog: http://blog.csdn.net/horin153/ 以前在看国内 Python 达人 limodou 翻译的“Guido van Rossum 博客中文版”中的文章:Python_技术文件翻译 直译 也需要信雅达翻译吗

推荐文章

热门文章

相关标签