【玩转PointPillars】Ubuntu18.04上部署nutonomy/second.pytorch

2023-10-26

【系统环境】

Ubuntu18.04

cuda10.2

GeForce GTX 1650

        今天部署的项目虽然名称上叫做second.pytorch,实际上是PointPillars的作者fork自SECOND项目,并作了改动之后形成的PointPillars项目代码。

创建虚拟环境

(base) ➜  ~ conda create -n second.pytorch python=3.6 anaconda
(base) ➜  ~ conda activate second.pytorch

安装依赖软件

(second.pytorch) ➜  ~ conda install shapely pybind11 protobuf scikit-image numba pillow
安装Pytorch,我们习惯上不会去指定cudatoolkit版本,像下面这样。

(second.pytorch) ➜  ~ conda install pytorch torchvision -c pytorch
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/zw/.conda/envs/second.pytorch

  added / updated specs:
    - pytorch
    - torchvision


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    ffmpeg-4.3                 |       hf484d3e_0         9.9 MB  pytorch
    gnutls-3.6.15              |       he1e5248_0         1.0 MB
    lame-3.100                 |       h7b6447c_0         323 KB
    libiconv-1.15              |       h63c8f33_5         721 KB
    libidn2-2.3.1              |       h27cfd23_0          85 KB
    libtasn1-4.16.0            |       h27cfd23_0          58 KB
    libunistring-0.9.10        |       h27cfd23_0         536 KB
    nettle-3.7.3               |       hbbd107a_1         809 KB
    openh264-2.1.0             |       hd408876_0         722 KB
    pytorch-1.9.0              |py3.6_cuda10.2_cudnn7.6.5_0       705.1 MB  pytorch
    torchvision-0.10.0         |       py36_cu102        28.7 MB  pytorch
    ------------------------------------------------------------
                                           Total:       748.0 MB

The following NEW packages will be INSTALLED:

  cudatoolkit        pkgs/main/linux-64::cudatoolkit-10.2.89-hfd86e86_1
  dataclasses        pkgs/main/noarch::dataclasses-0.8-pyh4f3eec9_6
  ffmpeg             pytorch/linux-64::ffmpeg-4.3-hf484d3e_0
  gnutls             pkgs/main/linux-64::gnutls-3.6.15-he1e5248_0
  lame               pkgs/main/linux-64::lame-3.100-h7b6447c_0
  libiconv           pkgs/main/linux-64::libiconv-1.15-h63c8f33_5
  libidn2            pkgs/main/linux-64::libidn2-2.3.1-h27cfd23_0
  libtasn1           pkgs/main/linux-64::libtasn1-4.16.0-h27cfd23_0
  libunistring       pkgs/main/linux-64::libunistring-0.9.10-h27cfd23_0
  libuv              pkgs/main/linux-64::libuv-1.40.0-h7b6447c_0
  nettle             pkgs/main/linux-64::nettle-3.7.3-hbbd107a_1
  ninja              pkgs/main/linux-64::ninja-1.10.2-hff7bd54_1
  openh264           pkgs/main/linux-64::openh264-2.1.0-hd408876_0
  pytorch            pytorch/linux-64::pytorch-1.9.0-py3.6_cuda10.2_cudnn7.6.5_0
  torchvision        pytorch/linux-64::torchvision-0.10.0-py36_cu102


Proceed ([y]/n)? 

我这里指定了cudatoolkit的版本为10.0,不然后面会遇到更多莫名其妙的错误。

(second.pytorch) ➜  ~ conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/zw/.conda/envs/second.pytorch

  added / updated specs:
    - cudatoolkit=10.0
    - pytorch
    - torchvision


The following NEW packages will be INSTALLED:

  cudatoolkit        pkgs/main/linux-64::cudatoolkit-10.0.130-0
  ninja              pkgs/main/linux-64::ninja-1.10.2-hff7bd54_1
  pytorch            pytorch/linux-64::pytorch-1.4.0-py3.6_cuda10.0.130_cudnn7.6.3_0
  torchvision        pytorch/linux-64::torchvision-0.5.0-py36_cu100


Proceed ([y]/n)? 

验证一下Pytorch对cuda的支持。

(second.pytorch) ➜  ~ python
Python 3.6.10 |Anaconda, Inc.| (default, May  8 2020, 02:54:21) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True

(second.pytorch) ➜  ~ conda install google-sparsehash -c bioconda

安装tensorboardX,方便训练的时候查看个指标曲线。

(second.pytorch) ➜  ~ pip install --upgrade pip    
(second.pytorch) ➜  ~ pip install fire tensorboardX

克隆second.pytorch项目到本地。

(second.pytorch) ➜  nutonomy git clone https://github.com/nutonomy/second.pytorch.git 
 

安装SparseConvNet

这个并不是PointPillars需要的,因为PointPillars里面没有用到稀疏卷积,而是second环境用到了。而作者是基于second的代码修改的,所以需要。我后面发现,这里你就算安装成功了SparseConvNet,到后面我训练的时候会提示需要spconv,而不是SparseConvNet。我方正SparseConvNet和spconv两个都装上了。

(second.pytorch) ➜  nutonomy git:(master) git clone https://github.com/LeftThink/SparseConvNet.git

(second.pytorch) ➜  nutonomy cd SparseConvNet 

(second.pytorch) ➜  SparseConvNet git:(master) bash build.sh 
Traceback (most recent call last):
  File "setup.py", line 12, in
    assert torch.matmul(torch.ones(2097153,2).cuda(),torch.ones(2,2).cuda()).min().item()==2, 'Please upgrade from CUDA 9.0 to CUDA 10.0+'
RuntimeError: CUDA error: all CUDA-capable devices are busy or unavailable

显示pytorch不支持cuda!!!!!!奇怪!!!!!,检查一下。

(second.pytorch) ➜  SparseConvNet git:(master) python -c 'from torch.utils.collect_env import main; main()'
Collecting environment information...
PyTorch version: 1.4.0
Is debug build: No
CUDA used to build PyTorch: 10.0

OS: Ubuntu 18.04.4 LTS
GCC version: (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0
CMake version: version 3.16.8

Python version: 3.6
Is CUDA available: No
注意到在我刚刚安装完pytorch后我是测试了对gpu的支持的,当时是true,现在变成false了。

以我的经验,重启服务器就好了。但这只是限于pytorch确实是装的支持cuda的版本。

重启完,带torch支持cuda再重新bash build.sh安装sparseconvnet包。

(second.pytorch) ➜  SparseConvNet git:(master) bash build.sh 

Processing dependencies for sparseconvnet==0.2
Finished processing dependencies for sparseconvnet==0.2
Traceback (most recent call last):
  File "examples/hello-world.py", line 12, in
    use_cuda = torch.cuda.is_available() and scn.SCN.is_cuda_build()
AttributeError: module 'sparseconvnet.SCN' has no attribute 'is_cuda_build'

又有问题,还好作者提示使用bash develop.sh。

(second.pytorch) ➜  SparseConvNet git:(master) bash develop.sh
这次ok了!!!

 安装spconv

https://github.com/traveller59/spconv

已经有个SparseConvNet了,怎么又冒出个spconv?且看spconv作者怎么说。

This is a spatially sparse convolution library like SparseConvNet but faster and easy to read. This library provide sparse convolution/transposed, submanifold convolution, inverse convolution and sparse maxpool.

2020-5-2, we add ConcatTable, JoinTable, AddTable, and Identity function to build ResNet and Unet in this version of spconv.

在python setup.py bdist_wheel的时候很可能遇到如下报错:

.....
-- Found cuDNN: v? (include: /usr/local/cuda-10.2/include, library: /usr/local/cuda-10.2/lib64/libcudnn.so)
CMake Error at /home/anaconda3/envs/FR1/lib/python3.7/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:172 (message):
PyTorch requires cuDNN 7 and above.

.....
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['cmake', '/users_1/tianchi_1/3_openPCDet/spconv', '-DCMAKE_PREFIX_PATH=/home/anaconda3/envs/FR1/lib/python3.7/site-packages/torch', '-DPYBIND11_PYTHON_VERSION=3.7', '-DSPCONV_BuildTests=OFF', '-DPYTORCH_VERSION=10400', '-DCMAKE_CUDA_FLAGS="--expt-relaxed-constexpr" -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/users_1/tianchi_1/3_openPCDet/spconv/build/lib.linux-x86_64-3.7/spconv', '-DCMAKE_BUILD_TYPE=Release']' returned non-zero exit status 1.
这个主要是cudnn版本没有找对的问题,可以参考如下方式解决。

为numba设置cuda

export NUMBAPRO_CUDA_DRIVER=/usr/lib/x86_64-linux-gnu/libcuda.so
export NUMBAPRO_NVVM=/usr/local/cuda/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=/usr/local/cuda/nvvm/libdevice
注:什么是numba?numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。

设置PYTHONPATH

export PYTHONPATH=$PYTHONPATH:/your/second.pytorch/path #根据自己的环境来

准备数据

下载KITTI数据,我将其放置在/data/sets/kitti_second路径下。

/data/sets/kitti_second/
├── data_object_calib
│   ├── testing
│   └── training
├── gt_database
│   ├── 0_Pedestrian_0.bin
│   ├── 1000_Car_0.bin
│   ├── 1000_Car_1.bin
|   |................. 
├── ImageSets
│   ├── test.txt
│   ├── train.txt
│   └── val.txt
├── testing
│   ├── calib
│   ├── image_2
│   ├── label_2
│   ├── velodyne
│   └── velodyne_reduced
└── training
    ├── calib
    ├── image_2
    ├── label_2
    ├── velodyne
    └── velodyne_reduced

创建kitti infos文件

python create_data.py create_kitti_info_file --data_path=${KITTI_DATASET_ROOT}
创建reduced point cloud文件

python create_data.py create_reduced_point_cloud --data_path=${KITTI_DATASET_ROOT}
创建groundtruth-dataset文件

python create_data.py create_groundtruth_database --data_path=${KITTI_DATASET_ROOT}

修改训练用配置文件

train_input_reader: {
  ...
  database_sampler {
    database_info_path: "/path/to/kitti_dbinfos_train.pkl"
    ...
  }
  kitti_info_path: "/path/to/kitti_infos_train.pkl"
  kitti_root_path: "KITTI_DATASET_ROOT"
}
...
eval_input_reader: {
  ...
  kitti_info_path: "/path/to/kitti_infos_val.pkl"
  kitti_root_path: "KITTI_DATASET_ROOT"
}



训练

(second.pytorch) ➜  second git:(master) ✗ python ./pytorch/train.py train --config_path=./configs/pointpillars/car/xyres_16.proto --model_dir=./models
....

middle_class_name PointPillarsScatter
num_trainable parameters: 66
{'Car': 5}
[-1]
load 14357 Car database infos
load 2207 Pedestrian database infos
load 734 Cyclist database infos
load 1297 Van database infos
load 56 Person_sitting database infos
load 488 Truck database infos
load 224 Tram database infos
load 337 Misc database infos
After filter database:
load 10520 Car database infos
load 2104 Pedestrian database infos
load 594 Cyclist database infos
load 826 Van database infos
load 53 Person_sitting database infos
load 321 Truck database infos
load 199 Tram database infos
load 259 Misc database infos
remain number of infos: 3712
remain number of infos: 3769
WORKER 0 seed: 1624062270
WORKER 1 seed: 1624062271

.....

/home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/torch/nn/_reduction.py:43: UserWarning: size_average and reduce args will be deprecated, please use reduction='none' instead.
  warnings.warn(warning.format(ret))
Traceback (most recent call last):
  File "./pytorch/train.py", line 659, in
    fire.Fire()
  File "/home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/fire/core.py", line 141, in Fire
    component_trace = _Fire(component, args, parsed_flag_args, context, name)
  File "/home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/fire/core.py", line 471, in _Fire
    target=component.__name__)
  File "/home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/fire/core.py", line 681, in _CallAndUpdateTrace
    component = fn(*varargs, **kwargs)
  File "./pytorch/train.py", line 414, in train
    raise e
  File "./pytorch/train.py", line 263, in train
    loss.backward()
  File "/home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/torch/tensor.py", line 195, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "/home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/torch/autograd/__init__.py", line 99, in backward
    allow_unreachable=True)  # allow_unreachable flag
RuntimeError: CUDA out of memory. Tried to allocate 158.00 MiB (GPU 0; 3.82 GiB total capacity; 2.41 GiB already allocated; 98.88 MiB free; 2.60 GiB reserved in total by PyTorch)
我这个gpu现存小了,只有4个G,这就尴尬了,换到服务器上去。

这个基本上没有问题了!

【参考】

https://github.com/nutonomy/second.pytorch

https://github.com/traveller59/spconv

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【玩转PointPillars】Ubuntu18.04上部署nutonomy/second.pytorch 的相关文章

  • 笔记

    零散个人笔记 书籍已出版 完整版 淘宝 京东 当当有售 1 tensorflow源码完整下载方法 git clone recurse submodules https github com tensorflow tensorflow git
  • 作业 从外到内:一次完整的渗透测试!作业

    9th 一 环境准备 Windows10 1709地址 WindowsServer2016 x64 修改了密码 原密码 lonelyor org UbuntuServer2004 x64 UbuntuServer1604 x64 pfsen
  • Qt实现coturn穿透客户端,coturn服务器搭建

    目录 coturn简介 coturn服务器搭建 coturn服务验证 qt实现coturn穿透 NAT类型是否可以穿透 coturn简介 Coturn集成了stun turn协议 实现NAT检测 穿透就需要通过stun协议 NAT检测无法进
  • 渗透测试核心思路-边界突破

    概述 渗透测试的目标可以是单个主机 也可以是整个内网 在实战中 比如最近如火如荼的HW行动 更多的是对一个目标的内网进行渗透 争取获得所有有价值的资产 完整的内网渗透涉及的步骤如下图所示 我们总是先通过对外提供服务的 防守最薄弱的主机打进去
  • c++:继承(超详解)

    目录 一 什么是继承 二 继承的格式 继承的总结 二 子类和父类 基类和派生类 1 子类和父类的相互赋值 2 同名的成员变量 3 同名成员函数 三 子类中默认的成员函数 1 构造函数 2 析构函数 3 拷贝构造 4 赋值运算符重载 四 单继

随机推荐

  • 数组中和为0的三个数

    给你一个整数数组 nums 判断是否存在三元组 nums i nums j nums k 满足 i j i k 且 j k 同时还满足 nums i nums j nums k 0 请你返回所有和为 0 且不重复的三元组 注意 答案中不可以
  • 正六边形旋转实现

    1 行内样式 div style background none div
  • Jenkins :添加node权限获取凭据、执行命令

    拥有Jenkins agent权限的账号可以对node节点进行操作 通过添加不同的node可以让流水线项目在不同的节点上运行 安装Jenkins的主机默认作为master节点 1 Jenkins 添加node获取明文凭据 通过添加node节
  • UDF、UDAF和UDTF开发模板

    0 背景 Hive是一种构建在Hadoop上的数据仓库 Hive把SQL查询转换为一系列在Hadoop集群中运行的MapReduce作业 是MapReduce更高层次的抽象 不用编写具体的MapReduce方法 Hive将数据组织为表 这就
  • 树莓派4B系统搭建---2021-8-12

    文章目录 前言 一 系统安装 1 下载系统 2 制作系统SD卡 开启SSH 树莓派系统配置 网络配置 二 使用步骤 1 引入库 2 读入数据 总结 前言 树莓派 英语 Raspberry Pi 是基于Linux的单片机电脑 由英国树莓派基金
  • 换脸视频怎么做出来的?AI视频换脸教程【完整版手把手】免费AI换脸视频工具制作过程详解

    上期分享了wav2lip GFPGan图片说话转视频的文章 超写实虚拟数字人再升级 Wav2Lip GFPGAN完整版教程及效果视频评测 手把手 baoxueyuan的博客 CSDN博客 部分饱子好奇视频如何换脸 因为近期视频换脸太火爆了
  • vs2012远程调试(可用)

    vs2012远程调试功能的改进 分类 vs2012 vs远程调试 2014 01 22 17 49 75人阅读 评论 0 收藏 举报 vs2012 vs 不知道大家有没有遇到过这种情况 刚开发完的程序 明明在本机能够好好的运行 可是部署到服
  • 教你如何搭建一个自动化构建的博客

    前言 记得在1年之前搭建了一个个人主页的博客 但是当时功力尚浅 每次写博客 都是自己手动写html 这样会变得非常的繁琐 现在很多人用主流的wordpress hexo之类的快速搭建一个平台 那些工具确实方便 但是对于主题以及一些额外的排版
  • Fabric搭建错误

    fabric搭建错误解决 在搭建fabric环境时 byfn sh up 时遇到错误Error error getting endorser client for channel endorser client failed to conn
  • 解决:component COMDLG32.OCX or one of…和 MSCOMCTL.OCX or one of...的解决方法

    遇到的问题 在做CTF题目 使用16进制转图片工具 出现了两个报错 解决方法 第一步 下载COMDLG32 OCX 程序 可以去官网 也可也使用我的百度网盘 http 链接 https pan baidu com s 1 1KNgqrxPA
  • 走过2011

    走过2011 时间飞逝 2011不寻常的一年还剩下短短5天 三百天的生活与工作是一份平淡一份快乐 工作需要总结 生活也要总结 日子才会越来越好 2011是进入公司的第二年 公司开发人员有来有离 我没有离开 因为我不喜欢跳槽 但我不跳槽的主要
  • Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from

    程序在编译时报错 在执行合并AndroidMainfest时报Attribute application appComponentFactory value android support v4 app CoreComponentFacto
  • Property ‘xxx‘ does not exist on type ‘xxx‘报错解决

    用ts写一个组件的时候 遇到了Property increment does not exist on type Add 的红点儿报错 但神奇的是竟然还能正常运行 在参考一些正确的代码后 有两个解决方案 在export default cl
  • P1048 采药(C++)---01背包(动态规划)解题

    题目描述 辰辰是个天资聪颖的孩子 他的梦想是成为世界上最伟大的医师 为此 他想拜附近最有威望的医师为师 医师为了判断他的资质 给他出了一个难题 医师把他带到一个到处都是草药的山洞里对他说 孩子 这个山洞里有一些不同的草药 采每一株都需要一些
  • MathJax 3 配置和上手渲染数学公式及在Vue中的使用

    mathjax是一个用于latex mathml和ascimath表示法的开源javascript显示引擎 mathjax的3 0版是对mathjax的彻底重写 实现了组件化 可以实现不同需求的定制 使用和配置与mathjax2版本有很大的
  • 【redis】Redis cluster是AP架构还是CP架构?

    最近刚好在看CAP理论 加上之前分析的redis cluster 就在想redis的cluster是什么模式的 AP还是CP 首先还是简单讲下CAP 具体的可见 CAP分别是 强一致性 Consistency 可用性 Availabilit
  • 地址栏参数隐藏

    1 result type 的redirectAction改为chain 但要注意如果是登录方法 权限拦截器中就可能会影响 2 将参数放到作用域中 比如session 注意 1 这样的注释是没用的
  • 网络编程13——epoll事件模型:ET和LT模、掌握实现epoll的ET模式(非阻塞模式

    epoll是linux下多路复用IO select poll 的增强版本 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率 因为它会复用文件描述符集合来传递结果为不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文
  • shiro认证机制及认证原理

    转自 shiro认证机制 认证原理 下文笔者将讲述shiro的认证机制及认证原理 如下所示 Shiro认证 验证用户身份的过程 在认证过程中 用户需要提交实体信息 Principals 和凭据信息 Credentials 以检验用户是否合法
  • 【玩转PointPillars】Ubuntu18.04上部署nutonomy/second.pytorch

    系统环境 Ubuntu18 04 cuda10 2 GeForce GTX 1650 今天部署的项目虽然名称上叫做second pytorch 实际上是PointPillars的作者fork自SECOND项目 并作了改动之后形成的Point