文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.190639
中文引用格式: 張璘,楊豐墑. 基于深度學習的圖像分類搜索系統(tǒng)[J].電子技術應用,,2019,,45(12):51-55.
英文引用格式: Zhang Lin,Yang Fengshang. Image classification search system based on deep learning method[J]. Application of Electronic Technique,,2019,,45(12):51-55.
0 引言
Caffe(Convolutional Architecture for Fast Feature Embedding)是由伯克利大學的賈楊清等人開發(fā)的一個開源的深度學習框架[1],,采用高效的C++語言實現(xiàn),并內置有Python和MATLAB接口,,以供開發(fā)人員開發(fā)和部署以深度學習為核心算法的應用,。本文從基本的深度學習概念出發(fā),以mnist手寫識別數(shù)據(jù)集為基礎,,通過Caffe框架設計的LeNet卷積網(wǎng)絡對數(shù)據(jù)集進行訓練分析,,提取目標圖像特征信息,訓練出一個模型進行測試以及網(wǎng)絡結構的圖解[2],。為了更好地展示深度學習的應用效果,,使用bvlc_reference_caffenet.caffemodel來作為基本模型進行圖片識別分類,實現(xiàn)了一個簡單的“以圖搜圖”Web應用,。
1 深度學習的介紹
深度學習的概念由HINTON G E等人于2006年提出[3],,基于深度置信網(wǎng)絡(DBN)提出非監(jiān)督貪心逐層訓練算法,多非線性層級系統(tǒng)有效解決了深度學習在訓練過程中的過擬合問題,,通過在圖像層次稀疏表示中引入圖像顯著信息,,加強了圖像特征的語義信息,得到圖像顯著特征表達。
1.1 卷積過程
對于一維信號,,卷積定義為:
其中,,f表示Mr×Nc的二維圖像矩陣,g表示Nr×Nc的二維圖像矩陣,,卷積結果y的大小為(Mr+Nr-1)×(Mc+Nc-1),,即0≤m<Mr+Nr-1,0≤n<Mc+Nc-1,。以具體圖像處理為例,,卷積過程其實還是基于一個固定的矩陣,將另外一個矩陣一格一格掃過去得到數(shù)值的和,,如圖1所示,。
如果輸入的圖像是6×6的一組矩陣,其前3×3格的數(shù)據(jù)經過權值weight的加權求和后可以得到429,,得到第一個卷積后的數(shù)據(jù);輸入矩陣每次運算向后移動一小格,,并與權值weight進行加權求和,,掃完整個數(shù)據(jù)可以得到一個4×4的數(shù)據(jù),卷積的結果是維數(shù)降低了,,如圖2所示,。
1.2 卷積核
卷積核為圖1中3×3矩陣的數(shù)量,因為有時要提取的特征非常多且廣泛,,所以需要用更多不同的矩陣來掃(多掃幾遍),,那么矩陣的個數(shù)就是卷積核個數(shù)。
輸出的矩陣公式為:
當使用n個不同權重的矩陣卷積6×6矩陣時,,可以將6×6的一個矩陣轉變成n個4×4的矩陣,,即6×6-->n×4×4的矩陣。
1.3 池化(pooling)
池化與卷積非常相似,,簡單來說就是下采樣,,都是使用一個矩陣與另一個矩陣的加權和得到最后的數(shù)據(jù)。池化與卷積最大的不同是卷積重復使用一個數(shù)據(jù),,而池化是每個數(shù)據(jù)只加權求和使用一次,。當原來的矩陣是m×m、采樣窗口是n×n時,,卷積能夠取得(m-n+1)×(m-n+1)的矩陣結果,,而池化在不重復使用數(shù)據(jù)加權求和的情況下,一共只能采樣(m/n)×(m/n)的結果矩陣,。之所以這么做,,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數(shù)據(jù)維度,,就進行下采樣,。之所以能這么做,是因為即使減少了許多數(shù)據(jù),,特征的統(tǒng)計屬性仍能夠描述圖像,,而且由于降低了數(shù)據(jù)維度,有效地避免了過擬合[4-5],。池化的過程如圖3所示,,原始圖片大小是12×12 維度,對其進行下采樣,,采樣窗口為10×10,,通過池化將其下采樣成為一個2×2大小的特征圖。
1.4 訓練流程
訓練的主要流程是訓練卷積神經網(wǎng)絡(CNN)的某一個卷積層時,,實際上是在訓練一系列的濾波器(filter),。簡單來說,訓練CNN在相當意義上是在訓練每一個卷積層的濾波器,,讓這些濾波器組對特定的模式特征有較高的激活,,從而達到CNN網(wǎng)絡的分類/檢測等目的[6]。因此,,在相當程度上,,構建卷積神經網(wǎng)絡的任務就在于構建這些濾波器,也就是改變?yōu)V波器矩陣的值,,即改變權值weight,,用來識別特定的特征[7]。這個過程叫做訓練,,圖4是深度學習訓練流程圖,。
其中weight權值即圖4中的W0、W1,、W2,,其值由初始權值隨著學習訓練的過程由損失函數(shù)來控制和調整,從而達到學習的目的,。
2 LeNet卷積網(wǎng)絡的mnist手寫識別模型
2.1 訓練過程
由LECUN Y等人于1998年提出的LeNet網(wǎng)絡[8]是最早的卷積神經網(wǎng)絡之一,,它在手寫數(shù)字的識別問題中取得成功。本文使用的mnist圖片數(shù)據(jù)來源于官網(wǎng)http://yann.lecun.com/exdb/mnist/,,數(shù)據(jù)分成了訓練集(60 000張共10類)和測試集(共10 000張10類),,每個類別放在一個單獨的文件夾里,并將所有的圖片都生成txt列表清單(train.txt和test.txt)[9],。
環(huán)境說明:采用VMware Workstation14下的Linux(Ubuntu16.04)操作系統(tǒng)系統(tǒng),,Python環(huán)境:Anaconda2.7,,Caffe 以及Caffe所需要的Opencv(3.4)支持。環(huán)境搭建如圖5所示,。
2.2 測試結果
本文使用mnist官方提供的測試集對訓練好的模型進行訓練,,每類數(shù)字有1 000張共10個分類10 000張圖片,判斷正確結果較多,,因此這里跳過了判斷正確結果的輸出,,圖6依次為0~9的測試出錯結果:頭頂標記為模型對圖片預測分類的結果。
從測試的結果可以看出:
(1)測試大概10 000張圖片,,共用時不到10 s(僅使用CPU運算,,且不同性能計算機用時差異較大,僅作參考),,其中判斷錯誤數(shù)量為80張左右,,正確率大概有99.2%,每張的測試時間不到1 ms,。
(2)分析輸出的錯誤圖像判斷結果,,可知有些錯誤原因是手寫字跡潦草、部分較為模糊,、手寫有歧義(即使人為判斷也無法準確斷定數(shù)字具體分類),。
(3)部分的測試結果在人眼識別過程中沒有太大的問題,在字跡方面也算可以清晰顯示出數(shù)字的具體信息,,而此模型卻給出了一個錯誤的結果。這些識別結果只顯示了概率最大的分類,,可能在識別的部分特征過于相似,,導致并不能得到最好的分類結果,這應該屬于深度學習的訓練缺陷的一部分,,原因是由于訓練集的質量和數(shù)量決定的,。
3 圖片識別的一個簡單應用:以圖搜圖
百度上線了其最新的搜索功能——“識圖”,該功能基于相似圖片識別技術,,讓用戶通過上傳本地圖片或者輸入圖片的URL地址后,,根據(jù)圖像特征進行分析,進而從互聯(lián)網(wǎng)中搜索出與此相似的圖片資源及信息內容,。根據(jù)前面的深度學習圖片分類的學習結果,,設計出一款類似百度“識圖”的應用。
3.1 總體設計思路
使用Web前端獲取用戶所上傳(POST)的圖片文件或者URL,,服務器接收到用戶圖片后調用bvlc模型進行處理,,載入模型識別出圖片分類信息,后臺根據(jù)這個分類信息使用requests爬蟲庫搜索Bing上相似的圖片,,獲取到相關的圖片鏈接并傳給前端瀏覽器,,瀏覽器根據(jù)所給的圖片鏈接進行訪問請求,,并顯示在用戶瀏覽界面中,從而達到以圖搜圖的功能,。處理流程圖如圖7所示,。
3.2 模型框架說明
后臺服務器Django:Django是一個開放源代碼的Web應用框架,由Python寫成,,較適合中等規(guī)模的Web項目,,本圖片搜索系統(tǒng)是基于Django搭建并部署Web應用。
Web前端框架Bootstrap:Bootstrap是當前比較流行的前端框架,,起源于推特,,提供了簡潔的層疊樣式表和HTML規(guī)則,以及更為完善的人性化網(wǎng)站風格,。根據(jù)此框架能夠較好較快地搭建前端Web UI界面,,且很符合該圖片展示模塊的風格。
搜索分類依據(jù)bvlc模型:該模型由Caffe團隊使用imagenet圖片集迭代訓練30多萬次而成,,共有1 000種的分類,,是一個可應用級別的model。此次分析圖片的具體分類就是通過這個模型得到分類的關鍵字,。
3.3 搜圖流程
前端界面:這里提供了兩種圖片的上傳方式,,即圖片的本地文件以及圖片的URL地址,選擇上傳一張小貓圖片,,如圖8所示,。
后臺分類:后臺將圖片載入bvlc模型進行運算,如圖9展示的是第一個卷積層的卷積核與進行第一次卷積后的圖片,。
最終后臺經過分析特征得到圖片分類的概率分布圖,,如下結果最可能的分類為283,再通過查找label文件得到283類為label:n02123394 Persian cat,,如圖10所示,。
也可以查看前5個最有可能的分類結果:
[(0.99606931,′n02123394 Persian cat′),,
(0.0019333176,,′n02127052 lynx,catamount′),,
(0.0013805312,,′n02123159 tiger cat′),
(0.00041564793,,′n02123045 tabby,,tabby cat′),
(8.5782471e-05,,′n02124075 Egyptian cat′)]
更多圖片搜索的實現(xiàn):得到關鍵字后,,通過requests爬蟲庫爬取Bing圖片(https://cn.bing.com/images),,對網(wǎng)頁HTML源碼進行分析,因此得到了一個API接口:https://cn.bing.com/images/async?q={%s}&mmasync=1,。
該接口提供一個搜索關鍵詞的參數(shù)代替URL中的%s,,因而得到想要的圖片數(shù)據(jù),再使用xpath:’//*[@id="mmComponent_images_1"]/ul/li/div/div/div/div[1]/ul/li[2]/text()’,,從而提取到想要的圖片地址以及圖片源信息,。獲得圖片的URL信息后,后臺系統(tǒng)會整理好數(shù)據(jù)以JSON方式傳送給瀏覽器,,瀏覽器便可依據(jù)此地址展示給用戶更多的相似圖片,。
前端圖片展示頁面:第一張圖片為搜索的原圖以及其分類的信息,其他圖片為向用戶提供的更多相似圖片的結果,,并且有查看大圖(view)和下載功能(download),,如圖11所示。
4 結論
圖片識別分類系統(tǒng)在應用級別的構建需要大量圖片作為訓練的基礎,,不斷迭代學習才能得到一個較好的模型,。本文使用的模型為Caffe官方提供的bvlc_reference_caffenet.caffemodel,使用的訓練集imagenet數(shù)據(jù)集是一個強大的模型,。但若以人工智能應用部署在計算機視覺領域上還遠遠不夠,,仍需要更多的大數(shù)據(jù)作為基礎。同時,,即使有這樣一個強大模型在實際應用中,,還需要動態(tài)一步步地修正和完善其模型與參數(shù)配置,這點現(xiàn)在的Caffe還無法很好地給出解決方案,。本文最終的圖片搜索應用功能依賴于識別的分類結果,,本質上還是為以分類關鍵詞搜圖作為結果,若是相同分類的不同圖片,,搜到的結果可能相似度過高,不夠智能化,??蓞⒖嫉慕鉀Q方案是使用多個訓練模型分析所選圖片的各方面信息,如色調,、風格,、其他分類等綜合結果,再加以搜索會更加智能化,,但同時對訓練的數(shù)據(jù)集和訓練網(wǎng)絡的學習效率會有更高的要求,。
參考文獻
[1] Jia Yangqing,SHELHAMER E,,DONAHUE J,,et al.Caffe:convolutional architecture for fast feature embedding[C].ACM International Conference on Multimedia ACM,,2014:675-678.
[2] 王茜,張海仙.深度學習框架Caffe在圖像分類中的應用[J].現(xiàn)代計算機(專業(yè)版),,2016(5):72-75,,80.
[3] HINTON G E,OSINDERO S,,THE Y W.A fast learning algorithm for deep belief nets[J].Neural Computation,,2006,18(7):1527-1554.
[4] 魏正.基于Caffe平臺深度學習的人臉識別研究與實現(xiàn)[D].西安:西安電子科技大學,,2015.
[5] 許少尉,,陳思宇.基于深度學習的圖像分類方法[J].電子技術應用,2018,,44(6):116-119.
[6] 張順,,龔怡宏,王進軍.深度卷積神經網(wǎng)絡的發(fā)展及其在計算機視覺領域的應用[J].計算機學報,,2017,,42(3):453-462.
[7] 孫志軍,薛磊,,許陽明,,等.深度學習研究綜述[J].計算機應用研究,2012,,29(8):2806-2810.
[8] LECUN Y,,BOTTOU L,BENGIO Y,,et al.Gradient-based learning applied to document recognition[J].Proceedings of the IEEE,,1998,86(11):2278-2324.
[9] 黃睿,,陸許明,,鄔依林.基于Ten-sorFlow深度學習手寫體數(shù)字識別及應用[J].電子技術應用,2018,,44(10):6-10.
作者信息:
張 璘,,楊豐墑
(廈門理工學院 光電與通信工程學院,福建 廈門361024)