吳恩達《深度學習-卷積神經網路》2--深度卷積神經網路
圖中same的意思是用padding填充使輸出影象與輸入影象保持大小一致。AlexNet模型與LeNet-5模型類似,只是要複雜一些,總共包含了大約6千萬個引數。同樣可以根據實際情況使用啟用函式ReLU。原作者還提到了一種優化技巧,叫做Local Response Normalization(LRN)。 而在實際應用中,LRN的效果並不突出
假設a[l]維度(n[l],1),a[l+2]維度是(n[l+2],1),這裡引入一個權重矩陣Ws(n[l+2],n[l]),矩陣可以通過後向傳播學習獲得,也可以是填充值為0的固定矩陣。
5. Networks in Networks and 1x1 Convolutions1)1x1的卷積核/網路中的網路1x1的卷積核對單通道的影象來說意義不大,但是對多通道的資料就會產生神奇的效果,如下圖32個信道,1x1卷積核的作用就是遍歷32個信道的資料,對應元素相乘相加,然後再帶入啟用函式如ReLU中,卷積後得到一個單信道影象,同理也可以通過多個卷積核獲得多幅影象。這種1x1的卷積核也被稱為network in network。下面舉例講述其應用:對於一幅影象,若要壓縮它的高寬,可以通過pooling池化,那麼如果信道數目太多呢,可以用network in network,如下圖,用32個1x1x192的卷積核可以將影象通道從192壓縮到32:總結:network in network其作用就是改變通道數目,可以是減少,也可以是增加。6. Inception Network Motivation1)Inception網路是什麼?CNN中需要決定filter的尺寸,是3x3還是5x5,需不需要增加POOL層,而Inception網路的就是不加選擇的全部選用,然後讓模型來選擇。如上圖Inception Network使用不同尺寸的filters,並加入了POOL,將所有輸出拼接,最後的輸出為28x28x256,然後由神經網路去學習並選擇最好的過濾器組合。2)計算成本Inception Network在提升效能的同時,會帶來計算量大的問題,舉例說明:上圖採用32個5x5x192的filter對原圖進行有填充的same過濾,得到28x28x32的輸出,那麼其計算量就是5x5x192x28x28x32=120m,大約為1.2億,計算量是非常大的,可以結合上一節的1x1的過濾器來減少計算量,如下圖
總計算量變為28x28x16x192+28x28x32x5x5x16=12.4m,減少了90%,經過1x1的過濾器的輸出層通常被稱為“瓶頸層”(bottleneck layer),瓶頸層通常是某個物件的最小部分。問題是這樣做會不會降低系統性能?實驗證明,如果合理設定瓶頸層,則可以實現不影響系統性能的情況下大大減少計算量。
7.Inception Network本節介紹完整的Inception網路1)Inception模組如上圖是一個標準Inception模組,值得一提的是MAXPOOL之後又對通道進行了壓縮。2)Inception網路由Inception模組構成網路,值得注意的是在網路中間的隱藏層也可以做softmax預測,它確保了即使是隱藏層或中間層的單元也參與了特徵的計算,也可以進行不太差的圖片分類(也就是結果預測),而且它對Inception網路起到了正則化(regularizing)的作用,能夠防止過擬合。8. Using Open-Source Implementation本節主要講述如何從GitHub上下載code:比如對resnet感興趣,那麼可以Google輸入resnet github,會搜尋到很多不同的實現,選擇其一開啟會出現一個resnet實現的GitHub資源庫,裡面有詳細的文字描述,點選綠色按鈕download進行下載,會顯示一個地址,copy地址:
然後進行輸入git clone <copy的地址>就可以將code下載到本地硬碟9. Transfer Learning計算機視覺的資料集:ImageNet, MS COCO, Pascal,很多深度學習的研究人員已經用這些資料進行了演算法訓練,你可以下載別人花費好幾周甚至幾個月訓練的開源權重引數,作為初始值放到自己的神經網路上,即去掉最後一層softmax的輸出層,加入自己的softmax輸出層,然後重新訓練引數。1)在訓練引數的時候,如果現有的資料集較小,那麼建議將下載下來的權重引數凍結,也就是保持不變,只訓練最後一層的引數。不同框架對凍結引數的設定不同,有的是freeze=1,有的是trainableParameter=0,但是都支援設定是否訓練某些層。2)若現有的資料集較大,那麼可以少凍結幾層,即凍結前面n層,留下最後的m層跟替換後的softmax一起訓練,或者直接刪掉最後的m層替換成自己的隱藏層,再訓練。
3)如果現有的資料集非常大,那麼可以一層也不凍結,也就是用下載的權重當做初始值,然後替換softmax輸出層之後,重新訓練整個網路。總的規律就是,自己的資料集越大那麼凍結的層數就應該越少,使得能夠訓練的層數越多。
10. Data Augmentation資料增強對於計算機視覺來說,通常都會存在資料不夠的問題,資料增強對此比較有幫助。資料增強的方法:
1)對已有影象進行映象,隨機裁剪,旋轉,扭曲變換等重取樣2)色彩轉換,如給RGB新增不同的失真值,因為光線的變化通常會引起影象顏色的差異,所以這樣做是合理且有效的。對於顏色變換,還可以採用PCA顏色增強(PCA color augmentation),比如某幅影象偏紫色,即RB的值較大,而G的值較小,那麼PCA所做的就是對RB重取樣力度大一些,而對G重取樣力度小一些,使得影象更一致。具體的PCA color augmentation做法可以查閱AlexNet的相關論文。11. State of Computer Vision一般來說,如果data較少,那麼就需要更多的hand-engineering,對已有data進行處理,比如上一節介紹的data augmentation。模型演算法也會相對要複雜一些。如果data很多,可以構建深層神經網路,不需要太多的hand-engineering,模型演算法也就相對簡單一些。在模型研究或者競賽方面,有一些方法能夠有助於提升神經網路模型的效能:
Ensembling整合: Train several networks independently and average their outputs.
Multi-crop at test time: Run classifier on multiple versions of test images and average results.即在測試時對影象進行擴充,具體做法是先映象,然後對原影象分別進行中間、左上角、右上角、左下角、右下角的取樣獲得5幅影象,再對映象後的影象進行同樣操作獲得5幅影象,一共獲得10幅影象,也稱10-crop方法
Use archittectures of networks published in the literature
Use open source implementations if possible
Use pretrained models and fine-tune on your dataset