1、為什麼小模型的作為backbone效果會差?
在深度學習目標檢測(影象分割)領域,我們發現當我們使用層數越深,並且在imagenet上表現越好的分類網路作為backbone時,它的檢測和分割效果越好效果越好。比如我們使用resnet101作為backbone時候,faster_rcnn在coco2017檢測資料集上的map可以達到40.1,而使用resnet50作為backbone時候,map只達到37.1。而ssd使用resnet50作為backbone時候,map達到30.6,使用mobilenet作為backbone只達到21.7。參看gluoncv公布的訓練結果。detection - gluoncv 0.5.0 documentationgluon-cv.mxnet.io
那為什麼使用mobilenet這種小網路會比resnet101這種大網路效果差這麼多呢?主流的想法是小網路的容量小、表現效果差,等等。
那到底是那麼原因呢?我們可以觀察gluoncv官網的ssd_mobilenet
2、你的神經網路真的收斂了麼?
既然知道小網路作為backbone效果差的真正原因是模型欠擬合,那如果我們要提高小網路的效果,最主要的任務就是降低小網路的loss(當然大網路的loss如果被進一步降低效果自然越好,比如可以**faster_rcnn+fpn+resnet101就比faster_rcnn+resnet101的loss低一點點,當然效果也就提公升一點點)。
而我們不妨假設如果小網路最終」收斂「的loss如果可以達到大網路收斂的loss,那小網路能否達到大網路的效果呢?可能由於小網路的容量小,引數少,很難收斂到大網路的最終收斂的loss。當然方法是人想的,不然怎麼能發*****。
我個人認為降低小網路的loss主要有兩種方式:
1、提高效果的模型體積,如fpn,dla,shortcut,concat 等等。不過當模型體積增大到一定程度,他所能得到的收益也越小,比如可以**gluoncv官網的log。faster_rcnn+fpn+resnet101就比faster_rcnn+resnet101的loss低一點點,當然效果也就提公升一點點。而faster_rcnn+fpn+resnet50就比faster_rcnn+resnet50的loss低很多,當然效果也就提公升也高了很多。
2、改變訓練方式,比如很早提出的知識蒸餾,2023年的cascade rcnn和snip,以及2023年的各種anchor free,都是改變訓練方式,雖然他們的動機各不相同,但是我覺得大部分都是進一步降低loss,提高模型的效果。
訓練log位址為,記得給star啊。p517332051/gan-knowledge-distillation-ssdgithub.com
通過這種方法,我發現小網路並非不是不可以繼續收斂,而是訓練方式得到改善自然可以繼續降低他的loss,而隨之loss降低,網路的效果可以進一步提公升。期望我的方法能起到拋磚引玉的效果,能推動學術界和工業界神經網路壓縮的工作的進展。
參考
神經網路模型不收斂的處理
理論上,只要訓練樣本足夠多,神經網路可以擬合原始資料分布。遇到神經網路不收斂問題,可以 1 先檢查下輸入資料 歸一化,資料量 2 然後,檢查模型優化方法 學習率,優化器 優先adam這些自適應學習率 3 最後是,檢查模型結構設計 模型是否太簡單,已經擬合好資料了,設計更深的網路看loss能否再下降 ...
看神經網路 最新文章
cvpr,cvpr是ieee conference on computer vision and pattern recognition的縮寫,即ieee國際計算機視覺與模式識別會議。該會議是由ieee舉辦的計算機視覺和模式識別領域的頂級會議。iccv,iccv 的全稱是 ieee internat...
神經網路的認識(二)深層神經網路
損失函式 神經網路優化演算法 神經網路進一步優化 深層學習有兩個非常重要的特性 多層和非線性 線性模型的侷限性,就是任意線性模型的組合仍然還是線性模型。所以引出啟用函式,經過啟用函式變換完的輸出就不再是線性的了。如果將每乙個神經元 也就是神經網路中的節點 的輸出通過乙個非線性函式,那麼整個神經網路的...