課程回顧-Convolutional Neural Networks

爲何卷積層計算量更低

全鏈接的話權重太多git

padding

padding的存在是由於咱們作卷積操做的時候會引起數據急劇減小,padding能夠解決github

Strided convolution

步長的設置問題
p = (n*s - n + f - s) / 2
When s = 1 ==> P = (f-1) / 2算法

多維卷積

卷積層也有長、寬和通道數,其中卷基層的通道數須要和圖像一致windows

LeNet 參數

卷積網絡的好處

參數共享

一個探測器在某個部分有用那麼在另外一個部分也極可能有用網絡

稀疏鏈接

每一層中,每一個輸出值只和部分的輸入有關ide

經典網絡實現

LeNet-5

爲了識別32321

Conv ==> Pool ==> Conv ==> Pool ==> FC ==> FC ==> softmaxsvg

AlexNet


Conv => Max-pool => Conv => Max-pool => Conv => Conv => Conv => Max-pool ==> Flatten ==> FC ==> FC ==> Softmax函數

VGG

ResNet

殘差塊


如上圖,實際上就是在網絡中加入了一些shortcut性能

identity block


這個是保持不變的學習

convolutional block

殘差網絡

就是用了殘差單元的網絡

爲何殘差網絡有用

加入了易於學到的線性映射

Network in Network & 1*1 convolutions

1*1的卷積單元,也叫network in network
這種結構在如下狀況下有用:

  • 咱們想要減小通道數
  • 節省計算量
  • 若是1*1的卷積單元和原來的通道數同樣的話,咱們就可以保持原有的通道數,並作一些非線性的變換。

Inception network motivation

Inception的基本思想是:在網絡的構造中,咱們不是去選擇使用什麼層(好比說是11的卷積仍是33的卷積仍是pooling等),而是把它們都用上,讓算法本身選

很容易想到這個時候計算量會很大,因此通常會採用1*1的卷積層來下降計算量。而且實踐代表這種對於性能影響很小。

GoogleNet

Data Augmentation

圖像可使用翻轉、截取、顏色變換等技巧進行數據加強

Object Detection

幾種技術的的區別

  • classification:對整張圖進行分類
  • localization
    學習出定位
  • detection
    有多個物體,給出定位和類別
  • semantic segmentation
    區分每個像素的類別,全部有重疊的時候咱們沒法分出他們
  • instance segmentation
    不只是給出框,咱們要給出他們的每一個像素,並分開他們

標籤設計

作object detection咱們不光要在標籤給出類別,還要給出bounding box的位置

Y = [
          Pc                # Probability of an object is presented
          bx                # Bounding box
          by                # Bounding box
          bh                # Bounding box
          bw                # Bounding box
          c1                # The classes
          c2
          …
]
  • 損失函數
L(y',y) = {
              (y1'-y1)^2 + (y2'-y2)^2 + … if y1 = 1
              (y1'-y1)^2                        if y1 = 0
        }
  • 通常來講對於機率,咱們用logloss,對於bounding box咱們用MSE

landmark detection

對於某些應用,如人臉檢測的時候,你但願把眼睛位置一塊兒標記出來,這時候就能夠在label中把這些座標也加進去

sliding windows

簡單的說就是你選個窗口大小,而後按照必定重複進行劃窗,選用分類器對這些進行分類,而後合併一些有物體重複的窗,最後選出來最佳的窗格。

對於傳統算法通常選擇線性分類器,這樣的話速度纔夠。可是這樣精度不太好,深度學習則複雜度會過高。因此通常有兩種方案:

  • 採用一種卷積的方式作
  • 壓縮網絡

基於卷積的滑動窗口


本質上就是將傳統卷積網的最後的全鏈接層也換成是卷積層,而後其實就能夠一塊兒把移動窗口作了

Bounding box Prediction


先把圖像分塊,而後每一個地方用上面的卷積滑動窗口預測獲得窗口

Intersection Over Union


IoU,即評價detection的方式,等於交集除以並集
如上圖,紅色的是真實值,紫色的是預測值,而後能夠計算
若是IoU> 0.5就說明表現還不錯

Non-max Suppression

用前面的方法咱們能夠會屢次檢測到同一個物體,這個方法能夠解決這個問題

  • 首先丟棄預測機率小於0.6的結果
  • 若是還有多個box,選擇機率最大的,丟棄前一步中任何IoU小於0.5

若是有多個類別,咱們就須要重複以上屢次

Anchor Box

上面的技巧只能解決單個物體,若是有多個重合的物體就會比較難辦。
anchor box感受上就是把多個單個的box鏈接起來。也可使用聚類的方式來作

YOLO 算法

YOLO算法其實就是綜合用了上面的這些技巧
首先用基於卷積的移動窗口

移除預測機率低的

移除IoU低的

YOLO在識別小物體時效果不是太好

Region Proposal(R-CNN)

其餘的檢測算法還有R-CNN、SSD等

Face Recognition

verification和recognition

verification就是給你一我的和他的id,判斷是否是這我的。recognition就是給一我的的圖片,若是他是庫中k我的之一就輸出其id

One Shot Learning

從這我的的一張圖片就可以學習出識別他的系統。這個實際上是基於類似度函數。即我經過一個網絡抽取特徵(這個網絡是提早訓練好的),而後比較新來的人的特徵和這裏的是否是吻合。也能夠直接預訓練一個分類器

Siamese Network

Triplet Loss

給定三個圖片A(目標圖片)、P(正樣本)、N(負樣本)
L(A, P, N) = max (||f(A) - f(P)||2 - ||f(A) - f(N)||2 + alpha , 0)

Face Verification and Binary Classification

獲得特徵算距離

風格遷移

這個問題其實有兩方面意義:

  • 至關於神經網絡能夠作「創做」
  • 能夠從這個理解到卷積層的特徵是什麼樣的

這裏的損失函數是經過style cost function和content cost function

content loss

用來衡量生成的圖像G和原始內容提供圖像C之間的不一樣,這裏經過訓練好的神經網絡來衡量兩個圖像content的類似度。其基本想法是,神經網絡的每一層能夠提取圖像的一些特徵,那麼我用圖片在某一層的激活值就能夠表示圖像的內容。而後兩個圖像C和G都通過這個神經網絡取同一層就能夠了(這裏通常是取中間層的結果,我猜想是太淺的話不能抓住足夠的信息,太深的話就過於細節化了而不會和風格遷移;而後最終通常也是算幾層取個加權平均,而在content裏面則不會取平均)。最後loss表示爲:

(1) J c o n t e n t ( C , G ) = 1 4 × n H × n W × n C all entries ( a ( C ) a ( G ) ) 2

style loss

用來衡量生成的圖像G和風格提供圖像S之間的風格的不一樣。基本思想是首先對於每一幅圖構建一個 style matrix(數學上叫作Gram matrix),而後比較這兩個matrix的差距,計算公式以下

(2) J s t y l e [ l ] ( S , G ) = 1 4 × n C 2 × ( n H × n W ) 2 i = 1 n C j = 1 n C ( G i j ( S ) G i j ( G ) ) 2

Keras

模型的構建遵循:Create->Compile->Fit/Train->Evaluate/Test

Reference

https://github.com/mbadry1/DeepLearning.ai-Summary



相關文章
相關標籤/搜索