神經網路入門(二)卷積網路在影像識別的應用

liyaohhh發表於2015-12-20

卷積的概念





      線性濾波可以說是影像處理最基本的方法,它可以允許我們對影像進行處理,產生很多不同的效果。做法很簡單。首先,我們有一個二維的濾波器矩陣和一個要處理的二維影像。然後,對於影像的每一個畫素點,計算它的鄰域畫素和濾波器矩陣的對應元素的乘積,然後加起來,作為該畫素位置的值。這樣就完成了濾波過程。具體地說一個濾波器就是一個n*n的矩陣,和對應的影像進行卷積,可以得到影像的大致特徵,例如這個濾波器可以得到右偏45度特性的等等。下圖就是濾波器的操作。
                                                               
        對影像和濾波矩陣進行逐個元素相乘再求和的操作就相當於將一個二維的函式移動到另一個二維函式的所再位置。這個操作叫做卷積操作或者協相關,但是要注意的是,協相關需要先對卷積核進行180度的反轉。這兩個操作是屬於線性相關的,具有平移不變性,也就是說,影像的A到影像B,影像B的操作是影像A中相鄰畫素經過濾波器加和得到的。對於濾波器,簡單的說幾點,每一個濾波器最好是奇數*奇數,因為只有這樣,才可以找到中心點,濾波器的元素之和是1,意味著影像的亮度在變換前後沒有太大的變化,如果大於1,影像就會變亮,否則就會變暗。對於濾波之後的結果,可能出現大於255或者小於0的,我們把它當做0或者255來描述。這裡僅僅介紹了簡單和卷積操作,其他的例如影像的銳化,邊緣檢測等等,參考大神的部落格




卷積神經網路的簡單介紹




          有一段時間,神網路出現很不受歡迎,因為神經網路可以做到的事情,SVM,邏輯迴歸,隨機森林都可以搞定,這些演算法的思想簡單理解,也不容易出現過擬合。但是神經網路就有所不同了,他雖然可以摸你任何的連續性的函式,但是也僅僅是一層隱含層,它容易過擬合併且計算速度慢耗時間,就不受到歡迎。知道科學家開始慢慢的研究貓的視網膜和神經突觸的關係之後,慢慢的神經網路就開始復活了,變得如此的牛掰deep learning就是從它引申出來的。深度學習領域最早開始的莫過於卷積神經網路在影像識別領域的應用。我們在認識他之前,先來看看這玩意兒是如何工作的。如下圖所示。
                                   



            如上圖所示,是一個簡單的影像識別的案例。在這裡前面的CONV就是卷及操作  ,我們可以簡單的理解成為在一幅圖影像上用了10個卷積核從而產生了第一層,REUL就是max(0,thresh)函式,就是說,大於thresh的就是255,否則就是0。POOL操作就是把上一層的結果進行放縮,例如把上一層的2*2鄰域內的畫素相加,加biase,作用於sigmoid函式之後的結果。之後我們會來詳細的探討這些操作。最後呢有一個softmax迴歸。就是對應於邏輯迴歸,softmax可以是多分類器。會發現是一個汽車的概率最大了,我們認為這個輸入的圖片就是汽車。哈哈,就是這麼神奇。



卷積網路的各個概念介紹



        卷積操作





              哈哈,這裡,我們來看看上面說的那些概念都是啥東西。我們都從最簡單的案例來看看。

            
 
             

        區域性感受野:


                上面左邊的那個圖片:輸入時32*32*3的輸入畫素,是一個3d影像,首先看看,如果卷及操作上去就連線輸入圖片的全部神經元(一個畫素叫做一個神經元)是不切實際的,這個和實際也還是相符的,我們人觀察事物都是從區域性的特徵去抽取麻,但是需要注意的是,這個卷及操作一下對應的三個維度的操作。例如,輸入32*32*3的畫素,我們的濾波器是5*5的卷積核,每一個卷基層上有對應5*5*3個權重,也就是說你一下應該對應的是5*5*3的3維的畫素區域,而不是5*5的區域,懂了吧,哈哈。每一5*5的濾波器我們認為有25個權重值。右邊的那個圖片大家很熟悉吧,他應該是對應的POOL操作的。
        

      空間對映

                  上面我們討論瞭如何進行卷積操作,這裡來談談輸入的畫素和輸出畫素的之間的對應關係是怎樣的。這裡我們用W表示輸入圖片的大小,S代表卷積核每次滑動的步長,F代表卷積核的大小,P代表0邊界填充大小。我們用公式(WF+2P)/S+注意:當計算的數值不是整數的時候代表步長選擇的有問題。 
            
      看上圖,區域性感受野的大小就是3,輸入的畫素的大小是5,用來填充邊界的0的個數是1,卷積
核滑動的步長是1,可以得到最終的結果是5。再看看右邊的這個圖,他和左面的區別就是右邊這個圖卷積核
的滑動的步長是2。注意啦,滑動步長位3是不允許滴。PS,LZ認為,滑動步長位1是最好的,因為,這個1和
邊界補充的0的格式剛好抵消,使得影像的真正大小並沒有發生變化,對吧。


        引數共享

                    
                         引數共享是解決卷積網路中引數過多的一個機制,我們來看看。假如有一張大小為55*55*96=290,400畫素
的神經元,每一個卷積核有11*11*3=363個權重引數和1個biase,這種情況下中共有290,400*363=105,705,600個引數,這也太多了吧。僅僅在第一個卷基層就有這麼多的引數,太多了。我們可以讓每55*55的平面都具有相同的卷積核,那麼就有96*11*11*2=38,848個卷積核,或者加上96個biase總計34,944個引數。這裡引數減少也對反向傳播的時候計算有利。注意:引數共享機制並不是萬能的,當我們僅僅想識別一幅影像中的人臉買我們需要不同的卷積核去處理,應該用眼部的卷積核和頭髮的卷積核等等來處理。說了這麼多我們來直觀的看看。





        說道這裡我們僅僅是闡述了在卷積方面的操作,下篇文章我們再來探討其他的細節。

 

                   














相關文章