1. 程式人生 > 其它 >帶掩碼的自編碼器MAE詳解和Pytorch程式碼實現

帶掩碼的自編碼器MAE詳解和Pytorch程式碼實現

監督學習是訓練機器學習模型的傳統方法,它在訓練時每一個觀察到的資料都需要有標註好的標籤。如果我們有一種訓練機器學習模型的方法不需要收集標籤,會怎麼樣?如果我們從收集的相同資料中提取標籤呢?這種型別的學習演算法被稱為自監督學習。這種方法在自然語言處理中工作得很好。一個例子是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程式碼實現