Ⅰ 神經網路如何識別和編碼性別
神經網路如何識別和編碼性別?我們先來了解什麼是神經網路,兩種可詮釋這個概念,一個是生物神經網路,一個是人工神經網路。生物神經網路一般指生物大腦神經元,細胞和觸點等組成網路,生物產生意識和進行思考行動都依賴於生物神經網路。而人工神經網路是一種模仿動物神經網路行為特徵,用分布式並行信息處理演算法數學模型。人工神經網路在工程與學術界也常簡稱為神經網路或類神經網路。而人們通過分析試驗分析神經信號及其編碼發現,大腦皮層對性別神經編碼也存在著個體差異。他們發現,激活編碼雌性信息神經元能更多地讓雌性間彼此互動,而激活編碼雄性信息神經元能更多地和雄性間去互動。
Ⅱ 如何用神經網路進行語音識別的matlab代碼
給你一個實例,希望通過該例子對實現神經網路應用有一定的了解。
%x,y分別為輸入和目標向量
x=1:5;
y=[639 646 642 624 652];
%創建一個前饋網路
net=newff(minmax(x),[20,1],{'tansig','purelin'});
%模擬未經訓練的網路net並畫圖
y1=sim(net,x);plot(x,y1,':');
%採用L-M優化演算法
net.trainFcn='trainlm';
%設置訓練演算法
net.trainParam.epochs=500;net.trainParam.goal=10^(-6);
%調用相應演算法訓練BP網路
[net,tr,yy]=train(net,x,y);
%對BP網路進行模擬
y1=sim(net,x);
%計算模擬誤差
E=y-y1;MSE=mse(E)
hold on
%繪制匹配結果曲線
figure;
plot(x,y1,'r*',x,y,'b--')
Ⅲ 如何利用神經網路進行車牌識別
需要使用CNN卷積神經網路,可以參考MNIST的方法進行。
Ⅳ 神經網路如何識別和編碼性別
神經網路模擬人腦中的神經元,神經元相互連接。每個神經元接收數據,並將判斷過程中產生的信號傳輸到下一個神經元,該神經元逐層傳輸,最終達到識別的目的,與其他模型不同,神經網路很像模糊統計預測模型。由於這一特點,其適應性非常強。只要有充足的數據和充足的神經元,就可以實現識別,決策,預測等功能。
其實人工神經網路他是一種簡單的數學模型,它將類似於大腦神經突觸連接的結構應用於信息處理。因為在工程和學術界裡面,它也經常被直接稱為神經網路或准神經網路。神經網路是一種操作模型,它由大量的節點或神經元及其相互連接組成,每個節點代表一個稱為激勵函數的特定輸出函數。
Ⅳ 如何快速使用Python神經網路識別手寫字元
CNN卷積神經網路來是一種深度自模型。它其實老早就已經可以成功訓練並且應用了(最近可能deep learning太火了,CNNs也往這裡面靠。雖然CNNs也屬於多層神經網路架構,但把它置身於DL家族,還是有不少人保留自己的理解的)。
Ⅵ 如何快速學習神經網路演算法識別驗證碼
驗證碼都是伺服器生成的圖片,如果是動態的,就是調用servlet生成的,怎麼提取我還不太清楚,不過我想網路上應該會有很多資料。
我現在看的是識別驗證碼的東西,在截取到驗證碼圖片之後,針對這個黑白背景,只有乎明散干擾線的驗證碼。
機器學習之識別簡單驗證碼
時間 2016-10-15 22:46:31 隨風'S Blog
主題 數據挖掘
關於驗證碼識別的文章網上很多圖像識別的大神教程也比較多,不過大多數專業性太強了,對非專業人士讀起來簡直是天書,不過隨著機器學習的普及,一大批機器學習的開源工具出現了,這也算對大多數像我一樣的學渣的福音,由於最近項目中牽扯到了一些機器學習相關的東西,所以自己最近也一直在學習機器相關的東西,這篇驗證碼的識別也算是練手了,本文也算是學習中的筆記,所以文章中難免有一些錯誤,歡迎各路大神指點。
由於本人不是相關專業的,對於文中相關演算法就不會具體去討論了,主要以實戰為目的。
准備工作
主要是用到了一些機器學習開源的框架以及一些輔助工具。
Scikit-Learn 比較有名的Python機器學習模塊歲氏,主要是操作簡單。
Pybrain Python機器學習模塊,主要以神經網路為核心,所有的訓練方法都以神經網路為一個實例。
pytesseract 圖像識別小工具,本文主要是用來預處理訓練樣本的。
PIL Python圖像處理庫。
問題分析
首先在進行具體工作之前,我們得看看我們需要解決的是什麼問題,那麼對於驗證碼識別來說,可以看作一個分類問題,對於數字的圖片驗證碼來說的話,其實就是0-9數字分類的問題,驗證碼識別最難的部分在於怎麼去將驗證碼進行切割成單個字元圖片,當然對於圖片裁剪也就是特徵提取有很多辦法,例如垂直投影法,等距切割法等等,其中等距切割也是比較簡單的,但是對於稍微復雜一點的驗證碼識別時准確率非常低,因為等距切割時將驗證碼按照相同的寬度進行裁剪,對於那些字元寬度大小不一的,就算裁剪出來也不能很好的表示字元的特徵,所以有時候需要先對圖片進行一系列的預處理,例如字元矯正等等,然後再用垂直投影法在x軸和y軸上按照投影的大小進行裁剪。
對於垂直投影法來說的話,最後我們還得考慮訓練集在維度上都同意,由於是非等級切割,所以每個圖片的像素肯定不一樣,所以為了維度統一還得進行填充,總之稍微麻煩一點。
這里主要是以等距切割為例子,因為在操作起來比較簡單,那麼掩碼也是選用0-9的純數字驗證碼來進行識別,驗證碼如下
這樣的圖片看起來的話間距基本上都差不多大,所以在分割時也比較容易,將圖片切成四塊後,就可以拿每一塊去進行訓練識別了。
使用機器學習來進行訓練和識別的話,我們就得考慮特徵選取了,一般驗證碼識別有一套標準的流程,圖片
對於驗證碼識別來說我們關注的不是驗證碼的顏色,而是字元代表的含義,所以在圖片處理時進行灰度化和二值化以及去噪,比如說去掉干擾線,那麼去噪也有相應的演算法來實現,這里不做具體討論,二值化其實就是將圖片呈現出兩種顏色,即非黑即白,這樣的好處是在特徵處理時可以使用0和1來代表黑色和白色,0和1代表什麼顏色取決於個人喜好。
這樣的話將二值化和其它步驟處理後的圖片進行特徵提取,將黑色像素點標記成1,白色像素點標記成0,這樣就可以得到圖片的數值表示,那麼特徵維度就等於圖片像素的大小,最終將圖片按照X軸或者Y軸表示,即將像素的所標記的值合並到一行,例如
1111100000000000010
1110000000000000000
表示成,這樣每張圖片就可以使用一行0和1的數值來表示。
進行特徵提取之後,我們得到了圖片在數學上的表示,那麼下一步就需要進行模型訓練了,由於如上文所述,圖片識別是一個分類問題,所以在機器學習中,我主要採用了兩種模型來進行訓練, SVM支持向量機 和 BP神經網路 來進行模型訓練,SVM使用scikit-learn機器學習包裡面的實現來做,神經網路使用Pybrain來進行實現。
有關SVM和BP神經網路的演算法部分,大家最好還是去網上搜下相關的Paper,這樣你才能知道什麼演算法能解決什麼問題,以及它大概的原理是什麼樣子的,有能力的同學可以去對推導下這兩個演算法。
實踐
在問題分析部分我們已經對驗證碼識別的大概思路有了一個了解,那麼這部分則主要正對上面所述部分進行具體實現。
首先,我們應槐念該明白SVM和神經網路模型演算法是屬於有監督學習,即需要對樣本進行標注,也就是標記每張圖片表示的是那個數字,但是實際遇到的問題是,如果數據量小的話,我們可以進行人工標注,那麼在數據量比較大的情況下,人工標注可能就不太現實了,所以對於圖片來說的話也一樣,你進行切割完成之後你必須得標注這個數字是幾,所以我們需要對切割的圖片進行預處理,也就是打標記,我比較懶,所以我也不會一個個去打標簽,所以這里使用ocr來對切割的圖片進行預分類,ocr在單文字識別上的效果正確率還是可以的,在ocr進行預分類之後,我們只需要去糾正那些分類錯誤的圖片即可,這樣就能大大的減少工作量。
這里實現主要有以下幾個步驟:
圖片採集
圖片預處理(包括圖片切割,二值化以及圖像增強)
圖片的預分類標注以及手動糾錯標注
特徵提取
模型訓練以及預測
圖片採集
圖片採集就比較簡單,不過多的闡述,如下圖代碼所示
將下載到了圖片按照時間戳存到指定位置
圖片預處理以及圖片裁剪
對圖片進行預處理後採用等距切割法對圖片進行切割
裁剪後的圖片如下
圖片預分類
圖片預分類採用pytesseract來對分割的圖片進行預分類,減輕工作量。
具體代碼如下
ocr的分類效果正確率應該在50%以上,剩下的就是對預分類的圖片進行人工糾錯了。
ocr的分類效果圖
人工糾錯和標記後的結果
每個目錄表示一個類別標簽。
特徵提取
特徵提取的具體內容請參考問題分析中,裡面有詳細的說明。
關鍵代碼如下
最終圖片的數學上表示會以記錄在 /Users/iswin/Downloads/yzm/traindata/train_data.txt 中,數據的格式如下圖所示
紅色線框表示一張圖片數值上的表示,最後一個數字0表示該圖片的類型,我是為了方便把標簽追加到最後一行。
SVM模型分類
這里svm的實現使用了scikit-learn來實現,關於scikit-learn的使用去官網看Tutorial就好了,這里需要說一下SVM關於參數選擇的問題,我們都知道SVM支持多個核函數,例如高斯核、線性核、poly以及sgmoid核函數,但是選擇那麼核函數一開始對於不太熟悉的同學怎麼選擇的確是個問題,所以這里使用了scikit-learn的GridSearchCV來對參數進行最優化選擇,經過參數尋優,這里高斯核的最終效果還是不錯的,所以訓練的時候直接使用高斯核來進行訓練。
為了方便預測時的使用,這里對訓練結果使用了joblib模塊來進行持久化。為了簡單對評價模型進行,這里使用了5折交叉驗證來對結果進行檢驗。
最終結果的准確率在:Accuracy: 0.96 (+/- 0.09)
具體代碼如下:
舉個預測的例子,看看效果
BP神經網路模型分類
BP神經網路也稱負反饋神經網路,即按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一,在BP神經網路之後,又出現了在深度學習中應用最廣泛的CNN即卷積神經網路,這幾天也正在學習。
本文使用了三層BP神經網路來對訓練集進行訓練,即輸入層+2層隱含層+輸出層,關於BP神經網路本身這里需要注意的是激活函數的選擇以及對於多分類問題輸出層函數選擇的問題,激活函數主要有sigmod、tanh以及relu,關於怎麼選取激活函數,這塊沒有進行深入了解,一般都是每個激活函數都跑一次,看最終效果。
這里的神經網路模型分類主要是對Pybrain用法的學習以及BP神經網路的基本認識,輸入層使用了LinearLayer即線性輸入層,隱含層使用了SigmoidLayer即激活函數為sigmod的隱含層,輸出層由於是多分類問題,所以使用了SoftmaxLayer,最終在神經網路計算的結果中選取數值最大的那個索引位置就是預測的驗證碼類別,也就是0-9之間的數值。
關於Pybrain的資料除了官方文檔不是特別多,關於構建神經網路的方式提供了兩種方式,一種是 buildNetwork 函數來進行構建,另外一種就是使用 FeedForwardNetwork 函數來進行構建,這里需要注意的是如果使用 FeedForwardNetwork 來進行構建的話,注意要手動給各層加上Bias偏置項,否則結果可能可能非常差,當時我實驗時沒加,半天計算結果不對,最後看了下buildNetwork函數的源代碼才發現沒加Bias項,還有就是需要注意迭代至收斂的步數即函數中的 *maxEpochs=500 ,這個根據情況調整,Pybrain有自己的數據集格式,所以在使用時必須按照它的格式來進行數據的初始化。
這里除了輸入層的維度(即驗證碼的訓練集維度)和輸出是固定的之外,其中隱含層的神經元個數也是可以調整的,具體的感興趣的同學自己去調然後再看下結果。
對模型使用10折交叉驗證進行了簡單評估,錯誤率在Total error: 0.062左右,效果比SVM的差一點,應該通參數調優應該可以提高准確率,不過重在學習。
訓練集樣本: /Users/iswin/Downloads/yzm/traindata/train_data_uniq.txt
主要代碼如下:
舉個例子,來看看預測效果
總結
通過這個小實驗,至少讓我對機器學習和相關演算法大致有了一個了解,同時作為安全人員來說至少知道了如何使用開源的機器學習框架來構架自己的模型,筆記中難免會有錯誤之處,歡迎大家提出意見。
Ⅶ 利用pytorch CNN手寫字母識別神經網路模型識別多手寫字母(A-Z)
往期的文章,我們分享了手寫字母的訓練與識別
使用EMNIST數據集訓練第一個pytorch CNN手寫字母識別神經網路
利用pytorch CNN手寫字母識別神經網路模型識別手寫字母
哪裡的文章,我們只是分享了單個字母的識別,如何進行多個字母的識別,其思路與多數字識別類似,首先對圖片進行識別,並進行每個字母悶梁歷的輪廓識別,然後進行字母的識別,識別完成後,直接在圖片上進行多個字母識別結果的備注
Pytorch利用CNN卷積神經網路進行多數字(0-9)識別
根據上期文章的分享,我們搭建一個手寫字母識別的神經網路
第一層,我們輸入Eminist的數據集,Eminist的數據圖片是一維 28*28的圖片,所以第一層的輸入(1,28,28),高度為1,設置輸出16通道,使用5*5的卷積核對圖片進行卷積運算,每步移動一格,為了避免圖片尺寸變化,設置pading為2,則經過第一層卷積就輸出(16,28,28)數據格式
再經過relu與maxpooling (使用2*2卷積核)數據輸出(16,14,14)
第二層卷積層是簡化寫法nn.Conv2d(16, 32, 5, 1, 2)的第一個參數為輸入通道數in_channels=16,其第二個參數是輸出通道數out_channels=32, # n_filters(輸出通道數),第三個參數為卷積核大小,第四個參數為卷積步數,最後一個為pading,此參數為保證輸入輸出圖片的尺寸大小一致
全連接層,最後使用nn.linear()全連接層進行數據的全連接數據結構(32*7*7,37)以上便是整個卷積神經網路的結構,
大致為:input-卷積-Relu-pooling-卷積
-Relu-pooling-linear-output
卷積神經網路建完後,使用forward()前向傳播神經網路進行輸入圖片的識別
這里我們使用腐蝕,膨脹操作對圖片進行一下預處理操作,方便神經網路的識別,當然,我們往期的字母數字渣稿識別也可以添加此預處理操作,方便神經網路進行預測,提高精度
getContours函數主要是進行圖片中數字區域的區分,把每個數字的坐標檢測出來,這樣就可以 把每個字母進行CNN卷積神經網路的識別,進而實現多個字母識別的目的
首先,螞搜輸入一張需要檢測的圖片,通過preProccessing圖片預處理與getContours函數獲取圖片中的每個字母的輪廓位置
transforms.Compose此函數可以 把輸入圖片進行pytorch相關的圖片操作,包括轉換到torch,灰度空間轉換,resize,縮放等等操作
然後載入我們前期訓練好的模型
由於神經網路識別完成後,反饋給程序的是字母的 UTF-8編碼,我們通過查表來找到對應的字母
字元編碼表(UTF-8)
通過上面的操作,我們已經識別出了圖片中包括的字母輪廓,我們遍歷每個字母輪廓,獲取單個字母圖片數據,這里需要特殊提醒一下 :我們知道EMNIST資料庫左右翻轉圖片後,又進行了圖片的逆時針旋轉90度
這里我們使用cv2.flip(imgRes,1)函數,進行圖片的鏡像,並使用getRotationMatrix2D函數與warpAffine函數配合來進行圖片的旋轉操作,這里就沒有PIL來的方便些
然後,我們對圖片數據進行torch轉換train_transform(imgRes),並傳遞給神經網路進行識別
待識別完成後,就可以把結果備注在原始圖片上
Ⅷ 使用神經網路讓人工智慧能夠識別出動物是在哪一年實現的
神鉛正雀經網路的概念在20世紀40年代就已經出現了,但是直到20世紀80年代才有了實際應用。至於使用神經網路讓人工智慧能夠識別出動物是在哪一年實現的,這個問題不太清楚。因為人工智慧的應用范圍非常廣泛,其中有些應用可能是在很早槐早之前就已經出現了,而有些則可能是在最近幾年清如才得到廣泛應用。可以具體針對某個具體的應用場景進行研究。
Ⅸ 卷積神經網路CNN在圖像識別問題應用綜述(20191219)
這兩天在公司做PM實習,主要是自學一些CV的知識,以了解產品在解決一些在圖像識別、圖像搜索方面的問題,學習的主要方式是在知網檢索了6.7篇國內近3年計算機視覺和物體識別的碩博士論文。由於時間關系,後面還會繼續更新圖片相似度計算(以圖搜圖)等方面的學習成果
將這兩天的學習成果在這里總結一下。你將會看到計算機視覺在解決特定物體識別問題(主要是卷積神經網路CNNs)的基礎過程和原理,但這里不會深入到技術的實現層面。
計算機視覺(Computer vision)是一門研究如何使機器「看」的科學,更進一步的說,就是指用攝影機和計算機代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖像處理,用計算機處理成為更適合人眼觀察或傳送給儀器檢測的圖像。
————維基網路
通常而言,計算機視覺的研究包括三個層次:
(1)底層特徵的研究:
這一層次的研究主要聚焦如何高效提取出圖像對象具有判別性能的特徵,具體的研究內容通常包括:物體識別、字元識別等
(2)中層語義特徵的研究:
該層次的研究在於在識別出對象的基礎上,對其位置、邊緣等信息能夠准確區分。現在比較熱門的:圖像分割;語義分割;場景標注等,都屬於該領域的范疇
(3)高層語義理解:
這一層次建立在前兩層的基礎上,其核心在於「理解」一詞。 目標在於對復雜圖像中的各個對象完成語義級別的理解。這一層次的研究常常應用於:場景識別、圖像摘要生成及圖像語義回答等。
而我研究的問題主要隸屬於底層特徵和中層語義特徵研究中的物體識別和場景標注問題。
人類的視覺工作模式是這樣的:
首先,我們大腦中的神經元接收到大量的信息微粒,但我們的大腦還並不能處理它們。
於是接著神經元與神經元之間交互將大量的微粒信息整合成一條又一條的線。
接著,無數條線又整合成一個個輪廓。
最後多個輪廓累加終於聚合我們現在眼前看到的樣子。
計算機科學受到神經科學的啟發,也採用了類似的工作方式。具體而言,圖像識別問題一般都遵循下面幾個流程
(1)獲取底層信息。獲取充分且清潔的高質量數據往往是圖像識別工作能否成功的關鍵所在
(2)數據預處理工作,在圖像識別領域主要包括四個方面的技術:去噪處理(提升信噪比)、圖像增強和圖像修復(主要針對不夠清晰或有破損缺失的圖像);歸一化處理(一方面是為了減少開銷、提高演算法的性能,另一方面則是為了能成功使用深度學習等演算法,這類演算法必須使用歸一化數據)。
巧擾 (3)特徵提取,這一點是該領域的核心,也是本文的核心。圖像識別的基礎是能夠提取出足夠高質量,能體現圖像獨特性和區分度的特徵。
過去在10年代之前我們主要還是更多的使用傳統的人工特徵提取方法,如PCALCA等來提取一些賀蠢人工設計的特徵,主要的方法有(HOG、LBP以及十分著名的SIFT演算法)。但是這些方法普遍存在(a)一般基於圖像的一些提層特徵信息(如色彩、紋理等)難以表達復雜的圖像高層語義,故泛化能力普遍比較弱。(b)這些禪寬陪方法一般都針對特定領域的特定應用設計,泛化能力和遷移的能力大多比較弱。
另外一種思路是使用BP方法,但是畢竟BP方法是一個全連接的神經網路。這以為這我們非常容易發生過擬合問題(每個元素都要負責底層的所有參數),另外也不能根據樣本對訓練過程進行優化,實在是費時又費力。
因此,一些研究者開始嘗試把諸如神經網路、深度學習等方法運用到特徵提取的過程中,以十幾年前深度學習方法在業界最重要的比賽ImageNet中第一次戰勝了SIFT演算法為分界線,由於其使用權重共享和特徵降采樣,充分利用了數據的特徵。幾乎每次比賽的冠軍和主流都被深度學習演算法及其各自改進型所佔領。其中,目前使用較多又最為主流的是CNN演算法,在第四部分主要也研究CNN方法的機理。
上圖是一個簡易的神經網路,只有一層隱含層,而且是全連接的(如圖,上一層的每個節點都要對下一層的每個節點負責。)具體神經元與神經元的作用過程可見下圖。
在諸多傳統的神經網路中,BP演算法可能是性能最好、應用最廣泛的演算法之一了。其核心思想是:導入訓練樣本、計算期望值和實際值之間的差值,不斷地調整權重,使得誤差減少的規定值的范圍內。其具體過程如下圖:
一般來說,機器學習又分成淺層學習和深度學習。傳統的機器學習演算法,如SVM、貝葉斯、神經網路等都屬於淺層模型,其特點是只有一個隱含層。邏輯簡單易懂、但是其存在理論上缺乏深度、訓練時間較長、參數很大程度上依賴經驗和運氣等問題。
如果是有多個隱含層的多層神經網路(一般定義為大於5層),那麼我們將把這個模型稱為深度學習,其往往也和分層訓練配套使用。這也是目前AI最火的領域之一了。如果是淺層模型的問題在於對一個復雜函數的表示能力不夠,特別是在復雜問題分類情況上容易出現分類不足的弊端,深度網路的優勢則在於其多層的架構可以分層表示邏輯,這樣就可以用簡單的方法表示出復雜的問題,一個簡單的例子是:
如果我們想計算sin(cos(log(exp(x)))),
那麼深度學習則可分層表示為exp(x)—>log(x)—>cos(x)—>sin(x)
圖像識別問題是物體識別的一個子問題,其魯棒性往往是解決該類問題一個非常重要的指標,該指標是指分類結果對於傳入數據中的一些轉化和扭曲具有保持不變的特性。這些轉化和扭曲具體主要包括了:
(1)噪音(2)尺度變化(3)旋轉(4)光線變化(5)位移
該部分具體的內容,想要快速理解原理的話推薦看[知乎相關文章] ( https://www.hu.com/search?type=content&q=CNN ),
特別是其中有些高贊回答中都有很多動圖和動畫,非常有助於理解。
但核心而言,CNN的核心優勢在於 共享權重 以及 感受野 ,減少了網路的參數,實現了更快的訓練速度和同樣預測結果下更少的訓練樣本,而且相對於人工方法,一般使用深度學習實現的CNN演算法使用無監督學習,其也不需要手工提取特徵。
CNN演算法的過程給我的感覺,個人很像一個「擦玻璃」的過程。其技術主要包括了三個特性:局部感知、權重共享和池化。
CNN中的神經元主要分成了兩種:
(a)用於特徵提取的S元,它們一起組成了卷積層,用於對於圖片中的每一個特徵首先局部感知。其又包含很關鍵的閾值參數(控制輸出對輸入的反映敏感度)和感受野參數(決定了從輸入層中提取多大的空間進行輸入,可以簡單理解為擦玻璃的抹布有多大)
(b)抗形變的C元,它們一起組成了池化層,也被稱為欠采樣或下采樣。主要用於特徵降維,壓縮數據和參數的數量,減小過擬合,同時提高模型的容錯性。
(c*)激活函數,及卷積層輸出的結果要經過一次激勵函數才會映射到池化層中,主要的激活函數有Sigmoid函數、Tanh函數、ReLU、Leaky ReLU、ELU、Maxout等。
也許你會抱有疑問,CNN演算法和傳統的BP演算法等究竟有什麼區別呢。這就會引出區域感受野的概念。在前面我們提到,一個全連接中,較高一層的每個神經元要對低層的每一個神經元負責,從而導致了過擬合和維度災難的問題。但是有了區域感受野和,每個神經元只需要記錄一個小區域,而高層會把這些信息綜合起來,從而解決了全連接的問題。
了解區域感受野後,你也許會想,區域感受野的底層神經元具體是怎麼聚合信息映射到上一層的神經元呢,這就要提到重要的卷積核的概念。這個過程非常像上面曾提到的「神經元與神經元的聯系」一圖,下面給大家一個很直觀的理解。
上面的這個過程就被稱為一個卷積核。在實際應用中,單特徵不足以被系統學習分類,因此我們往往會使用多個濾波器,每個濾波器對應1個卷積核,也對應了一個不同的特徵。比如:我們現在有一個人臉識別應用,我們使用一個卷積核提取出眼睛的特徵,然後使用另一個卷積核提取出鼻子的特徵,再用一個卷積核提取出嘴巴的特徵,最後高層把這些信息聚合起來,就形成了分辨一個人與另一個人不同的判斷特徵。
現在我們已經有了區域感受野,也已經了解了卷積核的概念。但你會發現在實際應用中還是有問題:
給一個100 100的參數空間,假設我們的感受野大小是10 10,那麼一共有squar(1000-10+1)個,即10的六次方個感受野。每個感受野中就有100個參數特徵,及時每個感受野只對應一個卷積核,那麼空間內也會有10的八次方個次數,,更何況我們常常使用很多個卷積核。巨大的參數要求我們還需要進一步減少權重參數,這就引出了權重共享的概念。
用一句話概括就是,對同一個特徵圖,每個感受野的卷積核是一樣的,如這樣操作後上例只需要100個參數。
池化是CNN技術的最後一個特性,其基本思想是: 一塊區域有用的圖像特徵,在另一塊相似的區域中很可能仍然有用。即我們通過卷積得到了大量的邊緣EDGE數據,但往往相鄰的邊緣具有相似的特性,就好像我們已經得到了一個強邊緣,再擁有大量相似的次邊緣特徵其實是沒有太大增量價值的,因為這樣會使得系統里充斥大量冗餘信息消耗計算資源。 具體而言,池化層把語義上相似的特徵合並起來,通過池化操作減少卷積層輸出的特徵向量,減少了參數,緩解了過擬合問題。常見的池化操作主要包括3種:
分別是最大值池化(保留了圖像的紋理特徵)、均值池化(保留了圖像的整體特徵)和隨機值池化。該技術的弊端是容易過快減小數據尺寸,目前趨勢是用其他方法代替池化的作用,比如膠囊網路推薦採用動態路由來代替傳統池化方法,原因是池化會帶來一定程度上表徵的位移不變性,傳統觀點認為這是一個優勢,但是膠囊網路的作者Hinton et al.認為圖像中位置信息是應該保留的有價值信息,利用特別的聚類評分演算法和動態路由的方式可以學習到更高級且靈活的表徵,有望沖破目前卷積網路構架的瓶頸。
CNN總體來說是一種結構,其包含了多種網路模型結構,數目繁多的的網路模型結構決定了數據擬合能力和泛化能力的差異。其中的復雜性對用戶的技術能力有較高的要求。此外,CNN仍然沒有很好的解決過擬合問題和計算速度較慢的問題。
該部分的核心參考文獻:
《深度學習在圖像識別中的應用研究綜述》鄭遠攀,李廣陽,李曄.[J].計算機工程與應用,2019,55(12):20-36.
深度學習技術在計算機圖像識別方面的領域應用研究是目前以及可預見的未來的主流趨勢,在這里首先對深度學習的基本概念作一簡介,其次對深度學習常用的結構模型進行概述說明,主要簡述了深度信念網路(DBN)、卷積神經網路(CNN)、循環神經網路(RNN)、生成式對抗網路(GAN)、膠囊網路(CapsNet)以及對各個深度模型的改進模型做一對比分析。
深度學習按照學習架構可分為生成架構、判別架構及混合架構。
其生成架構模型主要包括:
受限波爾茲曼機、自編碼器、深層信念網路等。判別架構模型主要包括:深層前饋網路、卷積神經網路等。混合架構模型則是這兩種架構的集合。深度學習按數據是否具有標簽可分為非監督學習與監督學習。非監督學習方法主要包括:受限玻爾茲曼機、自動編碼器、深層信念網路、深層玻爾茲曼機等。
監督學習方法主要包括:深層感知器、深層前饋網路、卷積神經網路、深層堆疊網路、循環神經網路等。大量實驗研究表明,監督學習與非監督學習之間無明確的界限,如:深度信念網路在訓練過程中既用到監督學習方法又涉及非監督學習方法。
[1]周彬. 多視圖視覺檢測關鍵技術及其應用研究[D].浙江大學,2019.
[2]鄭遠攀,李廣陽,李曄.深度學習在圖像識別中的應用研究綜述[J].計算機工程與應用,2019,55(12):20-36.
[3]逄淑超. 深度學習在計算機視覺領域的若干關鍵技術研究[D].吉林大學,2017.
[4]段萌. 基於卷積神經網路的圖像識別方法研究[D].鄭州大學,2017.
[5]李彥冬. 基於卷積神經網路的計算機視覺關鍵技術研究[D].電子科技大學,2017.
[6]李衛. 深度學習在圖像識別中的研究及應用[D].武漢理工大學,2014.
[7]許可. 卷積神經網路在圖像識別上的應用的研究[D].浙江大學,2012.
[8]CSDN、知乎、機器之心、維基網路
Ⅹ 神經網路在圖像識別中有哪些應用
卷積神經網路有以下幾種應用可供研究:
1、基於卷積網路的形狀識別
物體的形狀是人回的視覺系統分析和識別物答體的基礎,幾何形狀是物體的本質特徵的表現,並具有平移、縮放和旋轉不變等特點,所以在模式識別領域,對於形狀的分析和識別具有十分重要的意義,而二維圖像作為三維圖像的特例以及組成部分,因此二維圖像的識別是三維圖像識別的基礎。
2、基於卷積網路的人臉檢測
卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。
3、文字識別系統
在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。