論文地址:https://arxiv.org/pdf/2111.06377.pdf
代碼:https://github.com/lucidrains/vit-pytorch#masked-autoencoder
一句話簡介:隨機(jī)mask掉高比例image patch轩缤,輸入一個(gè)非對稱的autoencoder铺峭,encoder是ViT逼友,decoder是Transformer榴嗅,效果好。
1. 介紹
現(xiàn)在的深度學(xué)習(xí)模型已經(jīng)發(fā)展到了需要數(shù)億標(biāo)記過的圖像訓(xùn)練的程度周偎。這種對于數(shù)據(jù)的需求已經(jīng)在NLP中通過自監(jiān)督預(yù)訓(xùn)練解決了抹剩,思想就是去掉對一部分?jǐn)?shù)據(jù),然后學(xué)習(xí)預(yù)測被去掉的內(nèi)容蓉坎,這種方法現(xiàn)在可以訓(xùn)練包含超過一千億個(gè)參數(shù)的通用 NLP 模型澳眷。
CV中也有類似的思想,但是卻沒有像NLP取得很大的進(jìn)展蛉艾,那么是什么讓autoencoder在CV和NLP上有所不同钳踊?
- 結(jié)構(gòu)不同衷敌。直到ViT出現(xiàn)之前,卷積一直在CV占主導(dǎo)地位拓瞪,將 mask token 或者 positional embedding 加入卷積并不容易
- 信息密度不同缴罗。語言是人類生成的具有高度語義和信息密集度的信號。當(dāng)訓(xùn)練一個(gè)模型來預(yù)測每個(gè)句子的幾個(gè)遺漏單詞時(shí)祭埂,這個(gè)任務(wù)似乎會引起復(fù)雜的語言理解面氓。相反,圖像是具有嚴(yán)重空間冗余的自然信號沟堡,可以從相鄰的 patch 中重新覆蓋丟失的 patch侧但。因此,作者選擇了隨機(jī) mask 掉非常高比例的 image patch航罗,減少了冗余禀横,并創(chuàng)建了一個(gè)需要對圖像整體有所了解的自監(jiān)督任務(wù)。
- 解碼器作用不同粥血。在視覺中柏锄,解碼器重構(gòu)像素,因此其輸出的語義水平低于普通的識別任務(wù)复亏。 在語言中趾娃,解碼器預(yù)測的是包含豐富語義信息的缺失單詞。作者發(fā)現(xiàn)缔御,對于圖像來說抬闷,解碼器的設(shè)計(jì)在決定學(xué)習(xí)到的潛在表征的語義水平方面起著關(guān)鍵作用。
綜上耕突,作者提出了一個(gè)簡單笤成、有效、可擴(kuò)展的視覺表征學(xué)習(xí)的 masked autoencoder(MAE)眷茁。 MAE從輸入圖像中掩蓋了隨機(jī)部分炕泳,并在像素空間中重建了丟失的部分。 它有一個(gè)不對稱的編碼器-解碼器設(shè)計(jì)上祈。 MAE 的編碼器只對可見的 patches進(jìn)行操作(沒有 mask token)培遵,而解碼器是輕量級的,并從hidden representation 以及 mask token 中重建輸入登刺。
將 mask token 放在較小的解碼器部分可以減少計(jì)算籽腕,在這種設(shè)計(jì)下,一個(gè)非常高的掩碼率(75%)也可以得到很好的準(zhǔn)確性塘砸,讓編碼器只需要處理很小一部分的數(shù)據(jù)节仿,因而可以減小預(yù)訓(xùn)練的時(shí)間和內(nèi)存消耗,從而擴(kuò)展到大的模型掉蔬。
MAE可以學(xué)習(xí)到非常高容量的模型廊宪,并能很好地泛化矾瘾。 通過MAE的預(yù)訓(xùn)練,可以在 ImageNet-1K 上訓(xùn)練像 ViT-Large/-Huge 這樣對數(shù)據(jù)要求很高的模型箭启,并提高泛化性能壕翩。 通過 vanilla ViT-Huge模型,在ImageNet-1K 上進(jìn)行微調(diào)時(shí)傅寡,達(dá)到了87.8%的準(zhǔn)確性放妈。這超過了以前所有只使用ImageNet-1K 數(shù)據(jù)的結(jié)果。
在目標(biāo)檢測荐操、實(shí)例分割和語義分割的轉(zhuǎn)移學(xué)習(xí)任務(wù)中芜抒,MAE的預(yù)訓(xùn)練取得了比其監(jiān)督預(yù)訓(xùn)練更好的結(jié)果,更重要的是托启,作者觀察到通過擴(kuò)展模型獲得了顯著的收益宅倒。這些觀察結(jié)果與那些在 NLP 的自我監(jiān)督預(yù)訓(xùn)練中的觀察結(jié)果是一致的。
2. 相關(guān)工作
自編碼器(autoencoder)是學(xué)習(xí)表示的經(jīng)典方法拐迁。它有一個(gè)將輸入映射到潛在表示的編碼器和一個(gè)重構(gòu)輸入的解碼器。PCA 和 k-means 是都可以看作是自編碼器疗绣。 Denoising autoencoders (DAE) 破壞輸入信號并學(xué)習(xí)重建原始的线召、未破壞的信號,比如去掉像素或去除顏色通道多矮。作者的 MAE 也可以看作是一種DAE缓淹,但在許多方面與經(jīng)典 DAE 不同。
3. 方法
MAE 的作用是從一部分信號重建出原始信號塔逃,編碼器將觀察到的信號轉(zhuǎn)為潛在表征割卖,解碼器從潛在表征以及 mask token 中將原始信號重建出來。采用不對稱的結(jié)構(gòu)患雏。
Masking
將圖像分成不重疊的 patches,隨機(jī)均勻采樣得到一個(gè)子集罢维,mask ratio 指的是沒有被采樣到淹仑,被扔掉的部分。
具有高mask ratio的隨機(jī)采樣在很大程度上消除了冗余肺孵,從而創(chuàng)造了一個(gè)不能輕易通過從可見的相鄰 patch 中推斷出的任務(wù)匀借。 均勻分布防止了潛在的中心偏向(即在圖像中心附近有更多的遮蔽斑塊)。 最后平窘,高度稀疏的輸入為設(shè)計(jì)一個(gè)高效的編碼器創(chuàng)造了機(jī)會吓肋。
MAE 編碼器
一個(gè) ViT,只用在被采樣出來的 patches 上瑰艘,編碼器通過帶有附加位置嵌入的線性投影做 patch embedding 是鬼,然后通過一系列 Transformer 塊處理結(jié)果肤舞。沒有用到 mask token。
MAE 解碼器
解碼器的輸入包括編碼器編碼過的 patch 和 mask token均蜜。每個(gè) mask token 是一個(gè)共享的李剖、學(xué)習(xí)過的向量,表示存在一個(gè)需要預(yù)測的缺失了的 patch囤耳。
作者在這個(gè)完整的集合中為所有的標(biāo)記添加位置嵌入篙顺;如果沒有這個(gè),mask token就沒有關(guān)于它們在圖像中的位置的信息充择。 解碼器有另一系列的 Transformer 模塊德玫。
MAE解碼器只在預(yù)訓(xùn)練期間用于執(zhí)行圖像重建任務(wù)(只有編碼器用于產(chǎn)生用于識別的圖像表示)。因此椎麦,解碼器結(jié)構(gòu)可以以獨(dú)立于編碼器設(shè)計(jì)的方式靈活設(shè)計(jì)宰僧。 例如,設(shè)計(jì)一個(gè)非常輕量級的解碼器铃剔,會大大減少了預(yù)訓(xùn)練時(shí)間撒桨。
重建目標(biāo)
MAE通過預(yù)測每個(gè)被 masked(扔掉的,沒有被采樣的)patch 的像素值來重構(gòu)輸入键兜。解碼器輸出中的每一個(gè)元素都是代表一個(gè) patch 的像素值的向量凤类。 解碼器的最后一層是一個(gè)線性投影。
損失函數(shù)計(jì)算重建圖像和原始圖像之間在像素空間的均方誤差(MSE)普气。只在被mask 的 patch 上計(jì)算損失谜疤,與BERT類似。
作者還研究了一個(gè)變體现诀,其重建目標(biāo)是每個(gè)被遮蔽 patch 的歸一化像素值夷磕。 具體來說,計(jì)算一個(gè)patch中所有像素的平均值和標(biāo)準(zhǔn)差仔沿,并使用它們來做歸一化坐桩。 在實(shí)驗(yàn)中,使用歸一化的像素作為重建目標(biāo)封锉,可以提高表示的質(zhì)量绵跷。
簡單實(shí)現(xiàn)
首先通過線性偷聽加上位置嵌入對每一個(gè) patch 生成 token,然后隨機(jī)打亂順序并按比例去掉后面的一部分成福。
編碼后碾局,mask token 列表里加上 encoded patches,還原到打亂順序之前的順序奴艾,使位置對齊净当,這個(gè)完整的列表加上位置嵌入,一起進(jìn)入解碼器。
4. 實(shí)驗(yàn)
經(jīng)過實(shí)驗(yàn)作者使用了8個(gè) transformer blocks像啼,512的寬度俘闯,作為默認(rèn)的MAE decoder。與其他的自監(jiān)督預(yù)訓(xùn)練埋合,有監(jiān)督預(yù)訓(xùn)練的方法對比备徐,MAE的效果最好。用遷移學(xué)習(xí)在其他任務(wù)甚颂,例如目標(biāo)檢測和分割上蜜猾,也取得了很好的效果提升。
5. 討論
自監(jiān)督學(xué)習(xí)在視覺中可能會有像在NLP中一樣的發(fā)展振诬。
MAE重建像素蹭睡,而不是語義實(shí)體,盡管如此MAE還是能推斷出整體的重建赶么,說明它的確學(xué)到了視覺概念肩豁。
拋開MAE本身到底有沒有用,這篇文章中實(shí)驗(yàn)思路其實(shí)非常值得學(xué)習(xí)辫呻,比如實(shí)驗(yàn)效果不好的時(shí)候要如何去思考清钥。