卷積神經網路(Convolutional Neural Network, CNN) - iT 邦幫忙
文章推薦指數: 80 %
... 法『卷積神經網路』(Convolutional Neural Network, CNN),它可以自動進行『特徵萃取』(Feature Extraction),從而應用在影像辨識及自然語言處理(NLP)上,也因『卷 ...
2018iT邦幫忙鐵人賽
DAY
6
6
AI&MachineLearning
以100張圖理解NeuralNetwork--觀念與實踐系列第
6篇
Day06:處理影像的利器--卷積神經網路(ConvolutionalNeuralNetwork)
2018鐵人賽
neuralnetwork
ai
IcodesoIam
2017-12-1609:32:0858209瀏覽
『自然使用者介面』(NaturalUserInterface,NUI)
這一波的人工智慧在自然使用者介面(NaturalUserInterface,NUI)有突破性的進展,包括影像(Image、Video)、語音(Voice)與文字(Text)的辨識、生成與分析,機器透過這種人類與生俱來的溝通能力,與使用者互動不僅更具親和力,也能對週遭的環境作出更合理、更有智慧的判斷與反應,尤其是,將這種能力附加到產品上,使產品應用發展產生無限的發展潛力,包括無人駕駛車、無人機、智慧家庭(SmartHome)、製造機器人(Robot)、聊天機器人(ChatBot)...等。
從這一篇開始,我們就逐一來探討影像(Image、Video)、語音(Voice)、文字(Text)的相關演算法,之前我們只用10幾行程式辨識阿拉伯數字,就令筆者興奮不已,接下來,介紹另一個演算法『卷積神經網路』(ConvolutionalNeuralNetwork,CNN),它可以自動進行『特徵萃取』(FeatureExtraction),從而應用在影像辨識及自然語言處理(NLP)上,也因『卷積層』(ConvolutionLayer)概念的導入,可以非常有效減輕NeuralNetwork訓練的負載。
卷積神經網路(ConvolutionalNeuralNetwork,CNN)
CNN也是模仿人類大腦的認知方式,譬如我們辨識一個圖像,會先注意到顏色鮮明的點、線、面,之後將它們構成一個個不同的形狀(眼睛、鼻子、嘴巴...),這種抽象化的過程就是CNN演算法建立模型的方式。
卷積層(ConvolutionLayer)就是由點的比對轉成局部的比對,透過一塊塊的特徵研判,逐步堆疊綜合比對結果,就可以得到比較好的辨識結果,過程如下圖。
圖.CNN概念,圖片來源:AnIntuitiveExplanationofConvolutionalNeuralNetworks
卷積層(ConvolutionLayer)
那我們如何從點轉成面呢?很簡單,就是以圖像的每一點為中心,取周遭NxN格的點構成一個面(N稱為KernelSize,NxN的矩陣權重稱為『卷積核』),每一格給予不同的權重,計算加權總和,當作這一點的output,再移動至下一點以相同方式處理,至圖像的最後一點為止,這就是CNN的卷積層(ConvolutionLayer),請參考下圖,CS231n:ConvolutionalNeuralNetworksforVisualRecognition一文的ConvolutionDemo段落,它以動畫的方式說明取樣的方式。
卷積層處理方式與影像處理方法類似,採用滑動視窗(SlidingWindow)運算,藉由給予『卷積核』不同的權重組合,就可以偵測形狀的邊、角,也有去除噪音(Noise)及銳化(Sharpen)的效果,萃取這些特徵當作辨識的依據,這也克服了迴歸(Regression)會受『異常點』(Outliers)嚴重影響推測結果的缺點,好比說一個人的鼻子長了一顆痣,我們也應該能依據形狀辨識出那是鼻子。
圖.卷積層(ConvolutionLayer)運算方式,圖片來源:CS231n:ConvolutionalNeuralNetworksforVisualRecognition
若不引入卷積層,使用單純的隱藏層(Dense),即第二篇的作法,不僅需要很大的記憶體,計算也會耗費很長的時間,我們看一個真實的案例,ImageNet2012挑戰賽的題目,辨識227x227點的全彩圖案,每一點R/G/B各佔24bits,故輸入層單一張圖的資料量就有227x227x72,假設有60,000個樣本,隱藏層輸出1000個變數,那矩陣運算就是(60000,227x227x72)與(227x227x72,1000)的內積,那是一個多麼龐大的矩陣運算。
而卷積層的概念是假設我們在看一張圖時,每個神經元只會接收一小塊區域的反射光線,稱為『感知域』(感知域),也就是說,隱藏層的神經元只會連接上一層『感知域』內的Input(11x11),而不會連接『所有』的Input(227x227),稱之為『局部連接』(LocallyConnected),而非『完全連接』所有Input。
圖.『完全連接』(FullyConnected)vs.『局部連接』(LocalConnected),圖片來源:CS231nConvolutionalNeuralNetworksforVisualRecognition
每個隱藏層的神經元就只跟Input矩陣(11,11)作運算,運算負擔就明顯減輕了,另外,還有一個假設,稱為『共享權值』(Sharedweights),就是每一個『感知域』對下一隱藏層均使用相同的一組權重(WeightMatrix),請參閱下圖,這樣要推估的權重數量減少,又可以減輕運算的負擔,所以,運用卷積層的目的就是針對圖像或語言的特性,簡化計算的過程,進而縮短運算的時間。
圖.『權值共享』(Sharedweights),圖片來源:Whatexactlyismeantbysharedweightsinconvolutionalneuralnetwork?
在使用卷積層函數(Conv1D、Conv2D、Conv3D...)時,我們可以設定濾波器(Filter)的數目,系統在訓練的過程中,就會根據Input圖形,幫我們找出圖中出現的各種形狀濾波器(Filter),例如(+、X、O...),再往下加幾層卷積層,我們就可能找出圖像會包含的各種特徵,例如,眼睛、嘴巴、鼻子等,我們來看卷積四次的濾波器(Filter),圖片來源為https://cs.nyu.edu/~fergus/drafts/utexas2.pdf,第一層只偵測到線,到了第四層,就幾乎得到整個輪廓了。
圖.第一層濾波器(Filter)。
圖.第二層濾波器(Filter)。
圖.第三層濾波器(Filter)。
圖.第四層濾波器(Filter)。
池化層(PoolingLayer)
卷積層之間通常會加一個池化層(PoolingLayer),它是一個壓縮圖片並保留重要資訊的方法,取樣的方法一樣是採滑動視窗,但是通常取最大值(Max-Pooling),而非加權總和,若滑動視窗大小設為2,『滑動步長』(Stride)也為2,則資料量就降為原本的四分之一,但因為取最大值,它還是保留局部範圍比對的最大可能性。
也就是說,池化後的資訊更專注於圖片中是否存在相符的特徵,而非圖片中『哪裡』存在這些特徵,幫助CNN判斷圖片中是否包含某項特徵,而不必關心特徵所在的位置,這樣圖像偏移,一樣可以辨識出來(部分文字引用自卷積神經網路的運作原理一文)。
圖.Max-Pooling,視窗大小為2,『步長』(Stride)也為2的取樣方法,圖片來源:ABeginner'sGuideToUnderstandingConvolutionalNeuralNetworks
結語
透過多層卷積/池化,萃取特徵當作Input,再接至一到多個完全連接層,進行分類,這就是CNN的典型作法,下一篇我們就用CNN來作阿拉伯數字的辨識,看看有甚麼不同,緊接著,我們再介紹兩個CNN應用,說明NeuralNetwork不是只能作分類而已。
弄懂這些概念,對後續實作有很大的幫助,請耐心看完,之後的應用都跟本篇有密切的關聯。
明天見了!!
留言1
追蹤
檢舉
上一篇
Day05:Keras模型、函數及參數使用說明
下一篇
Day07:撰寫第一支CNN程式--比較『阿拉伯數字』辨識力
系列文
以100張圖理解NeuralNetwork--觀念與實踐
共31篇
目錄
RSS系列文
訂閱系列文
401人訂閱
27
Day27:音樂資訊檢索(MusicInformationRetrieval,MIR)
28
Day28:小學生談『生成對抗網路』(GenerativeAdversarialNetwork,GAN)
29
Day29:機器學習的資料處理生命週期
30
Day30:完結篇--MachineLearning工作前景與技能
31
DayN+1:進一步理解『梯度下降』(GradientDescent)
完整目錄
1則留言
0
frankyeh
iT邦新手5級‧
2021-02-1910:02:40
小弟目前也在計算該類問題,參考前輩的文章發現有些不懂,請問227x227x96,96的值如何計算?謝謝
回應
2
檢舉
IcodesoIam
iT邦高手1級‧
2021-02-1910:10:22
檢舉
R/G/B各佔24bit,24*3應為72,已更正,謝謝指教。
R/G/B各佔24bit,24*3應為72,已更正,謝謝指教。
修改
frankyeh
iT邦新手5級‧
2021-02-1910:11:43
檢舉
感謝前輩指點
感謝前輩指點
修改
登入發表回應
我要留言
立即登入留言
iT邦幫忙鐵人賽
參賽組數
1087組
團體組數
52組
累計文章數
20471篇
完賽人數
572人
鐵人賽最新文章
大盤到底能不能攻上一萬八??
gotodie?那個goto到底能不能用啊?
2021/12/12更新
予焦啦!一夢終須醒......
盤點清查與檢測掃描-資通安全健診
[13th][Day23]httpresponseheader(下)
[13th][Day22]httpresponseheader(上)
[13th][Day21]golangcontext
股票怎麼選?掌握這原則,你也能找到強勢股
Gitpush
前往鐵人賽
技術推廣專區
[Day2]抓取每日收盤價
[Day1]基本工具安裝
利用python取得永豐銀行API的Nonce
[Day03]tinyML開發板介紹
永豐金融API測試員
[Day01]在享受tinyML這道美食之前
[Day3]使用ta-lib製作指標
[Day4]函數打包與買進持有報酬率試算
計算API所需要的參數:HashID
計算API所需要的參數:IV
前往鐵人賽
熱門問題
我有一個客戶中了mljx病毒勒索950美金我免費轉讓有人要接嗎?
加班提醒視窗
家中的網路配置
C#超級新手請教一個非常笨的問題
Google相簿背後的系統設計?
切割vlan網段方式
臉書訊息讀取狀態
【已解決】如何安裝舊版本的VS2019
請問目前php8版本的問題
DNS好像怪怪的
IT邦幫忙
站方公告
【2021iThome鐵人賽】登登登!究竟獎落誰家,2021iThome鐵人賽得獎名單正式揭曉
熱門tag
看更多
13th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
2018鐵人賽
javascript
2017鐵人賽
windows
php
python
windowsserver
linux
c#
程式設計
資訊安全
css
vue.js
sql
分享
熱門回答
家中的網路配置
切割vlan網段方式
Google相簿背後的系統設計?
請問目前php8版本的問題
請問大神centos5.5DNSSERVER的DNS檔案在哪個路徑
請問初學laravel要做什麼專案
LinuxCent7OS(文字介面)
C#超級新手請教一個非常笨的問題
關於網頁顯示問題
加班提醒視窗
熱門文章
gotodie?那個goto到底能不能用啊?
予焦啦!一夢終須醒......
2021/12/12更新
第九隻狗勾
第八隻狗勾
軟體工程師從新手到高手的流程
大盤到底能不能攻上一萬八??
【從零開始的C語言筆記】第二十九篇-讀檔&寫檔(1)
CI/CD-Drone五分鐘成為終極工具人
群輝ds920+nas網路儲存設備簡易開箱,滿足家庭影音需求
一週點數排行
更多點數排行
海綿寶寶(antijava)
㊣浩瀚星空㊣(yoching)
居然解出來了(partyyaya)
ccenjor(ccenjor)
japhenchen(japhenchen)
mathewkl(mathewkl)
小山丘(a243318490)
horace_work(horace_work)
juck30808(juck30808)
raytracy(raytracy)
×
At
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{result.label}}
{{result.account}}
關閉
延伸文章資訊
- 1卷積神經網路(Convolutional Neural Network, CNN) - iT 邦幫忙
... 法『卷積神經網路』(Convolutional Neural Network, CNN),它可以自動進行『特徵萃取』(Feature Extraction),從而應用在影像辨識及自然語言...
- 2【AI電腦視覺課程】AI深度學習與影像辨識 影像預處理到深度 ...
本課程全程實作導向,由產業資深講師引領你掌握必會的影像處理技巧,接著教你深度學習卷積神經網絡(Convolutional Neural Networks,CNN)在影像處理的各種應用。完整的範例...
- 3AI深度學習實戰中華行動數位經濟部工業局廣告/ 經濟部工業局 ...
AIOT人工智慧OpenCV影像辨識應用白天職訓課程,Artificial Intelligence ... 了解深度學習的內容,包含常見的CNN與LSTM演算法透過相關的Python pack...
- 4智慧影像辨識的應用 - 科技大觀園
近來人工智慧浪潮席捲全球科技圈,其中最重要的技術之一「深度學習」(Deep Learning)在CNN之父Yann LeCun於1989年發表的全球第一個CNN框架LeNet-5之後,終於在30...
- 5目前超夯的AI 前瞻技術「深度學習」,用手機就可以跟數位替身 ...