《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于深度學(xué)習(xí)的圖像分類搜索系統(tǒng)
基于深度學(xué)習(xí)的圖像分類搜索系統(tǒng)
2019年電子技術(shù)應(yīng)用第12期
張 璘,楊豐墑
廈門理工學(xué)院 光電與通信工程學(xué)院,福建 廈門361024
摘要: 圖像分類是根據(jù)圖像的信息將不同類別的圖像區(qū)分開來(lái),是計(jì)算機(jī)視覺(jué)中重要的基本問(wèn)題,也是圖像檢測(cè)、圖像分割、物體跟蹤、行為分析等其他高層視覺(jué)任務(wù)的基礎(chǔ)。深度學(xué)習(xí)是機(jī)器學(xué)習(xí)研究中的一個(gè)新的領(lǐng)域,其動(dòng)機(jī)在于建立、模擬人腦進(jìn)行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),它模仿人腦的機(jī)制來(lái)解釋數(shù)據(jù),例如圖像、聲音和文本。該系統(tǒng)基于Caffe深度學(xué)習(xí)框架,首先對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練分析構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò),提取數(shù)據(jù)集圖像特征信息,得到數(shù)據(jù)對(duì)應(yīng)的分類模型,然后以bvlc-imagenet訓(xùn)練集模型為基礎(chǔ),對(duì)目標(biāo)圖像進(jìn)行擴(kuò)展應(yīng)用,實(shí)現(xiàn)“以圖搜圖”Web應(yīng)用。
中圖分類號(hào): TN919.8;TP389.1
文獻(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.
Image classification search system based on deep learning method
Zhang Lin,Yang Fengshang
School of Opto-Electronic and Communication Engineering,Xiamen University of Technology,Xiamen 361024,China
Abstract: Image classification is to distinguish different types of images based on image information. It is an important basic issue in computer vision, and is also the fundamental for image detection, image segmentation, object tracking and behavior analysis. Deep learning is a new field in machine learning research. Its motivation is to simulate the neural network of the human brain for analytical learning. Like the human brain, deep learning can interpret the data of images, sounds and texts. The system is based on the Caffe deep learning framework. Firstly, the data set is trained and analyzed, and a model based on deep learning network is built to obtain the image feature information and corresponding data classification. Then the target image is expanded based on the bvlc-imagenet training set model. And finally,"search an image with an image" Web application is achieved.
Key words : image classification;depth learning;Caffe framework;convolution neural network

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),卷積定義為:

rgzn3-gs1-2.gif

其中,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所示。

rgzn3-t1.gif

    如果輸入的圖像是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所示。

rgzn3-t2.gif

1.2 卷積核

    卷積核為圖1中3×3矩陣的數(shù)量,因?yàn)橛袝r(shí)要提取的特征非常多且廣泛,所以需要用更多不同的矩陣來(lái)掃(多掃幾遍),那么矩陣的個(gè)數(shù)就是卷積核個(gè)數(shù)。

    輸出的矩陣公式為:

     rgzn3-gs3.gif

    當(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大小的特征圖。

rgzn3-t3.gif

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)練流程圖。

rgzn3-t4.gif

    其中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所示。

rgzn3-t5.gif

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é)果。

rgzn3-t6.gif

    從測(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所示。

rgzn3-t7.gif

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所示。

rgzn3-t8.gif

    后臺(tái)分類:后臺(tái)將圖片載入bvlc模型進(jìn)行運(yùn)算,如圖9展示的是第一個(gè)卷積層的卷積核與進(jìn)行第一次卷積后的圖片。

rgzn3-t9.gif

    最終后臺(tái)經(jīng)過(guò)分析特征得到圖片分類的概率分布圖,如下結(jié)果最可能的分類為283,再通過(guò)查找label文件得到283類為label:n02123394 Persian cat,如圖10所示。

rgzn3-t10.gif

    也可以查看前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所示。

rgzn3-t11.gif

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)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。