已經很久沒有更新內容了,今天抽空來給大家分享一些關於計算機視覺領域的一個重點,那就是 “深度學習”,接下來就來詳細聊聊深度學習(為什麼要深度學習特徵???),然後來說說深度網絡的搭建,最後讓我們自己用手 DIY 屬於自己的網絡,現在就開始 ing......
介紹
一說起 “深度學習”,大家有想過為什麼要去搭建複雜網絡,去學習更高級的特徵呢?其實很簡單,因為趨勢是朝著類腦那個大方向,現在類腦工作已經得到很多研究員的關注。
類腦計算實際上存在兩個技術層面:第 1 層面是 “走出諾依曼框架”,主要屬於人工神經網絡的大範疇;第 2 層面是 “基於神經科學的計算機算法”,試圖超越人工神經網絡框架和擺脫權值計算模型,實現對生物腦的高逼真性模擬。所以歐盟都已經聯合開始研究人腦,都成立一個叫 “人類腦計劃”,美國也開始關注類腦。所以類腦計算這個方向是前途無量的。
第 1 類
主要有歐盟的 “人類腦計劃” 和美國的 “BRAINs” 計劃,雖然技術路徑不同,但都是從生物腦的微觀層面的實驗數據和知識入手,通過逐漸整合,向上尋找中觀和宏觀層面上的數量關係規律,最終建立起整體的腦理論模型。該類方法的特點是 “自下而上”,一場大規模的微觀海量的數據和碎片化的實驗知識的 “拼圖工程”。首先發展高尖端技術工具,以實現對腦的微觀的結構和功能的全面測量和記錄;然後建立起全腦微觀數據庫;在此基礎上,逐漸向大規模的腦計算模型上發展,並試圖形成對腦活動、腦病變和腦智能的機制性解讀的整體理論;最後形成比較成熟的類腦計算技術和類腦人工智能。這種研究屬於長週期的大科學或大工程,需要動員大量人力物力和財力。
第 2 類
研究方法的特點是 “自上而下”。直接將研究重心放在一個 “好的” 腦理論的建造上,然後向下導出神經元模型和神經元群體網絡模型;之後測試和檢驗模型與微觀神經知識和數據之間的契合度。這種研究的關鍵在於怎樣找到正確的理論入手點,這一步不是單純的建模方法問題,也不是一般的學科性理論問題,而是若干個重要學科的理論進程中的匯合點上的再綜合,屬於科學大週期性的結晶過程。這種研究屬於長週期和 “形而上” 的小科學。目前,採用第 2 類方法的主要有美國 Numenta 公司和中國的神經深構造運算與腦計 算 機 實 驗 室(Neural Deep Structure Computing & MindComputer Lab,Mindputer Lab),兩個實驗室技術路徑雖異,但總體方法都是先從全腦角度來建立理論框架,然後將理論逐漸地向下細化,導出中觀和微觀的計算模型,之後再檢驗與微觀層面的實驗數據和知識的互恰性。
各有利弊
兩類研究方法各有利弊,第 1 類方法就像在萬米懸崖峭壁貼身攀巖,向上的每一步很費時且充滿未知。因為,從海量的數據中去試圖進行全腦網絡的微觀拼圖,是一個大隨機性的事件,即使有超級計算機或其他先進微觀技術的幫助,歐美兩個腦項目的 10 年計劃時間是遠遠不夠的。而第 2 類方法更像是空中傘降,難點在降落傘上,只要降落傘做得好,則向下定點降落的時間和複雜度比攀巖小的多。科學史已經證明,一個好的理論是大大削減科學探險隨機性風險的銳利刀具。
有點說偏了,今天我們主要來說說深度學習這些事!
為什麼要深度學習?
先來一個簡單的例子:
這都是底層特徵的可視化,說明底層特徵也只能學習一些基礎的紋理等特徵,但是如果達到人腦的視覺感知,就必須要學習更高級的高層語義特徵。所以才會出現更深更復雜的網絡,可以理解為挖掘更高層的語義特徵來進行目標的表示。如下:
什麼才是深度學習?
一般會有:1)組合模型;2)端到端的學習(End-to-End)。
學習
從具體 ------------------------> 抽象
1)組合模型
猶如上面的流程圖,充分說明了模型的組合學習。
2)End-to-End
下面兩個鏈接是前期推送的內容,充分表明了網絡的端到端學習過程。
深度學習 --- 反向傳播的具體案例
神經網絡介紹—利用反向傳播算法的模式學習
接下來參考了 “slide credit Marc’aurelio Ranzato,CVPR ‘14 tutorial”
下面這個鏈接也詳細介紹了 CNN 的演變與改進:
深度網絡的 “從古至今” 的蛻變
框架
深度學習發展迅速,隨之不同的框架也大量湧現出來。
Torch7
NYU
scientific computing framework in Lua
supported by Facebook
Theano/Pylearn2
U. Montreal
scientific computing framework in Python
symbolic computation and automatic differentiation
Cuda-Convnet2
Alex Krizhevsky
Very fast on state-of-the-art GPUs with Multi-GPU parallelism
C++ / CUDA library
TF(大家很熟悉了,不詳細介紹)
等等。
因為我入門到現在一直用 Caffe,所以今天節詳細說說這個框架。
原因(參考):
Expression: models + optimizations are plaintext schemas, not code.
Speed: for state-of-the-art models and massive data.
Modularity: to extend to new tasks and settings.
Openness: common code and reference models for reproducibility.
Community: joint discussion and development through BSD-2 licensing.
Pure C++ / CUDA architecture for deep learning
Command line, Python, MATLAB interfaces
Fast, well-tested code
Tools, reference models, demos, and recipes
Seamless switch between CPU and GPU
網絡(Net)
一個網絡是由一組不同層連接而成:
name: "dummy-net"
layers{name: "data" …}
layers {name: "conv" …}
layers {name: "pool" …}
… more layers …
layers {name: "loss" …}
LeNet:
層(Layer)
name: "conv1"
type: CONVOLUTION
bottom: "data"
top: "conv1"
convolution_param {
num_output: 20
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
}
Protobuf
網絡(Net)和層(Layer)就是通過 Protobuf來定義的。
Blob
Caffe 源碼 ---Blob 基本使用
Solving:訓練一個網絡
train_net: "lenet_train.prototxt"
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
max_iter: 10000
snapshot_prefix: "lenet_snapshot"
如果你需要 GPU 訓練:
caffe train -solver lenet_solver.prototxt -gpu 0
最後舉一些流行的例子,有興趣的朋友可以自己動手去 DIY。
目標檢測
R-CNN: Regions with Convolutional Neural Networks
http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/detection.ipynb
Full R-CNN scripts available at https://github.com/rbgirshick/rcnn
視覺風格識別
Karayev et al. Recognizing Image Style. BMVC14. Caffe fine-tuning example.
Demo online at http://demo.vislab.berkeleyvision.org/
場景識別
http://places.csail.mit.edu/
微調(Fine-tuning)
輸入:不同的源文件;
最後一層:不同的分類器。
如何成為一名成功的 “煉丹師”——DL 訓練技巧
今天就到這裡,希望可以給需要的朋友一帶來一些幫助,謝謝!
雷鋒網按:本文原作者Edison_G,本文原載於其微信公眾號計算機視覺戰隊(ID: ComputerVisionGzq)。計算機視覺戰隊成立於2017年,主要由來自於大學的研究生組成的團隊,目前已得到較大關注與支持,該平臺從事機器學習與深度學習領域,主要在人臉檢測與識別,多目標檢測研究方向。每日通過計算機視覺平臺分享最近的成果,分析現在流行的模型、算法與思路。