本文主要是介绍【文章阅读】Object as Hotspots,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Brief
目前二维上的anchorfree的方法已经发展了有几年了,但是在三维检测中目前还没有关注到一个比较好实验效果的anchor-free方法(我目前还没看到吧),这一篇是我在arxiv上2020年元旦左右考试后看到的一篇,提目就很有意思,Object as Hotspots: An Anchor-Free 3D Object Detection Approach via Firing of Hotspots,看了一下实验效果,在KITTI上12名很好的效果了。而且方法听上去就很有二维上anchor free的方法的感觉,因此是有必要读一下的。
这里是 paper
这篇文章的核心创新点在对基于voxel的方法的anchor的改进,采用object级别的hotspots取代了anchor,而具体如何取代可以这样理解:
(1)以前的方法都是需要在预先对全部场景给出很多object级别的anchor,没有考虑效率,以及很对的Neg导致了背景和前景的不平衡。
(2)作者前面采用一样的方法,首先是对点云通过voxel提取特征,随后根据原始点到fea map的映射关系和标注框来决定哪些是Hotspot,再然后,根据作者自己设计的reg -loss回归的是当前所在物体的中心坐标的偏移,(这里可以根据每一个voxel划分时得到的坐标值作为回归的量)。
(3)也就是采用了上面这种策略,使得不用在全场景中划分label,只需要在fea map中选择hotspots进行回归就行.
Abstruct
- 由于点云的稀疏性和不规则性,目前的方法都是先把其规整化,比如说voxelize的方法需要先把点云划分成很多规则的anchor。
- 基于作者的观察:那些不被孤立的点也是具有物体识别的方向或者类别信息的。因此作者本文讨论不采用anchor的方法,也就是作者所说的anchor-free的方法。作者在文章称这些可能的点为 hostpots,可以直接从这些 hotspots预测结果,大大的减小了anchor数量。
- 我们的anchor free 的方法比其他的one stage的方法在KITTI上至少都多了2个点。
Introduction
- 3D检测在自动驾驶中感知的地位很高
- Lidar 由于天气、遮挡等会造成获得数据的稀疏性和不规则性,同时价格不菲,促使在稀疏和低质量的点云数据中运行出好结果的算法的研究。
- 目前的解决办法
(1)给出object级别的anchor大小,然后再根据提取到的特征回归和判别。
(2)基于Voxel的方法比较依赖参数的设置,比如点云range的设置,anchor的大小等等,这些预先设置的大小要建立在对数据的分析认知上,同时anchor的数量随着类别的增加也会线性增加。此外,通过IOU的方式确定pos和neg的方法可能会导致采样数据的进一步不平衡。
- Do we need pre-defined anchor?
作者 认为 激光雷达从未捕捉都稠密3D点云的形状,极端情况下,一个物体仅仅只能获得十个点左右
因此作者提出一种anchor free的认知,将目标当做一种hotspots的团来处理。
- 作者的方法
作者首先也是将点云场景体素化,然后再把每一个voxel中每一个点的特征集合起来形成hotspot表示,这些hotspot再直接被训练用于预测物体的定位和方向。最后再通过NMS得到结果。
我的疑惑:读到这里,不免会这样想,前面的voxel-based的方法都是先体素化,其中体素化的过程会划分成比较小的格子,而这里也同样体素化,那么作者是如何将体素特征转化为hotspots的特征呢,并认定哪些是hotspots。
- 本文的贡献
(1)提出了一种新的点云represtenation,OHS
(2)根据OHS构建了 第一个 onestage中的anchor free的3D检测网络
(3)quadrant classification loss :
2. Related Work
- one stage
voxelnet second pointpillars
- two stage
MV3D
- anchor free
在lidar_based的方法中没有,但是室内场景还是有一些,比如 SGPN,VOTENET等
3. Object as Hotspots
3.1. Interpretation of Hotspots
- part-aware的方法对遮挡更具有鲁棒性。
作者认为,part-bsed的具有part-aware的功能,即是在遮挡时,另外一部分可以具有全局的语义信息。
作者文章的hotspot实际上仅仅是object的一部分点云,也就是相当于一个object上存在多个hotspots
<font size=5,color=00ff>这里作者采用了下面这段表示每一个voxel也就是一个hotsopt,同时在后面的feamap 到 hptspot的映射可以用于做二次优化,后续可以考虑做一下。
For the voxelization representations, a voxel with several points enclosed is a sample of hotspot。A neuron on the CNN feature maps can represent a collection of voxels whose locations can be projected to the corresponding location of the neuron on the feature map。
在训练时根据voxel的映射将 feamap上的特征分为 hotspots和non-spots,对每个神经元进行二值分类。在推理阶段,如果某个神经元具有很高的置信度,那么这就是被分为一个hotspots
3.2. Hotspot Assignment
这应该是本文的核心观点,如何决定哪些是hotspots。作者指出3D刚性世界,点一般是不耦合的,可以根据标注框决定哪些点是包含物体的,但是边界点是不算在这其中的,同样作者为了得到更好的效果,采用了软间隔的方式,设置了一个中间区域为背景点和前景点的结合。
&emsp:作者设置了两种方式来决定当前的神经元是否为hotspot:
(1)看当前的神经元对应的是否含有点,如果没有就是non-hotspot,不过原始点需要在bbox中
(2)采用更大的区域,在bbox内所有的非空和空的voxel所对应的神经元都算。
4. HotSpot Network
分为两部分:
- 3D feature extractor
和second的前面的特征提取网络是一样的,不多研究,也就是下图中的voxel-based CNN backbone。
- Object-as-Hotspots head
这一块主要分为三部分,classfication,box regression和quadrant classification.后续逐个介绍。
4.1. Object-as-Hotspots Head
- hotspot classification sub-network 决定该hotspot是否作为一个object的某个部分
- regression sub-network 回归
- quadrant classification sub-network 预测象限,坐标中心为每个object的中心
4.2. Hotspot Losses for Supervision
- 分类Loss
这里作者采用的是focal-loss作为分类损失,其中空的点作为的hotspot是会被忽略的,也就是不会作为任何背景的。
L c l s = ∑ k = 1 K α ( 1 − p k ) γ log ( p k ) \mathcal{L}_{c l s}=\sum_{k=1}^{K} \alpha\left(1-p_{k}\right)^{\gamma} \log \left(p_{k}\right) Lcls=k=1∑Kα(1−pk)γlog(pk) - Box Regression
对于hotspot的块,作者采用如下的公式得到该热点原始坐标系中的关系:
[ x v , y v ] = ( j + 0.5 L ( x max − x min ) + x min i + 0.5 W ( y max − y min ) + y min ) \begin{aligned}\left[x_{v}, y_{v}\right]=&\left(\frac{j+0.5}{L}\left(x_{\max }-x_{\min }\right)+x_{\min }\right.\\ &\left.\frac{i+0.5}{W}\left(y_{\max }-y_{\min }\right)+y_{\min }\right) \end{aligned} [xv,yv]=(Lj+0.5(xmax−xmin)+xminWi+0.5(ymax−ymin)+ymin)
如上图所示,作者需要回归8个参数, [ d x , d y , z , log ( l ) , log ( w ) , log ( h ) , cos r , sin r ] \left[d_{x}, d_{y}, z, \log (l), \log (w), \log (h), \cos r, \sin r\right] [dx,dy,z,log(l),log(w),log(h),cosr,sinr],其中 d x , d y dx,dy dx,dy表示hotspot到物体中心的偏差值。象限偏差值采取顺时针。
因此回归loss和其他一样采用L1 loss:
L l o c ( x ) = { 0.5 x 2 , ∣ x ∣ < 1 ∣ x ∣ − 0.5 , otherwise \mathcal{L}_{l o c}(x)=\left\{\begin{array}{cc}0.5 x^{2} & ,|x|<1 \\ |x|-0.5 & , \text { otherwise }\end{array}\right. Lloc(x)={0.5x2∣x∣−0.5,∣x∣<1, otherwise
- Quadrant Classification
- L q = ∑ i = 0 3 − [ q i log ( p i ) + ( 1 − q i ) log ( 1 − p i ) ] \mathcal{L}_{q}=\sum_{i=0}^{3}-\left[q_{i} \log \left(p_{i}\right)+\left(1-q_{i}\right) \log \left(1-p_{i}\right)\right] Lq=i=0∑3−[qilog(pi)+(1−qi)log(1−pi)]
实验
这篇关于【文章阅读】Object as Hotspots的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!