原來CNN是這樣提取影像特徵的。。。
閱讀本文8分鐘就夠了吧?
對於即將到來的人工智慧時代,作為一個有理想有追求的程式設計師,不懂深度學習(Deep Learning)這個超熱的領域,會不會感覺馬上就out了?作為機器學習的一個分支,深度學習同樣需要計算機獲得強大的學習能力,那麼問題來了,我們究竟要計算機學習什麼東西?答案當然是影像特徵了。將一張影像看做是一個個畫素值組成的矩陣,那麼對影像的分析就是對矩陣的數字進行分析,而影像的特徵,就隱藏在這些數字規律中。
深度學習對外推薦自己的一個很重要的點——深度學習能夠自動提取特徵。本文主要介紹卷積層提取特徵的原理過程,文章通過幾個簡單的例子,展示卷積層是如何工作的,以及概述了反向傳播的過程,將讓你對卷積神經網路CNN提取影像特徵有一個透徹的理解。那麼我們首先從最基本的數學計算——卷積操作開始。
1.卷積操作
假設有一個5 *5 的影像,使用一個 3*3 的卷積核(filter)進行卷積,得到一個3*3的矩陣(其實是Feature Map,後面會講),如下所示:
下面的動圖清楚地展示瞭如何進行卷積操作(其實就是簡單的點乘運算):
一個影像矩陣經過一個卷積核的卷積操作後,得到了另一個矩陣,這個矩陣叫做特徵對映(feature map)。每一個卷積核都可以提取特定的特徵,不同的卷積核提取不同的特徵,舉個例子,現在我們輸入一張人臉的影像,使用某一卷積核提取到眼睛的特徵,用另一個卷積核提取嘴巴的特徵等等。而特徵對映就是某張影像經過卷積運算得到的特徵值矩陣。
講到這裡,可能大家還不清楚卷積核和特徵對映到底是個什麼東西,有什麼用?沒關係,畢竟理解了CNN 的卷積層如何運算,並不能自動給我們關於 CNN 卷積層原理的洞見。為了幫助指導你理解卷積神經網路的特徵提取,我們將採用一個非常簡化的例子。
2.特徵提取—"X" or "O"?
在CNN中有這樣一個問題,就是每次給你一張圖,你需要判斷它是否含有"X"或者"O"。並且假設必須兩者選其一,不是"X"就是"O"。理想的情況就像下面這個樣子:
那麼如果影像如果經過變形、旋轉等簡單操作後,如何識別呢?這就好比老師教你1+1等於2,讓你獨立計算1+2等於幾是一個道理,就像下面這些情況,我們同樣希望計算機依然能夠很快並且很準的識別出來:
這也就是CNN出現所要解決的問題。
如下圖所示,畫素值"1"代表白色,畫素值"-1"代表黑色。對於CNN來說,它是一塊一塊地來進行比對。它拿來比對的這個“小塊”我們稱之為Features(特徵)。在兩幅圖中大致相同的位置找到一些粗糙的特徵進行匹配,CNN能夠更好的看到兩幅圖的相似性。
對於字母"X"的例子中,那些由對角線和交叉線組成的features基本上能夠識別出大多數"X"所具有的重要特徵。
這些features很有可能就是匹配任何含有字母"X"的圖中字母X的四個角和它的中心。那麼具體到底是怎麼匹配的呢?如下三個特徵矩陣a,b,c:
觀察下面幾張圖,a可以匹配到“X”的左上角和右下角,b可以匹配到中間交叉部位,而c可以匹配到“X”的右上角和左上角。
把上面三個小矩陣作為卷積核,就如第一部分結尾介紹的,每一個卷積核可以提取特定的特徵,現在給一張新的包含“X”的影像,CNN並不能準確地知道這些features到底要匹配原圖的哪些部分,所以它會在原圖中每一個可能的位置進行嘗試,即使用該卷積核在影像上進行滑動,每滑動一次就進行一次卷積操作,得到一個特徵值。仔細想想,是否有一點頭目呢?
(下圖中求平均是為了讓所有特徵值迴歸到-1到1之間)
最後將整張圖卷積過後,得到這樣的特徵矩陣:
使用全部卷積核卷積過後,得到的結果是這樣的:
仔細觀察,可以發現,其中的值,越接近為1表示對應位置和卷積核代表的特徵越接近,越是接近-1,表示對應位置和卷積核代表的反向特徵越匹配,而值接近0的表示對應位置沒有任何匹配或者說沒有什麼關聯。
那麼最後得到的特徵矩陣就叫做feature map特徵對映,通過特定的卷積核得到其對應的feature map。在CNN中,我們稱之為卷積層(convolution layer),卷積核在影像上不斷滑動運算,就是卷積層所要做的事情。同時,在內積結果上取每一區域性塊的最大值就是最大池化層的操作。CNN 用卷積層和池化層實現了圖片特徵提取方法。
3.反向傳播演算法BP
通過上面的學習,我們知道CNN是如何利用卷積層和池化層提取圖片的特徵,其中的關鍵是卷積核表示圖片中的區域性特徵。
而在現實中,使用卷積神經網路進行多分類獲目標檢測的時候,影像構成要比上面的X和O要複雜得多,我們並不知道哪個區域性特徵是有效的,即使我們選定區域性特徵,也會因為太過具體而失去反泛化性。還以人臉為例,我們使用一個卷積核檢測眼睛位置,但是不同的人,眼睛大小、狀態是不同的,如果卷積核太過具體化,卷積核代表一個睜開的眼睛特徵,那如果一個影像中的眼睛是閉合的,就很大可能檢測不出來,那麼我們怎麼應對這中問題呢,即如何確定卷積核的值呢?
這就引出了反向傳播演算法。什麼是反向傳播,以猜數字為例,B手中有一張數字牌讓A猜,首先A將隨意給出一個數字,B反饋給A是大了還是小了,然後A經過修改,再次給出一個數字,B再反饋給A是否正確以及大小關係,經過數次猜測和反饋,最後得到正確答案(當然,在實際的CNN中不可能存在百分之百的正確,只能是最大可能正確)。
所以反向傳播,就是對比預測值和真實值,繼而返回去修改網路引數的過程,一開始我們隨機初始化卷積核的引數,然後以誤差為指導通過反向傳播演算法,自適應地調整卷積核的值,從而最小化模型預測值和真實值之間的誤差。
舉一個簡單例子。綠色箭頭代表前向傳播,紅色代表為反向傳播過程,x、y是權重引數,L為誤差,L對x、y的導數表示誤差L的變化對x、y的影響程度,得到偏導數delta(x)後,x* = x-η*delta(x),其中η為學習率,從而實現權重的更新。
在此放一個簡單的反向傳播程式碼,python版本,結合程式碼理解BP思想。
連結: https://pan.baidu.com/s/1WNm-rKO1exYKu2IiGtfBKw 提取碼: hwsu
4.總結
本文主要講解基本CNN的原理過程,卷積層和池化層可以提取影像特徵,經過反向傳播最終確定卷積核引數,得到最終的特徵,這就是一個大致的CNN提取特徵的過程。考慮到反向傳播計算的複雜性,在本文中不做重點講解,先作為了解思路,日後專門再講解反向傳播的方法原理。
我們的學習過程也像神經網路一樣,不斷地進行自學習和糾錯,提升自身實力。學無止境,希望本文可以讓你有那麼一點點的收穫。
5.參考
[1] http://www.algorithmdog.com/cnn-extracts-feat?open_source=weibo_search&from=timeline
[2] https://mp.weixin.qq.com/s/G5hNwX7mnJK11Cyr7E5b_Q
[3] https://www.zybuluo.com/hanbingtao/note/485480
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562045/viewspace-2221749/,如需轉載,請註明出處,否則將追究法律責任。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2222062/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CyclicBarrier原來是這樣的
- 原來你是這樣的switch~
- 原來你是這樣的FlutterFlutter
- 原來你是這樣的PromisePromise
- 【Spring】原來SpringBoot是這樣玩的Spring Boot
- 原來JavaScript是這樣執行的JavaScript
- 原來Stable Diffusion是這樣工作的
- JavaScript 中的原型原來是這樣的JavaScript原型
- 原來你是這樣的http2......HTTP
- 原來你是這樣的Websocket--抓包分析Web
- 程式媛眼中的程式猿原來是這樣子的!
- 虛擬偶像的歌聲原來是這樣生成的!
- 探索React Hooks:原來它們是這樣誕生的!ReactHook
- 2. 媽呀,Jackson原來是這樣寫JSON的JSON
- 原來YouTube推薦系統的內幕是這樣……
- CSS 之原來你是這樣子的: first-childCSS
- 大資料解讀:原來你是這樣的Z世代!大資料
- 原來大資料 Hadoop 是這樣儲存資料的大資料Hadoop
- OpenCV特徵提取與影像檢索實現(附程式碼)OpenCV特徵
- 到底是什麼特徵影響著CNN的效能?特徵CNN
- 特徵提取-map特徵
- 影象特徵提取之HoG特徵特徵HOG
- 【火爐煉AI】機器學習050-提取影像的Star特徵AI機器學習特徵
- 特徵模型和特徵-這是什麼?特徵模型
- 關於Socket,看我這幾篇就夠了(三)原來你是這樣的WebsocketWeb
- 【火爐煉AI】機器學習049-提取影像的SIFT特徵點AI機器學習特徵
- config 獲取不了 admin.php 配置的值 原來是這個樣子PHP
- 原來如此!直播原始碼技術是這樣做的,直播互動篇原始碼
- 終於搞懂了!原來 Vue 3 的 generate 是這樣生成 render 函式的Vue函式
- 原來你是這樣子的OpenAI!來看看它背後那些有趣的人和事OpenAI
- 【數字影像處理6】python+opencv使用LBP、HOG提取特徵來分類人臉【更新中】PythonOpenCVHOG特徵
- Yang 提取Cifar-100的特徵特徵
- 模切企業離不開ERP的規範管理,原來是這樣的原因
- 流量特徵提取工具NFStream特徵NFS
- 原來Java的發家史是這麼回事Java
- 適合新手的流程圖軟體是什麼?原來精美的流程圖是這樣畫的流程圖
- 原來 JS 還存在這樣的拆箱轉換JS
- Event Loop 原來是這麼回事OOP