淺談分辨率對(duì)模型影響以及訓(xùn)練方法
一、前言
最近幾個(gè)人在討論模型訓(xùn)練的時(shí)候,提到了一個(gè)尺度對(duì)于模型的影響以及訓(xùn)練方法的收益,因此花了點(diǎn)時(shí)間,簡(jiǎn)單做了幾組實(shí)驗(yàn),整理一下結(jié)論。
二、基礎(chǔ)配置
本文的實(shí)驗(yàn)均是采用固定的配置結(jié)構(gòu)以及同一套code實(shí)現(xiàn),每次實(shí)驗(yàn)只改變分辨率等變量因素,保證實(shí)驗(yàn)合理性。
代碼實(shí)現(xiàn)可以參考我的這個(gè)git repo https://github.com/FlyEgle/imageclassification
三、實(shí)驗(yàn)
本次實(shí)驗(yàn)分成Pretrain和Finetune兩大部分,實(shí)驗(yàn)過(guò)程和結(jié)果如下:
3.1 Pretrain
pretrain這里分成兩組實(shí)驗(yàn)來(lái)做,第一組無(wú)任何pretrain,第二組用不同的方法load pretrain。
3.1.1 Training from Sketch
第一組實(shí)驗(yàn),總計(jì)4次對(duì)比實(shí)驗(yàn),分別實(shí)驗(yàn)在不同的分辨率的情況下R50的表現(xiàn),訓(xùn)練周期均為90個(gè)epoch, warmup 5個(gè)epoch,訓(xùn)練配置保持一致,結(jié)果如下:
| 模型 | 分辨率 | batchsize | acc@top1 |
|---|---|---|---|
| R50 | 224 | 1024 | 76.548% |
| R50 | 320 | 1024 | 77.698% |
| R50 | 416 | 1024 | 78.026% |
| R50 | 448 | 1024 | 77.826% |
可以看到,隨著分辨率的增加,模型精度隨之上升,但是在448分辨率的情況下,訓(xùn)練的精度反而沒(méi)有416高,說(shuō)明不加載pretrain的情況下,想要按原始的訓(xùn)練配置來(lái)提升精度,在更高的分辨率下收益不會(huì)有太大提升。
3.1.2 Training from Progressive
第二組實(shí)驗(yàn),總計(jì)3次對(duì)比實(shí)驗(yàn),分別是更大的分辨率先load小分辨率的權(quán)重后在按相同配置進(jìn)行訓(xùn)練,由于batchsize在1k,所以我沒(méi)有舍棄warmup,3.2的配置和3.1的配置是保持一致的,結(jié)果如下:
| 模型 | 分辨率 | batchsize | acc@top1 |
|---|---|---|---|
| R50 | 224->320 | 1024 | 78.052% |
| R50 | 320->416 | 1024 | 78.678% |
| R50 | 416->448 | 1024 | 78.542% |
可以看到相比第一組實(shí)驗(yàn),相同分辨率下的精度均有提升,而且在448的時(shí)候,沒(méi)有顯著的下降。
為了驗(yàn)證load精度稍微差一點(diǎn)的pretrain是否有提升,做了如下的實(shí)驗(yàn),不同的分辨率訓(xùn)練,但是固定load的pretrain都是224的權(quán)重,結(jié)果如下:
| 模型 | 分辨率 | batchsize | acc@top1 |
|---|---|---|---|
| R50 | 224->320 | 1024 | 78.052% |
| R50 | 224->416 | 1024 | 78.572% |
| R50 | 224->448 | 1024 | 78.722% |
很驚奇的發(fā)現(xiàn),在448的分辨率下,精度達(dá)到了最高。
3.2 Finetune
這里設(shè)計(jì)了兩大組實(shí)驗(yàn),分別考慮了學(xué)習(xí)率縮放和凍結(jié)block。
3.2.1 Finetune with LR
前面的實(shí)驗(yàn)因?yàn)槎际亲鰌retrain和from sketch,所以固定了所有的配置,包括LR。這里對(duì)LR縮放做實(shí)驗(yàn),探究finetune對(duì)模型精度的影響。縮放原始LR為0.1和0.01倍,去掉warmup,只訓(xùn)練40個(gè)epoch,結(jié)果如下:
| 模型 | 分辨率 | batchsize | LR | acc@top1 |
|---|---|---|---|---|
| R50 | 224->448 | 1024 | LR*0.1 | 78.924% |
| R50 | 224->448 | 1024 | LR*0.01 | 78.736% |
可以看到,不固定任何參數(shù)的時(shí)候,縮放LR,finetune相比pretrain,會(huì)有較大幅度的提升。
3.2.2 Finetune with Freeze layer
上一組實(shí)驗(yàn)得到了LR*0.1的時(shí)候效果最好,但是沒(méi)有凍結(jié)模型的任何參數(shù),這組實(shí)驗(yàn)做一下上面實(shí)驗(yàn)的補(bǔ)充,R50總計(jì)有4個(gè)layer,以及conv stem和FC。FC是不會(huì)被凍結(jié)的,不然訓(xùn)練個(gè)寂寞了,所以調(diào)整的就是不同的layer的凍結(jié),結(jié)果如下:
| 模型 | 分辨率 | batchsize | LR | layer | acc@top1 |
|---|---|---|---|---|---|
| R50 | 224->448 | 1024 | LR*0.1 | conv stem+layer1 | 78.796% |
| R50 | 224->448 | 1024 | LR*0.01 | conv stem+layer1-2 | 78.822% |
| R50 | 224->448 | 1024 | LR*0.01 | conv stem+layer1-3 | 78.05% |
| R50 | 224->448 | 1024 | LR*0.01 | conv stem+layer1-4 | 74.432% |
可以看到,當(dāng)凍結(jié)前兩個(gè)layer的時(shí)候,模型的性能還ok,但是當(dāng)開(kāi)始凍結(jié)第三個(gè)layer的時(shí)候有明顯的下降,全部?jī)鼋Y(jié)下降的更明顯。
四、結(jié)論
如果同域數(shù)據(jù),不希望提升模型的參數(shù)量的情況下,想要提升精度,可以考慮pretrain的方法。Finetune的方法雖然精度可以上來(lái),但是bad case有時(shí)候會(huì)跟著權(quán)重繼承過(guò)來(lái)。 數(shù)據(jù)量多,時(shí)間不夠的情況下可以適當(dāng)freeze前面幾層layer進(jìn)行finetune,淺層特征一般是共性特征,影響精度的還是底層的抽象特征。 imagnet的數(shù)據(jù)集是屬于目標(biāo)性的,就是物體很明確的在圖像中表示出來(lái),如果你的任務(wù)是理解性質(zhì)的或者需要隱表征的,那么最好從頭訓(xùn)練(經(jīng)驗(yàn)之談)
以上實(shí)驗(yàn)結(jié)論僅供參考,不能保證不同數(shù)據(jù)集結(jié)論一致,歡迎交流討論。
完
