Liao, Bencheng, et al. “Maptr: Structured modeling and learning for online vectorized hd map construction.” arXiv preprint arXiv:2208.14437 (2022).
要点总结:
MapTR 将地图元素(路沿, 车道线, 人行横道等)分成两类—线和多边形, 然后使用DETR策略对每个实例预测出一个数量为N的点集, 接着让预测的线和多边形和其对应GT匹配, 最后计算预测线—GT线, 预测多边形—GT多边形的loss;
文章的主要贡献点: 如何匹配预测与GT点集和计算其loss?
模型如何输出M组N个点集? M记为Instance数量, N记为每个Instance所包含的点数量
参考上图, Map Decoder会生成N个point query 和 M个instance query, 分别作为点和实例的Query; 接下来将这两组Query进行组合, 得到M*N个Query(?怎么进行组合), 再使用head将组合的Query进行回归, 这里就得到M个instance, 每个instance中包含N个点;
通过上一步, 得到了M个instance, 每个Instance包含N个点; 这里的instance可能是线或者多边形, 针对这两种类型, point-level 匹配会有一些差异;
接下来是MapTR的核心部分!
模型预测的M个instance如何与GT进行匹配? (instance-level matching)
首先计算M个instance和K个GT(假设有K个线或多边形)的位置cost(文中记为 L p o s i t i o n L_{position} Lposition) , 会得到M*K的代价矩阵, 再使用匈牙利匹配找到了预测instance和GT的匹配关系, 再加上Focal预测类别; 这两项loss就可以让预测instance匹配GT, 并得到预测instance的类别; 如下图
? 这里的 L F o c a l L_{Focal} LFocal 和 L p o s i t i o n L_{position} Lposition 计算loss 吗?
预测instance匹配到了GT, 该怎么计算loss?
需要注意的是, GT中的线或者多边形表示的地图元素是无序的;
网络模型需要学习到点之间的顺序关系, 再将这些点连接起来, 才能确定线或多边形的形状; 所以网络模型预测输出的点是默认有序的!
这两者之间的差异会带来什么问题呢?
假设, GT的点都是有序的, 那么只需要简单计算预测点集和GT点集每个点距离, 这个instance的loss就可以容易计算出来了, 所以如何硬给GT的点加一个顺序会变简单很多, 可以解决这个问题, 但模型的泛函性能可能不会太好;
MapTR为了解决这个问题, 提出了一个简单的策略排序匹配—计算loss(自己取的名字): 即将所有排序都展开, 在计算预测instance中每个点和排序中每个点的曼哈顿距离, 找到距离最小的排序, 再计算两个点集之间的点到点的距离, 该距离就是预测instance和GT的最终loss;
排序匹配, 可以想象成上一步的instance匹配,
计算loss,
最终的loss由三部分组成, 分类loss, 点对点loss, 和Edge Direction Loss;
更好看的样式 Notion
Ref: 手撕MapTR