Voxel R-CNN: Towards High Performance Voxel-based 3D Object Detection

news/2024/7/10 2:56:15 标签: 目标检测, r语言, cnn

1. Motivation

  1. point-base方法虽然识别率较高但是耗时过长;voxel-base方法虽然耗时较短但是识别率较差.
  2. 经过相关实验可以知道原始点的精确定位并不是必要的,更粗的体素粒度也可以为该任务提供足够的空间上下文线索;
  3. voxel-base 方法将3D特征结构转换为BEV之后,没有进行3D结构的恢复,缺乏对3D结构特征的利用。

2. Contribution

  1. 总结了point-base和voxel-base的缺陷,结合SECORD和PV-RCNN得出单靠BEV表示不能精确预测三维空间的bbox;
  2. point-voxel 耗时较长,影响检测器的效率,因此论文直接利用3D voxel张量来进行物体检测。
    在这里插入图片描述

3. Voxel R-CNN Design

论文设计了一种新的网络架构Voxel R-CNN Design,该网络架构主要包括:3D backbone,2D backbone接RPN和voxel RoI pooling已经检测框细化网络。
网络首先将原始点划分为规则的voxel,并且利用3D backbone进行特征提取,然后将稀疏的3D voxel转化为BEV表示,然后再BEV上使用2D backbone和RPN进行3D proposal的生成,随后使用voxel RoI pooling进行特征提取,并使用这些特征信息进行检测框细化。
在这里插入图片描述

3.1 Voxel RoI pooling

3.1.1 Voxel Volumes as Points

假定非空voxel中心点为 { v i = ( x i ,    y i ,    z i ) } i = 1 N \left\{v_i=\left(x_i,\;y_i,\;z_i\right)\right\}_{i=1}^N {vi=(xi,yi,zi)}i=1N,对应的特征向量为 { Φ i } i = 1 N \left\{\Phi_i\right\}_{i=1}^N {Φi}i=1N。其中中心点的三维坐标是由voxel下标,voxel大小和点云的边界计算得到的。

3.1.2 Voxel Query

在这里插入图片描述
与无序的点云相比,voxel在量化的空间中排序更加有规则,可以通过设置offsets来进行voxel领域访问。论文在对点进行voxel化之后,利用曼哈顿距离通过索引获得相邻体素,并且规定在一个距离阈值中采样至多K个体素。设定曼哈顿计算方式为:
在这里插入图片描述
假设使用ball query进行voxel查询,时间复杂度为 O ( N ) O\left(N\right) O(N),而论文提出的voxel query对领域查询的时间复杂度为 O ( K ) O\left(K\right) O(K),其中K为领域搜索大小,很好地缩短了查询时间。

3.1.3 Voxel RoI Pooling Layer

接着进行池化操作,论文设置了一种新的池化方式,首先将proposal分割成G x G x G,中心点为网格分割中心,然后采用领域信息聚合的方法进行信息聚合。具体的,假设网格中心为 g i g_i gi,采用voxel query聚合的点集为 { v i 1 ,    v i 2 ,    …    ,    v i K } \left\{v_i^1,\;v_i^2,\;\dots\;,\;v_i^K\right\} {vi1,vi2,,viK},因此采用PointNet的聚合方法为:
在这里插入图片描述
其中 v i − g i v_i - g_i vigi为求取点的相对坐标, Φ i k \Phi_i^k Φik为对应点 v i k v_i^k vik的特征向量, ψ ( ⋅ ) \psi\left(\cdot\right) ψ()为MLP层, m a x ( ⋅ ) max\left(\cdot\right) max()为最大池化层。

3.1.4 Accelerated Local Aggregation

在这里插入图片描述
如图(a)所示为普通的PointNet 特征提取步骤,其中假设一共有M个网格( M = r × G 3 M=r\times G^3 M=r×G3),r为RoI的数量,G为网格大小,voxel group 的数量为K,C为voxel特征向量。因此首先从M个网格每个网格提取K个,即M x K,然后经过一层FC,即 ( C + 3 ) × C ′ \left(C+3\right)\times C' (C+3)×C,所以综上计算复杂度为 O ( M × K × ( C + 3 ) × C ′ ) O\left(M\times K\times\left(C+3\right)\times C'\right) O(M×K×(C+3)×C)
而论文对其进行加速,因为体素特征是独立于网格点的,因此论文先对其FC计算,后续只需要根据聚合的点的相对坐标进行体素特征提取就行了。因此体素特征FC提取特征时间复杂度为 N × ( C + 3 ) × C ′ N\times\left(C+3\right)\times C' N×(C+3)×C,M个网格提取K个即为M x K,加上对点相对坐标FC,即为 M × K × 3 × C ′ M\times K\times3\times C' M×K×3×C。因此综上时间复杂度为 O ( N × C × C ′ + M × K × 3 × C ′ ) O\left(N\times C\times C'+M\times K\times3\times C'\right) O(N×C×C+M×K×3×C)。由于 M × K    ≫ N M\times K\;\gg N M×KN,因此加速的PointNet是比原先效率高的。

3.2 Backbone and Region Proposal Networks

论文采用了类似SECORD网络架构进行backbone网络框架搭建。通过三维backbone提取得到对应特征向量,然后将输出向量进行Z轴叠加生成对应的BEV特征图。

3.3 Detect Head

检测头将RoI特征作为输入进行检测框细化,其中先经过两层MLP,然后将提取的特征信息输入两个分支中:一个用于置信度预测,一个用于bbxox回归检测。

3.4 Training Objectives

3.4.1 Losses of RPN

综合分类损失和bbox回归损失即:
在这里插入图片描述

3.4.2 Losses of detect head

Iou值分配为:
在这里插入图片描述
利用二值交叉损失进行置信度预测,并且bbox使用Huber loss进行回归。因此检测头损失可以计算为:
在这里插入图片描述


http://www.niftyadmin.cn/n/1269929.html

相关文章

MVF 3D Lidar point clouds

1.Motivation 对于透视图和BEV,两者都有各自的优势。其中透视图在稀疏的点云上进行小物体的检测性能较强,而BEV可以保证物体的距离不变形,即不会发生物体重叠。对于原先的voxel方法,即hard voxel,存在占用内存大&…

lf 前后端分离 (3) 中间建跨域

一.关于中间建跨域 为了减少跨域代码冗余,采用中间件 from django.utils.deprecation import MiddlewareMixinclass CorsMiddleware(MiddlewareMixin):def process_response(self,request,response):# 复杂跨域response["Access-Control-Allow-Headers"] "*&qu…

centos7 firewalld日常使用

若生产中使用有docker,建议不要使用firewalld,改用iptables,用firewalld坑很多,暂时还未找到解决办法,在此做下记录: 说明:若加参数permanent为永久添加即添加至zone配置中,reload生…

OSChina 周五乱弹 —— 那地图上的点到底去哪儿

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 莱布妮子 :分享高橋洋子的单曲《残酷な天使のテーゼ》 《残酷な天使のテーゼ》- 高橋洋子 手机党少年们想听歌&…

iOS探索:RunLoop本质、数据结构以及常驻线程实现

RunLoop的本质 RunLoop是通过内部维护的事件循环来对事件/消息进行管理的一个对象 没有消息需要处理时,休眠以避免资源占用,状态切换是从用户态通过系统调用切换到内核态 有消息处理时,立刻被唤醒,状态切换是从内核态通过系统调用…

2019年React学习路线图

之前我们已经介绍了2019年Vue学习路线图,而React作为当前应用最广泛的前端框架,在Facebook的支持下,近年来实现了飞越式的发展,所以,我们将在下文中介绍2019年React学习路线图,希望给想学React的开发者一些…

[译] 用 React 和 Node.js 实现受保护的路由和权限验证

原文地址:Protected routes and Authentication with React and Node.js原文作者:Strapi译文出自:掘金翻译计划本文永久链接:github.com/xitu/gold-m…译者:ElizurHz校对者:LeviDing上周末我想挖掘一些没有…

【C语言】函数指针与指针函数

【C语言】详解函数指针与指针函数 最近在阅读cJSON的源代码,在看见如下代码是产生了,深深地疑惑,这个是什么声明?用来干嘛的? void *(*malloc_fn)(size_t sz); void (*free_fn)(void *ptr);在读懂这两句代码之前我们…