【三维目标检测】Part-A2(一)
Part-A2是商汤在CVPR 2020上发布的三维点云目标检测模型,来源于PointRCNN同一作者,论文名称《From Points to Parts 3D Object Detection from Point Cloud with Part-aware and Part-aggregation Network》。从名称可以看出,Part代表的是目标的局部信息,A2代表 aware and aggregation,即目标内局部点云识别与聚合。该论文最突出的创新点在于在三维目标框检测时利用到了目标内的局部点云信息。在此之前的模型,主要是将三维目标看作一个整体,可以理解为一个黑盒子,最目标内部的点云分布情况缺乏关注。
1 源码与输入数据
源码采用的是mmdetection3d框架中的PartA2模型。mmdetection3d安装和调试验证可参考本博客之前的专栏,里面有详细介绍。
数据采用的是kitti,为了快速进行算法调试、训练、评估和验证,以及快速下载,我制作了一个mini kitti数据集,数据集的文件目录结构与完整KITTI数据集保持一致。其中,小型的KITTI数据集,即 mini kitti保存了20个训练样本和5个测试样本。下载地址为:minikitti数据集-深度学习文档类资源-CSDN下载。
下载的数据包含4个部分,即激光雷达数据velodyne、图像数据image_2、校准数据calib和标注数据label_2。如果需要对应的ImageSets,请下载:train_val_testforminikitti-深度学习文档类资源-CSDN下载,将下载的文件夹重名为ImageSets即可。
关于KITTI各个部分的介绍请分别参考以下内容:
KITTI数据集简介(一) — 激光雷达数据_Coding的叶子的博客-CSDN博客_雷达数据集
KITTI数据集简介(二) — 标注数据label_2_Coding的叶子的博客-CSDN博客_kitti数据集标注
KITTI数据集简介(三) — 图像数据image_2_Coding的叶子的博客-CSDN博客
KITTI数据集简介(四) — 图像数据calib_Coding的叶子的博客-CSDN博客
数据预处理部分可以参考Voxelnet的数据处理方式加以理解:【三维目标检测】VoxelNet(二):数据处理_Coding的叶子的博客-CSDN博客。
下载后直接将数据保存在mmdetection 3工程所在目录的data文件夹下,目录结构如下图所示,然后执行下文第2节中的kitti数据预处理命令。
2 mmdetection3d kitti数据处理与模型训练
mmdetection3d kitti (持续更新)_Coding的叶子的博客-CSDN博客
python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti
3 源码运行调试
mmdetection3d的PartA2源码运行命令如下:
python tools/train.py configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py
PartA2运行与mmdetection3d的版本有关,早期版本运行会有几个bug,不过后续都已经修复了。为了避免bug,大家可以安装最新版本,也可以按照下面步骤进行修改。
3.1 稀疏卷积版本
PartA2采用了稀疏卷积,需要安装spconv 2.0库。安装方式如下,其中102表示cuda版本为10.2,且最低支持CUDA 10.2。
pip install cumm-cu102
pip install spconv-cu102
如果没有安装spconv 2.0则有可能报如下错误:
(1)RuntimeError: /tmp/mmcv/mmcv/ops/csrc/pytorch/cuda/sparse_indice.cu 123。
(2)RuntimeError: indices must be contiguous。
3.2 稀疏卷积特征赋值
spconv 2.0不再支持对稀疏变量的特征直接赋值,需要采用replace_feature来完成。例如,a.feature=xxx需要改成a=replace_feature(a, xxx)。使用relace_feature之前先要导入该函数,即
“from mmdet3d.ops.sparse_block import replace_feature”。
如果spconv的版本不正确,那么运行程序时会报错提示“ValueError: you can't set feature directly, use 'x = x.replace_feature(your_new_feature)' to generate new SparseConvTensor instead.”。解决方法为将报错处的程序都逐一替换成replace_feature操作即可。
3.3 parta2_bbox_head.py
如果运行程序时报错提示“ File "/root/project/mmdetect2d/mmdetection3d-master/mmdet3d/models/roi_heads/bbox_heads/parta2_bbox_head.py", line 262, in forward x_part = self.part_conv(part_features)”,并且触发AssertionError错误,那么可以考虑在最新版本的mmdection3d项目中下载parta2_bbox_head.py文件并且替换掉当前文件。
3.4 no attribute 'train_cfg'或'test_cfg'
如果运行程序时报错提示“AttributeError: 'PartA2' object has no attribute 'train_cfg'”或“AttributeError: 'PartA2' object has no attribute 'test_cfg'”,那么需要对mmdetection3d-master\mmdet3d\models\detectors\two_stage.py中的TwoStage3DDetector类进行修改。这个是早期版本的bug,没有加载train_cfg或test_cfg。那么在该类中增加“self.train_cfg = train_cfg”和“self.test_cfg = test_cfg”即可,如下所示。
if pretrained:warnings.warn('DeprecationWarning: pretrained is deprecated, ''please use "init_cfg" instead')backbone.pretrained = pretrainedself.backbone = build_backbone(backbone)self.train_cfg = train_cfgself.test_cfg = test_cfgif neck is not None:self.neck = build_neck(neck)if rpn_head is not None:
4 Part-A2简介
Part-A2的整体结构如下图所示,主要包括Part-Aware stage 和Part-aggregation stage两个阶段。Part-Aware stage主要是提取点云中各个点的特征,包括语义分割特征和目标内部点的特征,提取特征的方法是一个采用三维稀疏卷积的UNET结构。UNET是二维图像语义分割中比较常见的一个主干网络结构,Part-A2沿用了这个结构,并且将二维卷积相应地替换成三维稀疏卷积。Part-Aggregation stage阶段主要是根据上一阶段的特征和候选框proposal生成最终的目标分类、置信度和位置预测特征,这个功能与SECOND等三维目标检测网络基本一致,但进行了语义特征和Part 特征的融合。
5 模型结构与代码详解
模型详细结构及推理过程请参考下一篇博客:【三维目标检测】Part-A2(二)_Coding的叶子的博客-CSDN博客。
6【python三维深度学习】python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_三维点云深度学习
更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。
【三维目标检测】Part-A2(一)相关推荐
- ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测
ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测 STD: Sparse-to-Dense 3D Object Detector for Point Cloud 论文链 ...
- CVPR2020论文解读:3D Object Detection三维目标检测
CVPR2020论文解读:3D Object Detection三维目标检测 PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Det ...
- 三维目标检测算法原理
三维目标检测算法原理 输入输出接口 Input: (1)图像视频分辨率(整型int) (2)图像视频格式(RGB,YUV,MP4等) (3)左右两边的车道线位置信息摄像头标定参数(中心位置(x,y) ...
- 【论文速读】基于图像的伪激光雷达三维目标检测
点云PCL免费知识星球,点云论文速读. 标题:End-to-End Pseudo-LiDAR for Image-Based 3D Object Detection 作者:Rui Qian, Divy ...
- Complexer-YOLO:基于语义点云的实时三维目标检测与跟踪
泡泡点云时空,带你精读点云领域顶级会议文章 标题:Complexer-YOLO: Real-Time 3D Object Detection and Tracking on Semantic Poin ...
- 最新综述:自动驾驶中的多模态三维目标检测
©PaperWeekly 原创 · 作者 | 张一帆 学校 | 华南理工大学本科生 研究方向 | CV,Causality Abstract 在过去几年,自动驾驶取得了蓬勃的发展,但是由于驾驶环境的复 ...
- 目标检测YOLO实战应用案例100讲-基于激光雷达点云的三维目标检测算法研究
目录 基于激光雷达点云的三维目标检测算法研究 基于投影图的方法 基于点云的多模态融合方法
- 【三维目标检测】3DSSD(二)
数据和源码请参考上一篇博文:[三维目标检测]3DSSD(一)_Coding的叶子的博客-CSDN博客. 3DSSD三维目标检测模型发表在CVPR2020<3DSSD: Point-based 3 ...
- 【三维目标检测】3DSSD(一)
3DSSD三维目标检测模型发表在CVPR2020<3DSSD: Point-based 3D Single Stage Object Detector>.目前,基于体素的 3D 单级检测器 ...
最新文章
- java显示链表在jtable上输出_jtable的使用精华
- sqoop操作之HIVE导出到ORACLE
- php 时钟函数,使用PHP的日期与时间函数技巧
- Linux watch命令详解
- PowerDesigner 16安装注意事项
- slot多作用域 vue_详解Vue.js 作用域、slot用法(单个slot、具名slot)
- java 龟兔赛跑预测_[Java] 蓝桥杯BASIC-24 基础练习 龟兔赛跑预测
- mysql的engine不同,导致事物回滚失败的问题
- Vue开发者工具 安装
- 2022云管云网大会丨阿里云孙成浩:构建万物互联的智能云网络
- 看这篇就够了——ubuntu扩展屏幕及装显卡驱动后黑屏问题
- matlab 求已知概率密度函数的随机数生成
- Dark GDK 初体验
- jquery checkbox选中事件监听
- 【k8s实战一】Jenkins 部署应用到 Kubernetes
- 数学建模之SPSS的使用
- Ubuntu18.04 Sublime Text3
- react引入阿里字体图标iconfont
- 01219 oracle,oracle for win移机ORA-01219问题解决方法详解
- 高德地图隐藏、去除Logo