當前位置:
首頁 > 科技 > 深度學習PK傳統機器學習

深度學習PK傳統機器學習

作者:Shiyu Mou


翻譯:何冰心


圖像分類,顧名思義,是一個輸入圖像,輸出對該圖像內容分類的描述的問題。它是計算機視覺的核心,實際應用廣泛。


圖像分類的傳統方法是特徵描述及檢測,這類傳統方法可能對於一些簡單的圖像分類是有效的,但由於實際情況非常複雜,傳統的分類方法不堪重負。現在,我們不再試圖用代碼來描述每一個圖像類別,決定轉而使用機器學習的方法處理圖像分類問題。

深度學習PK傳統機器學習


目前,許多研究者使用CNN等深度學習模型進行圖像分類;另外,經典的KNN和SVM演算法也取得不錯的結果。然而,我們似乎無法斷言,哪種方法對於圖像分來問題效果最佳。

深度學習PK傳統機器學習



本項目中,我們做了一些有意思的事情:


1. 將業內普遍用於圖像分類的CNN和遷移學習演算法與KNN,SVM,BP神經網路進行比較。


2. 獲取深度學習經驗。


3. 探索谷歌機器學習框架TensorFlow。


下面是具體實施細節。


系統設計

在本項目中,用於實驗的5種演算法為KNN、SVM、BP神經網路、CNN以及遷移學習。我們採用如下三種方式進行實驗:


1. KNN、SVM、BP神經網路是我們在學校能夠學到的。功能強大而且易部署。所以第一步,我們主要使用sklearn實現KNN,SVM,和BP神經網路。


2. 由於傳統的多層感知機模型在圖像識別方面效果甚佳,但由於其節點間的全連接模式對於其延展性造成了阻礙,因此對於高解析度的圖像,識別率不是很理想。所以這一步,我們用Google TensorFlow框架構建CNN。


3. 對於已經預訓練過的深度神經網路Inception V3進行重訓練。Inception V3由TensorFlow提供,使用ImageNet自2012年以來的數據進行訓練。ImageNet是計算機視覺領域一個經典挑戰,參賽者試圖用模型將全部圖像放至1000個分類中。為了要重新訓練已經預訓練好的模型,我們必須保證我們自己的數據集沒有被預訓練過。


實施


第一種方法:使用sklearn預處理數據以及實現KNN,SVM和BP神經網路。


步驟1,使用openCV包,定義2個預處理函數,分別是圖像特徵向量(用來調整圖像大小並將圖像扁平化成一系列行像素)和提取顏色直方圖(使用cv2.normalize從HSV色域中提取一個3D顏色直方圖並做平滑處理)。


步驟2,構造參數。由於我們試圖在整個數據集以及具有不同類別數目的子數據集上進行性能測試,所以我們把各個數據集看作為參數,以便進行實驗分析。另外,我們還設置了KNN中的鄰居數目作為參數。


步驟3,提取圖像特徵並寫入數組。我們使用cv2.imread函數讀取圖像,根據規範化的圖像名稱進行分類。然後運行第步驟1中提到的2個函數,分別得到2種圖像特徵並寫入數組。


步驟4,使用函數train_test_split分割數據集。85%的數據作為訓練集,15%的數據作為測試集。

步驟5,使用KNN,SVM和BP神經網路方法去評估數據。對於KNN,使用KNeighborsClassifier,對於SVM,使用SVC,對於BP神經網路,使用MLPClassifier。


第二種方法:基於TensorFlow構建CNN。使用TensorFlow得到計算圖並在C++中實現,比Python更高效。


TensorFlow中使用到的的幾個概念:佔位符,變數,數學公式,成本計量,最優方法,CNN體系結構。


步驟1,第一層放置圖像。


步驟2,構建3層卷積層(3 Convolutional layers),2X2的max-pooling和ReLU。輸入是4維張量:【圖像編號,Y坐標,X坐標,通道】。輸出是另一個經處理得到的4維張量:【圖像編號(不變),Y坐標,X坐標,通道】。


步驟3,構建2層全連接層(2 Fully-Connected Layers)。輸入是2維張量:【圖像編號,輸入編號】。輸出是2維張量【圖像編號,輸出編號】。使用


步驟4,使用合并層(Flatten Layer)鏈接卷積層和全連接層。


步驟5,使用softmax layer標準化輸出。


步驟6,優化訓練結果。我們使用交叉熵(cross entropy)作為成本計量函數,取其均值。最優方法使用tf.train.AdamOptimizer()。


第三種方法:Retrain Inception V3。使用Retrain Inception V3 ,並利用遷移學習減少工作量。

我們得到pre-trained模型,移除原有頂層,訓練新模型。然後分析在磁碟上的所有圖像並計算它們的bottleneck值。腳本會運行4000次。每次運行都會從訓練集中隨機選取10個圖像,找到它們的bottleneck值並注入最後一層得到預測結果。然後在反向傳播過程中,根據預測結果和實際標籤的比較結果去更新每層的權重。


實驗


實驗中使用到的數據集是Oxford-IIIT Pet 數據集。


http://www.robots.ox.ac.uk/~vgg/data/pets/


其中有犬類25類,貓類12類。每類有200個圖像。我們使用到該數據集中的10個類別的貓的數據,分別是[『Sphynx』,』Siamese』,』Ragdoll』,』Persian』,』Maine-Coon』,』British-shorthair』,』Bombay』,』Birman』,』Bengal』,』Abyssinian』]。即,共有2000個圖像,由於圖像大小不一,我們調整大小統一為固定尺寸64X64或128X128。


本項目中,我們主要使用OpenCV預處理圖像。一般通過變形、剪裁或亮化隨機處理訓練集。


github:https://github.com/aleju/imgaug


賦值


第一種方法:KNN,SVM,和BP神經網路


第一部分:使用sklearn預處理數據以及實現KNN,SVM和BP神經網路。在image_to_feature_vector函數中,我們設定尺寸128X128。經試驗表明,圖像尺寸越大,結果越精確,運行負擔越大。最終我們決定使用128X128的尺寸。在extract_color_histogram函數中,設定每個通道的容器數量為32,32,32。對於數據集,使用3種數據集。第一個是具有400個圖像,2個標籤的子數據集。第二個是具有1000個圖像,5個標籤的子數據集。第三個是整個數據集,1997個圖像,10個標籤。

在KNeighborsClassifier中,我們只改變鄰居數量且存儲結果作為每個數據集的最佳K值,其他參數默認。


在MLPClassifier中,我們設定每層有50個神經元。


在SVC中,最大迭代次數是1000,類權重是「balanced」。


依據數據集,2個標籤到10個標籤不同,運行時間大約為3到5分鐘不等。


第二種方法:基於TensorFlow構建CNN


由於在整個數據集中運行時間過長,我們在每個迭代中分批次處理。每批次一般有32個或64個圖像。數據集分為1600個圖像的訓練集,400個圖像的驗證集,300個圖像的測試集。


本方法中有大量的參數可調整。學習速率設定為1x10^-4;圖像大小設定為64x64和128x128;然後是層和形狀,然而有太多的參數可調整,我們依據經驗並進行實驗去得到最佳結果。


為了得到最佳的layers,我們進行實驗。首先,參數如下:


我們使用了3個卷積層和2個全連接層,然而悲劇的是過度擬合。經過研究發現,對於該構造,我們的數據集過小,網路過於複雜。


最終,我們使用如下參數:

我們只使用了2個卷積層和2個全連接層。依然不盡人意,經過4000次迭代,結果仍舊過擬合,不過好在測試結果10%優於前者。最終,經過5000次迭代,我們得到43%的精確度,運行時間是半小時以上。


PS:我們使用另一個數據集CIFAR-10進行了實驗。


CIFAR-10:https://www.cs.toronto.edu/~kriz/cifar.html

深度學習PK傳統機器學習



該數據集包含60000個32x32的彩色圖像,分為10個類別,每個類別6000個圖像。訓練集50000個圖像,測試集10000個圖像。使用同樣的網路結構,經過10個小時的訓練,最終得到78%的精確度。


第三種方法:Retrain Inception V3


與以上方法相似,訓練次數為4000,依據結果進行調整。學習速率依據每批次的圖像數量進行調整。80%的數據用來訓練,10%用來驗證,10%用來測試。


實驗結果


第一種方法:KNN,SVM,和BP神經網路

在KNN中,Knn_raw_pixel和Knn_histo的精確度的值比較接近。在5類標籤情況下,前者比後者要低,整體來說,原始像素表現更好。


在MLP分類器中,原始像素精確地要低於柱狀圖精確度。對於整個數據集(10個標籤)來講,原始像素精確度竟然低於隨機猜想的精確度。


上面兩種sklearn方法都沒有得到非常好的性能。對於整個數據集,只有24%的精確度。實驗結果證明,sklearn方法不能夠有效進行圖像分類。為了有效進行圖像分類並且提高精確度,有必要使用深度學習的方法。


第二種方法:基於TensorFlow構建CNN


由於過擬合,我們無法得到好的實驗結果。運行時間一般為半個小時,由於過擬合,我們認為,運行時間無法預估。通過與方法1比較,可以得出:即使CNN過擬合訓練集,實驗結果依舊優於方法1。


第三種方法:Retrain Inception V3


整個訓練過程不超過10分鐘,且我們得到了非常好的結果。事實證明,深度學習和遷移學習十分強大。


Demo:

深度學習PK傳統機器學習


結論


基於以上實驗比較,我們得出:


1. KNN,SVM,和BP神經網路在圖像分類中不夠有效。


2. 即使在CNN中過擬合,CNN的實驗結果依舊比傳統分類演算法好。


3. 遷移學習在圖像分類問題上非常有效。運行時間短且結果精準,能夠良好地解決過擬合和數據集過小的問題。


通過本次項目,我們得到了許多寶貴的經驗,如下所示:


1. 調整圖像使其更小。


2. 對於訓練的每次迭代,隨機選取小批次數據。


3. 隨機選取小批次數據作為驗證集進行驗證,並且在訓練期間反饋驗證評分。


4. 利用Image Augmentation把輸入圖像集轉變為可調整的更大的新數據集。

5. 圖像數據集要大於200x10。


6. 複雜網路結構需要更多的訓練集。


7. 小心過擬合。


參考文獻


1. CS231n Convolutional Neural Networks for Visual Recognition


2. TensorFlow Convolutional Neural Networks


3. How to Retrain Inception』s Final Layer for New Categories


4. k-NN classifier for image classification


5. Image Augmentation for Deep Learning With Keras


6. Convolutional Neural Network TensorFlow Tutorial


Note: The first method is performed by Ji Tong


https://github.com/JI-tong


Originally published at gist.github.com.


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

機器學習中用來防止過擬合的方法有哪些?
亞馬遜:機器學習對Kiva機器人的價值非常大!
美媒發布重磅白皮書「機器學習與深度學習的浪潮」
戴爾為女性創業者發布「Hello Alice」機器學習平台
谷歌宣布正式推出基於雲GPU的雲機器學習引擎

TAG:機器學習 |

您可能感興趣

收藏!機器學習深度學習面試總結
初學機器學習:直觀解讀KL散度的數學概念
人工智慧、機器學習和深度學習
學習學習再學習
【深度學習並非萬能】全方位對比深度學習和經典機器學習
人工智慧世界裡的機器學習與深度學習
深度學習並非萬能:全方位對比深度學習和經典機器學習
看圖學機器學習
機器學習開發者應該收藏的 DIY 計算機視覺和深度學習項目
Kaggle推出免費線上課程,覆蓋機器學習、深度學習等四門課
入門 | 初學機器學習:直觀解讀KL散度的數學概念
機器學習三兄弟概念大揭秘:「監督學習」「非監督學習」「強化學習」
人工智慧及機器學習與深度學習揭秘
人工智慧之機器學習篇——強化學習
AI、機器學習和深度學習三者有何不同?
邂逅深度學習
學習,學習,再學習
人工智慧之機器學習篇——並行機器學習
這個學員隊理論學習很有創意,與北師大哲學專業學生「PK」學習感悟
初識機器學習