在諮詢了老師的建議後,最近開始着手深刻的學習一下目標檢測算法,結合這兩天所查到的資料和我的的理解,準備大體將CNN目標檢測的發展脈絡理一理(暫時只講CNN系列部分,YOLO和SSD,後面會抽空整理)。算法
目標檢測的發展大體起始於2000年先後(具體我也沒去深究,若是有誤還請大佬們指正 ●ˇ∀ˇ● ),早期受限於算力,目標檢測發展的不溫不火,直到半導體技術的進步,以及Hinton團隊的榜樣做用,圖像的目標檢測纔開始有了日新月異的發展。網絡
就我我的理解,從2012年至今的目標檢測的發展,並無在算法上呈現出本質性的突破,更多的是將前人已經提出的算法/技巧,進行了巧妙的組合與優化,而後在高速設備上進行快速的驗證與迭代,纔有了目標檢測現在繁榮的發展示狀。(固然,也多是由於小弟對學術界的發展所知甚少,而致使了一種以偏概全的理解🙃emm。。。)架構
接下來的幾篇博客會按照 AlexNet --> R-CNN -->FastRCNN -->FasterRCNN --> MaskRCNN 的順序來整理,今天的內容是ALexNet,由於個人目的在於簡析目標檢測發展脈絡,把握算法的改進路線,因此不會特別詳細的講解算法原理(好吧,我就是懶的寫怎麼滴~( ̄▽ ̄)~*),只挑與「改進/發展」相關的部份內容簡析,以做爲我對目標檢測領域的綜述性學習筆記。函數
提及AlexNet,相信你們必定不陌生,在2012年一舉奪得了ImageNet和ILSVRC競賽雙冠,而且在ILSVRC中的top-5測試的error rate爲15.3%, 遠遠甩開第二名的26.2%(此處應有掌聲,啪啪啪~(* ̄3 ̄)╭),如此壓倒性優點的勝利給工業界帶來了不小的衝擊,同時也使得深度神經網絡再次進入業界的視線。學習
由於本文是以綜述爲主,因此就不詳細講架構了,感興趣的能夠網上搜索一下,不少大佬們講解的都很到位,這裏主要提一下該模型的特色/改進。測試
子曾經曰過:「沒圖說個xx」。。。因此這裏先上圖,如下就是AlexNet的網絡架構優化
結合對論文的閱讀,小弟總結了該模型的四個主要特色:spa
(一)該模型在全鏈接層使用了Dropout進行正則化blog
我在查資料時發現網上有人說Dropout是Hinton在2014年提出的理論,但實際上在2012年的AlexNet中就已經用到了該技術。深度學習
當時提出該方法的原由就在於,AlexNet在輸出層使用了兩個的Dense層,分析以下。
根據上面的模型圖,第六層採用了(6*6*256)的Filter,在不考慮卷積和線性迴歸偏置值的狀況下,最後兩個Dense層的參數的數量 = 4096*4096+6*6*256*4096,大體爲5400萬個參數,而論文中提到過,整個模型的參數量在6000萬做用,也就是說,最後兩個Dense層的參數佔整個模型參數量的90%以上,所以只要對這兩層的參數量加以限制,就能夠大大下降整個模型的複雜度,從而下降過擬合,同時也提升了訓練速度。而Hinton對參數量的限制手段,就是Dropout,現現在,該方法也成爲當前深度學習領域的常客。
(二)使用ReLU做爲激活函數
在Hinton以前,經常使用的激活函數是tanh或者sigmoid(以下圖),可是兩者在BP神經網絡層數較深時,會產生梯度消失的現象,而使用ReLU則能夠有效的避免此問題(實際上ReLU也有可能會出現梯度消失,但比較少見)。話說回來,ReLU還能夠解決梯度爆炸問題,堪稱激活函數中的完美女神有木有(咳咳,由於小弟是男生,因此ReLU是女神嘿嘿~)。
(三)局部響應歸一化(LRN)
原本想好好誇一誇LRN,可是我在查閱了資料後發現這玩意兒的做用極其有限,很雞肋,如今你們基本都用BN,可是原論文裏裏面爲LRN單獨劃出一節,強調了其能夠下降錯誤率(莫非Hinton大佬爲了水論文的字數???狗頭保命🙃),因此這裏稍微提一嘴,就不細說了。
(四)重疊池化
相較於LeNet中的非重疊池化,AlexNet中使用了部分重疊的池化操做,在必定程度上下降了模型過擬合的可能。
對於重疊池化,個人理解是,重疊池化後的特徵圖的相鄰元素之間具備必定的關聯性,由於相鄰元素與該元素的感覺野有重疊,因此能夠避免對某一特定區域的過擬合(小弟拙見,若是大佬們有更合適的解釋,還請在評論裏給出)。
AlexNet小結:R-CNN的基石,喚醒DNN的跨世紀模型,21世紀深度學習熱潮的導火索,其中的一些Trick給了後來者帶來了諸多啓發。
PS:本文說起的一些概念,如正則化、梯度爆炸、BN、過擬合等等,是一些深度學習領域的常見名詞,怕顯得囉嗦,因此這裏就不做解釋了(明明是由於懶🙃~)
PPS:其實小弟本來的計劃是,從AlexNet到MaskR-CNN的內容做爲一篇綜述寫完,可是發現本身太懶了。。。從上面「精簡」的文字裏就能看出來。。。因此強行把標題改爲了「AlexNet」哈哈哈哈 →_→,後面的內容抽空慢慢補上吧( ̄︶ ̄)↗