【深度學習筆記】深度學習用于圖片的分類和檢測總結
來自: http://blog.csdn.net//chenriwei2/article/details/41725871
前言: 主要總結一下自己最近看文章和代碼的心得。
1. CNN用于分類:具體的過程大家都知道,無非是卷積,下采樣,激活函數,全連接等。CNN用于分類要求它的輸入圖片的大小是固定的(其實不單單是CNN,很多其它的方法也是這樣的),這是它的一個不足之處之一。目前的大部分CNN都是用來做分類比較多。
2. CNN用于檢測:主要的方法有兩種,細分一下有三種,
第一種最為簡單和暴力的,通過滑動窗口的方法,提取一個固定大小的圖像patch輸入到CNN網絡中,得到該patch的一個類別,這樣得到一個圖片密集的類別得分圖。顯然,這種方法的一個弊端就是運算量太大,如果圖片的分辨率比較的大,就根本無法進行下去,更何況,這還是在沒有考慮圖片多尺度檢測的情況。
第二種方法,在第一種方法的基礎之上,采用了動態規劃的思想,避免了重復計算問題。對于CNN來說,直到第一個全連接層之前,它的輸入圖片大小是可以不固定的,但是有了全連接層之后,就要求輸入大小保持一致,第二種方法是先把任意大小的圖片進行輸入CNN直到第一個全連接層,然后再在它的基礎上進行固定大小的滑動窗口輸入到全連接層中,由于第一個全連接層之前進行了大量的下采樣操作,所以這時候的滑動窗口的數目就大大的減少了,而且前面的卷積操作就要計算一次,沒有重復計算的問題。CNN里面有一個trick就是把訓練好了的用于分類的網絡,把它的全連接層參數轉化為卷積層參數。這樣改造后的CNN就成了全卷積CNN,它的輸入是可以任意的,而它的輸出是patch 的類別得分。這個在Caffe里面有一個例子說明怎么轉換。網址在這里:http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/net_surgery.ipynb
第三種方法,跟前兩種不同的是,它不是采用滑動窗口的方法,而是采用提取子窗口的方法,這種方法最典型的是今年的CVPR2014的R-CNN方法,它先采用一個方法來進行生成1000-2000左右的窗口區域(類似于目標顯著性檢測,但又不同,英文的說法叫Objectness,不好翻譯),然后再把這些窗口歸一化到相同的大小放到CNN里面去做分類。(當然RCNN的方法只是用訓練好了的CNN進行提特征,它還需要進行對每一個類別進行訓練SVM分類器)。顯然這種方法的優點的是比前兩種快,因為分類的窗口少,但是它也有不足就是,它要保證要檢測的目標在這些1000-2000個提取的窗口中的概率要足夠的高,也就是要有比較高的召回率。再者,它要保證這1000-2000個窗口的提取要足夠的快,(在R-CNN中,由于它采用的方法生成窗口很慢,所以實際上整個檢測是比較慢的。)
以上就是我總結的最近學習的一點內容,錯誤之處還請指出。