您當前的位置:首頁 > 攝影

利用MAE進行語義分割的遷移學習--(2)訓練自己的預訓練模型MAE

作者:由 一拳超神 發表于 攝影時間:2022-11-08

上一篇講了ViT的一些原理,這一篇我就拿一個實打實的工程給大家做講解,本文的程式碼來自github改編的penzhangliang大佬的mae程式碼。大家直接去github搜尋mae第二個就是他的程式碼,第一個時facebook的,這兩個工程我都會在後續的文章中講解,程式碼應該會在6月底等我畢設論文寫完上傳到我自己的github上,大家諒解哈。不過我講的很詳細大家跟著文章肯定可以自己復現。(小擺幾天,今天更新一下)

一、工程結構解讀

利用MAE進行語義分割的遷移學習--(2)訓練自己的預訓練模型MAE

圖中標紅的是預訓練的主檔案,我們除錯好程式碼之後只需要在pycharm左下角的terminal輸入python run_mae_pretrain。py就行了。在這之前大家要先把get_args這個函式一些預設的引數新增一下,這樣在輸入命令時就不用輸入其他額外引數瞭如圖1。

利用MAE進行語義分割的遷移學習--(2)訓練自己的預訓練模型MAE

圖一

然後是model。finetune。py和model。pretrain。py檔案,一般的比較正規的工程都會把模型單獨寫在一個指令碼檔案裡。modeling。finetune。py和modeling。pretrain。py檔案定義了我們用到的模型。

利用MAE進行語義分割的遷移學習--(2)訓練自己的預訓練模型MAE

圖2

我對圖片的幾個函式編號了,說到他們我就用數字代替。可以很清晰的看到MAE的encoder-decoder結構分別為函式1,2。函式三將1,2拼接成一個完整的MAE結構如圖2,並定義了位置編碼和掩碼token。該檔案的4,5,6註冊的三個模型會方便我們從timm中直接載入自定義的MAE。構成MAE encoder和decoder的注意力層,mlp層等定義在modeling。finetune。py檔案中如圖3,該檔案中定義了ViT的模型結構用於構建MAE encoder和decoder。

利用MAE進行語義分割的遷移學習--(2)訓練自己的預訓練模型MAE

圖3

知道了模型檔案之後再來看主檔案run_mae_pretraining。py,這是預訓練的主檔案。

整體思路為:初始化一些啟用GPU訓練的引數,載入dataset,設定dataset啟用並行化訓練,載入dataloader獲得一個個的Batch作為模型的輸入,建立最佳化器,設定一些權重的學習率變化方式,進入train_one_epoch。這些流程中你只需要將自己的資料集放入指定的路徑讓模型訓練時可以找到資料即可。但是一定要配置好GPU的訓練環境這裡就詳細闡述了。

二、幾點意見

自己在學pytorch的時候有幾點感悟就是,當你開啟畢站隨便搜一個pytorch教程學完之後再去github找一個工程down下來,還是很難讀懂別人的工程,還是要自己去一步一步除錯,把模型每一層的輸出都打印出來,瞭解張量在網路中的變化,這樣才能讀懂一個過程。關於dataset和dataloader這也是很重要的一部分我也是花了很多時間去看別人的程式碼,不得不說github上多星的工程真的寫的很好,別人在訓練時會有很多訓練技巧什麼預熱,凍結,學習率調整策略,不同的損失函式,資料增強等等這些都是我讀了別人的程式碼才去瞭解的(因為我是個新手小白)。總之一句話如果你仔細除錯了一個比較規範的工程(github上)你真的會學到很多,所以大家還是動起手來吧。

標簽: py  GitHub  檔案  mae  模型