0 说在前面

SA-SSD论文:https://www4.comp.polyu.edu.hk/~cslzhang/paper/SA-SSD.pdf

SA-SSD源码(pytorch):https://github.com/skyhehe123/SA-SSD/issues

可视化在我的另一篇博客上有说明:https://blog.csdn.net/qq_38316300/article/details/110758104

如果能够帮助到大家,还请大家给我点个赞支持一波。

1 笔者环境

首先,笔者能够跑通整个源码,要感谢很多博主将其经验写成博客分享出来,笔者借鉴的很多博主经验和教训,因此笔者也希望能够将自己的经验分享出来。

其次,笔者的整个环境如下:

ubuntu 18.04

cuda 10.0

cudnn 7.6.4

python 3.6.2

pytorch 1.1.0

torchvision 0.3.0

最后,笔者会逐步介绍关键点安装步骤,这是因为其中有很多坑,可能就是因为版本不对就会导致源码跑不通!

2 环境搭建

2.1 cuda和cudnn的安装

在本次环境搭建中选择的是cuda 10.0和cudnn 7.6.4。网上有很多博主都会详细介绍如何安装cuda和cudnn,比如这篇博主,但是我想强调的是,在安装cudnn的时候,最好安装tgz文件,然后安装官网文档进行解压、复制文件、给文件授权。

cuda 10.0地址:https://developer.nvidia.com/cuda-toolkit-archive

cudnn 7.6.4地址:https://developer.nvidia.com/rdp/cudnn-archive

  注意点:

(1)cudnn 7.6.4选择cuDNN Library for Linux进行下载(尽量不要选择.deb文件进行安装)

(2)cudnn安装步骤:

在这里我是参考官网文档进行安装

第一步:下载tgz文件之后,你要进行解压

https://docs.nvidia.com/deeplearning/cudnn/install-guide/#install-linux

第二步:复制cudnn中include文件夹和lib64文件夹下的所有文件到cuda对应的位置并给文件授权

$ sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64$ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

2.2 pytorch和torchvision安装

笔者使用anaconda创建了一个虚拟环境,python版本是3.6。

一定要注意:pytorch==1.1.0,torchvision==0.3.0

笔者是下载whl文件然后在虚拟环境中使用pip进行安装的,whl文件的下载地址在这里

2.3 安装mmcv

这里需要注意一点,安装mmcv-full可能不行,只能安装mmcv,命令很简单,进入虚拟环境,在终端中输入下面命令即可:

pip install mmcv

2.4 安装spconv

这里是个大坑!!!几次在这里翻了跟头。最终并没有选择官网github中的文件,而是选择了这位兄弟的github,然后再进行安装的。安装步骤如下:

第一步:获取源码

git clone https://github.com/jinfagang/spconv.git --recursive

第二步:安装boost headers

sudo apt-get install libboost-all-dev

第三步:下载cmake >= 3.13.2,并将其添加到环境变量中

笔者首先在命令行输入下面这一个命令:

sudo apt-get install cmake

但是下载camke的版本小于3.13.2,因此我又参考了这个兄弟中下载cmake的部分。

具体步骤如下:

(1)去官网下载cmake3.13.2,然后进入到文件中进行解压:

sudo tar zxvf cmake-3.13.2-Linux-x86_64.tar.gz

(2)创建软链接

sudo mv cmake-3.13.2-Linux-x86_64 /opt/cmake-3.13.2
ln -s /opt/cmake-3.13.2/bin/* /usr/bin/

(3)验证cmake版本

cmake --version

如果终端中能够输出cmake版本,就说明你安装成功了

第四步:对spconv进行编译

python setup.py bdist_wheel

第五步:进入到./dist文件中,进行安装

cd ./dist
pip install spconv*

2.5 安装其他包

 pip install shapelypip install opencvpip install scikit-imagepip install mayavipip install numbapip install matplotlibpip install Cythonpip install terminaltablespip install tqdmpip install pybind11 

在这里参考了这位兄弟的博客。

而且,我最终想要强调一点,最重要的一点就是:

千万不要安装mmdet

千万不要安装mmdet

千万不要安装mmdet

因为SA-SSD源码中就有mmdet,我们只要进行编译就可以了,并不需要我们使用pip进行安装,不需要使用pip进行安装,不需要使用pip进行安装!!!

2.6 编译mmdet文件

进入到SA-SSD下的mmdet文件中,在终端中依次输入下面的命令:

 cd mmdet/ops/points_oppython setup.py build_ext --inplacecd mmdet/ops/iou3dpython setup.py build_ext --inplacecd mmdet/ops/pointnet2python setup.py build_ext --inplace

然后在~/.bashr中设置环境变量

 export NUMBAPRO_CUDA_DRIVER=/usr/lib/x86_64-linux-gnu/libcuda.soexport NUMBAPRO_NVVM=/usr/local/cuda/nvvm/lib64/libnvvm.soexport NUMBAPRO_LIBDEVICE=/usr/local/cuda/nvvm/libdeviceexport LD_LIBRARY_PATH=/home/sf/anaconda3/lib/python3.6/site-packages/spconv;

上面的内容还是参考了这位兄弟的博客。

3 数据预处理操作

下载KITTI数据集,具体下载内容如下:

└── DATA_DIR├── training   <-- training data|   ├── image_2|   ├── label_2|   ├── velodyne|   └── velodyne_reduced└── testing  <--- testing data|   ├── image_2|   ├── label_2|   ├── velodyne|   └── velodyne_reduced

然后,对图像进行预处理操作,执行下面的命令:

$ cd tools
$ python3 create_data.py

在下面中你可能会遇到下面的错误:

(1)找不到billyhe路径

原因:这是因为SA-SSD源码中使用的是绝对路径

措施:将billyhe改成你自己的用户名,或者你将整个路径改成相对路径就行。

(2)找不到mmdet模块

我之前遇到这个问题的时候,以为是没有安装mmdet模块,然后使用pip进行安装了,然后就遇到了另外一个错误:

ModuleNotFoundError: No module named 'mmcv._ext'

然后又是一大堆问题,改来改去竟然发现,不需要使用pip进行安装mmdet模块,因为在上面我们已经对mmdet进行编译了!!!

但是,为什么还是会出现这个原因呢?最终的罪魁祸首还是路径的问题

原因:create_data.py文件和mmdet中的文件不在同一个文件夹下,如果需要import的话,需要修改路径

措施:在from mmdet前面添加下面内容就可以:

import sys
sys.path.append("..")

在后面的执行的过程中可能还会遇到找不到mmdet模块,解决方案如法炮制。

4 训练模型

训练模型就比较简单了,两行命令

cd tools
python3 train.py ../configs/car_cfg.py

在执行训练的过程中可能还是会遇到一下问题,但是在SA-SSD官网源码的issues中基本上都有解答,我下面只列出我遇到的问题及其解决方案。

(1)找不到kitti_dbinfos_train.pkl

这是因为在create_data.py程序中并没有生成kitti_dbinfos_train.pkl文件,只生成了kitti_dbinfos_trainval.pkl文件。因此,你可以使用kitti_dbinfos_trainval.pkl进行训练。

参考:issues31 

2)RuntimeError: Expected object of backend CUDA but got backend CPU for sequence element 1 in sequence argument at position

参考:issues72

(3)TypeError: grid_sample() got an unexpected keyword argument 'align_corners'

他的意思就是说,torch1.1.0暂时不支持align_corners这个参数,我们只需要将这个参数去掉就行了。

参考:issues74

这样,整个SA-SSD模型就已经可以跑通了,下面贴一下我自己训练的过程,因为还在训练,所以没有验证的结果,后面训练好了的话,会补充一下验证的图片。

训练的最终样子是这样的:

补充:

(1)在训练的过程总中,我遇到了一个bug

后来找到了这个issues的解答,修改之后再进行训练,后面再补充一下究竟能不能成功:

Referencing this issue:
traveller59/second.pytorch#229

Same crash at line 194 of cuhash/hash_table.cpp, only I'm not training. I'm evaluating a model!

It reliably happens on my data when numAct = 1024 (in spconv/index.cu) which is the max_table_size in cuhash's Build(). My suspicion is that the table_size calculation in cuhash is slightly incorrect.

That calculation is done here:
https://github.com/traveller59/spconv/blob/master/src/cuhash/hash_table.cpp#L102

If I change it to:
table_size_ = unsigned(floor(max_table_entries * space_usage) + 1);

This is definitely enough space since: floor(x) + 1 >= ceil(x) with floor(x) + 1 > ceil(x) when x is an integer.

That seems to prevent the "Illegal memory access" error from occurring. It's cringe-worthy to think that the corruption could be on the GPU side? Like it was writing one extra entry after the end of d_contents_? That array is stored on the GPU!

I need to study cuhash more to see why the current table_size might lead to corruption. Otherwise, I've run the thing 3 times on 5 minutes worth of data and it never crashes now. However, it always crashed before, without fail! And always when max_table_size is 1024.

这是修改的内容(做个记录,为了能够改回来)

有用!!!!

5 测试模型

测试模型就是利用tools下的test.py程序测试模型的性能,官网提供了他们的权重,但是最终会报错

cd tools
python3 test.py ../configs/car_cfg.py ../saved_model_vehicle/epoch_50.pth

我训练完之后,使用了自己的权重进行测试,测试命令如下:

(1)测试单类检测性能(car)

cd tools
python test.py ../configs/car_cfg.py ../20200701/checkpoint_epoch_80.pth

但是batch_size == 1的测试性能,因为batch_size == 2,训练时候有bug:

(2)测试多类检测性能(car  pedestrian  cyclist

cd tools
python test.py ../configs/multi_cfg.py ../20201128/checkpoint_epoch_80.pth

在2070显卡上的耗时时长在15帧左右

6 参考文章

(1)ubuntu下安装cuda和cudnn: https://yeyupiaoling.blog.csdn.net/article/details/80689543

(2)SA-SSD调试记录:https://blog.csdn.net/qq_35632833/article/details/107009344

(3)SA-SSD复现:https://blog.csdn.net/Roland_fire/article/details/107615358

(4)second.pytorch调试:https://blog.csdn.net/r1141207831/article/details/103756292

(5)SA-SSD源码地址:https://github.com/skyhehe123/SA-SSD

(6)SA-SSD论文:https://www4.comp.polyu.edu.hk/~cslzhang/paper/SA-SSD.pdf

(7)spconv源码地址:https://github.com/jinfagang/spconv

(8)python import 上级目录:https://blog.csdn.net/songbinxu/article/details/80289489

SA-SSD环境搭建——血与泪的教训相关推荐

  1. MongoDB--Linux下搭建的副本集集群(踩过的坑,血和泪的教训)

    MongoDB–Linux下搭建的副本集集群(踩过的坑,血和泪的教训) 文章目录 MongoDB--Linux下搭建的副本集集群(踩过的坑,血和泪的教训) 一:环境准备 二:安装步骤 三:启动 1.关 ...

  2. 目标检测--RFBNet环境配置、训练及验证 (血和泪的教训)

    最近接到任务,需要对目标检测进行一下调研.于是我面向GitHub进行了一波编程.经过一番比较发现,RFBNet貌似是非常不错的选择.所以就打算和跟我一样的新手们分享一下经验,也算是记录一下踩过的坑.哪 ...

  3. 血与泪的教训: JavaWeb中文乱码问题整合

    中文的字符编码集有:GB2312,GB18030,UTF-8(适用于中文,但偶尔会出错,前面两个比较有保障) Html页面乱码问题 在<head>标签中设置<meta charset ...

  4. 为什么不要去小公司上班?这是我血与泪的教训!!!

    工作是在大公司更好,还是小公司更好?这个问题让大家争论不休,也没有最终的答案.凑个热闹,我结合自己的经历,谈谈我的看法. 这个问题是比较有发言权的,博主小羊同学总共不到四年工作经验,大概也就是大公司和 ...

  5. Android Studio连接mysql8.0.25经验贴(三天血与泪的教训)

    使用mysql-connector-java8.0.25连接失败,解决方案:下载低版本的jar包!! 目录 使用mysql-connector-java8.0.25连接失败,解决方案:下载低版本的ja ...

  6. 一个90后创业者血与泪的教训

    我是一名90后,现在是一家移动互联网创业公司里的一名员工.如果回到2013年的这个时候我的名片上印着是"为你爱"创始人兼CEO.现在的我却背负了一身债务,每月为了还债整夜辗转反侧. ...

  7. oracle 存储过程的一些血与泪的教训

    create or replace PROCEDURE p_saveIssuerCinemaAdd_param(sheetId IN varchar2,issuerCinemaAddIds IN cl ...

  8. 关于JavaScript,这10条血与泪的建议大家一定要看

    (注:本文翻译自国外著名杂志Noteworthy,文章在Medium编程类目冲上了一周热榜的榜首,本文版权归原作者The Cat with a Dragon Tattoo所有) 使用JavaScrip ...

  9. 我用血和泪的教训,再次告诉你:不要接私活

    loonggg 读完需要 3 分钟 速读仅需 1 分钟 大家好,我是你们的校长. 今天给大家讲一讲我最近的一个近况,真的是说可以是用血和泪来验证轻易不要再接私活了. 我之前在公众号写过很多关于不要接私 ...

最新文章

  1. 关于用notepad++确认代码中\r\n\t空格等不显示的字符
  2. hadoop2.6.0安装详细步骤
  3. 数据驱动业务——梦想成真,只差一步
  4. java获取网络图片_做个看图片的App玩玩_第一篇
  5. 4线-2线优先编码器
  6. 苹果ipad服务器无响应怎么办,苹果iPad死机怎么办?几种处理iPad使用过程中死机的方法...
  7. 矩阵的对称性,自反性和反对称性的判断
  8. 12星座的出生年月日性格_12星座出生日期性格特点
  9. Windows 7 产品密钥是否安全
  10. c语言项目研发实训,C语言实训项目表V1.0.doc
  11. 千万 PV,百万PV什么意思?
  12. vst开启语音服务器,VST语音遥控器体验记
  13. oracle 注入 nc,oracle注入,utl_http方法
  14. 三步解决Word无法使用Ctrl V进行复制
  15. Maven安装和配置阿里云镜像(解决在idea中Maven加载依赖慢的问题,保姆级教学)
  16. 前端代码规范(个人约束)
  17. 怎么下载不允许下载的东西
  18. python 10053_python 写的selenium脚本不能循环,循环时会报 [WinError 10053] 你的主机中的软件中止了一个已建立的连接。错误,求大佬解答下...
  19. 华为如何实施数字化转型(附PPT)
  20. centos 部署php_Centos 搭建简单PHP环境

热门文章

  1. 初次玩耍lucene.net,一个小小的记录
  2. RT-Thread--外部 flash 挂载 fatfs 文件系统
  3. npm错误——npm ERR! code ERESOLVE 解决方法
  4. labview关于移位寄存器的使用
  5. sas统计分析学习笔记(一)
  6. WAF---Web应用防火墙 功能梳理
  7. 利用主成分分析(PCA)法对基金进行排名
  8. Springboot毕设项目大学生毕业管理系统3ep7m(java+VUE+Mybatis+Maven+Mysql)
  9. 文件夹加密软件哪个好?文件夹加密软件排行榜
  10. Prince of Persia Images