时间循环一致性学习

Temporal Cycle-Consistency Learning(CVPR'19)

本文介绍的是一种自监督学习的方法,通过TCC的方法训练网络,然后通过不同视频的循环一致性损失找到不同视频帧之间的一致性,然后使用最近邻方法进行视频对齐。

循环一致表示学习

主要贡献是采用了自监督的学习方法,学习了一个嵌入空间(embedding space)从而使得两个相似的视频序列可以才时间上进行对齐。另一种解释就是说,在嵌入式空间里将两个序列上最短距离的点一对一连接后的数量最大化。为了实现这样的目标,本文通过将两个序列中循环一致性的帧的数量最大化,如下图所示:

循环一致性的计算过程是离散不可微的,为了能使用反向传播在嵌入式空间里进行学,本文提出两种不同的循环一致性的损失(cycle-consistency loss),下一节详细介绍。

给定一个序列中的某一帧\(s_i\),嵌入表达(embedding)为\(u_i=\phi(s_i;\theta)\),其中\(\phi\)是以\(\theta\)作为参数的神经网络encoder。这样对于给定的两个视频序列\(S,T\),长度分别为\(N,M\),embedding的表达式计算为\(U={u_1,u_2,...,u_N}\)\(V={v_1,v_2,...v_M}\),其中有\(u_i=\phi(s_i;\theta),v_i=\phi(t_i;\theta)\)

循环一致性

如果\(u_i\in U\)对于\(v_j=arg\ min_{v\in V}||u_i-v||\),重复上述过程,对于\(v_j\)找到有\(u_k=arg\ min_{u\in U}||v_j-u||\)。如果\(i==k\)那么就说明存在循环一致性,例如图2给出的例子。最好的嵌入空间就是能有最多匹配的点的空间。

反向循环分类(cycle-back Classification)

为了确定\(u_i\)的最近邻\(\tilde{v}\)(soft nearest neighbor),使用softmax函数进行判断,其中每一帧都是一个类别,匹配帧为1,其他均为0。

\[ \tilde{v} = \sum_j^M\alpha_jv_j, \ where \ \alpha_j=\frac{e^{-||u_i-v_j||^2}}{\sum_k^Me^{-||u_i-v_k||^2}} \]

其中\(\alpha\)是相似性分布概率,交叉熵被定义为 \[ L_{abc} = -\sum_j^Ny_jlog(\hat{y_j}) \]

反向循环回归(cycle-back Regression)

尽管上面的Classification可以定义一个损失函数用作学习,但是损失函数无法直观感受循环回来后的距离结果,也就是说没法衡量cycle-back回来的时间点与当前时间点的远近,如果某个点在向回循环的时候能及时找到合理的帧,那么惩罚应该是较小的。本文提出反向循环回归如下图所示

除了像上文一样计算最近邻\(\tilde{v}\)之外,还要计算相似性向量 \[ \beta_k=\frac{e^{-||\tilde{v}-u_k||^2}}{\sum_j^Ne^{-||\tilde{v}_i-u_j||^2}} \]

增加的约束为相似性的高斯分布,当前时间点附近有一个波峰(Peak)定义Loss为 \[ L{cbr}=\frac{|i-\mu|^2}{\sigma^2} + \lambda\ log(\sigma) \] 其中\(\mu=\sum_k^N\beta_k*k, \sigma^2=\sum_k^N\beta_k*(k-\mu)^2, \lambda\) 是正则化的权重参数

对于异常检测的应用思考

用TCC来做的异常检测有较强的假设,用作比对的序列与当前序列要有相似的上下文关系才可以进行异常检测,而且比较适合静态数据,因为不仅仅是跟后向的数据进行计算,还可能前向计算(高斯分布,最理想是比对到高斯的波峰位置),好在对于时序数据来说,不需要embedding的过程,可能会需要下采样来替代从而得到更好的性能

接下来打算开源码+TCC实现时序的异常检测看看效果