近三年CVPR引用最高的論文:愷明一如既往的正常發(fā)揮
作者丨笑傲
來源丨笑傲算法江湖
編輯丨極市平臺(tái)
近三年CVPR引用量最高論文(截止目前2022年11月):
CVPR2020引用量最高的論文:MoCo
CVPR2021引用量最高的論文:SimSiam
CVPR2022引用量最高的論文:MAE
它們的共同點(diǎn)是:
三篇論文唯一單位:Facebook(FAIR)
三篇論文唯一共同作者:何愷明(KaimingHe)
三篇論文均屬于:自監(jiān)督學(xué)習(xí)(Self-Supervised Learning)
MoCo CVPR2020

論文地址:https://arxiv.org/pdf/1911.05722.pdf
開源地址:https://github.com/facebookresearch/moco
李沐精讀:https://www.bilibili.com/video/BV1C3411s7t9/?spm_id_from=333.999.0.0&vd_source=ec54183c11e50329f6359027c7459966
知乎解讀:https://zhuanlan.zhihu.com/p/382763210
知乎解讀:https://zhuanlan.zhihu.com/p/365886585
MoCo為CV拉開了Self-Supervised的新篇章,與Transformer聯(lián)手成為了深度學(xué)習(xí)炙手可熱的研究方向。
MoCo主要設(shè)計(jì)了三個(gè)核心操作:Dictionary as a queue、Momentum update和Shuffling BN。
Dictionary as a queue
MoCo提出了將memory bank的方法改進(jìn)為dictionary as a queue,意思就是跟memory bank類似,也保存數(shù)據(jù)集中數(shù)據(jù)特征,只不過變成了queue的形式存儲(chǔ),這樣每個(gè)epoch會(huì)enqueue進(jìn)來一個(gè)batch的數(shù)據(jù)特征,然后dequeue出去dictionary中保存時(shí)間最久的一個(gè)batch的數(shù)據(jù)特征,整體上來看每個(gè)epoch,dictionary中保存的數(shù)據(jù)特征總數(shù)是不變的,并且隨著epoch的進(jìn)行會(huì)更新dictionary的數(shù)據(jù)特征。同時(shí)dictionary的容量不需要很大。

Momentum update 動(dòng)量更新
MoCo在dictionary as a queue的基礎(chǔ)上,增加了一個(gè)momentum encoder的操作,key的encoder參數(shù)等于query的encoder參數(shù)的滑動(dòng)平均,公式如下:

?和?分別是key的encoder和query的encoder的參數(shù),m是0-1之間的動(dòng)量系數(shù)。因?yàn)閙omentum encoder的存在,導(dǎo)致key支路的參數(shù)避免了突變,可以將多個(gè)epoch的數(shù)據(jù)特征近似成一個(gè)靜止的大batch數(shù)據(jù)特征。
MoCo偽代碼如下:
f_k.params?=?f_q.params?#?初始化??
for?x?in?loader:?#?輸入一個(gè)圖像序列x,包含N張圖,沒有標(biāo)簽??
????x_q?=?aug(x)?#?用于查詢的圖(數(shù)據(jù)增強(qiáng)得到)??
????x_k?=?aug(x)?#?模板圖(數(shù)據(jù)增強(qiáng)得到),自監(jiān)督就體現(xiàn)在這里,只有圖x和x的數(shù)據(jù)增強(qiáng)才被歸為一類??
????q?=?f_q.forward(x_q)?#?提取查詢特征,輸出NxC??
????k?=?f_k.forward(x_k)?#?提取模板特征,輸出NxC??
????#?不使用梯度更新f_k的參數(shù),這是因?yàn)槲恼录僭O(shè)用于提取模板的表示應(yīng)該是穩(wěn)定的,不應(yīng)立即更新??
????k?=?k.detach()???
????#?這里bmm是分批矩陣乘法??
????l_pos?=?bmm(q.view(N,1,C),?k.view(N,C,1))?#?輸出Nx1,也就是自己與自己的增強(qiáng)圖的特征的匹配度??
????l_neg?=?mm(q.view(N,C),?queue.view(C,K))?#?輸出Nxk,自己與上一批次所有圖的匹配度(全不匹配)??
????logits?=?cat([l_pos,?l_neg],?dim=1)?#?輸出Nx(1+k)??
????labels?=?zeros(N)??
????#?NCE損失函數(shù),就是為了保證自己與自己衍生的匹配度輸出越大越好,否則越小越好??
????loss?=?CrossEntropyLoss(logits/t,?labels)???
????loss.backward()??
????update(f_q.params)?#?f_q使用梯度立即更新??
????#?由于假設(shè)模板特征的表示方法是穩(wěn)定的,因此它更新得更慢,這里使用動(dòng)量法更新,相當(dāng)于做了個(gè)濾波。??
????f_k.params?=?m*f_k.params+(1-m)*f_q.params???
????enqueue(queue,?k)?#?為了生成反例,所以引入了隊(duì)列??
????dequeue(queue)??
SimSiam CVPR2021

論文地址:https://arxiv.org/pdf/2011.10566.pdf
知乎解讀:https://zhuanlan.zhihu.com/p/452659570
解讀博客:https://www.cnblogs.com/wyboooo/p/14036948.html
Siamese Network是近年來自監(jiān)督/無監(jiān)督任務(wù)中非常常用的網(wǎng)絡(luò),他是應(yīng)用于兩個(gè)或更多輸入的一個(gè)權(quán)值共享的網(wǎng)絡(luò),是比較兩個(gè)實(shí)體天然的工具。目前的大部分方法都是用一個(gè)圖像的兩種augmentation作為輸入,在不同的條件下來最大化他們的相似度。但是Siamese Network會(huì)遇到的一個(gè)問題是,他的解可能會(huì)collapse至一個(gè)常量。目前常用的解決這個(gè)問題的方法有:Contrastive Learning,引入負(fù)樣本,負(fù)樣本會(huì)把constant 輸出排除到解空間以外;Clustering;momentum encoder。在本文中作者就指出,一個(gè)簡單的Siamese 網(wǎng)絡(luò)不需要以上方法也可以有效避免collapsing問題,并且不依賴于large-batch訓(xùn)練。作者將他們的方法稱為“SimSiam”,并指出其中的stop-gradient操作才是在避免collapsing中非常重要的。這可能是由于有一個(gè)潛在的優(yōu)化問題被解決了。作者推測實(shí)際上這里有兩組變量,SimSiam實(shí)際上是在交替優(yōu)化每一組變量。SimSiam 偽代碼如下:
#?Algorithm1?SimSiam?Pseudocode,?Pytorch-like??
#?f:?backbone?+?projection?mlp??
#?h:?prediction?mlp??
for?x?in?loader:?#?load?a?minibatch?x?with?n?samples??
?x1,?x2?=?aug(x),?aug(x)?#?random?augmentation??
?z1,?z2?=?f(x1),?f(x2)?#?projections,?n-by-d??
?p1,?p2?=?h(z1),?h(z2)?#?predictions,?n-by-d??
?L?=?D(p1,?z2)/2?+?D(p2,?z1)/2?#?loss??
?L.backward()?#?back-propagate??
?update(f,?h)?#?SGD?update??
??????
def?D(p,?z):?#?negative?cosine?similarity??
?z?=?z.detach()?#?stop?gradient??
?p?=?normalize(p,?dim=1)?#?l2-normalize??
?z?=?normalize(z,?dim=1)?#?l2-normalize??
return?-(p*z).sum(dim=1).mean()??
MAE CVPR2022

論文地址:https://arxiv.org/pdf/2111.06377.pdf
開源地址:https://github.com/facebookresearch/mae
李沐精讀:https://www.bilibili.com/video/BV1sq4y1q77t/?spm_id_from=333.788&vd_source=ec54183c11e50329f6359027c7459966
知乎解讀:https://zhuanlan.zhihu.com/p/432950958
知乎解讀:https://zhuanlan.zhihu.com/p/448407149
Motivation
雖然預(yù)訓(xùn)練在NLP上正發(fā)展的如火如荼,但是在計(jì)算機(jī)視覺方向卻鮮有文章,究其原因,論文中給出了三個(gè)重要的點(diǎn)。
模型架構(gòu)不同:在過去的幾十年,計(jì)算機(jī)視覺被卷積神經(jīng)網(wǎng)絡(luò)所壟斷著,卷積是一個(gè)基于劃窗的算法,它和其它嵌入(位置嵌入等)的融合比較困難,直到Transformer的提出才解決了這個(gè)問題。
信息密度不同:文本數(shù)據(jù)是經(jīng)過人類高度抽象之后的一種信號(hào),它的信息是密集的,所以僅僅預(yù)測文本中的幾個(gè)被掩碼掉的單詞就能很好的捕捉文本的語義特征。而圖像數(shù)據(jù)是一個(gè)信息密度非常小的矩陣,其中包含著大量的冗余信息,而且像素和它周圍的像素僅僅在紋理上就有非常大的相似性,恢復(fù)被掩碼的像素并不需要太多的語義信息。
解碼器的作用不同:在BERT的掩碼語言模型任務(wù)中,預(yù)測被掩碼掉的單詞是需要解碼器了解文本的語義信息的。但是在計(jì)算機(jī)視覺的掩碼預(yù)測任務(wù)中,預(yù)測被掩碼的像素往往對(duì)圖像的語義信息依賴的并不嚴(yán)重。
基于這三個(gè)動(dòng)機(jī),作者設(shè)計(jì)了基于掩碼自編碼器(Masked AutoEncoder,MAE)的圖像預(yù)訓(xùn)練任務(wù)。MAE的先對(duì)圖像的Patch進(jìn)行掩碼,然后通過模型還原這些掩碼,從事實(shí)現(xiàn)模型的預(yù)訓(xùn)練。MAE的核心是通過75%的高掩碼率來對(duì)圖像添加噪音,這樣圖像便很難通過周圍的像素來對(duì)被掩碼的像素進(jìn)行重建,迫使編碼器去學(xué)習(xí)圖像中的語義信息。
模型介紹
MAE的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,它是一個(gè)非對(duì)稱的Encoder-Decoder架構(gòu)的模型,Encoder架構(gòu)是采用了ViT提出的以Transformer為基礎(chǔ)的骨干網(wǎng)絡(luò),它的基于Patch的輸入正好可以拿來作為掩碼的基本單元。MAE的Decoder是一個(gè)輕量級(jí)的結(jié)構(gòu),它在深度和寬度上都比Encoder小很多。MAE的另一個(gè)非對(duì)稱的表現(xiàn)在Encoder僅將未被掩碼的部分作為輸入,而Decoder將整個(gè)圖像的Patch(掩碼標(biāo)志和Encoder編碼后的未被掩碼patch的圖像特征)作為輸入。
