① 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用)
在 CNN 出現之前,圖像對於人工智慧來說是一個難題,有2個原因:
圖像需要處理的數據量太大,導致成本很高,效率很低
圖像在數字化的過程中很難保留原有的特徵,導致圖像處理的准確率不高
下面就詳細說明一下這2個問題:
圖像是由像素構成的,每個像素又是由顏色構成的。
現在隨隨便便一張圖片都是 1000×1000 像素以上的, 每個像素都有RGB 3個參數來表示顏色信息。
假如我們處理一張 1000×1000 像素的圖片,我們就需要處理3百萬個參數!
1000×1000×3=3,000,000
這么大量的數據處理起來是非常消耗資源的,而且這只是一張不算太大的圖片!
卷積神經網路 – CNN 解決的第一個問題就是「將復雜問題簡化」,把大量參數降維成少量參數,再做處理。
更重要的是:我們在大部分場景下,降維並不會影響結果。比如1000像素的圖片縮小成200像素,並不影響肉眼認出來圖片中是一隻貓還是一隻狗,機器也是如此。
圖片數字化的傳統方式我們簡化一下,就類似下圖的過程:
假如有圓形是1,沒有圓形是0,那麼圓形的位置不同就會產生完全不同的數據表達。但是從視覺的角度來看, 圖像的內容(本質)並沒有發生變化,只是位置發生了變化 。
所以當我們移動圖像中的物體,用傳統的方式的得出來的參數會差異很大!這是不符合圖像處理的要求的。
而 CNN 解決了這個問題,他用類似視覺的方式保留了圖像的特徵,當圖像做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的圖像。
那麼卷積神經網路是如何實現的呢?在我們了解 CNN 原理之前,先來看看人類的視覺原理是什麼?
深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。
1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和TorstenWiesel,以及 Roger Sperry。前兩位的主要貢獻,是「 發現了視覺系統的信息處理 」,可視皮層是分級的。
人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是只氣球)。下面是人腦進行人臉識別的一個示例:
對於不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:
我們可以看到,在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀乾等),到最上層,不同的高級特徵最終組合成相應的圖像,從而能夠讓人類准確的區分不同的物體。
那麼我們可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?
答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。
典型的 CNN 由3個部分構成:
卷積層
池化層
全連接層
如果簡單來描述的話:
卷積層負責提取圖像中的局部特徵;池化層用來大幅降低參數量級(降維);全連接層類似傳統神經網路的部分,用來輸出想要的結果。
下面的原理解釋為了通俗易懂,忽略了很多技術細節,如果大家對詳細的原理感興趣,可以看這個視頻《 卷積神經網路基礎 》。
卷積層的運算過程如下圖,用一個卷積核掃完整張圖片:
這個過程我們可以理解為我們使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。
在具體應用中,往往有多個卷積核,可以認為,每個卷積核代表了一種圖像模式,如果某個圖像塊與此卷積核卷積出的值大,則認為此圖像塊十分接近於此卷積核。如果我們設計了6個卷積核,可以理解:我們認為這個圖像上有6種底層紋理模式,也就是我們用6中基礎模式就能描繪出一副圖像。以下就是25種不同的卷積核的示例:
總結:卷積層的通過卷積核的過濾提取出圖片中局部的特徵,跟上面提到的人類視覺的特徵提取類似。
池化層簡單說就是下采樣,他可以大大降低數據的維度。其過程如下:
上圖中,我們可以看到,原始圖片是20×20的,我們對其進行下采樣,采樣窗口為10×10,最終將其下采樣成為一個2×2大小的特徵圖。
之所以這么做的原因,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數據維度,就進行下采樣。
總結:池化層相比卷積層可以更有效的降低數據維度,這么做不但可以大大減少運算量,還可以有效的避免過擬合。
這個部分就是最後一步了,經過卷積層和池化層處理過的數據輸入到全連接層,得到最終想要的結果。
經過卷積層和池化層降維過的數據,全連接層才能」跑得動」,不然數據量太大,計算成本高,效率低下。
典型的 CNN 並非只是上面提到的3層結構,而是多層結構,例如 LeNet-5 的結構就如下圖所示:
卷積層 – 池化層- 卷積層 – 池化層 – 卷積層 – 全連接層
在了解了 CNN 的基本原理後,我們重點說一下 CNN 的實際應用有哪些。
卷積神經網路 – CNN 很擅長處理圖像。而視頻是圖像的疊加,所以同樣擅長處理視頻內容。下面給大家列一些比較成熟的應用�:
圖像分類、檢索
圖像分類是比較基礎的應用,他可以節省大量的人工成本,將圖像進行有效的分類。對於一些特定領域的圖片,分類的准確率可以達到 95%+,已經算是一個可用性很高的應用了。
典型場景:圖像搜索…
目標定位檢測
可以在圖像中定位目標,並確定目標的位置及大小。
典型場景:自動駕駛、安防、醫療…
目標分割
簡單理解就是一個像素級的分類。
他可以對前景和背景進行像素級的區分、再高級一點還可以識別出目標並且對目標進行分類。
典型場景:美圖秀秀、視頻後期加工、圖像生成…
人臉識別
人臉識別已經是一個非常普及的應用了,在很多領域都有廣泛的應用。
典型場景:安防、金融、生活…
骨骼識別
骨骼識別是可以識別身體的關鍵骨骼,以及追蹤骨骼的動作。
典型場景:安防、電影、圖像視頻生成、游戲…
今天我們介紹了 CNN 的價值、基本原理和應用場景,簡單總結如下:
CNN 的價值:
能夠將大數據量的圖片有效的降維成小數據量(並不影響結果)
能夠保留圖片的特徵,類似人類的視覺原理
CNN 的基本原理:
卷積層 – 主要作用是保留圖片的特徵
池化層 – 主要作用是把數據降維,可以有效的避免過擬合
全連接層 – 根據不同任務輸出我們想要的結果
CNN 的實際應用:
圖片分類、檢索
目標定位檢測
目標分割
人臉識別
骨骼識別
本文首發在 easyAI - 人工智慧知識庫
《 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用) 》
② 為什麼有圖卷積神經網路
本質上說,世界上所有的數據都是拓撲結構,也就是網路結構,如果能夠把這些網路數據真正的收集、融合起來,這確實是實現了AI智能的第一步。所以,如何利用深度學習處理這些復雜的拓撲數據,如何開創新的處理圖數據以及知識圖譜的智能演算法是AI的一個重要方向。
深度學習在多個領域的成功主要歸功於計算資源的快速發展(如 GPU)、大量訓練數據的收集,還有深度學習從歐幾里得數據(如圖像、文本和視頻)中提取潛在表徵的有效性。但是,盡管深度學習已經在歐幾里得數據中取得了很大的成功,但從非歐幾里得域生成的數據已經取得更廣泛的應用,它們需要有效分析。如在電子商務領域,一個基於圖的學習系統能夠利用用戶和產品之間的交互以實現高度精準的推薦。在化學領域,分子被建模為圖,新葯研發需要測定其生物活性。在論文引用網路中,論文之間通過引用關系互相連接,需要將它們分成不同的類別。自2012年以來,深度學習在計算機視覺以及自然語言處理兩個領域取得了巨大的成功。假設有一張圖,要做分類,傳統方法需要手動提取一些特徵,比如紋理,顏色,或者一些更高級的特徵。然後再把這些特徵放到像隨機森林等分類器,給到一個輸出標簽,告訴它是哪個類別。而深度學習是輸入一張圖,經過神經網路,直接輸出一個標簽。特徵提取和分類一步到位,避免了手工提取特徵或者人工規則,從原始數據中自動化地去提取特徵,是一種端到端(end-to-end)的學習。相較於傳統的方法,深度學習能夠學習到更高效的特徵與模式。
圖數據的復雜性對現有機器學習演算法提出了重大挑戰,因為圖數據是不規則的。每張圖大小不同、節點無序,一張圖中的每個節點都有不同數目的鄰近節點,使得一些在圖像中容易計算的重要運算(如卷積)不能再直接應用於圖。此外,現有機器學習演算法的核心假設是實例彼此獨立。然而,圖數據中的每個實例都與周圍的其它實例相關,含有一些復雜的連接信息,用於捕獲數據之間的依賴關系,包括引用、朋友關系和相互作用。
最近,越來越多的研究開始將深度學習方法應用到圖數據領域。受到深度學習領域進展的驅動,研究人員在設計圖神經網路的架構時借鑒了卷積網路、循環網路和深度自編碼器的思想。為了應對圖數據的復雜性,重要運算的泛化和定義在過去幾年中迅速發展。
③ 卷積神經網路工作原理直觀的解釋
其實道理很簡單,因為卷積運算,從頻域角度看,是頻譜相乘所以圖像跟卷積核做卷積時,兩者頻譜不重疊的部分相乘,自然是0,那圖像這部分頻率的信息就被卷積核過濾了。而圖像,本質上就是二維離散的信號,像素點值的大小代表該位置的振幅,所以圖像包含了一系列頻率的特徵。比如圖像邊緣部分,像素值差別大,屬於高頻信號,背景部分,像素值差別小,是低頻信號。所以如果卷積核具有『高通』性質,就能起到提取圖像邊緣的作用,低通則有模糊的效果。所以,卷積神經網路的牛逼之處在於通過卷積層的不同卷積核,提取圖像不同頻段的特徵;以及通過池化層,提取不同粒度的特徵。
④ 卷積神經網路通俗理解
卷積神經網路通俗理解如下:
卷積神經網路(CNN)-結構
① CNN結構一般包含這幾個層:
輸入層:用於數據的輸入
卷積層:使用卷積核進行特徵提取和特徵映射
激勵層:由於卷積也是一種線性運算,因此需要增加非線性映射
池化層:進行下采樣,對特徵圖稀疏處理,減少數據運算量。
全連接層:通常在CNN的尾部進行重新擬合,減少特徵信息的損失
輸出層:用於輸出結果
② 中間還可以使用一些其他的功能層:
歸一化層(Batch Normalization):在CNN中對特徵的歸一化
切分層:對某些(圖片)數據的進行分區域的單獨學習
融合層:對獨立進行特徵學習的分支進行融合
卷積神經網路(CNN)-輸入層
① CNN的輸入層的輸入格式保留了圖片本身的結構。
② 對於黑白的 28×28的圖片,CNN 的輸入是一個 28×28 的二維神經元。
③ 對於 RGB 格式的 28×28 圖片,CNN 的輸入則是一個3×28×28 的三維神經元(RGB中的每一個顏色通道都有一個 28×28 的矩陣)
2)卷積神經網路(CNN)-卷積層
感受視野
① 在卷積層中有幾個重要的概念:
local receptive fields(感受視野)
shared weights(共享權值)
② 假設輸入的是一個 28×28 的的二維神經元,我們定義 5×5 的 一個 local receptive fields(感受視野),即 隱藏層的神經元與輸入層的 5×5 個神經元相連,這個 5*5 的區域就稱之為 Local Receptive Fields,
⑤ CNN(卷積神經網路)是什麼
在數字圖像處理的時候我們用卷積來濾波是因為我們用的卷積模版在頻域上確實是高通低通帶通等等物理意義上的濾波器。然而在神經網路中,模版的參數是訓練出來的,我認為是純數學意義的東西,很難理解為在頻域上還有什麼意義,所以我不認為神經網路里的卷積有濾波的作用。接著談一下個人的理解。首先不管是不是卷積神經網路,只要是神經網路,本質上就是在用一層層簡單的函數(不管是sigmoid還是Relu)來擬合一個極其復雜的函數,而擬合的過程就是通過一次次back propagation來調參從而使代價函數最小。