馮明強(qiáng) 曹冬穎 李佳妮
摘? 要: 為了幫助養(yǎng)豬場(chǎng)實(shí)現(xiàn)豬只精準(zhǔn)管理,應(yīng)用深度學(xué)習(xí)技術(shù)設(shè)計(jì)了一款豬臉識(shí)別APP。利用ResNet50神經(jīng)網(wǎng)絡(luò)模型對(duì)照片進(jìn)行訓(xùn)練與預(yù)測(cè),并以MUI框架和Django框架為依托開發(fā)APP。實(shí)驗(yàn)結(jié)果表明,在ResNet50模型基礎(chǔ)上優(yōu)化后的網(wǎng)絡(luò),對(duì)豬的面部照片有著較高的識(shí)別率。
關(guān)鍵詞: 豬臉識(shí)別APP; ResNet50; 深度學(xué)習(xí); MUI框架
中圖分類號(hào):TP311.5? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ?文章編號(hào):1006-8228(2020)06-46-04
Abstract: In order to help the pig farm to achieve accurate pig management, a pig face recognition App is designed by using deep learning technology in this paper. The ResNet50 neural network model is used to train and predict photos, combining with MUI framework and Django framework, a pig face recognition App is finally realized. The experiment results show that the optimized network based on ResNet50 model has a high recognition rate for pig's facial photos.
Key words: pig face recognition App; ResNet50; deep learning; MUI framework
0 引言
隨著畜牧業(yè)不斷發(fā)展,人們對(duì)于食物安全和食品質(zhì)量的要求不斷提升。養(yǎng)殖場(chǎng)為了滿足集約化管理與精確測(cè)量的要求,需要進(jìn)行更高效的牲畜識(shí)別管理。目前用于豬只身份識(shí)別的方法主要為RFID標(biāo)簽方案,但是此方案耗時(shí)長(zhǎng)、成本高,耳標(biāo)易丟失,且要對(duì)豬耳朵打洞,豬難以適應(yīng),對(duì)操作人員的安全也構(gòu)成了威脅[1]。此外,在傳統(tǒng)的豬只識(shí)別方法下,養(yǎng)殖戶進(jìn)行騙保的現(xiàn)象難以避免。
近年來(lái),計(jì)算機(jī)視覺的飛速發(fā)展推動(dòng)了深度學(xué)習(xí)技術(shù)在眾多領(lǐng)域的廣泛應(yīng)用。卷積神經(jīng)網(wǎng)絡(luò)作為深度學(xué)習(xí)的一大經(jīng)典網(wǎng)絡(luò),在圖像識(shí)別上的表現(xiàn)比傳統(tǒng)方法更加優(yōu)秀。隨著AlexNet、VggNet、GoogleNet、ResNet等[2]深層網(wǎng)絡(luò)模型被相繼提出、不斷改進(jìn),網(wǎng)絡(luò)模型的識(shí)別準(zhǔn)確率越來(lái)越高,這同時(shí)帶來(lái)了梯度消失和梯度爆炸的問(wèn)題,而殘差網(wǎng)絡(luò)可以在一定程度上解決這個(gè)問(wèn)題[3]。ResNet50[4]是一種易優(yōu)化、計(jì)算負(fù)擔(dān)小的殘差學(xué)習(xí)框架。隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)迅速發(fā)展,各種APP憑借強(qiáng)大的實(shí)用功能愈發(fā)普及[5]。
本文介紹的豬臉識(shí)別APP利用ResNet50網(wǎng)絡(luò)模型的訓(xùn)練結(jié)果,實(shí)現(xiàn)了對(duì)豬只的高精度識(shí)別。這款A(yù)PP能夠方便養(yǎng)殖戶、保險(xiǎn)公司等用戶,減少養(yǎng)殖場(chǎng)進(jìn)行豬只識(shí)別所耗費(fèi)的人力、物力和財(cái)力,降低保險(xiǎn)公司被養(yǎng)殖戶騙取保險(xiǎn)金的概率。
1 數(shù)據(jù)采集處理與網(wǎng)絡(luò)模型訓(xùn)練
在深度學(xué)習(xí)中,網(wǎng)絡(luò)模型的結(jié)構(gòu)優(yōu)劣是識(shí)別率高低的決定性因素,因此下面將分析豬臉照片在ResNet50網(wǎng)絡(luò)模型下的準(zhǔn)確率。
1.1 數(shù)據(jù)采集與處理
數(shù)據(jù)集來(lái)源于吉林省某地的一家養(yǎng)豬場(chǎng),此場(chǎng)對(duì)豬只實(shí)行分欄管理。將攝像頭安裝在食槽上方,根據(jù)攝像頭視角范圍調(diào)整安裝角度后,可保證一個(gè)攝像頭能夠拍攝到五頭豬只吃飯時(shí)的臉部照片。由于豬圈不是完全處于室內(nèi),因此拍攝要考慮太陽(yáng)光照強(qiáng)度,在上午和下午的適宜時(shí)間打開攝像頭,拍攝期為三天。獲得視頻數(shù)據(jù)后,使用OpenCV完成對(duì)視頻流的分幀,得到的每一張圖片包含五頭豬??捎脙煞N方法獲取到單張照片,一種是使用目標(biāo)檢測(cè)神經(jīng)網(wǎng)絡(luò),另一種是使用標(biāo)記工具。為了提高分割的準(zhǔn)確率,本文采用labelImg工具,標(biāo)記出每一張圖片中較為清晰的豬臉,labelImg將每一張圖片中的標(biāo)簽信息保存在對(duì)應(yīng)的xml文件中,借助python對(duì)文件做相關(guān)操作,將每一張圖片中標(biāo)記出的豬臉裁剪為單張照片并保存到相應(yīng)編號(hào)的文件夾。最后,統(tǒng)一各編號(hào)豬的數(shù)據(jù)集并按照3:1:1比例劃分為訓(xùn)練集、驗(yàn)證集、測(cè)試集。
為了提高識(shí)別的精確度需要擴(kuò)充數(shù)據(jù)集大小,在訓(xùn)練網(wǎng)絡(luò)時(shí),利用Keras中的數(shù)據(jù)生成器對(duì)原始數(shù)據(jù)集進(jìn)行旋轉(zhuǎn)等增強(qiáng)操作。
1.2 網(wǎng)絡(luò)搭建與訓(xùn)練
在神經(jīng)網(wǎng)絡(luò)中,殘差網(wǎng)絡(luò)可以在不影響網(wǎng)絡(luò)性能的前提下解決梯度消失和梯度爆炸這兩個(gè)問(wèn)題。殘差網(wǎng)絡(luò)通過(guò)加入shortcutconnections,變得更易于優(yōu)化。ResNet50是一個(gè)性能優(yōu)良的的殘差網(wǎng)絡(luò)模型,它包含49個(gè)卷積層和1個(gè)全連接層[6]。為了提高豬臉識(shí)別準(zhǔn)確率,本文對(duì)ResNet50結(jié)構(gòu)進(jìn)行優(yōu)化,在最后的全連接層后連接一個(gè)最大池化層,以0.25的概率隨機(jī)丟棄特征,增加一層flatten層,最后連接一個(gè)全連接層。本文搭建的網(wǎng)絡(luò)在Keras平臺(tái)上運(yùn)行,keras是一種使用Python語(yǔ)言的深度學(xué)習(xí)框架,具有良好的封裝性,隱藏實(shí)現(xiàn)細(xì)節(jié),便于搭建、測(cè)試網(wǎng)絡(luò)。
在Resnet50殘差網(wǎng)絡(luò)模型下,對(duì)比分析不同數(shù)量級(jí)的學(xué)習(xí)率對(duì)驗(yàn)證集正確率的影響,可以得到如下結(jié)論:
⑴ 學(xué)習(xí)率lr在過(guò)大的時(shí)候(如圖1.lr=1e-3),損失函數(shù)難以收斂,導(dǎo)致誤差較大,驗(yàn)證集的準(zhǔn)確率在80%附近劇烈波動(dòng)。
⑵ 學(xué)習(xí)率lr在過(guò)小的時(shí)候(如圖3.lr=1e-5),可以看出損失函數(shù)在逐漸收斂,但是收斂速度太慢,在訓(xùn)練輪數(shù)到達(dá)40輪時(shí)loss值仍舊在1.0以上,而驗(yàn)證集準(zhǔn)確率由于損失函數(shù)值的影響,只到達(dá)72%左右。
⑶ 當(dāng)選擇學(xué)習(xí)率lr=1e-4(如圖2),則損失函數(shù)值收斂比較迅速,在40輪左右時(shí),已經(jīng)降到0.5左右,而準(zhǔn)確率也已經(jīng)到達(dá)了92%左右。
通過(guò)以上分析我們最終選擇學(xué)習(xí)率lr=1e-4。
2 APP總體設(shè)計(jì)
本款A(yù)PP設(shè)計(jì)主要分為四個(gè)模塊:登錄注冊(cè)模塊、天氣氣溫模塊、豬只信息修改模塊和照片識(shí)別模塊(如圖4所示)。登錄注冊(cè)模塊實(shí)現(xiàn)用戶的身份驗(yàn)證,確保不同養(yǎng)豬場(chǎng)的信息安全。天氣氣溫模塊能夠獲得今日的實(shí)時(shí)天氣。鑒于氣溫對(duì)豬的生長(zhǎng)發(fā)育和繁殖力等方面均有一定影響[7-8],故獲取氣溫可以便于養(yǎng)殖戶根據(jù)不同的氣溫情況對(duì)豬圈的室溫、通風(fēng)情況進(jìn)行調(diào)整。信息修改模塊方便養(yǎng)殖戶在豬的成長(zhǎng)過(guò)程中能夠?qū)崟r(shí)地更新豬的最新信息。照片識(shí)別模塊則對(duì)用戶上傳的照片進(jìn)行分析識(shí)別,并且展示豬只所對(duì)應(yīng)的詳細(xì)信息。
同時(shí),為了適應(yīng)“高內(nèi)聚低耦合”的設(shè)計(jì)思想,將神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練與識(shí)別和手機(jī)端APP進(jìn)行分離,把對(duì)運(yùn)行性能具有較高要求的模型訓(xùn)練與識(shí)別部署到服務(wù)器當(dāng)中去,借助計(jì)算機(jī)網(wǎng)絡(luò)使得APP與服務(wù)器能夠進(jìn)行交互,前后端的總體設(shè)計(jì)如圖5所示。
3 APP功能實(shí)現(xiàn)
在移動(dòng)端,為了使其擁有更好的跨平臺(tái)性和維護(hù)簡(jiǎn)單性,本文采用了由DCloud推出的混合APP前端開發(fā)框架—MUI框架。MUI框架具有輕量級(jí)、仿原生UI、跨平臺(tái)、易上手等特點(diǎn),同時(shí)也克服了以往Hybrid APP開發(fā)的頁(yè)面白屏、浮動(dòng)元素抖動(dòng)、下拉刷新不流暢等問(wèn)題[9]。在服務(wù)器端,考慮到本文搭建的神經(jīng)網(wǎng)絡(luò)模型使用了基于python語(yǔ)言的keras框架,故選擇python的Web框架—Django。Django框架具有url設(shè)計(jì)簡(jiǎn)潔、管理界面自動(dòng)化、可擴(kuò)展性強(qiáng)大等特點(diǎn)。Django自身所具有的MTV架構(gòu)也大大的簡(jiǎn)化了后端的邏輯開發(fā)。
在整個(gè)APP框架當(dāng)中,根據(jù)關(guān)鍵技術(shù)進(jìn)行劃分,系統(tǒng)主要包含了三個(gè)模塊:數(shù)據(jù)交互請(qǐng)求模塊,圖像識(shí)別模塊和數(shù)據(jù)存儲(chǔ)訪問(wèn)模塊。
3.1 數(shù)據(jù)交互技術(shù)模塊
在MUI官方文檔中說(shuō)明了網(wǎng)絡(luò)交互的API,mui封裝了常用的Ajax函數(shù),支持GET、POST請(qǐng)求方式,在數(shù)據(jù)傳輸時(shí)支持多種格式的數(shù)據(jù)類型。本豬臉識(shí)別APP開發(fā)均采用了JSON格式,因?yàn)镴SON格式是一種輕量級(jí)的數(shù)據(jù)交換格式,具有占用網(wǎng)絡(luò)資源小,與編程語(yǔ)言無(wú)關(guān)等優(yōu)點(diǎn),同時(shí)對(duì)電腦而言,解析和生成JSON格式的數(shù)據(jù)也具有較高的效率。
3.2 圖像識(shí)別模塊
在圖像識(shí)別模塊主要有兩大步驟:
⑴ 通過(guò)網(wǎng)絡(luò)請(qǐng)求傳輸照片。
⑵ 利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)。
在傳輸照片時(shí)將圖片轉(zhuǎn)化成base64編碼,base64是一種常用的傳輸8Bit字節(jié)碼的編碼方式,常用于傳遞較長(zhǎng)的標(biāo)識(shí)信息。因?yàn)槔胋ase64編碼圖片后,得到的數(shù)據(jù)是無(wú)法被人識(shí)別的,所以可以同時(shí)實(shí)現(xiàn)對(duì)圖片數(shù)據(jù)的加密(如圖6)。
在進(jìn)行預(yù)測(cè)時(shí),利用在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)保存好的權(quán)重參數(shù)模型(即保存的.h5文件),就可以得到待測(cè)試圖片對(duì)應(yīng)所有已有模型的one-hot編碼,進(jìn)一步得到上傳的圖片的樣本標(biāo)簽,再根據(jù)此標(biāo)簽從數(shù)據(jù)庫(kù)當(dāng)中獲取對(duì)應(yīng)的豬只信息發(fā)送回前端。
3.3 數(shù)據(jù)存儲(chǔ)訪問(wèn)模塊
將用戶信息與豬的信息存儲(chǔ)在Mysql數(shù)據(jù)庫(kù)當(dāng)中,而Django服務(wù)只需要對(duì)配置文件進(jìn)行配置就可以使用自身帶有的數(shù)據(jù)庫(kù)訪問(wèn)組件對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。也正是因?yàn)榭蚣鼙旧韺?duì)數(shù)據(jù)庫(kù)操作的封裝,使得編程者不必關(guān)心數(shù)據(jù)庫(kù)定義語(yǔ)言和操作語(yǔ)言,大大降低了操作的難度與出錯(cuò)率。Django自身還帶有admin后臺(tái)管理,只需要在終端進(jìn)行用戶創(chuàng)建操作和在admin.py文件里注冊(cè)需顯示的類信息以及自定義顯示樣式即可。管理員能夠在網(wǎng)頁(yè)端對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)直接進(jìn)行增、刪、改、查的操作。
豬臉識(shí)別APP的主要功能實(shí)現(xiàn)如圖7-10所示。
4 結(jié)束語(yǔ)
本文通過(guò)對(duì)具有良好性能的ResNet50網(wǎng)絡(luò)模型進(jìn)行學(xué)習(xí)研究,設(shè)計(jì)開發(fā)了一款界面簡(jiǎn)潔,操作簡(jiǎn)單的豬臉識(shí)別APP。此款A(yù)PP能夠在不需要標(biāo)簽的情況下,對(duì)豬進(jìn)行識(shí)別,降低了養(yǎng)殖成本。實(shí)驗(yàn)表明:Resnet50模型對(duì)豬臉照片有著較高的識(shí)別率,準(zhǔn)確率在92%左右。此外,在有適合的權(quán)重配置文件時(shí)可以直接應(yīng)用于其他動(dòng)物的識(shí)別,有著較好的擴(kuò)展性。在后續(xù)研究中,將進(jìn)一步優(yōu)化網(wǎng)絡(luò)模型,從而獲得更高的識(shí)別率,同時(shí)擴(kuò)展APP功能,提高APP的實(shí)用性。
參考文獻(xiàn)(References):
[1] 秦興,宋各方.基于雙線性卷積神經(jīng)網(wǎng)絡(luò)的豬臉識(shí)別算法[J].杭州電子科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2019.39(2):12-17
[2] 王衛(wèi)民,唐洋,張健,張軼秋.基于卷積神經(jīng)網(wǎng)絡(luò)特征融合的人臉識(shí)別算法[J].計(jì)算機(jī)與數(shù)字工程,2020.48(1):88-92,105
[3] 肖雅敏,張家晨,馮鐵.基于多窗口殘差網(wǎng)絡(luò)的單圖像超分辨率重建[J].計(jì)算機(jī)工程:1-11[2020-02-28].https://doi.org/10.19678/j.issn.1000-3428.0057224.
[4] HE K, ZHANG X, REN S,et al. Deep residual learning for?image recognition[C]//Proceeding of the IEEE Conference on Computer Vision and Pattern Recognition,2016:770-778
[5] 高國(guó)弘,緱曉輝,高愷寧.基于MUI前端框架繪制天氣預(yù)報(bào)APP[J].電腦編程技巧與維護(hù),2019.10:56-60
[6] 王恒,李霞,劉曉芳,徐文龍.基于ResNet50網(wǎng)絡(luò)的乳腺癌病理圖像分類研究[J].中國(guó)計(jì)量大學(xué)學(xué)報(bào),2019.30(1):72-77
[7] 韓君,靳偉霞.天津民俗文化的數(shù)字化讀物APP設(shè)計(jì)研究[J].包裝工程,2017.38(20):179-183
[8] 姚建國(guó),夏東.氣溫對(duì)豬繁殖力的影響[J].動(dòng)物科學(xué)與動(dòng)物醫(yī)學(xué),2000.2:25-27
[9] 譚良溪.淺談氣溫對(duì)豬生長(zhǎng)育肥的影響及對(duì)策[J].湖南畜牧獸醫(yī),1998.3:2-3