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