SA-SSD环境搭建——血与泪的教训
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#229Same 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#L102If 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环境搭建——血与泪的教训相关推荐
- MongoDB--Linux下搭建的副本集集群(踩过的坑,血和泪的教训)
MongoDB–Linux下搭建的副本集集群(踩过的坑,血和泪的教训) 文章目录 MongoDB--Linux下搭建的副本集集群(踩过的坑,血和泪的教训) 一:环境准备 二:安装步骤 三:启动 1.关 ...
- 目标检测--RFBNet环境配置、训练及验证 (血和泪的教训)
最近接到任务,需要对目标检测进行一下调研.于是我面向GitHub进行了一波编程.经过一番比较发现,RFBNet貌似是非常不错的选择.所以就打算和跟我一样的新手们分享一下经验,也算是记录一下踩过的坑.哪 ...
- 血与泪的教训: JavaWeb中文乱码问题整合
中文的字符编码集有:GB2312,GB18030,UTF-8(适用于中文,但偶尔会出错,前面两个比较有保障) Html页面乱码问题 在<head>标签中设置<meta charset ...
- 为什么不要去小公司上班?这是我血与泪的教训!!!
工作是在大公司更好,还是小公司更好?这个问题让大家争论不休,也没有最终的答案.凑个热闹,我结合自己的经历,谈谈我的看法. 这个问题是比较有发言权的,博主小羊同学总共不到四年工作经验,大概也就是大公司和 ...
- Android Studio连接mysql8.0.25经验贴(三天血与泪的教训)
使用mysql-connector-java8.0.25连接失败,解决方案:下载低版本的jar包!! 目录 使用mysql-connector-java8.0.25连接失败,解决方案:下载低版本的ja ...
- 一个90后创业者血与泪的教训
我是一名90后,现在是一家移动互联网创业公司里的一名员工.如果回到2013年的这个时候我的名片上印着是"为你爱"创始人兼CEO.现在的我却背负了一身债务,每月为了还债整夜辗转反侧. ...
- oracle 存储过程的一些血与泪的教训
create or replace PROCEDURE p_saveIssuerCinemaAdd_param(sheetId IN varchar2,issuerCinemaAddIds IN cl ...
- 关于JavaScript,这10条血与泪的建议大家一定要看
(注:本文翻译自国外著名杂志Noteworthy,文章在Medium编程类目冲上了一周热榜的榜首,本文版权归原作者The Cat with a Dragon Tattoo所有) 使用JavaScrip ...
- 我用血和泪的教训,再次告诉你:不要接私活
loonggg 读完需要 3 分钟 速读仅需 1 分钟 大家好,我是你们的校长. 今天给大家讲一讲我最近的一个近况,真的是说可以是用血和泪来验证轻易不要再接私活了. 我之前在公众号写过很多关于不要接私 ...
最新文章
- 关于用notepad++确认代码中\r\n\t空格等不显示的字符
- hadoop2.6.0安装详细步骤
- 数据驱动业务——梦想成真,只差一步
- java获取网络图片_做个看图片的App玩玩_第一篇
- 4线-2线优先编码器
- 苹果ipad服务器无响应怎么办,苹果iPad死机怎么办?几种处理iPad使用过程中死机的方法...
- 矩阵的对称性,自反性和反对称性的判断
- 12星座的出生年月日性格_12星座出生日期性格特点
- Windows 7 产品密钥是否安全
- c语言项目研发实训,C语言实训项目表V1.0.doc
- 千万 PV,百万PV什么意思?
- vst开启语音服务器,VST语音遥控器体验记
- oracle 注入 nc,oracle注入,utl_http方法
- 三步解决Word无法使用Ctrl V进行复制
- Maven安装和配置阿里云镜像(解决在idea中Maven加载依赖慢的问题,保姆级教学)
- 前端代码规范(个人约束)
- 怎么下载不允许下载的东西
- python 10053_python 写的selenium脚本不能循环,循环时会报 [WinError 10053] 你的主机中的软件中止了一个已建立的连接。错误,求大佬解答下...
- 华为如何实施数字化转型(附PPT)
- centos 部署php_Centos 搭建简单PHP环境
热门文章
- 初次玩耍lucene.net,一个小小的记录
- RT-Thread--外部 flash 挂载 fatfs 文件系统
- npm错误——npm ERR! code ERESOLVE 解决方法
- labview关于移位寄存器的使用
- sas统计分析学习笔记(一)
- WAF---Web应用防火墙 功能梳理
- 利用主成分分析(PCA)法对基金进行排名
- Springboot毕设项目大学生毕业管理系统3ep7m(java+VUE+Mybatis+Maven+Mysql)
- 文件夹加密软件哪个好?文件夹加密软件排行榜
- Prince of Persia Images