卷積神經網絡CNN與深度學習常用框架的介紹與使用

2021-02-19 勇哥的機器視覺

一、神經網絡為什麼比傳統的分類器好

1.傳統的分類器有 LR(邏輯斯特回歸) 或者 linear SVM ,多用來做線性分割,假如所有的樣本可以看做一個個點,如下圖,有藍色的點和綠色的點,傳統的分類器就是要找到一條直線把這兩類樣本點分開。

對於非線性可分的樣本,可以加一些kernel核函數或者特徵的映射使其成為一個曲線或者一個曲面將樣本分開。但為什麼效果不好,主要原因是你很難保證樣本點的分布會如圖所示那麼規則,我們無法控制其分布,當綠色的點中混雜幾個藍色的點,就很難分開了,及時用曲線可以分開,這個曲線也會變得非常的扭曲,不僅難以學到,還會出現過擬合的問題。而且作為分開著兩類樣本的特徵的抽取也是一個問題。這也是現在不用的原因。

 2.那神經網絡是怎麼做到的呢?

神經網絡其實就是使用AND和OR操作把樣本點中得那一塊摳出來。正如下圖,最上面的綠色區域的每一個變都可以看成一個線性分類器,把樣本分成正例和負例,那這些分類器做AND操作,得出的結果就是一個綠色的區域,然後把多個綠色的區域再用OR操作。而一個神經元就可以實現AND操作或者OR操作,我們只需要提供樣本,神經網絡就可以自己學到。這也就是它的優點所在。總結起來就是:對線性分類器的『與』和『或』的組合,完美對平面樣本點分布進行分類

二、什麼是卷積神經網絡

卷積神經網絡依舊是層級網絡, 但層的功能和形式做了變化。層級結構可參照下圖

1.層級結構

其層級結構包括:數據輸入層/  Input layer,卷積計算層 / CONV layer, ReLU 激勵層 / ReLU layer,池化層 / Pooling layer,全連接層 / FC layer

(1)數據輸入層/  Input layer

有3種常見的圖像數據處理方式

 去均值:把輸入數據各個維度都中心化到0,也就是算出所有樣本的平均值,再讓所有樣本減去這個均值

歸一化:幅度歸一化到同樣的範圍,比如把樣本數據壓縮到0-1

 PCA/白化:用PCA降維,白化是對數據每個特徵軸上的幅度歸一化

CNN在圖像上的處理往往只有去均值。

 (2)卷積計算層/  CONV layer

它不再是全連接了,而是局部關聯。每個神經元看做一個filter。通過對窗口(receptive field)做滑動操作,filter對局部數據計算

這裡還有3個概念:

深度/depth,在這幅圖中指的3,通常為圖片的rgb3個顏色通道。

 步長/stride:即窗口每次滑動多遠

填充值/zero-padding:為了使滑動窗口正好滑動到邊界,需要在周圍填充0,padding等於幾,就填充幾圈

下面給一個卷積的具體例子:

這個例子的depth為2,因為只有兩個filter,每個顏色通道的上都有一個3*3的滑動窗口,這個窗口裡的值與filter裡的w對應相乘,每個通道上都會得到一個值,把這3個值加起來就得出了Output Volume層值,Filter w0對輸入輸入卷積後得到output volume層的第一個矩陣,filter w2得到第二個。

另外,卷積層有一個特別重要的特點就是參數共享機制,即每個神經元連接數據窗的權重是固定的,可以這樣理解參數共享機制:

固定每個神經元連接權重,可以看做模板,每個神經元只關注一個特性。

它帶來的好處就是需要估算的權重個數減少,例如AlexNet網絡從1億個需要調節的參數減少到3.5w個。

(3)激勵層 (ReLU)

 把卷積層輸出結果做非線性映射

常見的激勵函數有:Sigmoid,Tanh(雙曲正切),ReLU,Leaky ReLU,ELU,Maxout

 Sigmoid:最開始使用的,現在已經基本不用了,因為當x比較大時,它的輸出值都比較接近於1,它的梯度是接近於0,而我們是要要利用梯度取做優化的,這將導致無法完成權重的優化

ReLU:比價常用的激勵函數,它有收斂快,求梯度簡單,較脆弱這些特點,較脆弱的原因是,當x的值小於0後,它任然會出現梯度為0 的結果。

 Leaky ReLU  

             

不會「飽和」/掛掉,計算也很快


指數線性單元ELU:所有ReLU有的優點都有,不會掛,輸出均值趨於0,因為指數存在,計算量略大

Maxout:計算是線性的,不會飽和不會掛,多了好些參數,兩條直線拼接

實際經驗:

1)不要用sigmoid

2)首先試RELU,因為快,但要小心點

3)如果2失效,請用Leaky ReLU或者Maxout

4)某些情況下tanh倒是有不錯的結果,但是很少

(4)池化層 / Pooling layer

它的位置一般是夾在連續的卷積層中間,作用是壓縮數據和參數的量,減小過擬合

(5)全連接層 / FC layer

兩層之間所有神經元都有權重連接,通常全連接層在卷積神經網絡尾部。業界人解釋放一個FC layer的主要目的是最大可能的利用現在經過窗口滑動和池化後保留下的少量的信息還原原來的輸入信息

 (6)CNN的一般結構可歸結為:

1)INPUT  2) [[CONV -> RELU]*N -> POOL?]*M    3) [FC -> RELU]*K 或FC

2.典型的CNN

  LeNet,這是最早用於數字識別的CNN;AlexNet,2012 ILSVRC比賽遠超第2名的CNN,比LeNet更深,用多層小卷積層疊加替換單大卷積層;ZF Net,2013 ILSVRC比賽冠軍;GoogLeNet,2014 ILSVRC比賽冠軍;VGGNet,2014 ILSVRC比賽中的模型,圖像識別略差於GoogLeNet,但是在很多圖像轉化學習問題(比如object detection)上效果奇好

 3.fine-tuning

 (1)何謂 fine-tuning:使用已用於其他目標,預訓練好模型的權重或者部分權重,作為初始值開始訓練

(2)為什麼要fine-tuning:首先自己從頭訓練卷積神經網絡容易出現問題,其次fine-tuning能很快收斂到一個較理想的狀態

(3)怎麼做:一般復用相同層的權重,新定義層取隨機權重初始值,但要注意調大新定義層的的學習率,調小復用層學習率

三、CNN的常用框架

 1.Caffe:源於Berkeley的主流CV工具包,支持C++,python,matlab,Model Zoo中有大量預訓練好的模型供使用

2.TensorFlow:Google的深度學習框架,TensorBoard可視化很方便,數據和模型並行化好,速度快

 3.Torch:Facebook用的卷積神經網絡工具包,通過時域卷積的本地接口,使用非常直觀,定義新網絡層簡單.

四、典型應用

 1.圖像識別與檢索

2.人臉識別

3.性別/年齡/情緒識別

4.物體檢測

五、CNN訓練注意事項

1.用Mini-batch SGD對神經網絡做訓練的過程如下:

不斷循環 :

①  採樣一個 batch 數據( ( 比如 32 張 )

②前向計算得到損失 loss

③  反向傳播計算梯度( 一個 batch)

④  用這部分梯度迭代更新權重參數

2.去均值

去均值一般有兩種方式:第一種是在每個像素點都算出3個顏色通道上的平均值,然後對應減去,如AlexNet。第二種是在整個樣本上就只得到一組數,不分像素點了,如VGGNet。

3.權重初始化

1)用均值為0的高斯函數,隨機取一些點去初始化W。這種初始化方法對於層次不深的神經網絡 OK,深層網絡容易帶來整個網絡( 激活傳遞)的不對稱性

2)當激勵函數是sigmoid函數時,輸入層神經元個數為input,輸出層為output,則輸出層的W可為input和output之間的一個數/input的平方根,公式如下

3)當激勵函數變成當今最為流行ReLu函數時,以上方式又失效了,除以(input/2)的平方根是可以的

 關於Batch Normalization:通常在全連接層後 , 激勵層前做如下操作

它的作用是自動的約束輸出不會發散,導致導致整個網絡的訓練死掉,具體的官方的好處有如下四點:

1)梯度傳遞(計算 )更為順暢 

2)學習率設高一點也沒關係

3)對於初始值的依賴減少了!! 

4)其實這裡也可以看做一種正則化 , 減少了對dropout的需求。

4.Dropout

 這是一種防止過擬合的一種正則化方式,以前的正則化方式是在loss中加上所有的W,但在神經網絡中不可行,因為w的數量太大了,不僅會使loss值很大,也會浪費很多時間在計算w的和上。簡單的理解dropout就是別一次開啟所有學習單元

一個最簡單的實現方式可參照如下代碼所示:

dropout一般在訓練階段使用,在測試或者預測時並不會去dropout,工業上的做法是在輸入的X上乘以P得到X的期望,或者輸入不做變化而是對所有的有dropout層都做X/p

dropout能防止過擬合的的理解方式:

理解一:別讓你的神經網絡記住那麼多東西

理解二:每次都關掉一部分感知器 , 得到一個新模型 , 最後做融合

六.CAFFE的介紹與使用

1.Caffe主要的類/模塊

2.Caffe使用方法

講道理:使用caffe根本不用寫程序,只用命令行就可以了,步驟如下;

① Resize 圖片 , 轉換存儲格式

② 定義網絡結構(編輯 prototxt)

③ 定義 solver (編輯另一個 prototxt

④ 訓練(可以基於已有的權重賦值 , 跑一個腳本 )

第1步:轉化格式

第3步:定義solver

第4步:訓練

關於fine-tuning

 如果層次不變 , 只需修改輸入輸出

如果層次改變 , 添加/ / 刪減層次

fine-tuning技巧/注意點

1)優先學習權放在新加層:每一層都有控制學習率的參數: blobs_lr,一般會把前面層學習率調低,最後新加層調高,你甚至可以freeze前面的層次不動,一般fine-tuning的前期loss下降非常快,中間有個瓶頸期,要有耐心

2)在solver處調整學習率:調低solver處的學習率(1/10, 1/100),記住存儲一下中間結果,以免出現意外

轉載自:

https://www.cnblogs.com/softzrp/p/6724884.html

相關焦點

  • 【深度學習】卷積神經網絡-CNN簡單理論介紹
    前言眾所周知,卷積神經網絡(Convolutional Neural Network, CNN)通常是被用在圖像識別領域的,其實還可以應用於語音識別,文本分類等多個領域。寫這篇文章主要是為了介紹TextCnn文本分類模型,當然也會詳細介紹CNN的具體內容,並輔以相關的案例。
  • 深度學習入門筆記系列 ( 六 ) ——卷積神經網絡(CNN)學習筆記
    卷積神經網絡(CNN)學習筆記本系列將分為 8 篇 。
  • 在深度學習的革命中,談談卷積神經網絡(CNN)
    #掃描上方二維碼進入報名#文章連結:https://my.oschina.net/u/876354/blog/1620906
  • Matlab編程之——卷積神經網絡CNN代碼解析
    deepLearnToolbox-master是一個深度學習matlab包,裡面含有很多機器學習算法,如卷積神經網絡CNN,深度信念網絡DBN,
  • 深度學習入門:淺析卷積神經網絡
    至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。圖像分類是從固定的一組分類中分配輸入圖像一個標籤的任務,在本案例中,我們將以Fashion-MNIST圖像數據集為例,了解並使用不同的神經網絡模型來對其進行分類,並比較不同網絡的預測效果。本案例的學習分為三個部分,首先是目標問題的數據集介紹,了解數據背景是解決問題的重要前提;接著,我們會介紹基本的邏輯回歸模型,在此基礎上引入本案例的核心——卷積神經網絡。
  • 深度學習—應用於機器視覺領域的卷積神經網絡(CNN)簡介
    深度學習通過模擬類似人腦的層次結構建立從低級信號到高層語義的映射,以實現數據的分級特徵表達,具有強大的視覺信息處理能力,因而, 在機器視覺領域,深度學習的代表--卷積神經網絡(Convolutional Neural Network, CNN)得以廣泛應用。
  • 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程乾貨...
    在這個博客中有詳細介紹:一篇文章看懂人工智慧、機器學習和深度學習,我們這裡直接拿出結論:AI:讓機器展現出人類智力機器學習:抵達AI目標的一條路徑深度學習:實現機器學習的技術深度學習從大類上可以歸入神經網絡,不過在具體實現上有許多變化,並不像大家聽到的一樣,覺得這兩個概念其實是同一個東西:從廣義上說深度學習的網絡結構也是多層神經網絡的一種。
  • CNN卷積神經網絡實例(基於pytorch)
    1.關於卷積神經網絡卷積神經網絡(Convolutional Neural Network,CNN) 是一種具有局部連接、權重共享等特徵的深層前饋神經網絡
  • 卷積神經網絡(CNN)綜述
    卷積神經網絡的特點 卷積神經網絡由多層感知機(MLP)演變而來,由於其具有局部區域連接、權值共享、降採樣的結構特點,使得卷積神經網絡在圖像處理領域表現出色。卷積神經網絡相比於其他神經網絡的特殊性主要在於權值共享與局部連接兩個方面。權值共享使得卷積神經網絡的網絡結構更加類似於生物神經網絡。
  • 典型的深度學習算法(一):卷積神經網絡(CNN)
    通過上一篇文章,相信大家對深度學習的概念、原理已經有了大致了解,近期企通查將會對深度學習中的幾種典型算法進行介紹。在深度學習領域中,已經驗證的典型成熟算法有卷積神經網絡(CNN)、循環神經網絡(RNN)、生成對抗網絡(GAN)、深度強化學習(DRL)等,下面企通查將帶領大家對典型的深度學習算法之一——卷積神經網絡(CNN)一探究竟。
  • CNN卷積神經網絡
    CNN卷積神經網絡卷積神經網絡通常包含以下幾種層:卷積層(Convolutional layer),卷積神經網路中每層卷積層由若干卷積單元組成
  • 卷積神經網絡(CNN)介紹與實踐
    - 來源:http://cs231n.github.io/classification/為了「教會」一種算法如何識別圖像中的對象,我們使用特定類型的人工神經網絡:卷積神經網絡(CNN)。他們的名字源於網絡中最重要的一個操作:卷積。卷積神經網絡受到大腦的啟發。
  • 深度學習之CNN簡介
    深度學習概述傳統的機器學習和深度學習一個很重要的差別就是特徵的自動提取。深度學習現在更適合處理一些原始信息的特徵,比如圖片識別,音頻,視頻等。比如圖片可以通過像素作為原始的特徵,通過卷積神經網絡不斷的提取特徵,最後再在這些特徵上進行學習。對於音頻就是通過聲音的聲波作為特徵。
  • 深度學習網絡之CNN
    深度學習的提出:2006年,Hinton提出了深度學習,兩個主要的觀點是:深度學習取得成功的原因:深度學習的思想:深度神經網絡的基本思想是通過構建多層網絡,對目標進行多層表示,以期通過多層的高層次特徵來表示數據的抽象語義信息,獲得更好的特徵魯棒性。
  • 卷積神經網絡(CNN)系列介紹之一
    深度學習領域內有眾多的任務和問題有待解決和改進,比如圖像分類,目標檢測,目標分割,實例分割,圖像超分,圖像去噪,圖像生成,增強學習,系統風險預測等等,但是這些任務雖然多種多樣,都離不開一個關鍵的問題,那就是這些任務基本上都是圍繞基礎網絡進行改進和創新的。深度學習基礎網絡的更迭和變遷是推動深度學習其他領域任務得以進步和提升的原動力。
  • 【阿星的學習筆記(2)】使用Tensorflow實作卷積神經網絡(CNN)
    阿星也是我們手撕深度學習算法微信群的熱心群友!接下來,Lady我也會陸續分享這個微信群裡大家討論的話題。卷積神經網絡(Convolutional neural network,CNN),是一多層的神經網絡架構,是以類神經網絡實現的深度學習,在許多實際應用上取得優異的成績,尤其在影像對象識別的領域上表現優異。
  • 卷積神經網絡小白入門手冊
    學習深度學習,最常接觸到的就是各式各樣的神經網絡了,其中卷積神經網絡是諸多神經網絡中最典型最常用的神經網絡了。本文原始素材來源於freecodecamp博客,經本人翻譯首發於此。希望能幫助到大家!覺得不錯就點個讚,或者關注下我吧,後續我還會分享更多相關的精彩內容。
  • 理解神經網絡:從神經元到RNN、CNN、深度學習
    神經網絡是目前最流行的機器學習算法之一。隨著時間的推移,證明了神經網絡在精度和速度方面,比其他的算法性能更好。並且形成了很多種類,像CNN(卷積神經網絡),RNN,自編碼,深度學習等等。 ReLU函數 在深度學習模型中,修正線性單元(ReLU)是最常用的激活函數。當函數輸入負數時,函數輸出0,對於任意正數x,函數輸出本身。因此它可以寫成f(x)=max(0,x) 其圖像看起來如下:
  • 卷積神經網絡學習路線(五)| 卷積神經網絡參數設置,提高泛化能力?
    數據增強是一門比較大的學問,在分類,檢測,分割中數據增強的方式都有區別,我們可以通過研究優秀的開原始碼實現的數據增強策略來應用到我們自己的任務中。修改損失函數。這方面有大量的工作,如目標檢測中的Focal Loss, GHM Loss,IOU Loss等都是為了提升模型的泛化能力。修改網絡。
  • 卷積神經網絡(CNN)新手指南
    從那時起許多公司開始將深度學習應用在他們的核心服務上,如Facebook將神經網絡應用到他們的自動標註算法中,Google(谷歌)將其應用到圖片搜索裡,Amazon(亞馬遜)將其應用到產品推薦服務,Pinterest將其應用到主頁個性化信息流中,Instagram也將深度學習應用到它們的圖像搜索架構中。