監督學習是訓練機器學習模型的傳統方法,它在訓練時每一個觀察到的數據都需要有標注好的標簽。如果我們有一種訓練機器學習模型的方法不需要收集標簽,會怎么樣?如果我們從收集的相同數據中提取標簽呢?這種類型的學習算法被稱為自監督學習。這種方法在自然語言處理中工作得很好。一個例子是BERT¹,谷歌自2019年以來一直在其搜索引擎中使用BERT¹。不幸的是,對於計算機視覺來說,情況並非如此。
Facebook AI的kaiming大神等人提出了一種帶掩碼自編碼器(MAE)²,它基於(ViT)³架構。他們的方法在ImageNet上的表現要好於從零開始訓練的VIT。在本文中,我們將深入研究他們的方法,並了解如何在代碼中實現它。
帶掩碼自編碼器(MAE)
對輸入圖像的patches進行隨機掩碼,然后重建缺失的像素。MAE基於兩個核心設計。首先,開發了一個非對稱的編碼器-解碼器架構,其中編碼器僅對可見的patches子集(沒有掩碼的tokens)進行操作,同時還有一個輕量級的解碼器,可以從潛在表示和掩碼tokens重建原始圖像。其次,發現對輸入圖像進行高比例的掩碼,例如75%,會產生有意義的自監督任務。將這兩種設計結合起來,能夠高效地訓練大型模型:加快模型訓練速度(3倍甚至更多)並提高精度。
此階段稱為預訓練,因為 MAE 模型稍后將用於下游任務,例如圖像分類。模型在pretext上的表現在自監督中並不重要, 這些任務的重點是讓模型學習一個預期包含良好語義的中間表示。在預訓練階段之后,解碼器將被多層感知器 (MLP) 頭或線性層取代,作為分類器輸出對下游任務的預測。
模型架構
編碼器
編碼器是 ViT。它接受張量形狀為 (batch_size, RGB_channels, height, width) 的圖像。通過執行線性投影為每個Patch獲得嵌入, 這是通過 2D 卷積層來完成。然后張量在最后一個維度被展平(壓扁),變成 (batch_size, encoder_embed_dim, num_visible_patches),並 轉置為形狀(batch_size、num_visible_patches、encoder_embed_dim)的張量。
完整代碼請見原文:帶掩碼的自編碼器MAE詳解和Pytorch代碼實現