文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.190639
中文引用格式: 張璘,,楊豐墑. 基于深度學(xué)習(xí)的圖像分類搜索系統(tǒng)[J].電子技術(shù)應(yīng)用,,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)是由伯克利大學(xué)的賈楊清等人開發(fā)的一個(gè)開源的深度學(xué)習(xí)框架[1],采用高效的C++語言實(shí)現(xiàn),,并內(nèi)置有Python和MATLAB接口,,以供開發(fā)人員開發(fā)和部署以深度學(xué)習(xí)為核心算法的應(yīng)用。本文從基本的深度學(xué)習(xí)概念出發(fā),,以mnist手寫識別數(shù)據(jù)集為基礎(chǔ),,通過Caffe框架設(shè)計(jì)的LeNet卷積網(wǎng)絡(luò)對數(shù)據(jù)集進(jìn)行訓(xùn)練分析,提取目標(biāo)圖像特征信息,,訓(xùn)練出一個(gè)模型進(jìn)行測試以及網(wǎng)絡(luò)結(jié)構(gòu)的圖解[2],。為了更好地展示深度學(xué)習(xí)的應(yīng)用效果,使用bvlc_reference_caffenet.caffemodel來作為基本模型進(jìn)行圖片識別分類,實(shí)現(xiàn)了一個(gè)簡單的“以圖搜圖”Web應(yīng)用,。
1 深度學(xué)習(xí)的介紹
深度學(xué)習(xí)的概念由HINTON G E等人于2006年提出[3],,基于深度置信網(wǎng)絡(luò)(DBN)提出非監(jiān)督貪心逐層訓(xùn)練算法,多非線性層級系統(tǒng)有效解決了深度學(xué)習(xí)在訓(xùn)練過程中的過擬合問題,,通過在圖像層次稀疏表示中引入圖像顯著信息,,加強(qiáng)了圖像特征的語義信息,得到圖像顯著特征表達(dá),。
1.1 卷積過程
對于一維信號,,卷積定義為:
其中,f表示Mr×Nc的二維圖像矩陣,,g表示Nr×Nc的二維圖像矩陣,,卷積結(jié)果y的大小為(Mr+Nr-1)×(Mc+Nc-1),即0≤m<Mr+Nr-1,,0≤n<Mc+Nc-1,。以具體圖像處理為例,卷積過程其實(shí)還是基于一個(gè)固定的矩陣,,將另外一個(gè)矩陣一格一格掃過去得到數(shù)值的和,,如圖1所示。
如果輸入的圖像是6×6的一組矩陣,,其前3×3格的數(shù)據(jù)經(jīng)過權(quán)值weight的加權(quán)求和后可以得到429,,得到第一個(gè)卷積后的數(shù)據(jù);輸入矩陣每次運(yùn)算向后移動一小格,,并與權(quán)值weight進(jìn)行加權(quán)求和,,掃完整個(gè)數(shù)據(jù)可以得到一個(gè)4×4的數(shù)據(jù),卷積的結(jié)果是維數(shù)降低了,,如圖2所示,。
1.2 卷積核
卷積核為圖1中3×3矩陣的數(shù)量,因?yàn)橛袝r(shí)要提取的特征非常多且廣泛,,所以需要用更多不同的矩陣來掃(多掃幾遍),,那么矩陣的個(gè)數(shù)就是卷積核個(gè)數(shù)。
輸出的矩陣公式為:
當(dāng)使用n個(gè)不同權(quán)重的矩陣卷積6×6矩陣時(shí),,可以將6×6的一個(gè)矩陣轉(zhuǎn)變成n個(gè)4×4的矩陣,,即6×6-->n×4×4的矩陣。
1.3 池化(pooling)
池化與卷積非常相似,,簡單來說就是下采樣,,都是使用一個(gè)矩陣與另一個(gè)矩陣的加權(quán)和得到最后的數(shù)據(jù)。池化與卷積最大的不同是卷積重復(fù)使用一個(gè)數(shù)據(jù),,而池化是每個(gè)數(shù)據(jù)只加權(quán)求和使用一次,。當(dāng)原來的矩陣是m×m,、采樣窗口是n×n時(shí),卷積能夠取得(m-n+1)×(m-n+1)的矩陣結(jié)果,,而池化在不重復(fù)使用數(shù)據(jù)加權(quán)求和的情況下,,一共只能采樣(m/n)×(m/n)的結(jié)果矩陣。之所以這么做,,是因?yàn)榧词棺鐾炅司矸e,,圖像仍然很大(因?yàn)榫矸e核比較小),所以為了降低數(shù)據(jù)維度,,就進(jìn)行下采樣,。之所以能這么做,是因?yàn)榧词箿p少了許多數(shù)據(jù),,特征的統(tǒng)計(jì)屬性仍能夠描述圖像,,而且由于降低了數(shù)據(jù)維度,有效地避免了過擬合[4-5],。池化的過程如圖3所示,,原始圖片大小是12×12 維度,對其進(jìn)行下采樣,,采樣窗口為10×10,通過池化將其下采樣成為一個(gè)2×2大小的特征圖,。
1.4 訓(xùn)練流程
訓(xùn)練的主要流程是訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)(CNN)的某一個(gè)卷積層時(shí),,實(shí)際上是在訓(xùn)練一系列的濾波器(filter)。簡單來說,,訓(xùn)練CNN在相當(dāng)意義上是在訓(xùn)練每一個(gè)卷積層的濾波器,,讓這些濾波器組對特定的模式特征有較高的激活,從而達(dá)到CNN網(wǎng)絡(luò)的分類/檢測等目的[6],。因此,,在相當(dāng)程度上,構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)的任務(wù)就在于構(gòu)建這些濾波器,,也就是改變?yōu)V波器矩陣的值,,即改變權(quán)值weight,用來識別特定的特征[7],。這個(gè)過程叫做訓(xùn)練,,圖4是深度學(xué)習(xí)訓(xùn)練流程圖。
其中weight權(quán)值即圖4中的W0,、W1,、W2,其值由初始權(quán)值隨著學(xué)習(xí)訓(xùn)練的過程由損失函數(shù)來控制和調(diào)整,,從而達(dá)到學(xué)習(xí)的目的,。
2 LeNet卷積網(wǎng)絡(luò)的mnist手寫識別模型
2.1 訓(xùn)練過程
由LECUN Y等人于1998年提出的LeNet網(wǎng)絡(luò)[8]是最早的卷積神經(jīng)網(wǎng)絡(luò)之一,它在手寫數(shù)字的識別問題中取得成功。本文使用的mnist圖片數(shù)據(jù)來源于官網(wǎng)http://yann.lecun.com/exdb/mnist/,,數(shù)據(jù)分成了訓(xùn)練集(60 000張共10類)和測試集(共10 000張10類),,每個(gè)類別放在一個(gè)單獨(dú)的文件夾里,并將所有的圖片都生成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 測試結(jié)果
本文使用mnist官方提供的測試集對訓(xùn)練好的模型進(jìn)行訓(xùn)練,每類數(shù)字有1 000張共10個(gè)分類10 000張圖片,,判斷正確結(jié)果較多,,因此這里跳過了判斷正確結(jié)果的輸出,圖6依次為0~9的測試出錯(cuò)結(jié)果:頭頂標(biāo)記為模型對圖片預(yù)測分類的結(jié)果,。
從測試的結(jié)果可以看出:
(1)測試大概10 000張圖片,,共用時(shí)不到10 s(僅使用CPU運(yùn)算,且不同性能計(jì)算機(jī)用時(shí)差異較大,,僅作參考),,其中判斷錯(cuò)誤數(shù)量為80張左右,正確率大概有99.2%,,每張的測試時(shí)間不到1 ms,。
(2)分析輸出的錯(cuò)誤圖像判斷結(jié)果,可知有些錯(cuò)誤原因是手寫字跡潦草,、部分較為模糊,、手寫有歧義(即使人為判斷也無法準(zhǔn)確斷定數(shù)字具體分類)。
(3)部分的測試結(jié)果在人眼識別過程中沒有太大的問題,,在字跡方面也算可以清晰顯示出數(shù)字的具體信息,,而此模型卻給出了一個(gè)錯(cuò)誤的結(jié)果。這些識別結(jié)果只顯示了概率最大的分類,,可能在識別的部分特征過于相似,,導(dǎo)致并不能得到最好的分類結(jié)果,這應(yīng)該屬于深度學(xué)習(xí)的訓(xùn)練缺陷的一部分,,原因是由于訓(xùn)練集的質(zhì)量和數(shù)量決定的,。
3 圖片識別的一個(gè)簡單應(yīng)用:以圖搜圖
百度上線了其最新的搜索功能——“識圖”,該功能基于相似圖片識別技術(shù),,讓用戶通過上傳本地圖片或者輸入圖片的URL地址后,,根據(jù)圖像特征進(jìn)行分析,進(jìn)而從互聯(lián)網(wǎng)中搜索出與此相似的圖片資源及信息內(nèi)容,。根據(jù)前面的深度學(xué)習(xí)圖片分類的學(xué)習(xí)結(jié)果,,設(shè)計(jì)出一款類似百度“識圖”的應(yīng)用,。
3.1 總體設(shè)計(jì)思路
使用Web前端獲取用戶所上傳(POST)的圖片文件或者URL,服務(wù)器接收到用戶圖片后調(diào)用bvlc模型進(jìn)行處理,,載入模型識別出圖片分類信息,,后臺根據(jù)這個(gè)分類信息使用requests爬蟲庫搜索Bing上相似的圖片,獲取到相關(guān)的圖片鏈接并傳給前端瀏覽器,,瀏覽器根據(jù)所給的圖片鏈接進(jìn)行訪問請求,,并顯示在用戶瀏覽界面中,從而達(dá)到以圖搜圖的功能,。處理流程圖如圖7所示,。
3.2 模型框架說明
后臺服務(wù)器Django:Django是一個(gè)開放源代碼的Web應(yīng)用框架,由Python寫成,,較適合中等規(guī)模的Web項(xiàng)目,,本圖片搜索系統(tǒng)是基于Django搭建并部署Web應(yīng)用。
Web前端框架Bootstrap:Bootstrap是當(dāng)前比較流行的前端框架,,起源于推特,,提供了簡潔的層疊樣式表和HTML規(guī)則,以及更為完善的人性化網(wǎng)站風(fēng)格,。根據(jù)此框架能夠較好較快地搭建前端Web UI界面,,且很符合該圖片展示模塊的風(fēng)格。
搜索分類依據(jù)bvlc模型:該模型由Caffe團(tuán)隊(duì)使用imagenet圖片集迭代訓(xùn)練30多萬次而成,,共有1 000種的分類,,是一個(gè)可應(yīng)用級別的model。此次分析圖片的具體分類就是通過這個(gè)模型得到分類的關(guān)鍵字,。
3.3 搜圖流程
前端界面:這里提供了兩種圖片的上傳方式,即圖片的本地文件以及圖片的URL地址,,選擇上傳一張小貓圖片,,如圖8所示。
后臺分類:后臺將圖片載入bvlc模型進(jìn)行運(yùn)算,,如圖9展示的是第一個(gè)卷積層的卷積核與進(jìn)行第一次卷積后的圖片,。
最終后臺經(jīng)過分析特征得到圖片分類的概率分布圖,如下結(jié)果最可能的分類為283,,再通過查找label文件得到283類為label:n02123394 Persian cat,,如圖10所示。
也可以查看前5個(gè)最有可能的分類結(jié)果:
[(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′)]
更多圖片搜索的實(shí)現(xiàn):得到關(guān)鍵字后,,通過requests爬蟲庫爬取Bing圖片(https://cn.bing.com/images),對網(wǎng)頁HTML源碼進(jìn)行分析,,因此得到了一個(gè)API接口:https://cn.bing.com/images/async?q={%s}&mmasync=1,。
該接口提供一個(gè)搜索關(guān)鍵詞的參數(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ù)此地址展示給用戶更多的相似圖片。
前端圖片展示頁面:第一張圖片為搜索的原圖以及其分類的信息,,其他圖片為向用戶提供的更多相似圖片的結(jié)果,,并且有查看大圖(view)和下載功能(download),如圖11所示,。
4 結(jié)論
圖片識別分類系統(tǒng)在應(yīng)用級別的構(gòu)建需要大量圖片作為訓(xùn)練的基礎(chǔ),,不斷迭代學(xué)習(xí)才能得到一個(gè)較好的模型。本文使用的模型為Caffe官方提供的bvlc_reference_caffenet.caffemodel,,使用的訓(xùn)練集imagenet數(shù)據(jù)集是一個(gè)強(qiáng)大的模型,。但若以人工智能應(yīng)用部署在計(jì)算機(jī)視覺領(lǐng)域上還遠(yuǎn)遠(yuǎn)不夠,仍需要更多的大數(shù)據(jù)作為基礎(chǔ),。同時(shí),,即使有這樣一個(gè)強(qiáng)大模型在實(shí)際應(yīng)用中,還需要動態(tài)一步步地修正和完善其模型與參數(shù)配置,,這點(diǎn)現(xiàn)在的Caffe還無法很好地給出解決方案,。本文最終的圖片搜索應(yīng)用功能依賴于識別的分類結(jié)果,本質(zhì)上還是為以分類關(guān)鍵詞搜圖作為結(jié)果,,若是相同分類的不同圖片,,搜到的結(jié)果可能相似度過高,不夠智能化,??蓞⒖嫉慕鉀Q方案是使用多個(gè)訓(xùn)練模型分析所選圖片的各方面信息,如色調(diào),、風(fēng)格,、其他分類等綜合結(jié)果,,再加以搜索會更加智能化,但同時(shí)對訓(xùn)練的數(shù)據(jù)集和訓(xùn)練網(wǎng)絡(luò)的學(xué)習(xí)效率會有更高的要求,。
參考文獻(xiàn)
[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] 王茜,張海仙.深度學(xué)習(xí)框架Caffe在圖像分類中的應(yīng)用[J].現(xiàn)代計(jì)算機(jī)(專業(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平臺深度學(xué)習(xí)的人臉識別研究與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),,2015.
[5] 許少尉,,陳思宇.基于深度學(xué)習(xí)的圖像分類方法[J].電子技術(shù)應(yīng)用,2018,,44(6):116-119.
[6] 張順,,龔怡宏,王進(jìn)軍.深度卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展及其在計(jì)算機(jī)視覺領(lǐng)域的應(yīng)用[J].計(jì)算機(jī)學(xué)報(bào),,2017,,42(3):453-462.
[7] 孫志軍,薛磊,,許陽明,,等.深度學(xué)習(xí)研究綜述[J].計(jì)算機(jī)應(yīng)用研究,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深度學(xué)習(xí)手寫體數(shù)字識別及應(yīng)用[J].電子技術(shù)應(yīng)用,,2018,,44(10):6-10.
作者信息:
張 璘,楊豐墑
(廈門理工學(xué)院 光電與通信工程學(xué)院,,福建 廈門361024)