1. 程式人生 > >吳恩達系列課程——卷積神經網路(From:網易雲課堂)

吳恩達系列課程——卷積神經網路(From:網易雲課堂)

一.卷積神經網路

1.計算機視覺

圖片分類、圖片識別:給出64*64圖片計算機判斷是否是一隻貓

目標檢測:檢測出圖片中有哪些物體以及他們的位置

風格遷移:圖片融合圖片1的輪廓和圖片2的風格

eg:1000*1000大小的圖片的特徵向量將達到1000*1000*3(RGB 3channels),若使用標準的全連線網路將需要產生數量巨大的權值。。。所以引入卷積神經網路

2.邊緣檢測示例

卷積運算是CNN的基礎,邊緣檢測作為入門學習示例。

垂直邊緣檢測:卷積核(過濾器)[1 1 1;0 0 0;-1 -1 -1] 翻轉即為水平邊緣檢測

Python:cov_forward,tensorflow:tf.nn.cov2d,keras:Conv2D    

Sobel運算元:[1 2 1;0 0 0;-1 -2 -1] 加大中間行權值,增加魯棒性

3.Padding

原圖片n*n,卷積核f*f,卷積後圖片(n-f+1)* (n-f+1)

=>(1)卷積後圖像縮小 (2)邊角的畫素只參與一次卷積,而中間的畫素參與多次(丟失資訊)

=>用0填充原圖片畫素

Valid/same convolutions

Valid:不填充

Same:不改變輸出圖片大小。假設填充p個畫素,則輸出為(n+2p-f+1)* (n+2p-f+1)= n*n

P=(f-1)/2

f通常為奇數

4.卷積步長stride

此時輸出圖片為[(n+2p-f)/s+1]* [(n+2p-f)/s+1]

5.RGB影象上的卷積

(1)

(2)與多個過濾器卷積

n_c為通道數,n_c' 為過濾器數

6.單層卷積網路

7.簡單卷積網路示例

8.池化層(pooling):

最大池化(常用超參:f=2,s=2),池化一般不用padding,池化不用學習引數。

9.卷積神經網路示例:

卷積層和池化層看作一層。隨著神經網路深度的增加,高度和寬度減小(通過卷積和池化),通道數增加(=濾波器數量)。

全連線層(FC):即標準神經網路,輸入與輸出的每個單元連線。

另一種常見的網路形式:多個卷積層後加一個池化層然後再多個卷積層加一個池化層。

二. 深度神經網路例項

1. 經典案例:LeNet-5、AlexNet、VGG。

2. ResNet(殘差網路):跳遠連線,可以構建更深層的網路,解決梯度消失/梯度爆炸的問題。

Inception

3. 遷移學習:使用別人已經訓練過的資料集

(1)當自己只有很小訓練集時,可以下載別人的code+weights(別人預訓練的權重)用作自己初始化,輸出層替換為自己的softmax層(訓練softmax層的權重)

(2)當有很多資料集時,凍結更少的層,後面替換為自己的隱藏層+輸出層

三.目標檢測

1. 目標定位(神經網路輸出的標籤除了類別外還要新增四個標籤,bx,by,bh,bw)

損失函式,分為Y1=1(Pc=1)和Y1=0(Pc=0)兩種情況,Y1=0時只需考慮Y1的平方誤差即可。

2. 特徵點檢測

定義目標物件上的若干特徵點,首先人為標註這些特徵點的座標位置,然後將標註後的圖片放入神經網路中訓練,輸出的標籤為測試圖片的是否存在檢測物件以及特徵點們的座標。進而可以利用這些特徵點座標進行人臉表情分析,姿態分析等。

3. 目標檢測

基於滑動視窗的目標檢測演算法。

將原圖片切割成只含目標的小圖片輸入網路進行訓練,然後在測試圖片上以大小不同的視窗進行滑動檢測每次視窗中是否有目標。

檢測精度&開銷

4.卷積的滑動視窗實現

(1)將全連線層變為卷積層

(2)卷積的滑動視窗實現

對整張圖片進行卷積,一次得到所有預測值。

1.Bounding box 預測(得到更精確的邊界框)

YOLO

2.交併比(IoU):預測邊界框and實際邊界框/預測邊界框or實際邊界框

IoU>=0.5 認為預測正確。

3.非最大值抑制

網格劃分較細時,目標覆蓋的多個網格會對目標進行多次預測和定位。(每個格子都覺得自己裡面有目標),這時p_c表示概率。

4.Anchor boxes

用來處理兩個目標中點落到同一個網格中的情況。根據兩個目標形狀不同設定形狀不同的anchor box。

5.YOLO

設定兩個anchor boxes,將每個網格進行訓練,輸出為3*3*16