CG Block
output的结果不依赖于input元素的顺序,π 作为一个排列组合的operation,最后可以得出,C’不会因为S的顺序而改变,所以具备permutation-invariance, S’的结果和S的排列组合是一样的顺序,所以具备permutation-equivariance。因为MCG具备这样的能力,所以地图的输入顺序、障碍物的输入顺序,都不会对结果造成影响
CG具有排序不变性的原因是是因为pooling具有排序不变性。pooling突出了第一维的信息
将CG迭加起来成为MCG,有点像是残差网络residual networks https://blog.csdn.net/a8039974/article/details/103155400
cross-attention的时间复杂度是O(nm)。当d= md的时候,cross attention的算力和CG是一样的,当d < md的时候,CG就可以节约算力了
协方差矩阵
正态分布
正定矩阵
所以协方差矩阵这样写的意思是一定可以保证正定,因为行列式为正数,这样就一定可以取逆了
GMM(高斯混合模型)
https://www.bilibili.com/video/BV1hZ4y1x7BL/?spm_id_from=333.788&vd_source=be318a63f48632480226184625edeb76
高斯混合模型的意思是数据集由多个高斯分布组成,然后去求得每个数据的概率
每条轨迹的置信度是通过高斯分布来求得的,所以需要去求高斯分布的协方差和均值
这一段可能是在解释normalize的原因
LOSS
这个loss其实就是在求GMM的参数,但是π * N在log里面就可以写成logπ + logN的形式,这个地方其log中不存在求和,是因为已经选了最近的一根,但是在multipathpp中这样做就不可以了
所以静态anchor这么写是没有问题的,完全符合论文中的思想
但是动态anchor不能这么写,因为如果是多模态的话,logN应该是log求和(N), 所以应该去取距离gt最近的轨迹去算loss
轨迹的输出形式
先去计算最大的曲率限制,然后曲率就成为了一个约束,能够推算出x, y的值。上述方法是通过运动学来推理的,也可以通过lstm等方式来推理出(a, theta)到(x, y)之间的映射
多头预测
假设有E个预测头,每个预测头都是GMM模型,各个预测头之间不相关,每个预测头的置信度为1 / E,每个预测头预测L个mode,μ为均值,∑为协方差,q为每个mode的置信度。然后使用类似于EM算法将M’种模态聚类成M种模态。
使用贪心的算法去初始化μ,然后使用EM算法迭代计算q, μ,∑
整体思路要让M种mode的φ^和M’种mode的φ更加相似,所以要让两者之间的KL散度尽量小,KL(φ | φ^) = P(φ) * log(P(φ)) - P(φ) * log(P(φ^)),所以要让P(φ) * log(P(φ^))尽可能大。
直接求最大是比较困难的,所以使用EM算法。φ’是新的估计值,φ是上一轮的值,所以f(φ’)要比f(φ)更大。
加入隐藏变量
右边的值就是需要求的最大似然估计。φ为已知的值,φ’为要求的值,所以最大似然只需要取log的分子部分。
然后进行迭代,P(h | x; φ^)为后验概率。
由于积分是比较难算的,所以我们就做一个近似,不考虑GMM,直接按照均值来算,所以就出现了开头的那种算法。
但是在代码实现过程中,没有使用EM算法,而是用multiheadattention对多头的结果进行混合,然后取最大值,再使用一个普通的decoder得到6条轨迹