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