【论文阅读】【三维目标检测】在Range view上做3D目标检测_rangeview-程序员宅基地

技术标签: 论文阅读  

range view是仅针对物理旋转式扫描的激光雷达的特殊view,例如velodyne64线,128线都是。具体,旋转式扫描的激光雷达都是在水平方向进行旋转,竖直方向为固定个数的激光传感器,传感器的个数是和激光雷达线数是一样的。这样的扫描方式,使得该类型的激光雷达扫描出来的坐标系实际是一个柱坐标系,在水平和竖直方向都是有固定角分辨率的。用水平和竖直方向的角度信息,可以准确的检索到点云中的每一个点。所以整个点云可以用水平和竖直方向的角度来稠密表示,从而形成range view的表示方法。

range view在3D语义分割上用的比较成熟,例如RangeNet,但在3D目标检测上面,和主流的在BEV下左检测的网络,效果差距比较大。今年,新出来几篇在使用range view上做检测的文章。

先说结论:直接在range view上使用Conv2D提取特征有限,无法满足3D Object Detection。

BEV or Range View

BEV Range View
是否需要栅格化 需要 不需要

BEV:

  • 优点:物体尺寸变化不大,物体之间没有遮挡,相对位置关系为3维空间
  • 缺点:需要进行栅格化,信息稀疏

Range view:

  • 优点:不需要栅格化,信息稠密
  • 缺点:物体近大远小,物体之间遮挡

RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection

出自图森

文中认为,range view效果不行的因素有三个:

  • range view中物体尺寸变化大
  • range view中的卷积是在2D pixel coord,而物体检测要在3D space,这两者之间有差距
  • range view中提取的特征更紧密,但如何有效利用这种特征,其他range view的方法并没有考虑

针对上述三个因素,本文提出了相对应的3个改进

Range Conditioned Pyramid In

近大远小的问题,更通用的一种问题就是物体scale大小不同,在主流的2D目标检测网络上,使用的FPN的结构,对scale大小不同的物体做分治策略的检测。那这种分治的策略,将不同物体放置在不同层级的特征图上的方法是根据IoU的。本文提出,按照range来放置,将0-80m的距离分为[0, 15), [15, 30), [30, 80]三个区间,每个区间中的物体用一个特征图来检测。

Meta-Kernel Convolution

作者认为,传统的2D conv中的卷积核的权重是在整feature map上共享的,这样不好。我认为这种理解就是,近处3x3的卷积核覆盖的范围和远处3x3的卷积核覆盖的范围完全不同,使用同样的权重,不太妥当。所以本文提出,将卷积核的权重变得可变起来。

在这里插入图片描述
具体而言,对于特征图中的一个点 p i p_i pi,要提取他的特征,分为以下几步:

  • 根据特征图位置,找到其邻域,其实就是3x3的邻域,并找到其中的点 p j p_j pj
  • 根据 p i p_i pi p j p_j pj的位置关系,使用MLP计算权重 w j w_j wj
  • 权重 w j w_j wj p j p_j pj的特征做点乘,得到 O j O_j Oj
  • 对3x3的邻域内(包括自己)的9个点均做上述操作,可以得到9个特征。原本的conv2d是采用相加的形式,这里采用concat然后送入MLP中,得到 p i p_i pi卷积后的特征。

读者可以具体对比一下RS-CNN中的RS-Conv,这不就是一模一样的嘛。无非就是邻域的选取有不一样。

Weighted Non-Maximum Suppression

每个pixel都会预测一个box,而一个真实物体可以被很多pixel预测,那么这么多box,用NMS不太好,会浪费这种稠密的信息,不如就用加权平均的方式。

我的理解是,因为BEV中物体偏小,不占几个像素,而range view中物体就还挺大,所以可以用这种方法。

Data Augmentation in Range View Data

range view中不好做data augmentation,尤其是copy&paste这种数据增广,还有点难的。

Experiment

在这里插入图片描述
可以具体分析一下:

  • Meta-Kernel带来的提升,可能说明conv2d不适合在range view上提取几何特征
  • RCP带来的提升如此之大,让我觉得A1到底有没有用FPN啊,这个文章中我也没找到A1的具体定义

其他结论,可以看看文中具体所述


To the Point: Efficient 3D Object Detection in the Range Image with Graph Convolution Kernels

waymo团队做的,2021CVPR

思路与上一篇很类似,只不过是提出了多个kernel。这里就不全部介绍kernel了,只是讲个大概思路

Kernels

原文中写道:
“Therefore, it cannot reason about the underlying geometric pattern of the neighborhood. Next, we will present four kernels that can leverage this geometric pattern.”

Range-quantized (RQ) 2D convolution kernel

kenel的定义如下:
在这里插入图片描述
其中,[m,n]是卷积核中心的位置,[m’,n’]是[m,n]领域内的其他位置。

权重Wr的取值是根据邻域内深度差来决定的,中心思想就是深度差不同,要用不同的卷积核。原来的每个Conv2D变成了一组权重,每次都根据深度差进行选择。

PoitnNet kernel

定义如下:
在这里插入图片描述
其中, γ \gamma γ是用来计算[m,n]和[m’,n’]具体3D位置的函数,具体如下:
在这里插入图片描述

EdgeConv kernel

具体定义如下:
在这里插入图片描述
可以看到,EdgeConv kernel也是point-based的一种,很熟悉

Experiment

在这里插入图片描述
上图是在waymo open dataset中的vehicle的检测效果。可以看到,其实效果也一般,也就跟Pillar-based[27]差不多。在文中,放出来的Pedestrian中效果比较好,原文解释如下:
a) pedestrians are tall so that the perspective view captures its full shape, b) they are also thin so that the voxels in the voxel-based methods end up too large and there- fore cannot accurately make predictions.

RangeRCNN: Towards Fast and Accurate 3D Object Detection with Range Image Representation

海康出品

Network

网络结构图如下:在这里插入图片描述
从网络结构图中可以看到,本文的特征提取就是在Range view上的,用的就是Conv2D,然后转到了Bird Eye View中,做检测。投到BEV的时候用mean pooling。

Experiment

在这里插入图片描述
效果不错,与PVRCNN相当。

结论

1、从RangeDet和To the Point两篇论文来看:在range view中直接做3D目标检测,需要在kernel级别来从xyz维度上提取特征,仅使用Conv2D在depth上提取特征不够充分。

2、从RangeRCNN来看:结论不明显

  • 因为在BEV上也做了特征提取,用了3个Conv block,不清楚到底这3个block起到多少的作用,可以做个ablation study,将BEV上的卷积去掉,直接使用pooling之后的特征做检测,看看效果。
  • 最终用来做检测的feature map中grid的大小为0.32m*0.32m,特征图的分辨率大,并且没有给出在小目标pedestrian上的结果,并不能说明range view上提取特征不损失信息的好处(因为我理解是voxel在pedestrian的损失是要大于car的,To the Point中的实验部分说明了这个问题)。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wqwqqwqw1231/article/details/118438560

智能推荐

(五)定位误差探究_军用级 民用级 定位精度 csdn-程序员宅基地

文章浏览阅读1.8k次。卫星定位技术,不可避免的会有误差产生。而误差产生的来源,一般可以大致分为三类原因。可以如实说,现在市面上的所宣称的(民用)GPS定位精度在分米级、厘米级的接收终端,统统都是虚假宣传。在环境极其理想的情况下,GPS的定位精度在10米以内。而就目前而言,定位精度最好的应是Glonass定位技术(北半球)、GPS定位技术、北斗定位技术(亚太区域)。至于伽利略卫星导航系统现在还在搞建设呢,就不做考虑。以上_军用级 民用级 定位精度 csdn

tensorflow实现简单RNN_tensorflow rnn-程序员宅基地

文章浏览阅读586次。使用简单RNN预测谷歌的股票实验数据import numpy as npimport tensorflow.keras as kerasimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.preprocessing import MinMaxScalerdef RNN(x_train, y_train): regressor = keras.Sequential() # add the first R_tensorflow rnn

UE4调试源码正确方式_如何改变ue源码模式-程序员宅基地

文章浏览阅读7.3k次,点赞2次,收藏4次。准备1. 编译好的DevelopmentEditor或DebugEditor版本源码;2. 在对应的源码中生成的C++项目;本文以调试SoftOcclusion源码部分来看看如何执行。错误示范1.直接运行项目代码的Sln文件。2.在对应的相关源码中打上断点,点击调试执行,打开对应的包好UE4 Editor界面的项目。3.设置选项,点击“Play”运行项目,同时试图命..._如何改变ue源码模式

车载总线监控分析及仿真工具- INTEWORK VBA_vehicle bus analyser-程序员宅基地

文章浏览阅读969次。车载总线监控分析及仿真工具- INTEWORK VBA概述INTEWORK-VBA(Vehicle Bus Analyzer)车载总线监控分析及仿真工具,是由恒润自主研发的一款专业、易用的车载总线工具。具备对总线数据的监控与分析、节点仿真、报文发送、负载统计、离线回放、故障诊断、脚本仿真和Panel面板搭建等功能。当前支持CAN、CANFD、LIN、Ethernet总线类型。产品特点• 稳定可靠: 12 路高负载长时间(1 个月)监控测试不丢帧• 简单易用: 10分钟上手使用,配备详细的入门_vehicle bus analyser

JAVA反射机制及其原理实现_java反射机制原理详解-程序员宅基地

文章浏览阅读7.6k次,点赞12次,收藏47次。9.1 概念JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;public、protected、private。OO(面向对象),private私有的,不能访问。这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。**反射就是把java类中的各种成分映射成一个个的Java对象 例..._java反射机制原理详解

在线电脑内存测试软件,Everest/PC Mark内存基准测试_金士顿 8GB DDR3 1600_内存硬盘-中关村在线...-程序员宅基地

文章浏览阅读3.5k次。AIDA64(原Everest)作为一个系统检测软件,它可以详细的显示出PC每一个方面的信息。软件自带的Memory Latency评测,可以通过对内存延时的评测,直观显示出内存子系统的效能。对于普通用户来说,内存系统的快慢可以简单理解成双击文件夹的响应速度。一、原始1614MHz读:12.1GB/s 写:12.3GB/s 拷贝:11.8GB/s 延迟:47.4纳秒二、超频1696MHz读:12...._内存延迟软件

随便推点

vue-router或者vue-admin-template中刷新跳转404的解决办法_vue admin 直接跳到404-程序员宅基地

文章浏览阅读5k次。vue或者vue-admin-template中任意页面刷新都跳转404vue在刷新的时候动态添加的router会清空,所以在动态添加的路由页面刷新的时候会因为清空的router而跳转到404.。在/src/premission.js的最下方router.afterEach修改成下面这样router.afterEach(to =>{ sessionStorage.setItem('r..._vue admin 直接跳到404

由于uvc驱动函数缺少return语句而导致内核oops的一例-程序员宅基地

文章浏览阅读282次。一、实验环境1、软件a) Vmware版本:Vmware Workstation 12.5.7b) Ubuntu版本:9.10c) 内核版本:2.6.31.14d) gcc版本:4.4.1e) gdb版本:7.02、摄像头硬件百问网自制uvc摄像头3、排查过程中,使用到的工具a) printkb) objdumpc) straced)gdb二、前言用C语言写程序时,如果定义一个带返回值的..._uvc_video_qbuf失败

Python——实例1:温度转换(Python基本语法元素及框架,代码实现)_温度转换的python程序-程序员宅基地

文章浏览阅读4.3w次,点赞64次,收藏236次。前言Python第一弹!!!Python被称为最简单好上手的语言之一,基于其极强的关联性,对各种库的引用,和资源的关联,使其实现功能非常容易。一些底层逻辑不需过多过深的理解。本篇将通过一个实例——温度转换,通过十行代码的实现,使大家对Python有最初的大体印象,并对一些基础语法和函数有初步的了解。读完本篇,你将了解到:(1)程序的格式框架(代码高亮、缩进、注释使用)(2)命名与保留字(变量、命名及33个保留字)(3)数据类型(整数、字符串、列表)(4)语句与函数(赋值语句、分支语句、函数)_温度转换的python程序

解决FeignException返回基础服务抛出的状态码-程序员宅基地

文章浏览阅读2.9w次。接上篇文章这样,虽然能够很好的处理@Valid出现的异常,但是如果是主动抛出的自定义异常和Assert断言异常,则会进入FeignException.errorStatus处理,查看源码它将message封装了feign抛出的status500以及body的content(即你主动抛出的message信息)意味着,断言异常我们可以通过ErrorDecoder的方式再通过全局异常拦截获取messag..._feignexception

openwrt 定时任务 运行shell脚本_openwrt 计划任务 运行脚本-程序员宅基地

文章浏览阅读1.8w次。步骤一:写一个xxx.sh shell脚本 【注】chmod +x xxx.sh 可执行脚本【注】环境变量 脚本的!/bin/bash下,添加如下两行: PATH=。。。(echo $PATH) export PATH 步骤二: # crontab –e这样可以已编辑模式打开个人的crontab配置文件,然_openwrt 计划任务 运行脚本

电脑——如何配置一台电脑_如何配置电脑-程序员宅基地

文章浏览阅读1.9w次,点赞109次,收藏700次。主板:显卡、电源、CPU、内存条、硬盘、显示器、鼠标、键盘、音响。_如何配置电脑