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