袁 貴
(長(zhǎng)江職業(yè)學(xué)院 湖北 武漢 430070)
近年來(lái)智能手機(jī)發(fā)展迅速,據(jù)全球技術(shù)市場(chǎng)分析與咨詢機(jī)構(gòu)Canalys報(bào)告,僅2021年第四季度,中國(guó)大陸智能手機(jī)出貨量達(dá)到了8 400萬(wàn)部。智能手機(jī)的拍照技術(shù)進(jìn)步迅速,不僅像素大幅提高,美顏、濾鏡等功能幫助用戶可隨時(shí)拍出美麗的照片。此外網(wǎng)絡(luò)技術(shù)的發(fā)展使數(shù)碼照片的數(shù)據(jù)量激增,在各種社交應(yīng)用APP中,用戶可隨意分享生活,由此激發(fā)用戶增加拍照數(shù)量。除用戶拍照,其他圖片來(lái)源也不容小覷,如用戶瀏覽消息的過(guò)程中保存的風(fēng)景照、新聞圖、合照等,也會(huì)產(chǎn)生大量照片數(shù)據(jù)。
面對(duì)海量圖像數(shù)據(jù),傳統(tǒng)相冊(cè)管理方法依據(jù)照片的拍攝時(shí)間、地點(diǎn)及圖片來(lái)源所屬的手機(jī)應(yīng)用進(jìn)行分類。此法的弊端是,如果用戶對(duì)圖片的時(shí)間地點(diǎn)等信息無(wú)法確定時(shí),想找到所需照片非常不易。針對(duì)這一問題,需要基于內(nèi)容分類的相冊(cè),用戶若想找風(fēng)景照,去分類為風(fēng)景的相冊(cè)找,用戶想找自拍照,去分類為人物的相冊(cè)找,這將極為便利。如果用戶自定義各種分類,并分類保存圖片,雖然后期查找圖片方便,但是保存圖片非常耗時(shí),所以,設(shè)計(jì)一套能夠基于圖片內(nèi)容自動(dòng)分類的智能相冊(cè)管理系統(tǒng)具有現(xiàn)實(shí)意義。
人工智能是當(dāng)今時(shí)代的潮流,發(fā)展迅速,機(jī)器學(xué)習(xí)作為人工智能的分支,幾乎成為人工智能的代名詞。20世紀(jì)80年代末以來(lái),機(jī)器學(xué)習(xí)的發(fā)展大致經(jīng)歷了兩次浪潮:淺層學(xué)習(xí)和深度學(xué)習(xí)[1]。在淺層學(xué)習(xí)時(shí)期的人工神經(jīng)網(wǎng)絡(luò),多數(shù)只含一層隱層節(jié)點(diǎn)的淺層模型,具有代表性的淺層機(jī)器學(xué)習(xí)模型為支持向量機(jī)。而深度學(xué)習(xí)一般包含大于3層的模型,在ImageNet組織的圖像分類大賽上,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)[2]效果令人驚嘆,對(duì)120萬(wàn)張圖片進(jìn)行分類時(shí),其精度已超過(guò)了人類的識(shí)別率。此后新的神經(jīng)網(wǎng)絡(luò)模型紛紛出現(xiàn),例如AlexNet,GoogLeNet,VGG(visual geometry group),ResNet等[1],不斷地提高模型的性能。
隨著卷積神經(jīng)網(wǎng)絡(luò)的不斷發(fā)展,推動(dòng)了圖片分類技術(shù)進(jìn)步,卷積神經(jīng)網(wǎng)絡(luò)在圖像分類方面應(yīng)用廣泛[3-5]?;谶@一算法開發(fā)的圖片管理軟件層出不窮,目前圖片管理軟件大致分為兩大類別[6-7],即半自動(dòng)智能圖片管理系統(tǒng)和全自動(dòng)智能圖片管理系統(tǒng)。半自動(dòng)智能圖片功能擁有可交互的UI設(shè)計(jì),用戶可標(biāo)注人物身份等信息。劉璐璐等[8]提出基于QT的智能電子相冊(cè),嚴(yán)舒婷等[9]提出基于OpenCV視覺庫(kù)實(shí)現(xiàn)的智能相冊(cè)系統(tǒng),全自動(dòng)的智能圖片管理系統(tǒng)不需要用戶的介入即可以對(duì)圖片進(jìn)行多維度的歸類。
主流手機(jī)目前已安裝智能分類相冊(cè),使用全卷積網(wǎng)絡(luò)和圖像金字塔算法進(jìn)行圖片處理。按照拍攝地點(diǎn)及圖片來(lái)源的手機(jī)應(yīng)用進(jìn)行分類,按拍攝的時(shí)間地點(diǎn)產(chǎn)生圖片集,智能相冊(cè)自動(dòng)識(shí)別圖片類別,用戶根據(jù)拍照時(shí)間由近及遠(yuǎn)進(jìn)行瀏覽,大部分智能分類相冊(cè)分類為:人物、風(fēng)景、美食、植物、建筑、服飾等。其中功能最強(qiáng)大的人物分類,除了把人物分出來(lái),還會(huì)運(yùn)用人臉識(shí)別技術(shù),把不同的人進(jìn)行二次歸類。
由于手機(jī)存儲(chǔ)空間受限,用戶將照片拷貝至電腦、ipad等不同設(shè)備瀏覽圖片,此時(shí)手機(jī)本地相冊(cè)的分類功能并不能應(yīng)用至其他電子設(shè)備中。用戶可尋求其他方法解決該問題,例如將照片存儲(chǔ)至云端的智能相冊(cè),擁有智能分類的google相冊(cè),該功能無(wú)法在中國(guó)大陸地區(qū)應(yīng)用,國(guó)內(nèi)類似的軟件有“一刻相冊(cè)”“時(shí)光相冊(cè)”,但使用并不廣泛,同時(shí)圖片上傳至網(wǎng)盤,不僅泄露隱私,而且網(wǎng)盤空間需要付費(fèi)。針對(duì)以上圖片管理軟件的不足,本文設(shè)計(jì)了本地圖片自動(dòng)分類管理軟件。
傳統(tǒng)的圖像分類操作為三個(gè)步驟:圖像預(yù)處理、圖像特征提取、模式分類。
(1)圖像預(yù)處理:通過(guò)圖像預(yù)處理來(lái)提高圖像分類的效率和精度,常見的處理為:調(diào)整亮度、對(duì)比度、圖像直方圖;圖像中若存在噪聲,采用高斯濾波、均值濾波等方法去除噪聲;通過(guò)二值化、膨脹和腐蝕等形態(tài)學(xué)處理,使圖像邊界信息明顯。
(2)圖像特征提?。禾卣魈崛∈莻鹘y(tǒng)圖像分類的關(guān)鍵步驟,操作得好壞將直接影響圖片分類的效果。特征提取即提取圖片內(nèi)容的關(guān)鍵信息,如圖片的顏色,紋理,邊界形狀,密度等特征。特征提取技術(shù)受到大眾認(rèn)可的方法有不列顛哥倫比亞大學(xué)的大衛(wèi)勞伊等人提出的SIFT(scale-lnvariant feature transform,尺度不變特征變換),和由西亞吉安等人提出的Gist(空間包絡(luò)特征)[10]。
(3)模式分類:該功能將輸入的圖像進(jìn)行分類,支持向量機(jī)、隨機(jī)森林[11]等效果較好的傳統(tǒng)模式分類方法。
通過(guò)以上三個(gè)步驟,便可以對(duì)目標(biāo)圖片進(jìn)行歸類。
隨著深度學(xué)習(xí)技術(shù)的發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(CNN)已是目前圖像分類的主流方法。卷積神經(jīng)網(wǎng)絡(luò)由輸入層、卷積層(convolutional layer)、池化層(pooling layer,也稱為取樣層)、全連接層及輸出層構(gòu)成,由若干個(gè)卷積層和池化層組成。卷積神經(jīng)網(wǎng)絡(luò)相比傳統(tǒng)方法能夠?qū)崿F(xiàn)端對(duì)端的數(shù)據(jù)處理,可自動(dòng)對(duì)圖像進(jìn)行層次化的特征提取,并且通過(guò)權(quán)值共享和局部連接使得模型參數(shù)數(shù)量減少,加快訓(xùn)練速度。
本系統(tǒng)主要功能是基于圖片中的內(nèi)容對(duì)圖片進(jìn)行自動(dòng)分類,用以提高用戶查找圖片的效率,系統(tǒng)包含以下三個(gè)功能:
(1)圖片分類管理:系統(tǒng)準(zhǔn)確地識(shí)別用戶拍攝的照片,保存在對(duì)應(yīng)的類別中。本文圖片類別共為六類:人物、風(fēng)景、食物、動(dòng)物、交通工具、其他。
(2)相冊(cè)瀏覽:用戶按照各種類別瀏覽圖片。
(3)圖形化界面:便于用戶操作,以上功能在圖像化界面實(shí)現(xiàn)。
除實(shí)現(xiàn)基本功能外,為提升用戶體驗(yàn),系統(tǒng)需滿足以下特性:
(1)實(shí)用性:界面簡(jiǎn)單實(shí)用,人機(jī)交互便利。用戶誤操作,應(yīng)有反饋;
(2)高效性:用戶使用系統(tǒng)進(jìn)行分類,等待時(shí)間短;
(3)可擴(kuò)展性:本文使用VGG19網(wǎng)絡(luò)實(shí)現(xiàn)圖片分類,隨著深度學(xué)習(xí)技術(shù)不斷發(fā)展,圖片處理效果越來(lái)越好,系統(tǒng)具有可擴(kuò)展性,便于后期升級(jí)。
在分析國(guó)內(nèi)外各種圖片自動(dòng)歸類管理軟件的優(yōu)缺點(diǎn)基礎(chǔ)上,本文設(shè)計(jì)出本地的圖片自動(dòng)歸類軟件,實(shí)現(xiàn)圖片自動(dòng)分類和相冊(cè)瀏覽,系統(tǒng)總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)包括兩大功能:圖片分類和相冊(cè)瀏覽。圖片分類功能將用戶未分類的圖片按類別分開保存,實(shí)現(xiàn)這一功能,需要完成人臉檢測(cè)和圖片分類,創(chuàng)建相應(yīng)的文件系統(tǒng)。相冊(cè)瀏覽功能按類別瀏覽相冊(cè),該功能利用PyQt5工具設(shè)計(jì)的圖形交互界面實(shí)現(xiàn)。
圖像分類模塊主要實(shí)現(xiàn)對(duì)圖片的自動(dòng)分類,在分類前,用戶選擇需要分類的圖片所在文件夾,依次從文件夾中加載圖片。預(yù)訓(xùn)練模型沒有人物類別,利用人臉檢測(cè)來(lái)識(shí)別人物可解決該問題,人臉檢測(cè)速度快且準(zhǔn)確率高。系統(tǒng)讀取圖片,先檢測(cè)圖片是否包含人臉,若有人臉,則判定為人物類別;若無(wú)人臉,則再對(duì)圖片進(jìn)行分類,并將圖片存入對(duì)應(yīng)類別的文件夾。反復(fù)進(jìn)行上述操作,直至文件夾中所有圖片加載完成。
3.3.1 人臉檢測(cè)功能設(shè)計(jì)
人臉檢測(cè)功能使用OpenCV庫(kù)中基于哈爾特征(Haarlike features)的分類器進(jìn)行設(shè)計(jì),Haar分類器由Haarlike特征,AdaBoost算法,級(jí)聯(lián)和積分圖快速計(jì)算組成。
(1)Haar-like特征:Haar特征分為四類:邊界特征、線條特征、中心特征和對(duì)角線特征,這四類組合成特征模板。
(2)AdaBoost算法:AdaBoost為迭代算法,針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的分類器,即弱分類器,將弱分類器集合起來(lái),構(gòu)造一個(gè)更強(qiáng)的最終分類器。
(3)級(jí)聯(lián):通過(guò)多個(gè)強(qiáng)分類器的組合使用,增加識(shí)別的準(zhǔn)確率。
(4)積分圖:能夠描述全局信息的矩陣表示方法。積分圖的構(gòu)造方式為位置(x,y)處的值是原圖像(x,y)左上角方向所有像素之和。
3.3.2 圖片分類設(shè)計(jì)
(1)本文使用卷積神經(jīng)網(wǎng)絡(luò)VGG19來(lái)進(jìn)行圖片類別識(shí)別,VGG19包含了19個(gè)隱藏層(16個(gè)卷積層和3個(gè)全連接層)。
(2)圖片分類流程如下:讀取圖片后,加載訓(xùn)練好的分類模型和類別標(biāo)簽,分類模型為從互聯(lián)網(wǎng)下載的“imagenet-vgg-verydeep-19.mat”,類別標(biāo)簽為“synset_words.txt”,運(yùn)行程序時(shí),返回圖片類別標(biāo)簽,根據(jù)標(biāo)簽名稱將圖片存入與標(biāo)簽對(duì)應(yīng)的文件夾即可完成圖片歸類。
(3)選擇文件和觸發(fā)分類函數(shù)由PyQt5的按鈕控件加控制函數(shù)實(shí)現(xiàn)。
3.3.3 相冊(cè)查看功能設(shè)計(jì)
相冊(cè)查看功能使用圖形界面實(shí)現(xiàn),用戶選擇需要查看的相冊(cè),在圖形界面顯示相應(yīng)文件夾的圖片。相冊(cè)查看功能關(guān)鍵控件為下拉框控件和網(wǎng)格布局。下拉框控件提供用戶要查看的類別功能,并傳遞對(duì)應(yīng)類別的參數(shù),不同參數(shù)對(duì)應(yīng)不同的文件路徑,網(wǎng)格布局顯示圖片。
系統(tǒng)利用Scipy.misc模塊來(lái)實(shí)現(xiàn)圖片的讀取、存儲(chǔ)等基礎(chǔ)操作。使用Imread讀取圖片,將圖片縮放至224×224標(biāo)準(zhǔn)格式,在圖片分類前進(jìn)行預(yù)處理,將圖片去均值,增加Batch維度,轉(zhuǎn)換為Float32類型的數(shù)據(jù)。查看相冊(cè)使用Imresize調(diào)整圖片大小。成功獲取圖片類別后,返回圖片類別標(biāo)簽,根據(jù)標(biāo)簽和類別字符串對(duì)比,確定圖片存儲(chǔ)路徑。
系統(tǒng)核心模塊實(shí)現(xiàn)如下:
使用OpenCV人臉識(shí)別分類器進(jìn)行人臉檢測(cè),人臉模型無(wú)須自己訓(xùn)練,使用OpenCV自帶的模型“haarcascade_frontalface_default.xml”。
(1)通過(guò)cv2.CascadeClassifier函數(shù)加載人臉識(shí)別分類器模型,實(shí)現(xiàn)檢測(cè)圖片中是否存在人臉的功能,在檢測(cè)前,先對(duì)圖片進(jìn)行預(yù)處理。
img = cv2.imread(imgPath) #讀取圖片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #將圖片轉(zhuǎn)化為灰度圖
(2)經(jīng)過(guò)預(yù)處理后,加載人臉識(shí)別分類器模型:
classifier = cv2.CascadeClassifier() # OpenCV人臉識(shí)別分類器
(3)調(diào)用識(shí)別人臉:
faceRects = classifier.detectMultiScale
(4)通過(guò)返回的參數(shù)判斷圖片中是否存在人臉:
if len(faceRects) # 大于0則檢測(cè)到人臉
(1)圖片分類通過(guò)構(gòu)建VGG19卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),選擇文件和觸發(fā)分類函數(shù)由PyQt5按鈕控件加控制函數(shù)實(shí)現(xiàn)。
根據(jù)VGG19網(wǎng)絡(luò)結(jié)構(gòu)構(gòu)件前向傳播網(wǎng)絡(luò),網(wǎng)絡(luò)功能可分為兩部分,第一部分是全連接層之前,為特征提取,從全連接層開始為第二部分,目的是獲取類別。VGG19網(wǎng)絡(luò)使用卷積核為3×3,步長(zhǎng)為(1,1,1,1),邊界用0填充。池化層采用最大池化,步長(zhǎng)為2,邊界用0填充。通過(guò)圖片加載函數(shù)加載圖片,并壓縮為標(biāo)準(zhǔn)格式。加載模型和標(biāo)簽文件后,構(gòu)建CNN前向傳播網(wǎng)絡(luò),返回標(biāo)簽,根據(jù)標(biāo)簽可知圖片類別,將圖片存儲(chǔ)至對(duì)應(yīng)類別的文件夾。
(2)預(yù)訓(xùn)練模型分類為一千類,需要將一千類映射到本文所設(shè)計(jì)的六類中,映射關(guān)系如表1所示。
表1 類別映射表
相冊(cè)查看功能使用PyQt下拉框控件和網(wǎng)格布局來(lái)實(shí)現(xiàn)。用戶點(diǎn)擊下拉框控件選擇要查看的類別,選擇類別后傳遞對(duì)應(yīng)類別的參數(shù),鏈接到不同的文件夾路徑下,在網(wǎng)格布局中顯示圖片。
測(cè)試系統(tǒng)所使用的軟件測(cè)試環(huán)境為Windows操作系統(tǒng),硬件測(cè)試環(huán)境顯卡RTX2080Ti,內(nèi)存16 G,用戶實(shí)際使用顯卡顯存最低為8 G,否則將調(diào)用CPU進(jìn)行運(yùn)算。
測(cè)試系統(tǒng)設(shè)計(jì)的功能是否正常,點(diǎn)擊按鈕查看關(guān)聯(lián)函數(shù)是否成功,測(cè)試下拉框是否正確,顯示圖片是否有誤。并測(cè)試系統(tǒng)在進(jìn)行圖片分類時(shí)的成功率。
圖片分類測(cè)試:人物、動(dòng)物、交通工具、風(fēng)景、食物每個(gè)類別各使用一百?gòu)垐D片進(jìn)行測(cè)試。測(cè)試思路:在個(gè)人相冊(cè)每個(gè)類別隨機(jī)選取100張圖片測(cè)試,不足部分由百度圖庫(kù)中收集。收集人物類,選取自拍、合照、半身照,全身照等樣例;收集食物類,選取快餐、零食、蔬菜、水果、炒菜等樣例;收集動(dòng)物類,選取常見的寵物貓狗,以及普通動(dòng)物,如大象、老虎、猴子等;收集交通工具類,選取飛機(jī)、火車、汽車、摩托車、自行車等照片。
以動(dòng)物為例,隨機(jī)選取100張圖片放入“動(dòng)物測(cè)試”文件夾中,開始分類。若識(shí)別圖片為動(dòng)物,則圖片存入“動(dòng)物”類別,同時(shí)刪除“動(dòng)物測(cè)試”文件夾中對(duì)應(yīng)的圖片;若識(shí)別結(jié)果不是動(dòng)物,則不對(duì)圖片進(jìn)行操作。按此步驟,“動(dòng)物”文件夾為分類成功圖片,“動(dòng)物測(cè)試”文件夾為分類失敗圖片。分類完成,進(jìn)行數(shù)據(jù)統(tǒng)計(jì),動(dòng)物每100張成功識(shí)別85張,食物每100張成功識(shí)別71張,人物每100張成功識(shí)別75張,交通工具每100張成功識(shí)別76張,風(fēng)景每100張成功識(shí)別67張。
由測(cè)試結(jié)果可知,動(dòng)物、交通工具、人物的分類成功率較高,因?yàn)樵陬A(yù)訓(xùn)練模型中,動(dòng)物和交通工具的分類非常細(xì)化,OpenCV人臉識(shí)別分類器對(duì)人臉的檢測(cè)較為成熟。風(fēng)景和食物的識(shí)別成功率較低,因?yàn)轱L(fēng)景和食物出現(xiàn)的場(chǎng)景比較復(fù)雜,為改善這一問題,可以考慮在圖片分類前分割圖像,提取圖像的典型特征,再進(jìn)行分類。
本文利用VGG19網(wǎng)絡(luò)實(shí)現(xiàn)智能化的圖像分類,并設(shè)計(jì)與實(shí)現(xiàn)了一種基于卷積神經(jīng)網(wǎng)絡(luò)的智能圖片管理系統(tǒng)。系統(tǒng)經(jīng)過(guò)完整地測(cè)試,可實(shí)現(xiàn)對(duì)大量圖片進(jìn)行基于內(nèi)容的自動(dòng)歸類與整理的預(yù)期目標(biāo)。后續(xù)研究中可考慮使用更大型的預(yù)訓(xùn)練模型進(jìn)一步提高圖片識(shí)別模型的性能,并提高用戶界面的友好性。