前言:
我已经装好了nvidia460.91.03版本驱动,并且也装了10.1版本的cuda。
但由于OpenPCDet中要装spconv(巨坑的库),10.2以上版本的cuda才能pip安装2.0版本的spconv,不然老版本的spconv太难装了(踩坑无数)。所以为了避开spconv太难安装,我选择用高版本的cuda,后续配环境的话直接pip岂不香?
所以第一步就是 多版本cuda安装/切换 (非多版本cuda的谨慎借鉴哈!)
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了,木的问题!!!
以上内容仅为自己学习记录,原创不易。转载请标明出处,拜谢!!!
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我即将开始一个将录制和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑Java或.NET以外的任何库)以进行实时可视化波形。有人知道我应该从哪里开始搜索吗? 最佳答案 要流入浏览器的数据量很大。Flash或Flex图表可能是唯一能提高内存效率的解决方案。Javascript图表往往会因大型数据集而崩溃。 关于ruby-Ruby中的波形可视化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手