圖像的處理原理:CNN(卷積神經(jīng)網(wǎng)絡(luò))的實(shí)現(xiàn)過程
了解一定的技術(shù)原理,對產(chǎn)品經(jīng)理而言是有益處的。本文講述的圖像處理的基本思路,希望大家能夠?qū)Ξ?dāng)前圖像處理技術(shù)有一定了解。
現(xiàn)在有個(gè)概念叫泛產(chǎn)品經(jīng)理,這個(gè)概念本身是好的,核心說的是產(chǎn)品思維,但是在工作上我認(rèn)為還是有一定誤導(dǎo)性。產(chǎn)品經(jīng)理在工作中要突出自己的核心價(jià)值與職業(yè)壁壘,如果無法構(gòu)建良好的職業(yè)壁壘,就會(huì)面臨中年危機(jī)帶來的挑戰(zhàn)。
人工智能相對的技術(shù)內(nèi)容是塑造職業(yè)壁壘的有力武器,并非要求產(chǎn)品經(jīng)理能夠自己寫代碼開發(fā)產(chǎn)品,而且在了解技術(shù)原理后,能夠?qū)I(yè)務(wù)快速高效的轉(zhuǎn)化為可實(shí)施的產(chǎn)品問題,對于人工智能相關(guān)的產(chǎn)品更加重要。所有了解一定的技術(shù)原理,對產(chǎn)品經(jīng)理而言是有益處的。本文講述的圖像處理的基本思路,希望大家能夠?qū)Ξ?dāng)前圖像處理技術(shù)有一定了解。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)是一種前饋神經(jīng)網(wǎng)絡(luò),是當(dāng)今圖像處理的主流技術(shù)。說起CNN卷積網(wǎng)絡(luò),不得不說2012 年Alex Krizhevsky 憑借它們贏得了那一年的 ImageNet 大賽(由斯坦福大學(xué)李飛飛發(fā)起的世界級(jí)人工智能大賽),AlexNet將圖像分類誤差記錄從 26% 降低到 15%,之后很多公司開始將深度學(xué)習(xí)作為的核心技術(shù)發(fā)展。Facebook、谷歌、亞馬遜等知名公司都利用卷積網(wǎng)絡(luò)進(jìn)行圖像識(shí)別,商品推送等工作。
CNN卷積神經(jīng)網(wǎng)絡(luò)是一個(gè)大家族,對圖像而言主要有以下4個(gè)關(guān)鍵技術(shù)應(yīng)用。
- 物體定位:預(yù)測包含主要物體的圖像區(qū)域,以便識(shí)別區(qū)域中的物體。
- 物體識(shí)別:針對分割好的目標(biāo)進(jìn)行分類。
- 目標(biāo)分割:將圖像目標(biāo)分割出來,針對圖像上的像素進(jìn)行歸屬,例中如人類、建筑物等。
- 關(guān)鍵點(diǎn)檢測:從圖像中檢測目標(biāo)物體上某關(guān)鍵點(diǎn)的位置,例如人類面部關(guān)鍵點(diǎn)信息。
CNN網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)集是公開的,支持全球的開發(fā)者進(jìn)行下載訓(xùn)練模型數(shù)據(jù)集:
(1)MNIST:最受歡迎的深度學(xué)習(xí)數(shù)據(jù)集之一。手寫數(shù)字?jǐn)?shù)據(jù)集,包含一組60,000個(gè)示例的訓(xùn)練集和一個(gè)包含10,000個(gè)示例的測試集。http://deeplearning.net/tutorial/gettingstarted.html
(2)ImageNet:李飛飛創(chuàng)立的全球視覺識(shí)別挑戰(zhàn)賽數(shù)據(jù)集(ILSVRC)。http://image-net.org/index
(3)PASCAL:標(biāo)準(zhǔn)化的優(yōu)秀的數(shù)據(jù)集,數(shù)據(jù)集可以用于圖像分類、目標(biāo)檢測、圖像分割。http://host.robots.ox.ac.uk/pascal/VOC/
(4)MS-COCO:COCO是一個(gè)大型的、豐富的物體檢測,分割和字幕數(shù)據(jù)集。http://cocodataset.org/
為什么要用CNN來處理圖像呢?
原因很簡單,因?yàn)槟茉诙虝r(shí)間內(nèi)提取圖像特征。
一般來講,普通神經(jīng)網(wǎng)絡(luò)將輸入層和隱含層進(jìn)行全連接(Full Connected),從而保證系統(tǒng)能夠提取張圖像的特征。從算力的角度來分析,較小的圖像從整幅圖像中計(jì)算特征是可行的。比如提取一張28×28的小照片的特征,當(dāng)前CPU還夠用。
但是,如果提取大的圖像(如 96×96 的圖像),要使用這種普通神經(jīng)網(wǎng)絡(luò)全全連接方法來學(xué)習(xí)整幅圖像上的特征,將變得非常耗時(shí)。需要設(shè)計(jì)個(gè)輸入單元,如果要學(xué)習(xí) 100 個(gè)特征,那么就有個(gè)參數(shù)需要進(jìn)行運(yùn)算。
相比之下,96×96 的圖像計(jì)算過程比28×28圖像的處理過程慢100倍。大家都明白當(dāng)前的相片動(dòng)不動(dòng)就是高清大圖,普通神經(jīng)網(wǎng)絡(luò)按照全連接的方式無法預(yù)計(jì)何時(shí)才能處理完。
下面的內(nèi)容是本節(jié)的重點(diǎn)部分,我們具體來講述一下CNN網(wǎng)絡(luò)的實(shí)現(xiàn)過程。
1. 圖像的輸入
我們首先要搞清楚一張照片是如何輸入到神經(jīng)網(wǎng)絡(luò)中的。眾所周知,計(jì)算機(jī)適合處理的是矩陣運(yùn)算,所以必須要把圖片轉(zhuǎn)換成矩陣后計(jì)算機(jī)才能認(rèn)識(shí)。所有的彩色圖像都由紅綠藍(lán)(RGB)疊加而成,成為圖像的三個(gè)通道,一張圖片在計(jì)算機(jī)中存儲(chǔ)也是通過這三個(gè)矩陣完成的。
圖4-23圖的色彩通道
如圖4-23所示,一張64*64個(gè)像素大小的圖片(例如白色可以表示成RGB(255,255,255),可以用3個(gè)64*64大小的矩陣來代表這個(gè)圖。上面指畫三個(gè)5 * 4的矩陣來代表64*64的全尺寸矩陣。RGB這三個(gè)矩陣稱為為圖像的3個(gè)通道,也作為神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)。
2. 卷積神經(jīng)網(wǎng)絡(luò)的組成
與其他神經(jīng)網(wǎng)絡(luò)相同,CNN網(wǎng)絡(luò)同樣也包含輸入層、隱藏層、輸出層幾大部分,卷積神經(jīng)網(wǎng)絡(luò)的主要運(yùn)算過程如圖4-24所示。
圖4-24卷積神經(jīng)網(wǎng)絡(luò)處理過程
卷積層(Convolutional layer):卷積層由多個(gè)卷積單元組成,每個(gè)卷積單元的參數(shù)都是通過反向傳播算法優(yōu)化得到的。卷積運(yùn)算主要為了提取圖像的特征,隨著卷積層的增加,多層網(wǎng)絡(luò)可以提取更為復(fù)雜的圖像特征。
線性整流(Rectified Linear Units layer, ReLU layer):主要指的是激活函數(shù)運(yùn)算(Activation function)使用線性整流的ReLu函數(shù)(Rectified Linear Units, ReLU)。
池化層(Pooling layer):在卷積之后圖像的維度特征依然很多,將特征矩陣分割成幾個(gè)單個(gè)區(qū)塊,取其最大值或平均值,起到了降維的作用。
全連接層(Fully-Connected layer):把所有局部特征以及各通道的特征矩陣結(jié)合變?yōu)橄蛄看?,?jì)算最后每一類的得分。
3. 計(jì)算過程
CNN網(wǎng)絡(luò)的計(jì)算過程如圖XXX,每個(gè)組成模塊代表了不同的計(jì)算內(nèi)容。
(1)數(shù)據(jù)規(guī)則化
彩色圖像的輸入通常先要分解為R(紅)G(綠)B(藍(lán))三個(gè)通道,其中每個(gè)值介于0~255之間。
(2)卷積運(yùn)算(Convolution)
前面講到,由于普通的神經(jīng)網(wǎng)絡(luò)對于輸入與隱層采用全連接的方式進(jìn)行特征提取,在處理圖像時(shí),稍微大一些的圖將會(huì)導(dǎo)致計(jì)算量巨大而變得十分緩慢。卷積運(yùn)算正是為了解決這一問題,每個(gè)隱含單元只能連接輸入單元的一部分,我們可以理解為是一種特征的提取方法。
首先我們來明確幾個(gè)基礎(chǔ)概念:深度(depth)、步長(stride)、補(bǔ)零(zero-padding)、卷積核(convolution kernel)。
深度(depth):深度指的是圖的深度與它控制輸出單元的深度,也表示為連接同一塊區(qū)域的神經(jīng)元個(gè)數(shù)。
步幅(stride):用來描述卷積核移動(dòng)的步長。
補(bǔ)零(zero-padding):通過對圖片邊緣補(bǔ)零來填充圖片邊緣,從而控制輸出單元的空間大小。
卷積核(convolution kernel):在輸出圖像中每一個(gè)像素是輸入圖像中一個(gè)小區(qū)域中像素的加權(quán)平均的權(quán)值函數(shù)。卷積核可以有多個(gè),卷積核參數(shù)可以通過誤差反向傳播來進(jìn)行訓(xùn)練。
如圖4-25為步長=1的卷積計(jì)算過程,卷積核依次向右移動(dòng)進(jìn)行卷積運(yùn)算得到相應(yīng)結(jié)果。
圖4-25 卷積運(yùn)算過程
為圖像計(jì)算可以對邊緣進(jìn)行補(bǔ)零,可見這個(gè)過程改變了圖像的運(yùn)算大小,如圖4-26所示。
卷積運(yùn)算的過程其實(shí)非常簡單,過程如圖4-27描述,可以概括為公式(4.3.6)。其中B代表卷積后的結(jié)果,K是卷積核,A為圖像的輸入矩陣。
圖4-27 卷積運(yùn)算過程
如圖4-27所示,可見卷積核K為2*2的卷積核,詳細(xì)運(yùn)算過程如下。
全部圖像卷積運(yùn)算可以通過公式(4.3.6)進(jìn)行。
(3)激活
CNN卷積神經(jīng)網(wǎng)絡(luò)在卷積后需要經(jīng)過激活過程,當(dāng)前通常使用的激活函數(shù)是Relu函數(shù)。Relu函數(shù)的主要特點(diǎn)在之前的章節(jié)已經(jīng)講過。從函數(shù)的圖像上來看,單側(cè)抑制,相對寬闊的興奮邊界,具有稀疏激活性的特點(diǎn)。
(4)池化(Pooling)
池化的目的是提取特征,減少向下一個(gè)階段傳遞的數(shù)據(jù)量。池化操作相對于對每個(gè)深度切片是獨(dú)立,池化規(guī)模一般為像素的 2*2,與卷積運(yùn)算相比,池化層運(yùn)算一般有以下幾種:
- 最大池化(Max Pooling):取4個(gè)點(diǎn)數(shù)值的最大值。這是最常用的池化算法。
- 均值池化(Mean Pooling):取4個(gè)點(diǎn)數(shù)值的均值。
- 高斯池化(Gauss Pooling):按照高斯模糊的方法。
如圖4-28,描述了最大池化的計(jì)算方法。
圖4-28 池化運(yùn)算過程
(5)全連接(Fully-connected layer)
全連接層一般出現(xiàn)最后幾步,在卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用。如果說卷積層、池化層和激活函數(shù)層等操作是將原始數(shù)據(jù)映射到隱層特征空間的話,全連接層則起到將學(xué)到的“分布式特征表示”映射到樣本標(biāo)記空間的作用。全連接過程是對矩陣的展開過程,也可以理解為輸出矩陣與一個(gè)1*1的卷積核進(jìn)行卷積運(yùn)算,最后展開為一個(gè)1*n的向量。
在卷積神經(jīng)網(wǎng)絡(luò)中,全連接層一般使用Softmax函數(shù)來進(jìn)行分類。Softmax函數(shù)適用于數(shù)據(jù)分類,用于保證每個(gè)分類概率總和為1。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)的計(jì)算過程雖然講解繁瑣,但對于了解深刻理解神經(jīng)網(wǎng)絡(luò)算法非常有益。卷積神經(jīng)網(wǎng)絡(luò)經(jīng)過近30年的發(fā)展擁有多條網(wǎng)絡(luò)發(fā)展分支,并且持續(xù)高速發(fā)展之中。其中有網(wǎng)絡(luò)層數(shù)加深的VGG16與VGG19等,有卷積模塊增強(qiáng)的NIN網(wǎng)絡(luò)等,從分類任務(wù)向目標(biāo)檢測任務(wù)過度的新型網(wǎng)絡(luò)R-CNN等,圖4-29展示了卷積神經(jīng)網(wǎng)絡(luò)的不同發(fā)展分支。
#專欄作家#
白白,人人都是產(chǎn)品經(jīng)理專欄作家。公眾號(hào):白白說話(xiaob-talk)。醫(yī)藥行業(yè)資深產(chǎn)品專家,負(fù)責(zé)人工智能行業(yè)類產(chǎn)品綜合架構(gòu)與技術(shù)開發(fā)。在行業(yè)云產(chǎn)品架構(gòu),藥物設(shè)計(jì)AI輔助、醫(yī)療知識(shí)圖譜等領(lǐng)域有深入研究。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議
- 目前還沒評(píng)論,等你發(fā)揮!