小白科研笔记:理解PointRCNN中的Stage-Two细节
1. 前言
博客写作的这天是清明节。致敬那些抗击新馆病毒的医护人员。
我的上一篇博客分析了PointRCNN
框中中预选3d框的生成和基于区间(对Bin
的翻译)的3d框误差函数。讨论了基于区间的3d框误差函数的思想源于F-PointNet
。这篇博客讨论PointRCNN
的后续操作,即如何从一大堆3d预选目标框中回归出精度更高的检测结果呢?这对应PointRCNN
中的RCNN
部分。RCNN
是属于Regions with CNN Features
的缩写,译为预选框内的特征。在PointRCNN
中,作者希望使用3d预选框内的点云特征回归出更加精确的结果。RCNN
是Two-stage Detection Network
中的Stage-2
的主要内容。
2. PointRCNN中RCNN的细节
2.1 非极大值抑制和区域池化
前文已经说过,每一个前景点都会用于回归一个预选3d框,因此预选框的数量是远远大于实际3d目标的。如图1(a)所示,一个目标周围有好多框框。经过非极大值抑制(NMS)后,从众多框框中选出一个精选框作为该目标的唯一预选框,如图1(b)中的橙色框。第 i i i个精选框标记为 b i = ( x i , y i , z i , h i , w i , l i , θ i ) b_i=(x_i,y_i,z_i,h_i,w_i,l_i,\theta_i) bi=(xi,yi,zi,hi,wi,li,θi)。对所有的框无差别地优化显然是非常耗费计算量的,效率低下。而只针对精选框做优化,效率则会非常高。这是非极大值抑制的目的。
图1:非极大值抑制和区域池化示意图(我从原论文截图剪裁而成)
作者认为实际情况下,这个精选的预选框是不准确的(如果准就不会有RCNN
操作啦),会存在个别属于该目标点云没有被这个框覆盖。为了解决这个问题,作者把预选框的长宽高增大一点,改进后的框标记为 b i e = ( x i , y i , z i , h i + η , w i + η , l i + η , θ i ) b_i^e=(x_i,y_i,z_i,h_i+\eta,w_i+\eta,l_i+\eta,\theta_i) bie=(xi,yi,zi,hi+η,wi+η,li+η,θi),见图1(b)中的黑框。符号 e e e是enlarge
,增大的含义。但是这种增大的框也会把本不属于该目标的点覆盖进去,比如地面点,见图1(b)中的地面点。在Foreground Point Segmentation
,已经对前景点/背景点做了分割。所以杂点还是能被识别出来。记框 b i e b_i^e bie内的任意一点为 p p p, m ( p ) = ( 0 , 1 ) m^{(p)}=(0,1) m(p)=(0,1)表示它是背景点/前景点。 p o s ( p ) = ( x ( p ) , y ( p ) , z ( p ) ) pos^{(p)}=(x^{(p)},y^{(p)},z^{(p)}) pos(p)=(x(p),y(p),z(p))表示该点的位置。 r ( p ) r^{(p)} r(p)表示该点雷达的反射率。 f ( p ) ∈ R C f^{(p)} \in \mathbf{R}^C f(p)∈RC表示该点在Point Cloud Encoder-Decoder
中提取的特征,文中称之为全局语义特征Global Semantic Features
(从整体点云中学习出来的特征,这是取名为global
的含义)。因此,对于一个精选框中的点,它的特征包括 m ( p ) , p o s ( p ) , r ( p ) , f ( p ) m^{(p)}, pos^{(p)}, r^{(p)}, f^{(p)} m(p),pos(p),r(p),f(p)。
上述的操作都不难理解。但是貌似跟区域池化(对Region Pooling
的翻译)没什么关系。接下来就讲解池化。经过非极大值抑制后,会存在一些精选的预选3d框,它们内部没有包含任何点云。作者把这些“空”的预选3d框都扔掉,这样的操作称为区域池化。个人感觉,是不是用Proposal Pooling
更好呢?总之理解了就好。
2.2 理解RCNN
经过2.1节的操作,我得到了一批精选的预选3d框,记为 B i n e = { b i e } i = 1 M B^e_{in}=\{b_i^e\}_{i=1}^M Bine={bie}i=1M。RCNN
意义就是让框框集合 B i n e B^e_{in} Bine更加精确。
A. 建立局部坐标系
对于每一个3d框 b i e b_i^e bie,都以该框的中心点 c e n t e r i center_i centeri建立一个局部的坐标系 O ′ − X ′ Y ′ Z ′ O'-X'Y'Z' O′−X′Y′Z′。这个局部坐标系的轴方向跟雷达坐标系的轴方向是一致的。在 O ′ − X ′ Y ′ Z ′ O'-X'Y'Z' O′−X′Y′Z′下,该框内所有点云的位置是 p o s ~ ( p ) = p o s ( p ) − c e n t e r i \widetilde{pos}^{(p)} = {pos}^{(p)}-center_i pos (p)=pos(p)−centeri。当然,这个建立局部坐标系的套路也是主流方法。文中把建立局部坐标系的过程称之为Canonical Transformation
。
B. 3D框精细优化
建立局部坐标系的原因是想提取局部空域特征(对Local spatial feature
的翻译) l ( p ) l^{(p)} l(p)。作者认为,只有结合全局特征 f ( p ) f^{(p)} f(p)和局部特征 l ( p ) l^{(p)} l(p),学习器才能回归出精度高的3d框。那么局部特征 l ( p ) l^{(p)} l(p)是什么呢?它是局部距离 d ( p ) = ∥ p o s ~ ( p ) ∥ 2 d^{(p)}=\Vert \widetilde{pos}^{(p)} \Vert_2 d(p)=∥pos (p)∥2,雷达反射率 r ( p ) r^{(p)} r(p),和前景/背景分割 m ( p ) m^{(p)} m(p),拼接的特征经过MLP
层输出的点云特征向量。然后把 l ( p ) l^{(p)} l(p)和 f ( p ) f^{(p)} f(p)拼接起来获得拼接特征(Merged Feature)。在框 b i e b_i^e bie内,每一个点都有它自己的拼接特征。把拼接特征喂入Point Cloud Encoder
,可以得到一个判别式的特征向量(Discriminative feature vector)。该特征向量用于回归更精细的3d框和置信度(Confidence)。流程图如下所示:
图2: 3D框精细优化流程图
其中Point Cloud Encoder
的具体网络架构应该是跟F-PointNet
很相似的:
图3: Point Cloud Encoder
的大概网络架构,图中global feature
是判别式的特征向量。图摘自F-PointNet
。
C. 3D框精细优化的损失函数
总之,按照上述A
和B
两个部分的操作,RCNN
网路回归出更加精细的3d框,简记为 b i = ( x i , y i , z i , h i , w i , l i , θ i ) b_i=(x_i,y_i,z_i,h_i,w_i,l_i,\theta_i) bi=(xi,yi,zi,hi,wi,li,θi)。为了指导RCNN
正确回归,需要设计一个误差函数。对 b i b_i bi的真值3d框 b i g t = ( x i g t , y i g t , z i g t , h i g t , w i g t , l i g t , θ i g t ) b_i^{gt}=(x_i^{gt},y_i^{gt},z_i^{gt},h_i^{gt},w_i^{gt},l_i^{gt},\theta_i^{gt}) bigt=(xigt,yigt,zigt,higt,wigt,ligt,θigt)。 b i g t b_i^{gt} bigt的选型准则是 i o u ( b i , b i g t ) ≥ 0.55 iou(b_i,b_i^{gt})\geq0.55 iou(bi,bigt)≥0.55。
在 b i b_i bi框下的局部坐标系下, b ~ i = ( 0 , 0 , 0 , h i , w i , l i , 0 ) \widetilde {b}_i=(0,0,0,h_i,w_i,l_i,0) b i=(0,0,0,hi,wi,li,0),而 b ~ i g t = ( x i g t − x i , y i g t − y i , z i g t − z i , h i g t , w i g t , l i g t , θ i g t − θ i ) \widetilde{b}_i^{gt}=(x_i^{gt}-x_i,y_i^{gt}-y_i,z_i^{gt}-z_i,h_i^{gt},w_i^{gt},l_i^{gt},\theta_i^{gt}-\theta_i) b igt=(xigt−xi,yigt−yi,zigt−zi,higt,wigt,ligt,θigt−θi)。一些符号记为:
Δ x = x i g t − x i \Delta x = x_i^{gt}-x_i Δx=xigt−xi
Δ y = y i g t − y i \Delta y = y_i^{gt}-y_i Δy=yigt−yi
Δ z = z i g t − z i \Delta z = z_i^{gt}-z_i Δz=zigt−zi
Δ h = h i g t − h i \Delta h = h_i^{gt}-h_i Δh=higt−hi
Δ w = w i g t − w i \Delta w = w_i^{gt}-w_i Δw=wigt−wi
Δ l = l i g t − l i \Delta l = l_i^{gt}-l_i Δl=ligt−li
Δ θ = θ i g t − θ i \Delta \theta = \theta_i^{gt} - \theta_i Δθ=θigt−θi
这里的误差函数是基于区间的(Bin-Based)。参考我的上一篇博客,可以得到 b i n Δ x ( p ) , b i n Δ z ( p ) bin_{\Delta x}^{(p)}, bin_{\Delta z}^{(p)} binΔx(p),binΔz(p)和 r e s Δ x ( p ) , r e s Δ z ( p ) res_{\Delta x}^{(p)}, res_{\Delta z}^{(p)} resΔx(p),resΔz(p)用于对 x , z x,z x,z的回归。 b i n Δ x ( p ) bin_{\Delta x}^{(p)} binΔx(p)目标是趋于第零个类别,用one_hot
编码,使用交叉熵函数。 r e s Δ x ( p ) res_{\Delta x}^{(p)} resΔx(p)目标是趋于零,使用平滑 L 1 L1 L1范数。使用 r e s Δ h ( p ) , r e s Δ w ( p ) , r e s Δ l ( p ) res_{\Delta h}^{(p)}, res_{\Delta w}^{(p)}, res_{\Delta l}^{(p)} resΔh(p),resΔw(p),resΔl(p)用于对 h , w , l h,w,l h,w,l的回归,直接使用平滑 L 1 L1 L1范数。作者认为 Δ θ \Delta \theta Δθ误差范围小,在 [ − 1 4 π , 1 4 π ] [-\frac{1}{4}\pi, \frac{1}{4}\pi] [−41π,41π]内。在这个区间内划分为若干小区间,区间长度为 ω \omega ω。于是 b i n Δ θ ( p ) bin_{\Delta \theta}^{(p)} binΔθ(p)和 r e s Δ θ ( p ) res_{\Delta \theta}^{(p)} resΔθ(p)可以定义为(博主懒这次就截个图吧):
如果你弄不懂上式的构造,可以回过头来看我的上一篇博客讲解Bin-Based
的误差函数原理和示例。3D框精细优化的损失函数跟Stage-One
过程的损失函数一样。用 L ~ b i n \widetilde L_{bin} L bin表示参数 Δ x , Δ z , Δ θ \Delta x,\Delta z,\Delta \theta Δx,Δz,Δθ的Bin-Based
的损失函数。用 L ~ r e s \widetilde L_{res} L res表示七个 Δ \Delta Δ参数的res
的损失函数。
除此之外,3D框精细优化过程中还预测了3d框目标的类别置信度 p r o b i prob_i probi。 p r o b i prob_i probi应该是一个类似于One-hot
的向量。目标的类别真值记为 l a b e l i label_i labeli。分类误差可以使用交叉熵误差函数,即 F c l s ( p r o b i , l a b e l i ) F_{cls}(prob_i,label_i) Fcls(probi,labeli)。
总之,3D框精细优化过程中总的误差函数是:
其中 ∥ B ∥ \Vert B \Vert ∥B∥表示非极大值抑制和区域池化之前的预选特征框数目。 ∥ B p o s ∥ \Vert B_{pos} \Vert ∥Bpos∥表示非极大值抑制和区域池化之后的预选特征框数目。
D. RCNN的输出
通过3D框精细优化可以输出一批高质量的3d目标框,对这些3d框在BEV视图下再次进行非极大值抑制,最终得到PointRCNN
的输出。
3. 结束语
总体而言,PointRCNN
算法受2D目标检测RCNN
算法的影响,同时也受到F-PointNet
的Bin-Based
框架影响。但是它并没有生搬硬套,而是在RCNN
架构上和Bin-Based
误差函数上有自己的独到的见解。
小白科研笔记:理解PointRCNN中的Stage-Two细节相关推荐
- 小白科研笔记:深入理解SA-SSD中的Part-sensitive Warping机制
1. 前言 这篇博客将细致分析3D目标单阶段检测方法SA-SSD中的Part-sensitive warping机制(简称PS Warping). 2. 代码上对PS Warping理解 论文上对PS ...
- 小白科研笔记:理解PointConv和对此类方法感想
1. 引言 2018年之后出现较多新的处理点云的深度学习算法.这些文章从面向点云的卷积运算(Convolution for point cloud)着手,试图从更底层理解点云.这篇博客主要参考下面这篇 ...
- 小白科研笔记:简析图神经网络收敛性的理论证明
1. 前言 这篇博客主要简析一篇ICLR2020的论文What Graph Neural Network Cannot Learn: Depth vs Width.这篇论文是很有理论深度的.不过这篇博 ...
- 小白科研笔记:简析SOTA目标检测算法3D-CVF
1. 前言 最近KITTI的3D目标检测榜刷出了一个新的Top One双阶段算法3D-CVF.做算法,有时间需要跟紧新的网络架构.所以这篇博客主要分析这篇论文3D-CVF: Generating Jo ...
- MySQL笔记3:深入理解MySQL中的NULL
深入理解MySQL中的NULL NULL:表示没有值,无法比较两个没有值的量.
- 【阅读笔记】机器阅读理解(中)——架构篇
文章目录 一.MRC模型架构 总体架构 编码层 词表向量 字符编码 上下文编码 交互层 互注意力 自注意力 上下文编码 输出层 多项式选择答案生成 区间式答案 自由式答案生成 注意力机制的应用 拷贝生 ...
- 【读书笔记 | 自动驾驶中的雷达信号处理(第7章 目标滤波与跟踪)】
本文编辑:调皮哥的小助理 大家好,又和大家见面了,时间过得很快,到目前为止,如下面的目录所示,我们已经阅读过汽车雷达目标检测的一些基本的原理了,特别是距离.速度和角度.虽然这些表示瞬时目标状态的信息可 ...
- 深度学习Deep learning小白入门笔记——PanGu模型训练分析
书接上回 深度学习Deep learning小白入门笔记--在AI平台上训练LLM--PanGu 对训练模型重新认知与评估. 模型评估 在训练过程中或训练完成后,通常使用验证集或测试集来评估模型的性能 ...
- 【转】Android菜单详解——理解android中的Menu--不错
原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...
最新文章
- jenkins环境搭建
- 产销对接行动倡议书-丰收节交易会·万祥军:贫困地区农品
- BASISI系统中如何配置web service
- 利用python同步windows和linux文件
- Spine 2D animation for games
- python_激光点云变换到图像平面
- 如何在windows下把硬盘格式化成EXT3格式?
- mysql数据库软件 国产_国产数据库发展情况如何?
- 机器学习的通俗讲解!
- 开票服务器管理系统默认密码,税控盘初始密码和口令是多少-百旺税控盘初始密码和口令-牛账网...
- c语言错误1083,没有混音设备可用,启动Windows Audio服务时错误1083
- Photoshop中裁剪工具的使用及扩展
- 【校招VIP】前端校招考点之页面转换算法
- sdio wifi 移植
- 计算机内存的安装方法,内存条怎么装?内存条安装与拆卸方法
- Bitmap高效加载
- linux中常见的校验用正则表达式
- 前端开发基础——常用处理函数
- JavaScript实现简单的打字游戏
- linux 命令打开u盘,Linux下U盘使用教程详解
热门文章
- 电子信息工程与计算机网络技术,电子信息工程与计算机网络技术探析
- 超实数进校园,,迈向现代数学的一大步
- matlab实现数字图像的加减乘除运算
- Conflux商务技术总监:区块链技术革命最重要的是回归初心
- Adobe系列在安装时,出现安装程序检测到计算机重新启动的过程中可能暂停、安装失败
- 重温FPGA开发29
- 9.多态(P a1=new B();)重写与重载、instanceof关键字
- 转 : Squareup刷卡器,音频读卡识别android/iOS源码API
- 金蝶kis商贸采购单商品代码_金蝶KIS商贸高级版操作问题2017
- IQC跳捡 T-SQL