小白科研笔记:简析PointRCNN的基于Bin的误差机制

2023-05-16

1. 前言

PointRCNN是一篇做3D目标检测的CVPR2019的文章。目前位居KITTI目标检测榜首的是PV-RCNN。这个算法的前身就是PointRCNN。它们的作者都是同一个人。考虑到PV-RCNN算法有些复杂,于是我想先从PointRCNN着手。这是我写这篇博客的原因。在分析单阶段目标检测算法SA-SSD时候,已经积累了一些3d目标检测的知识代码储备,希望这次的讨论能够顺利一些。

2. PointRCNN

2.1 总体认识

总体而言,PointRCNN是一个双阶段(Two-Stage)目标检测算法。PointRCNN不需要Anchor。它的输入只有点云。第一阶段任务是生成很多预选3D框(文章称之为3D Proposal)。第二阶段是在预选3D框的基础上,获得更加精细的3D框。PointRCNN的总体框架如下所示:

在这里插入图片描述
图1:PointRCNN的结构框图

在图1中,Botton-up 3D proposal generation可以译为自底向上的3D预选目标框的生成。Canonical是形容词,翻译为“正规的”。Canonical 3D Box按字面意思,似乎要翻译为“正规的3D框”,但是这种翻译结果有点让我摸不着头脑。简单起见,Canonical 3D Box Refinement就译为3D目标框的精细优化吧。

2.2 3D预选目标框的生成流程

从图1可见,原始点云经过一个面向点云的编码器和解码器架构(Point Cloud Encoder-Decoder),获取点云中各个点的特征(Point-wise Feature vector),统称为点云特征。Point-wise是逐点或每个点的意思。后缀wise表示“每个”的含义。在阅读文献的时候,还会碰到类似pixel-wise词,指每个像素。点云特征先经过前景点分割框架(Foreground Point Segmentation)获取前景点,在图1中用蓝色点标出。前景点指属于目标类别的点,而地面点或者灌木点或者房屋点属于背景点。然后,前景点的点云特征经过基于框的3d预目标生成网络(Bin-based 3D Box Generation)获取预目标的3d框。如图1的英文标注所示,每一个前景点都会回归一个3D目标框。

我初次看图1会有一种错觉,会以为Foreground Point SegmentationBin-based 3D Box Generation是同时工作的。其实不是的。先预测前景点,然后根据前景点做3d目标框回归。Bin-based我译为基于框的,可能不是很贴合语境。论文作者指出Point Cloud Encoder-Decoder是基于PointNet++实现的,获取每一个点的特征。同时也保留了每个点的xyz位置信息。前景点分类是一个分类问题。考虑到原始点云中,背景点的数量远远大于前景点数量,即正负样本不均衡,所以分类误差损失函数选择使用交叉熵损失函数的改进版Focal lossFocal指关注焦点,Focal loss的目的是让正样本的误差比重更大一点。有关Focal loss的知识可参考这篇博客。Bin-based 3D Box Generation的网络结构比较简单,把每个前景点的特征输入到MLP层中,回归出一个 7 × 1 7\times 1 7×1向量表示3d框( 7 7 7的原因在2.3节讲解)。假设前景点数目是 M M M个,那么预选3d框的数目也是 M M M个。最后对这 M M M个预选3d框进行非极大值抑制(NMS),得到一批抑制后端预选3d框。Bin-based 3D Box Generation的误差损失函数将在下一节讨论。

2.3 对基于区间的3d框误差函数的理解

一般而言,会使用七个参数刻画一个3d框,即 ( x , y , z , h , w , l , θ ) (x,y,z,h,w,l,\theta) (x,y,z,h,w,l,θ) ( x , y , z ) (x,y,z) (x,y,z)表示3d框的中心点在雷达坐标系的位置。 ( h , w , l ) (h,w,l) (h,w,l)表示3d框的高度,宽度和长度。 θ \theta θ表示3d框在俯视图下的旋转角度。为了让Bin-based 3D Box Generation回归出精度更高的3d框,作者设计了一个基于Bin的3d框误差函数。我首先来看看作者画的一张描述Bin的示意图,如图2所示。这里把bin译为区间比较合适。在一个雷达坐标系中, x z xz xz轴组成的平面平行于地面,而 y y y轴垂直于地面。考虑到3d目标一般是在地上运动,同一类别的目标中心在 y y y轴上的坐标值不会相差很多。比如轿车,地面到车心的距离大概在1.3米左右。此外,同一类别目标的长宽高也基本上差不多。因此3d框的 y , h , w , l y,h,w,l y,h,w,l可以很精确地被回归预测。直接使用smooth L1损失函数就足够了。实际情况下, x , z , θ x,z,\theta x,z,θ的差异比较大,做回归预测的精度也会差一些。于是,PointRCNN采用一种基于区间的误差函数来跟精确地刻画 x , z , θ x,z,\theta x,z,θ的误差。来看看图2。

在这里插入图片描述
图2:描述区间的示意图

对于一个预选3d框,蓝色的点表示Foreground Point Segmentation预测的前景点,即目标中的点。紫色点表示特别前景点(interest foreground point),它是预选3d框的中心。对于一个预选3d框(称为proposal),特别前景点的坐标记为 ( x ( p ) , y ( p ) , z ( p ) ) (x^{(p)},y^{(p)},z^{(p)}) (x(p),y(p),z(p)),而其他前景点坐标 ( x p , y p , z p ) (x^p,y^p,z^p) (xp,yp,zp)。这里记号 p p p表示proposal的含义。

A. 先考虑参数 x , z x,z x,z的损失函数。

把一个3d预选框对应的前景点投影在 x z xz xz轴组成的平面上,预测的框中心的坐标是 ( x ( p ) , z ( p ) ) (x^{(p)},z^{(p)}) (x(p),z(p)),而其他前景点的坐标则是 ( x p , z p ) (x^p,z^p) (xp,zp)。记这个3d预选框的中心真值坐标是 ( x ~ ( p ) , z ~ ( p ) ) (\widetilde{x}^{(p)}, \widetilde{z}^{(p)}) (x (p),z (p))。对一般的目标检测算法,关于 x , z x,z x,z的损失函数可能直接设计为:

L u ∈ { x , z } = ∑ p P r s m o o t h _ L 1 ( u ( p ) − u ~ ( p ) ) L_{u\in \{x,z\}} =\sum_{p}^{Pr} smooth\_L1(u^{(p)} - \widetilde{u}^{(p)}) Lu{x,z}=pPrsmooth_L1(u(p)u (p))

其中 P r Pr Pr表示所有的3d预选框。但是作者认为实践过程中平滑 L 1 L1 L1范数还是对点云噪声比较敏感。作者借鉴了F-PointNet中回归问题转换为分类问题的思想。什么是回归问题转换为多分类问题?举个例子,比方说我需要回归参数 w w w,目标物体的宽度,考虑到这个物体可能是人也可能是车, w ∈ [ 0.4 m , 1.4 m ] w\in [0.4m, 1.4m] w[0.4m,1.4m]。如果使用误差函数 ∣ w e s t − w ∣ 1 \vert w_{est}-w\vert_1 westw1效果很差,可以把 w w w分成若干个区间(bin),比如 ( 0.4 m , 0.5 m ) , ( 0.5 m , 0.6 m ) , . . . , ( 1.3 m , 1.4 m ) (0.4m,0.5m),(0.5m,0.6m),...,(1.3m,1.4m) (0.4m,0.5m),(0.5m,0.6m),...,(1.3m,1.4m),回归 w w w就变为预测 w w w在哪一个区间的问题,即一个分类问题。一般使用one_hot向量对分类问题编码,然后使用交叉熵(cross-entropy)表示分类问题的损失函数。但是这样做,即便分类对了, w w w的误差还是在 0.1 m 0.1m 0.1m以内。在F-PointNet中,混合使用了平滑 L 1 L1 L1误差和交叉熵误差函数(这种混合式的做法也逐渐成为主流,交叉熵误差函数用于估计一个大概的区间,而平滑 L 1 L1 L1误差做更加细致的误差分析):

L w = S m o o t h _ L 1 ( w e s t , w ) + E n t r o p y ( o h ( w r e s ) , o h ( w ) ) L_w = Smooth\_L1(w_{est},w) + Entropy(oh(w_{res}),oh(w)) Lw=Smooth_L1(west,w)+Entropy(oh(wres),oh(w))

其中 E n t r o p y ( ⋅ ) Entropy(\cdot) Entropy()表示交叉熵函数。 o h ( ⋅ ) oh(\cdot) oh()表示变量的one_hot编码。讲解完回归问题转换为分类问题的思想,再回到PointRCNN的论文中。类比于上述的例子,我想回归 x x x z z z,也可以使用回归问题转换为分类问题的思想。如果把 x z xz xz平面硬生生的划分为很多小方格(500平方米,每个方格0.05平方米,需要一万个小区间呀),再使用one_hot编码会耗费很多的计算空间。

于是作者换了一个角度,以3d预选框的中心点 ( x ( p ) , z ( p ) ) (x^{(p)},z^{(p)}) (x(p),z(p))为中心划分小方格。对于一个预选框内的前景点 ( x p , z p ) (x^p,z^p) (xp,zp),它到中心点的坐标是 ( x p − x ( p ) , z p − z ( p ) ) (x^p - x^{(p)},z^p - z^{(p)}) (xpx(p),zpz(p))。如果 ( x ( p ) , z ( p ) ) (x^{(p)},z^{(p)}) (x(p),z(p))越接近于真值 ( x ~ ( p ) , z ~ ( p ) ) (\widetilde{x}^{(p)}, \widetilde{z}^{(p)}) (x (p),z (p)),那么有

( x p − x ( p ) ) − ( x p − x ˉ ( p ) ) → 0 (x^p - x^{(p)}) - (x^p-\bar{x}^{(p)}) \rightarrow 0 (xpx(p))(xpxˉ(p))0
( z p − z ( p ) ) − ( z p − z ˉ ( p ) ) → 0 (z^p - z^{(p)}) - (z^p-\bar{z}^{(p)}) \rightarrow 0 (zpz(p))(zpzˉ(p))0

以3d预选框的中心点 ( x ( p ) , z ( p ) ) (x^{(p)},z^{(p)}) (x(p),z(p))为中心划分小方格。设小方格的边长为 δ \delta δ。上式可以推出一个弱结论(Weak Conclusion):

⌊ ( x p − x ( p ) ) / δ ⌋ − ⌊ ( x p − x ~ ( p ) ) / δ ⌋ → 0 \lfloor(x^p - x^{(p)})/\delta\rfloor - \lfloor(x^p-\widetilde{x}^{(p)})/\delta\rfloor \rightarrow 0 (xpx(p))/δ(xpx (p))/δ0
⌊ ( z p − z ( p ) ) / δ ⌋ − ⌊ ( z p − z ~ ( p ) ) / δ ⌋ → 0 \lfloor(z^p - z^{(p)})/\delta\rfloor - \lfloor(z^p-\widetilde{z}^{(p)})/\delta\rfloor \rightarrow 0 (zpz(p))/δ(zpz (p))/δ0

其中 ⌊ ( x p − x ( p ) ) / δ ⌋ \lfloor(x^p - x^{(p)})/\delta\rfloor (xpx(p))/δ表示 x p x^p xp在第几个小方格上,或者说是在 x ( p ) x^{(p)} x(p) x p x^p xp x x x轴方格索引,记为 b i n x ( p ) bin_x^{(p)} binx(p)。符号 ⌊ x ⌋ \lfloor x \rfloor x表示对 x x x做向下取整,比如 ⌊ 3.72 ⌋ = 3 \lfloor 3.72 \rfloor = 3 3.72=3(使用向下取整是有意义的,它在第3.72个格子上相当于它在第3个格子上)。而 ⌊ ( x p − x ˉ ( p ) ) / δ ⌋ \lfloor(x^p-\bar{x}^{(p)})/\delta\rfloor (xpxˉ(p))/δ记为 b i n ~ x ( p ) \widetilde{bin}_x^{(p)} bin x(p)。上式将变为:

b i n x ( p ) − b i n ~ x ( p ) → 0 bin_x^{(p)} - \widetilde{bin}_x^{(p)} \rightarrow 0 binx(p)bin x(p)0
b i n z ( p ) − b i n ~ z ( p ) → 0 bin_z^{(p)} - \widetilde{bin}_z^{(p)} \rightarrow 0 binz(p)bin z(p)0

其中 b i n x ( p ) ∈ [ − N , − ( N − 1 ) , . . . , 0 , . . . , N − 1 , N ] bin_x^{(p)}\in [-N,-(N-1),...,0,...,N-1,N] binx(p)[N,(N1),...,0,...,N1,N]。使用 b i n bin bin后,回归问题变成分类问题。紧接着,作者使用one_hot b i n bin bin进行编码,表示为一个 ( 2 N + 1 ) × 1 (2N+1)\times 1 (2N+1)×1的向量 o h ( b i n ) oh(bin) oh(bin)。使用交叉熵,上式将被改写为:

E n t r o p y ( o h ( b i n x ( p ) ) − o h ( b i n ~ x ( p ) ) ) → 0 Entropy(oh(bin_x^{(p)}) - oh(\widetilde{bin}_x^{(p)})) \rightarrow 0 Entropy(oh(binx(p))oh(bin x(p)))0
E n t r o p y ( o h ( b i n z ( p ) ) − o h ( b i n ~ z ( p ) ) ) → 0 Entropy(oh(bin_z^{(p)}) - oh(\widetilde{bin}_z^{(p)})) \rightarrow 0 Entropy(oh(binz(p))oh(bin z(p)))0

F c l s ( b i n x ( p ) , b i n ~ x ( p ) ) = E n t r o p y ( o h ( b i n x ( p ) ) − o h ( b i n ~ x ( p ) ) ) F_{cls}(bin_x^{(p)}, \widetilde{bin}_x^{(p)}) = Entropy(oh(bin_x^{(p)}) - oh(\widetilde{bin}_x^{(p)})) Fcls(binx(p),bin x(p))=Entropy(oh(binx(p))oh(bin x(p)))。上式相当于:

u ∈ { x , z } , F c l s ( b i n u ( p ) , b i n ~ u ( p ) ) → 0 u\in\{x,z\},F_{cls}(bin_u^{(p)}, \widetilde{bin}_u^{(p)}) \rightarrow 0 u{x,z},Fcls(binu(p),bin u(p))0

PointRCNN作者想采用F-PointNet的模式,想混合使用了平滑 L 1 L1 L1误差和交叉熵误差函数。交叉熵误差函数就是 F c l s ( b i n x ( p ) , b i n ~ x ( p ) ) F_{cls}(bin_x^{(p)}, \widetilde{bin}_x^{(p)}) Fcls(binx(p),bin x(p))。那么平滑 L 1 L1 L1误差函数是怎么定义的呢?我举个例子,比如 ( x p − x ( p ) ) / δ = 3.72 (x^p - x^{(p)})/\delta=3.72 (xpx(p))/δ=3.72,而 ( x p − x ~ ( p ) ) / δ ) = 3.58 (x^p-\widetilde{x}^{(p)})/\delta)=3.58 (xpx (p))/δ)=3.58。经过向下取整后, b i n x ( p ) = b i n ~ x ( p ) = 3 bin_x^{(p)}=\widetilde{bin}_x^{(p)}=3 binx(p)=bin x(p)=3,那么 F c l s ( ⋅ ) = 0 F_{cls}(\cdot)=0 Fcls()=0。使用交叉熵误差函数已经不能使 x x x预测的更加精确了。实际上它们还相差了 0.14 0.14 0.14。自然是希望把这一点误差考虑进去:

[ ( x p − x ( p ) ) / δ − b i n x ( p ) ] − [ ( x p − x ~ ( p ) ) / δ − b i n ~ x ( p ) ] = 0.14 [(x^p - x^{(p)})/\delta - bin_x^{(p)}] - [(x^p-\widetilde{x}^{(p)})/\delta-\widetilde{bin}_x^{(p)}] = 0.14 [(xpx(p))/δbinx(p)][(xpx (p))/δbin x(p)]=0.14

希望这个误差尽可能为零:

[ ( x p − x ( p ) ) / δ − b i n x ( p ) ] − [ ( x p − x ~ ( p ) ) / δ − b i n ~ x ( p ) ] → 0 [(x^p - x^{(p)})/\delta - bin_x^{(p)}] - [(x^p-\widetilde{x}^{(p)})/\delta-\widetilde{bin}_x^{(p)}] \rightarrow 0 [(xpx(p))/δbinx(p)][(xpx (p))/δbin x(p)]0

对上式做个等价变形:

1 C [ ( x p − x ( p ) ) − ( δ ⋅ b i n x ( p ) + 1 2 δ ) ] − 1 C [ ( x p − x ~ ( p ) ) − ( δ ⋅ b i n ~ x ( p ) + 1 2 δ ) ] → 0 \frac{1}{C}[(x^p - x^{(p)}) - (\delta \cdot bin_x^{(p)}+\frac{1}{2}\delta)] - \frac{1}{C}[(x^p-\widetilde{x}^{(p)})- (\delta\cdot \widetilde{bin}_x^{(p)} + \frac{1}{2}\delta)] \rightarrow 0 C1[(xpx(p))(δbinx(p)+21δ)]C1[(xpx (p))(δbin x(p)+21δ)]0

r e s x ( p ) = 1 C [ ( x p − x ( p ) ) − ( δ ⋅ b i n x ( p ) + 1 2 δ ) ] res_x^{(p)}=\frac{1}{C}[(x^p - x^{(p)}) - (\delta \cdot bin_x^{(p)}+\frac{1}{2}\delta)] resx(p)=C1[(xpx(p))(δbinx(p)+21δ)]
r e s ~ x ( p ) = 1 C [ ( x p − x ~ ( p ) ) − ( δ ⋅ b i n ~ x ( p ) + 1 2 δ ) ] \widetilde{res}_x^{(p)}=\frac{1}{C}[(x^p-\widetilde{x}^{(p)})- (\delta\cdot \widetilde{bin}_x^{(p)} + \frac{1}{2}\delta)] res x(p)=C1[(xpx (p))(δbin x(p)+21δ)]

上式简写为:

r e s x ( p ) − r e s ~ x ( p ) → 0 res_x^{(p)} - \widetilde{res}_x^{(p)} \rightarrow 0 resx(p)res x(p)0

对回归问题会使用平滑 L 1 L1 L1损失函数。于是记 F r e g ( r e s x ( p ) , r e s ~ x ( p ) ) = S m o o t h _ L 1 ( r e s x ( p ) − r e s ~ x ( p ) ) F_{reg}(res_x^{(p)} , \widetilde{res}_x^{(p)})=Smooth\_L1(res_x^{(p)} - \widetilde{res}_x^{(p)}) Freg(resx(p),res x(p))=Smooth_L1(resx(p)res x(p))。因此,对 x x x z z z的回归误差函数是:

u ∈ { x , z } , F r e g ( r e s u ( p ) , r e s ~ u ( p ) ) → 0 u\in\{x,z\},F_{reg}(res_u^{(p)}, \widetilde{res}_u^{(p)}) \rightarrow 0 u{x,z},Freg(resu(p),res u(p))0

为了规范化整数索引(让它们从 0 , 1 , . . . , 2 N − 1 0,1,...,2N-1 0,1,...,2N1,而不是 − N , . . . , N -N,...,N N,...,N),给 b i n u ( p ) bin_u^{(p)} binu(p)做了修改,添加一个搜索范围标量 S S S(有关于 S S S的例子可以看 B 部 分 B部分 B),这时候 b i n u ( p ) bin_u^{(p)} binu(p)的定义如下所示:

u ∈ { x , z } , b i n u ( p ) = ⌊ ( u p − u ˉ ( p ) + S ) / δ ⌋ u\in\{x,z\},bin_u^{(p)}=\lfloor(u^p-\bar{u}^{(p)}+S)/\delta\rfloor u{x,z},binu(p)=(upuˉ(p)+S)/δ

同时对 r e s u ( p ) res_u^{(p)} resu(p)做了重新的定义:

u ∈ { x , z } , r e s u ( p ) = 1 C [ ( u p − u ( p ) ) + S − ( δ ⋅ b i n u ( p ) + 1 2 δ ) ] u\in\{x,z\}, res_u^{(p)}=\frac{1}{C}[(u^p - u^{(p)}) + S - (\delta \cdot bin_u^{(p)}+\frac{1}{2}\delta)] u{x,z},resu(p)=C1[(upu(p))+S(δbinu(p)+21δ)]

B. 其次考虑参数 θ \theta θ的损失函数

A部分讨论的出发点类似。参数 θ \theta θ的损失函数将分为分类损失函数和回归损失函数。这里的损失函数形式要比上一部分简单很多。举个例子,某一类目标的旋转角 θ \theta θ范围在 [ − 1 2 π , 1 2 π ] [-\frac{1}{2}\pi, \frac{1}{2}\pi] [21π,21π]内。我可以把 θ \theta θ划分在四个区间 [ − 1 2 π , − 1 4 π ] , [ − 1 4 π , 0 ] , [ 0 , 1 4 π ] , [ 1 4 π , 1 2 π ] [-\frac{1}{2}\pi, -\frac{1}{4}\pi], [-\frac{1}{4}\pi, 0], [0, \frac{1}{4}\pi], [\frac{1}{4}\pi, \frac{1}{2}\pi] [21π,41π],[41π,0],[0,41π],[41π,21π]内(分类编号为 0 , 1 , 2 , 3 0,1,2,3 0,1,2,3)。 b i n θ ( p ) bin_{\theta}^{(p)} binθ(p)可以简单定义为 ⌊ θ + S / δ ⌋ \lfloor \theta+S/\delta \rfloor θ+S/δ。比如 S = 1 2 π S=\frac{1}{2}\pi S=21π δ = 1 4 π \delta=\frac{1}{4}\pi δ=41π

当我预测的 θ = 2 5 π \theta=\frac{2}{5}\pi θ=52π时:

b i n θ ( p ) = ⌊ ( 2 5 π + 1 2 π ) / 1 4 π ⌋ = 3 bin_{\theta}^{(p)}=\lfloor (\frac{2}{5}\pi+\frac{1}{2}\pi)/\frac{1}{4}\pi \rfloor = 3 binθ(p)=(52π+21π)/41π=3

那么, θ = 2 5 π \theta=\frac{2}{5}\pi θ=52π属于第三个区间。

当我预测的 θ = − 2 5 π \theta=-\frac{2}{5}\pi θ=52π时:

b i n θ ( p ) = ⌊ ( − 2 5 π + 1 2 π ) / 1 4 π ⌋ = 0 bin_{\theta}^{(p)}=\lfloor (-\frac{2}{5}\pi+\frac{1}{2}\pi)/\frac{1}{4}\pi \rfloor = 0 binθ(p)=(52π+21π)/41π=0

那么, θ = − 2 5 π \theta=-\frac{2}{5}\pi θ=52π属于第零个区间。

b i n θ ( p ) bin_{\theta}^{(p)} binθ(p)进行one_hot编码,然后使用交叉熵损失函数,得到 F c l s ( b i n θ ( p ) , b i n ~ θ ( p ) ) F_{cls}(bin_{\theta}^{(p)}, \widetilde{bin}_{\theta}^{(p)}) Fcls(binθ(p),bin θ(p))

同样,当 θ = 2 5 π \theta=\frac{2}{5}\pi θ=52π,真值 θ ~ = 3 5 π \widetilde\theta = \frac{3}{5}\pi θ =53π时, b i n θ ( p ) = b i n ~ θ ( p ) = 3 bin_{\theta}^{(p)}=\widetilde{bin}_{\theta}^{(p)}=3 binθ(p)=bin θ(p)=3。这个时候 F c l s ( ⋅ ) = 0 F_{cls}(\cdot)=0 Fcls()=0,不能起到指导作用。但是角度误差还差了 1 5 π \frac{1}{5}\pi 51π。和A部分讨论的方式一样,构造一个 r e s θ ( p ) = θ − δ ⋅ b i n θ ( p ) res_{\theta}^{(p)} = \theta -\delta \cdot bin_{\theta}^{(p)} resθ(p)=θδbinθ(p)。同样构造, r e s ~ θ ( p ) = θ − δ ⋅ b i n ~ θ ( p ) \widetilde{res}_{\theta}^{(p)} = \theta -\delta \cdot \widetilde{bin}_{\theta}^{(p)} res θ(p)=θδbin θ(p)。在这个例子中:

r e s θ ( p ) − r e s ~ θ ( p ) = − 1 5 π res_{\theta}^{(p)} - \widetilde{res}_{\theta}^{(p)} = -\frac{1}{5}\pi resθ(p)res θ(p)=51π

自然希望误差尽可能地小:

r e s θ ( p ) − r e s ~ θ ( p ) → 0 res_{\theta}^{(p)} - \widetilde{res}_{\theta}^{(p)} \rightarrow 0 resθ(p)res θ(p)0

因此设计了针对角度的回归误差 F r e g ( r e s θ ( p ) , r e s ~ θ ( p ) ) = S m o o t h _ L 1 ( r e s θ ( p ) − r e s ~ θ ( p ) ) F_{reg}(res_{\theta}^{(p)}, \widetilde{res}_{\theta}^{(p)})=Smooth\_L1(res_{\theta}^{(p)} - \widetilde{res}_{\theta}^{(p)}) Freg(resθ(p),res θ(p))=Smooth_L1(resθ(p)res θ(p))

C. 最后考虑参数 y , w , l , h y,w,l,h y,w,l,h的损失函数

在2.3节开头讨论过,对于同一类目标目标而言,参数 y , w , l , h y,w,l,h y,w,l,h变换范围不大,于是可以设置一个先验值 y 0 , w 0 , l 0 , h 0 y_0,w_0,l_0,h_0 y0,w0,l0,h0。这些参数在先验值附近小范围地波动,于是误差函数可以简单设置为 F r e g ( r e s u ( p ) , r e s ~ u ( p ) ) F_{reg}(res_{u}^{(p)}, \widetilde{res}_{u}^{(p)}) Freg(resu(p),res u(p))

u ∈ { y , w , l , h } , r e s u ( p ) = ( u − u 0 ) , r e s ~ u ( p ) = ( u ~ − u 0 ) u\in\{y,w,l,h\}, res_{u}^{(p)}=(u-u_0), \widetilde{res}_{u}^{(p)}=(\widetilde{u}-u_0) u{y,w,l,h},resu(p)=(uu0),res u(p)=(u u0)
F r e g ( r e s u ( p ) , r e s ~ u ( p ) ) = S m o o t h _ L 1 ( r e s u ( p ) − r e s ~ u ( p ) ) F_{reg}(res_{u}^{(p)}, \widetilde{res}_{u}^{(p)}) = Smooth\_L1(res_{u}^{(p)} - \widetilde{res}_{u}^{(p)}) Freg(resu(p),res u(p))=Smooth_L1(resu(p)res u(p))

这里 F r e g ( r e s u ( p ) , r e s ~ u ( p ) ) F_{reg}(res_{u}^{(p)}, \widetilde{res}_{u}^{(p)}) Freg(resu(p),res u(p))只是形式上跟前面的误差函数保持一致罢了。它等价于:

F r e g ( r e s u ( p ) , r e s ~ u ( p ) ) = S m o o t h _ L 1 ( u − u ~ ) F_{reg}(res_{u}^{(p)}, \widetilde{res}_{u}^{(p)}) = Smooth\_L1(u-\widetilde u) Freg(resu(p),res u(p))=Smooth_L1(uu )

D. 总误差损失函数

对于每一个预选3d框(proposal),总误差函数是(公式太多字了,这次我直接截图):

在这里插入图片描述
因为每一个前景点产生一个预选3d框,所以预选3d框的总数等于前景点的数目 N p o s N_{pos} Npos

3. 思考

写到这里基本上对基于Bin的误差机制弄清楚了。对于一个回归问题,先把真值范围划分为若干个区间,使回归问题变成“归属于哪个区间”的分类问题,使用one_hot编码和交叉熵损失函数,回归到一个正确的区间之后,再使用平滑 L 1 L1 L1范数做细粒度的回归。

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

小白科研笔记:简析PointRCNN的基于Bin的误差机制 的相关文章

随机推荐

  • Java--信号量

    信号量 信号量 xff08 英语 xff1a Semaphore xff09 又称为信号量 旗语 xff0c 是一个同步对象 xff0c 用于保持在0至指定最大值之间的一个计数值 在系统中 xff0c 给予每一个进程一个信号量 xff0c
  • C++ 继承学习心得

    单继承 xff1a 一个子类只有一个直接父类时 xff0c 称这个继承关系为单继承 多继承 xff1a 一个子类中有两个或以上直接父类时 xff0c 称这个继承关系为多继承 菱形继承 是一种特殊的继承关系 菱形继承的问题 xff1a 有数据
  • 你的代码放在 GitHub 上,真的安全吗?

    受俄乌冲突的影响 xff0c GitHub 目前正在考虑限制俄罗斯开发人员访问开源代码存储库的可能性 无独有偶 xff0c 早在 2019 年 xff0c GitHub 就曾经因为美国出台贸易制裁国家名单 xff0c 对名单上的国家 地区的
  • ROS进阶学习(一至八)讲

    https blog csdn net weixin 40641902 article list 1 转载自weixin 40641902的博客
  • 如何将Docker升级到最新版本

    CentOS7如何将Docker升级到最新版 如果我们docker的版本比较低的话 xff0c 要怎么才能更新自己docker的版本呢 xff1f 下面是具体的方法 1 查找主机上关于Docker的软件包 rpm qa grep docke
  • 编译Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight

    宾夕法尼亚大学kumar实验室2018年发布 Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight xff0c 基于MSCKF基础上实现双目视觉惯导里程计 刚好这
  • 公网k8s集群搭建史上超详细的教程!!!

    一 背景 xff1a 1 实验背景 x1f9ea 在学习k8s搭建中 xff0c 网上大部分教程都是用虚拟机做单机集群 xff0c 只有极少数是使用服务器搭建教程 xff1b 但是用云服务器搭建的教程中教程版本都比较老 随着时间的推移 xf
  • 【repo/git小技巧】repo sync时报错“The remote end hung up unexpectedly”解决办法

    像往常一样使用repo init gt repo sync 的形式进行代码仓库下载 xff0c 但每次下载repo sync都不能执行成功 xff0c 问题为 The remote end hung up unexpectedly xff0
  • 在 React 中实现记忆以提高性能小技巧

    React 如何渲染 UI 在详细了解 React 中的 memoization 之前 xff0c 让我们先看看 React 如何使用虚拟 DOM 呈现 UI 常规 DOM 基本上包含一组表示为树的节点 DOM 中的每个节点都是 UI 元素
  • 《Linux内核设计与实现》读书总结

    Linux内核设计与实现 进程管理 进程 xff1a 处于执行器的程序 xff0c 包含代码段 xff0c 打开的文件 xff0c 信号 xff0c 内核内部数据 xff0c 内存地址空间 xff0c 多个线程 xff0c 存放全局变量的数
  • python无报错但是主函数没有执行

    python无报错但是主函数没有执行 是不是遇到过python没有报错 xff0c 但是主函数没有执行 xff0c 完全没有结果的情况 遇到这种情况很有可能就是你没有添加if name 61 61 main 这个东西 xff0c 或者格式不
  • 2018.2.2PHPstrom破解版

    作者 xff1a 聽 雨 来源 xff1a CSDN 原文 xff1a https blog csdn net qq 39439751 article details 82758330 版权声明 xff1a 本文为博主原创文章 xff0c
  • python3中 print不加括号报错!

    python 3和python 2的print是有区别 xff0c python3需要加括号 xff0c 但python2不需要 span class token operator gt gt span span class token o
  • leetcode 772 基本计算器3 双栈解析表达式 单调栈

    此题是比较难的一个题 xff0c 不能简单的用递归来做 假设我们已经能把数字分离出来 xff0c 并且解决了其他无关细节 此时我们要考虑 xff0c 如何处理括号和运算优先级 此题最强的一点是 xff0c 当你看到一个符号时 xff0c 你
  • 自然场景OCR检测(YOLOv3+CRNN)

    自然场景OCR检测 YOLOv3 43 CRNN xff08 中文 43 英文模型 xff09 前言 最近对于自然场景下的OCR比较有兴趣 xff0c 所以总结了一些目前OCR现状 xff0c 并且找了一个自然场景OCR的项目练练手 本人新
  • Tx2刷机及安装Jetpack4.5教程

    描述 xff1a 由于项目需要在工控机上运行目标检测程序 xff0c 所需配置需要包括Cuda OpenCV等软件配置 目前Nvidia已经将cuda opencv等相关用于图像处理 深度学习 计算机视觉所需的软件及文件集成到Jetpack
  • ROS gazebo 模型加载报错

    我的ros装的是ros kinetic desktop full版本 xff0c 所以不用另装gazebo 但是用命令 roscore rosrun gazebo ros gazebo 启动后 xff0c 出现如下错误 xff1a Erro
  • excel对比两边数据去重

    需求 筛选重复数据 xff0c A列是1000条数据 xff0c C列是100条数据 xff0c 删除重复的数据 xff0c 只剩900条 首先 xff0c A列数据要分列 xff0c 因为数据格式不一样 xff0c 会导致后面的问题 xf
  • GVIM的配置/使用

    关于GVIM的配置 使用 以我个人喜好配置 配置文件在用户目录下的 vimrc里 配置完后 xff0c 保存并bash一下即可 一 配置 xff1a 根据自己的喜好配置了一点点 colorscheme darkblue span class
  • 小白科研笔记:简析PointRCNN的基于Bin的误差机制

    1 前言 PointRCNN是一篇做3D目标检测的CVPR2019的文章 目前位居KITTI目标检测榜首的是PV RCNN 这个算法的前身就是PointRCNN 它们的作者都是同一个人 考虑到PV RCNN算法有些复杂 xff0c 于是我想