Self-Supervised

CVPR 2020 SelFlow: Self-Supervised Learning of Optical Flow

Unsupervised Optical Flow Estimation

基于亮度一致性brightness constancy和空间平滑性spatial smoothness,由此产生了photometric loss,但是这个损失函数并不能处理有遮挡的情况,所以后来的学者提出先估计出一个occlusion map,然后计算损失的时候不去考虑这些被遮挡的点。

Self-supervised Method

思考一下,自监督怎么才能监督起来呢?已经提出了很多的pretext task,比如说inpaint(从图片中去掉一块,然后去填充)、给图片上色、或者是拼图任务。其实自监督的关键就是要从pretext task中学到一些特殊的信息,比如拼图任务,就是希望能学习出图片的空间位置关系。

Method

使用两个结构一样的CNN网络,NOC-Model重点学习没有被遮挡的像素点的光流,OCC-Model学习所有像素点(包括被遮挡和不被遮挡的像素点)的光流,测试的时候只需要OCC-Model就可以了。

给定连续三帧\(I_{t-1}\)\(I_t\)\(I_{t+1}\),我们用\(w_{i\rightarrow j}\)表示\(I_{i}\)\(I_j\)的光流,那么我们可以估计\(w_{t\rightarrow t-1}\)\(w_{t\rightarrow t+1}\),然后用估计出来的两个光流把\(I_t\)转化为\(I_{t-1}\)\(I_t\),这时候就可以做自监督了。另外,为什么要估计两个光流呢,只顾及一个光流其实也够啊?作者把\(w_{t\rightarrow t+1}\)作为forward,把\(w_{t\rightarrow t-1}\)作为backward,相当于在网络的一次前向传播就完成了forward和backward两次光流估计,是个有新意的地方。

ICML-2020 Understanding Contrastive Representation Learning through Alignment and Uniformity on the Hypersphere

常用的 Contrastive Learning 的损失函数是 InfoNCE,即 \[ \mathcal L_{contrastive}(f;\tau,M)=E\left[-\log\frac{e^{f(x)^Tf(y)/\tau}}{e^{f(x)^Tf(y)/\tau}+\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}\right] \] 原文中的变换实在没看懂,主要是当\(P[f(x)=f(y)]=1\)时如何得到那个简化形式。仔细研究后,我们可以通过另一种方式得到文中的结论,记录如下: \[ \begin{aligned} \mathcal L_{contrastive}(f;\tau,M)&=E\left[-\log\frac{e^{f(x)^Tf(y)/\tau}}{e^{f(x)^Tf(y)/\tau}+\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}\right] \\ &=E\left[\log\frac{e^{f(x)^Tf(y)/\tau}+\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}{e^{f(x)^Tf(y)/\tau}}\right]\\ &=E\left[1+\log\frac{\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}{e^{f(x)^Tf(y)/\tau}}\right] \end{aligned} \] 我们的优化目标是\(\min{\mathcal L_{contrastive}(f;\tau,M)}\),可得 \[ \begin{align} \min{\mathcal L_{contrastive}(f;\tau,M)} &= \min{E\left[1+\log\frac{\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}{e^{f(x)^Tf(y)/\tau}}\right]}\\ &=\min{E\left[\log\frac{\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}{e^{f(x)^Tf(y)/\tau}}\right]}\\ &=\min{E\left[\log{\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}-\log{e^{f(x)^Tf(y)/\tau}}\right]}\\ &=\min{E\left[\log{e^{-f(x)^Tf(y)/\tau}}+\log{\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}\right]}\\ &=\min{E\left[-f(x)^Tf(y)/\tau+\log{\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}\right]}\\ \end{align} \] 所以损失函数的优化可以理解为两个部分,第一部分是最小化\(-f(x)^Tf(y)/\tau\),这里点积是一个度量相似度的函数,这一部分的优化目标是让positive pair之间的特征尽可能的对齐(或者说相似度尽可能的大);第二部分是最小化\(\log{\sum_i{e^{f(x_i^-)^Tf(y)/\tau}}}\),也就是让negative pair之间的特征均匀地分散开,按照文中的逻辑,任意两个不同类别之间的特征相似度很小也就意味着很分散,分散到极致就是均匀分布了(只是一种感觉?)。