【一些思考】关于anchor的理解,以及从本质上拓展到“轨迹候选集”的概念
1.关于anchor的理解
先看在目标检测领域的anchor的含义:https://www.zhihu.com/question/42205480/answer/155759667;https://zhuanlan.zhihu.com/p/84398108
最早用anchor的可能是Faster RCNN
首先我们需要知道anchor的本质思想是什么,本质是SPP(spatial pyramid pooling)思想的逆向【这个观点受到其他答主的质疑】。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。以下图为例子:我们先预先给定9种anchor:三种尺寸(128^2,256^2,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1)。
下面看看anchor是怎么用的。回忆一下滑动窗口的卷积过程,不妨假设stride=1,上一层feature map每个对像素点周围kernel大小的窗口(感受野)提取信息,映射到下一层feature map对应位置,循环过程类似于不断变换窗口的中心,就像窗口在平移一样。因为会经过很多层的卷积池化等等操作,最后得到的feature map和原图是什么关系?feature map上的每个像素点,都会对应着原图中的一个感受野,当然这个感受野也会有一个中心像素点,在中心像素点的基础上匹配k个刚刚生成的anchor boxes。所以最后会生成N = k*feature_width*feature_height个anchor boxes。什么意思呢?就是说我们通过feature map到原图上的感受野映射关系,在原图上画了N个密密麻麻的anchor boxes,然后我们去判断,这些anchor boxes里面包含物体吗(输出cls_score,2维)?如果包含的话物体的具体位置在哪(输出bbox,4维,修正bbox)?
另外,这位答主的话很有道理。也就是说,虽然我的输出是这个anchor2里面的物体信息,但我用到的信息不是这个anchor截取下来的原图部分,而是对应的feature map对应的感受野的部分。这个观点还是蛮重要的。
总结一下,anchor实际上是人为设置的先验检测框,再换一种表述,先验地确定anchor的信息(num, size),就是在图像上确定了N个大小分别为size的检测框初步候选集。这个候选集不会因图像内容不同而不同,只要网络结构确定了(fmap到原图的感受野映射确定),anchor的手工设置完成,初步候选集在图像上面的分布是确定的。然后再一个个检查这些初步候选集,看看框里面是不是确实有物体,框的大小要不要修正(bounding box regression),做做非极大抑制什么的,得到最后若干有效输出。这个输出还是以初步候选集为基础挑选出来的。
2.预测中的anchor
MultiPath: Multiple Probabilistic Anchor Trajectory Hypotheses for Behavior Prediction
用的是anchor trajectory
目标:实现多模态的预测。为什么要多模态?一个agent未来的运动状态一定是充满不确定性的。这种不确定性分两种:①意图不确定性(我的理解就是对应Behavior planning)。他会不会变道?②控制不确定性(我的理解就是trajectory planning)。给定变道意图,他会用个什么具体轨迹变?所以,一个车未来的轨迹预测,其实很容易理解,会是一个多峰分布。【注意,文中说,建模时不会用语义级的意图概念,在理解上要注意】
既然是多峰分布,不妨用个GMM(高斯混合模型)来建模。那么现在的问题的关键就是找到每个子高斯模型的期望(平均轨迹/意图轨迹)和方差(轨迹误差)。很显然,期望取决于意图,方差取决于控制不确定性。
在自由空间里面直接找这些平均轨迹,岂不是大海捞针吗?如果我们能用先验知识,确定一些预定义的初步揣测的意图轨迹(anchor trajectory的概念),就可以根据道路几何对anchor进行细化偏移量,得到几个单峰的期望,然后方差捕捉单峰的随机不确定性(没听懂,我猜应该是在聚类内部算方差),同时给出这个单峰的概率(即对应意图的概率,或者说单峰的系数)
基本思想知道了,那anchor trajectories怎么获得呢?很显然是从数据集(状态序列空间)里面学习到的一个范式,文中说用的是无监督学习。如果无监督学习直接去学一个多峰分布(混合的分布模型),会遇到mode collapse问题。所以用K-means给轨迹数据集分类,其中自己定义了轨迹间的距离。
TNT:
anchor的形式变成了anchor goal(其实也能直接通过motion estimation 映射到一个轨迹)
anchor是道路中心线等关键参考线上面及其周围的采样点;从anchor里面挑几个好的,regress the offsets回归偏移量之后就可以得到目标target,通过motion estimation 映射到一个轨迹。最后非极大抑制一下输出轨迹。
小小总结一下,从检测和预测任务中可以发现,anchor思想的本质,就是先验地给出一些结果可能的initial guess,然后以此为基准,在里面逐个挑选,并且调整回归regression到若干个准确的最优的输出
那么,轨迹生成的任务,可不可以理解或转化为anchor-based呢?
如果可以的话,类似于DETR这种消除anchor预处理过程的方法能否应用呢?
……
词汇积累
1.Models which try to achieve diversity and coverage often suffer from mode collapse during training