『壹』 鍗風Н鍦ㄥ疄闄呯敓媧諱腑鏈夊摢浜涘簲鐢ㄥ憿錛
鍗風Н鍦ㄥ疄闄呯敓媧諱腑鏈夊緢澶氬簲鐢錛屼互涓嬫槸涓浜涗緥瀛愶細
6. 鍖誨﹀獎鍍忓勭悊錛氬嵎縐鍙浠ョ敤浜庡尰瀛﹀獎鍍忓勭悊錛屽侰T鎵鎻忋丮RI鎵鎻忕瓑銆
『貳』 一文看懂卷積神經網路-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(基本原理+獨特價值+實際應用) 》
『叄』 鍗風Н紲炵粡緗戠粶鍦ㄥ浘鍍忓垎綾諱腑鐨勫簲鐢
鍗風Н紲炵粡緗戠粶鍦ㄥ浘鍍忓垎綾諱腑鐨勫簲鐢ㄩ潪甯稿箍娉涗笖鏁堟灉鏄捐憲銆
棣栧厛錛岃佷簡瑙e嵎縐紲炵粡緗戠粶鍦ㄥ浘鍍忓垎綾諱腑鐨勫簲鐢錛岄渶瑕佹槑鐧藉嵎縐紲炵粡緗戠粶錛圕onvolutional Neural Network錛岀畝縐癈NN錛夋槸涓縐嶆繁搴﹀︿範妯″瀷錛岀壒鍒閫傚悎澶勭悊鍥懼儚鐩稿叧鐨勪換鍔★紝濡傚浘鍍忓垎綾匯佺洰鏍囨嫻嬬瓑銆傚畠鐨勪富瑕佷紭鐐規槸鑳借嚜鍔ㄦ彁鍙栧浘鍍忕殑鐗瑰緛錛岃屾棤闇鎵嬪姩璁捐$壒寰佹彁鍙栧櫒銆傚湪鍥懼儚鍒嗙被涓錛岃繖涓鐗規т嬌寰桟NN鑳藉熸樉钁楁彁楂樻ц兘銆
鍏舵★紝鍗風Н紲炵粡緗戠粶鍦ㄥ浘鍍忓垎綾諱腑鐨勫簲鐢ㄤ富瑕佽〃鐜板湪鍚勭嶆ā鍨嬪拰鏋舵瀯涓錛屼緥濡侺eNet銆丄lexNet銆乂GGNet銆丟oogleNet銆丷esNet絳夈傝繖浜涙ā鍨嬪湪鍚勭被鍩哄噯嫻嬭瘯錛堝侷mageNet錛変腑琛ㄧ幇鍑鴻壊錛屾瀬澶у湴鎺ㄥ姩浜嗗浘鍍忓垎綾繪妧鏈鐨勫彂灞曘備婦渚嬫潵璇達紝AlexNet鍦2012騫寸殑ImageNet鎸戞垬璧涗腑澶ф斁寮傚僵錛岃嚜姝ゅ嵎縐紲炵粡緗戠粶鍦ㄥ浘鍍忓垎綾諱腑鐨勫簲鐢ㄥ紑濮嬪緱鍒板箍娉涘叧娉ㄣ
鏈鍚庯紝鍗風Н紲炵粡緗戠粶鐨勫簲鐢ㄤ笉浠呴檺浜庝笂榪扮殑澶у瀷妯″瀷銆傝冭檻鍒拌$畻璧勬簮鍜屾晥鐜囩殑闂棰橈紝杞婚噺綰х殑CNN妯″瀷錛堝侻obileNet銆丼huffleNet絳夛級涔熻寮鍙戝嚭鏉ワ紝鐢ㄤ簬鍦ㄦ墜鏈虹瓑杈圭紭璁懼囦笂榪涜屽浘鍍忓垎綾匯傝繖浜涙ā鍨嬪湪淇濇寔杈冮珮鍒嗙被綺懼害鐨勫悓鏃訛紝闄嶄綆浜嗚$畻澶嶆潅搴﹀拰妯″瀷澶у皬錛屼嬌寰桟NN鍦ㄦ洿澶氬満鏅涓寰椾互搴旂敤銆
鎬葷粨鏉ヨ達紝鍗風Н紲炵粡緗戠粶鍦ㄥ浘鍍忓垎綾諱腑鐨勫簲鐢ㄦ槸娣卞害瀛︿範棰嗗煙鐨勯噸瑕侀儴鍒嗐傚畠鐨勮嚜鍔ㄧ壒寰佹彁鍙栬兘鍔涘拰鍚勭嶆ā鍨嬫灦鏋勭殑鐏墊椿鎬э紝浣垮緱瀹冨湪鍥懼儚鍒嗙被浠誨姟涓鍙栧緱浜嗘樉钁楃殑鎴愬姛銆傛棤璁烘槸鍦ㄥぇ瑙勬ā鐨勬湇鍔″櫒絝錛岃繕鏄鍦ㄥ皬瑙勬ā鐨勮竟緙樿懼囩錛屽嵎縐紲炵粡緗戠粶閮藉彂鎸ョ潃閲嶈佷綔鐢錛屾帹鍔ㄤ簡鍥懼儚鍒嗙被鎶鏈鐨勫彂灞曞拰搴旂敤銆