周文萱 胡龍?zhí)? 張敏 方宇濤 李欣鈺
摘 要: 針對常見動物識別的問題,提出了一種基于YOLO的識別分類系統(tǒng)。通過搭載linux系統(tǒng)的樹莓派完成實施檢測運(yùn)行的識別程序。利用YOLO算法進(jìn)行目標(biāo)物體檢測,其單個神經(jīng)網(wǎng)絡(luò)能夠在一幀圖像中直接預(yù)測邊界邊框(bounding box)和分類概率(classified probability),最后根據(jù)輸入圖像來輸出動物物種的識別結(jié)果。其識別準(zhǔn)確率針對鳥類可達(dá)94.61%,狗類為90.60%,牛類為79.03%。
關(guān)鍵詞: 物種圖像識別; 動物識別; YOLO; 神經(jīng)網(wǎng)絡(luò); 樹莓派
中圖分類號:TP319 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2019)03-22-04
Design of YOLO-based small animal recognition system
Zhou Wenxuan, Hu Longtao, Zhang Min, Fang Yutao, Li Xinyu
(School of Optoelectronic Information and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
Abstract: To solve the problem of species identification and population identification of small animals, a recognition and classification system based on YOLO (You Only Look Once) is proposed in this paper. The recognition program is implemented on a Raspberry Pi with Linux system, and YOLO is used as the detection framework. The single neural network can directly predict the bounding box and the classified probability in a frame image, and output the animal recognized according to the input image. The accuracy rate of identification is 94.61% for birds, 90.60% for dogs and 79.03% for cattle.
Key words: species image recognition; animal identification; YOLO; neural network; Raspberry Pi
0 引言
近年來,機(jī)器視覺越來越多的用于人類的交通、物流和安防等方面,其在代替人工重復(fù)機(jī)械的特征識別等方面發(fā)揮著重要的作用。但是自然環(huán)境、物種研究等領(lǐng)域的圖像識別卻并不多見,隨著深度學(xué)習(xí)的發(fā)展,國內(nèi)外有很多學(xué)者使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行圖像識別。HuangYue[1]等使用CNN算法進(jìn)行汽車圖標(biāo)識別,提高了識別的精度和系統(tǒng)的穩(wěn)定性。王福建[2]等設(shè)計了車輛信息檢測和識別系統(tǒng),其設(shè)計了不同顏色的識別,使得分類更加細(xì)化。但是傳統(tǒng)的算法都普遍存在一個問題,那就是檢測識別速度慢[3-6],計算量大不適合小型化。而Redmond提出的YOLO(you only look once)算法,能在保證識別精度的同時,提升運(yùn)算效率,加快檢測速度[7]。
針對機(jī)器視覺需要較大的處理系統(tǒng)和繁瑣的框架配置等問題,本文利用搭載linux和YOLO框架的樹莓派設(shè)計了小型便攜的物種識別系統(tǒng),該系統(tǒng)成本低可以大范圍普及使用,兼顧智能算法識別與低功耗小巧的雙重優(yōu)點,為產(chǎn)品普及提供了理論論證和數(shù)據(jù)支持。
1 YOLO神經(jīng)網(wǎng)絡(luò)識別算法
YOLO(You Only Look Once)算法,是一種端到端卷積神經(jīng)網(wǎng)絡(luò),常用于目標(biāo)物體檢測與識別。該算法將目標(biāo)檢測視為目標(biāo)區(qū)域預(yù)測與類別預(yù)測的回歸問題,采用單個卷積神經(jīng)網(wǎng)絡(luò)直接從圖像中預(yù)測目標(biāo)邊框和類別概率。YOLO的主要特點是快速檢測和較高的準(zhǔn)確率。YOLO直接將一張整圖應(yīng)用到網(wǎng)絡(luò)中去,以便更好地區(qū)分目標(biāo)和背景;同時,與其他目標(biāo)檢測識別方法將目標(biāo)檢測劃分成區(qū)域預(yù)測和類別預(yù)測等多個流程相比,YOLO將區(qū)域預(yù)測和類別預(yù)測整合在一個網(wǎng)絡(luò)中,從而提高檢測速率[5,8]。其檢測模型如圖1所示。
該算法將待檢測圖像劃分為一個S×S的網(wǎng)格,并且假設(shè)識別目標(biāo)的中心落在某個網(wǎng)格內(nèi),則該網(wǎng)格負(fù)責(zé)檢測此目標(biāo)[7-11]。與此同時每個網(wǎng)格預(yù)測B個目標(biāo)窗口,每個目標(biāo)窗口負(fù)責(zé)5個參數(shù)的計算:目標(biāo)的中心坐標(biāo)(x,y)、寬度(width)、高度(height)和置信概率(confidence):
⑴
式中:Pr(Object)為此網(wǎng)格中存在目標(biāo)的概率,表示該網(wǎng)格內(nèi)預(yù)測目標(biāo)中心坐標(biāo)位置的準(zhǔn)確性,也就是測量在特定數(shù)據(jù)集中檢測相應(yīng)物體準(zhǔn)確度的一個標(biāo)準(zhǔn)。
如果網(wǎng)格內(nèi)不存在目標(biāo)物體,則其Pr(Object)的值為0,(Intersection Over Union)為目標(biāo)預(yù)測窗口與真實窗口的重疊度,是一個位置定位精度的概率。
在最后進(jìn)行結(jié)果預(yù)測時,每個類別通過上述條件類別概率和目標(biāo)置信度的乘積得到該類別的置信分?jǐn)?shù):
⑵
綜上所述,經(jīng)過一系列的運(yùn)算輸出了一個維度為S2的向量,再將該高緯度向量進(jìn)行篩除,將低于閾值的值去除掉,利用NMS算法進(jìn)行迭代-遍歷-消除的過程;最終只留下置信分?jǐn)?shù)最高的輸出。
2 基于YOLO的樹莓派識別系統(tǒng)
本文設(shè)計的搭載在樹莓派上的基于YOLO算法的識別系統(tǒng)可以完成常見動物識別的工作[9]。對于細(xì)節(jié)和精度一直是圖像識別的難點,所以在識別動物有良好偽裝的情況下,準(zhǔn)確率大大降低。但在一般情況下,還是能將目標(biāo)物體與背景區(qū)分開,并且能給出目標(biāo)物體的中心坐標(biāo)和邊框。
當(dāng)檢測到包含有目標(biāo)物體后,將其目標(biāo)區(qū)域內(nèi)的目標(biāo)物體特征提取出來,用已經(jīng)訓(xùn)練好的分類器進(jìn)行分類識別,從而完成動物和物種識別分類的工作。
本文使用具有強(qiáng)拓展的卡片電腦樹莓派作為運(yùn)算平臺,圖像采集使用IMX2619原裝800萬像素攝像頭,并且在最新stretch版精簡了無用的功能。并且采用Pascal VOC2012數(shù)據(jù)集目標(biāo)系統(tǒng),使用其訓(xùn)練好的模型,在去除掉無用的分類后,可以針對:鳥bird、,貓cat、牛cow、狗dog、馬horse、羊sheep這六種常見的動物進(jìn)行識別[10]。
本文運(yùn)行系統(tǒng)為raspiberry-stretch版,ARM架構(gòu)的雙核CPU,主頻800MHz,未使用CUDA和GPU核心,且已經(jīng)部署好OPENCV、TensorFlow和Darknet框架。由于其運(yùn)算能力和內(nèi)存都不足,故進(jìn)行了量化模型的操作。
神經(jīng)網(wǎng)絡(luò)的節(jié)點和權(quán)重最初是存儲為32位的浮點數(shù)。量化模型最簡單的一個做法就是通過存儲每一層最小和最大的值來壓縮文件的大小,接著壓縮每一個浮點數(shù)為8位整型。這樣文件的大小就減少了75%。部分代碼如下所示:
curl-L"https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen
.pb.tar.gz" |
tar -C tensorflow/examples/label_image/data -xz
bazelbuildtensorflow/tools/graph_transforms:
transform_graph
bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=tensorflow/examples/label_image/data/inception_v3_2016_08_28_frozen.pb \
--out_graph=/tmp/quantized_graph.pb \
--inputs=input \
--outputs=InceptionV3/Predictions/Reshape_1 \
--transforms='add_default_attributes strip_unused_nodes
(type=float, shape="1,299,299,3")
remove_nodes(op=Identity, op=CheckNumerics)
fold_constants(ignore_errors=true)
fold_batch_norms fold_old_batch_norms
quantize_weights quantize_nodes
strip_unused_nodes sort_by_execution_order
3 系統(tǒng)測試和試驗結(jié)果
經(jīng)過一系列準(zhǔn)備工作和框架部署,為了驗證本文提出的基于YOLO算法的識別系統(tǒng)[11-14],采用自己制作的數(shù)據(jù)集進(jìn)行測試,通過編寫網(wǎng)絡(luò)爬蟲程序從中國動物圖片網(wǎng)爬取了大量的動物圖片,作為測試集使用。隨機(jī)抽取其中圖片如圖3所示。
如圖3所示,四種數(shù)據(jù)集的測試集部分目標(biāo)圖像已經(jīng)被標(biāo)注出,其目標(biāo)區(qū)域中心坐標(biāo)和長寬已經(jīng)保存[13],在此不再贅述。
本文為了簡化人工工作量,進(jìn)行人工校驗實行分?jǐn)?shù)據(jù)集測試和校驗,分為鳥類、狗、牛和人四類數(shù)據(jù)集,其中人數(shù)據(jù)集為無關(guān)集,用來測試模型的誤檢測率。其檢測結(jié)果如表1所示。
通過上述檢測可知,鳥類和狗類數(shù)據(jù)集的檢驗正確率達(dá)到了90%以上,牛類數(shù)據(jù)集的測試準(zhǔn)確率僅為79.03%。對于牛類數(shù)據(jù)集測試發(fā)現(xiàn),基于人類良好的視覺經(jīng)驗可以在褐色背景識別出牛類,但是對于機(jī)器來說,對于目標(biāo)物體的識別在有不明顯背景色區(qū)分的情況下很難做出良好的判斷,導(dǎo)致正確率不高。對比其他兩類驗證數(shù)據(jù)集,牛類的數(shù)據(jù)集中,如印度地區(qū)給牛身裝扮了很多首飾的圖片,也有泥濘背景中牛腿被泥水遮擋和不完整等情況的圖片,這類圖像的目標(biāo)識別區(qū)域誤檢率和漏檢率比較高,容易對整個系統(tǒng)的監(jiān)測造成誤差。另一方面,訓(xùn)練樣本數(shù)目太少,且深度學(xué)習(xí)算法中多維特征的提取維度不夠多,所以需要更多的樣本。樣本模型的數(shù)量太少不足以對于整體數(shù)據(jù)樣本進(jìn)行描述,因此其泛化能力不夠,對于差異較大的圖像預(yù)測不準(zhǔn)的概率較大[15]。人類的數(shù)據(jù)集作為不存在其分類特征文件,故理論檢測為0,但經(jīng)過數(shù)據(jù)集的查驗,發(fā)現(xiàn)部分圖片有和寵物同框的現(xiàn)象,所以檢測結(jié)果也有部分識別到。同時該檢測結(jié)果運(yùn)行十分緩慢,由于系統(tǒng)內(nèi)存不夠,實驗是分多次做的,最后統(tǒng)一計算出結(jié)果。
針對上述系統(tǒng)誤差的分析結(jié)果,還可以采用如下改善方法。
⑴ YOLO中每個Grid有30維其中8維是回歸box的坐標(biāo),二維是box的confidence,還有20維的類別,要在此基礎(chǔ)上增加基于HOG的局部特征和顏色提取等多維度的特征。
⑵ 損失函數(shù)設(shè)計的優(yōu)化,讓預(yù)測坐標(biāo)(x,y,w,h),confidence和classification這三個方面達(dá)到最優(yōu)的平衡,最基礎(chǔ)的yolo采用sum-squared error loss方法將坐標(biāo)權(quán)重和分類誤差視為同等重要顯然是不合理的,需要增加坐標(biāo)預(yù)測的權(quán)重,將其loss weight賦予更大的值[16]。
⑶ 目標(biāo)待識別物體大小不同的預(yù)測處理中,小的bounding box中預(yù)測的框線偏一點其偏移loss很大,所以采取將box的長和寬取平方根代替原本的長和寬,其對于小box(狗類和鳥類)的偏移,loss小的多,從而提高了其準(zhǔn)確率[17]。
4 試驗結(jié)論
本文設(shè)計了一種基于YOLO算法的小型化的識別檢測跟蹤系統(tǒng),利用YOLO算法中tiny-model可以極大地減少cpu占用,從而提升其處理效率。經(jīng)檢驗其識別率較好,但是精度有待提高。本研究主要研究和部署了基于ARM架構(gòu)的YOLO深度學(xué)習(xí)分類器,并對于網(wǎng)絡(luò)爬取的不同類型圖片進(jìn)行目標(biāo)檢測識別。其綜合檢測識別率為89.04%。樹莓派微型卡片電腦可以運(yùn)行該系統(tǒng),可以擴(kuò)展成為帶有圖像識別功能的監(jiān)控探頭,對于以后發(fā)展的智能監(jiān)控探頭,提供了理論驗證的依據(jù)。
同時對于默認(rèn)的YOLO-tiny算法中的前期特征提取和部分權(quán)重配置提出了增改的建議,但是增加維度會造成運(yùn)算量呈幾何數(shù)量增長導(dǎo)致效率低下問題還需進(jìn)一步解決,要平衡好效率與準(zhǔn)確率。
本文在ARM架構(gòu)部署了YOLO和darknet的開源神經(jīng)網(wǎng)絡(luò),并且實現(xiàn)了一套圖像輸入-識別-分類的檢測系統(tǒng),將傳統(tǒng)工作站運(yùn)行的復(fù)雜神經(jīng)網(wǎng)絡(luò)進(jìn)行簡化,為低功耗便攜式移動圖像識別設(shè)備提供了可靠的理論驗證。
參考文獻(xiàn)(References):
[1] Huang Y, Wu R, Sun Y, et al. Vehicle Logo Recognition
System Based on Convolutional Neural Networks With a Pretraining Strategy[J]. IEEE Transactions on Intelligent Transportation Systems,2015.16(4):1951-1960
[2] 王福建,張俊,盧國權(quán)等.基于YOLO的車輛信息檢測和跟蹤
系統(tǒng)[J].工業(yè)控制計算機(jī),2018.7:89-91
[3] Dlagnekov L, Belongie S. Recognizing cars[J]. Ecologi-
calModelling,2005.113(13):71-81
[4] 邱道尹,張紅濤,劉新宇等.基于機(jī)器視覺的大田害蟲檢測系
統(tǒng)[J].農(nóng)業(yè)機(jī)械學(xué)報,2007.38(1):120-122
[5] Redmon J, Farhadi A. YOLO9000: Better, Faster,
Stronger[J],2016:6517-6525
[6] 李彥冬,郝宗波,雷航.卷積神經(jīng)網(wǎng)絡(luò)研究綜述[J].計算機(jī)應(yīng)用,
2016.36(9):2508-2515
[7] 魏海坤.神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計的理論與方法[M].國防工業(yè)出版
社,2005.
[8] 魏星.基于SVM的山體滑坡災(zāi)害圖像識別方法[J].電子測量
技術(shù),2013.36(8):65-70
[9] 李亮,丁萬山.基于ARM的紙幣號碼識別系統(tǒng)[J].電子測量技
術(shù),2008.31(10):68-72
[10] 程曦,吳云志,張友華等.基于深度卷積神經(jīng)網(wǎng)絡(luò)的儲糧害
蟲圖像識別[J].中國農(nóng)學(xué)通報,2018.34(1):154-158
[11] 王宇寧,龐智恒,袁德明.基于YOLO算法的車輛實時檢測[J].
武漢理工大學(xué)學(xué)報,2016.38(10):41-46
[12] 嚴(yán)曉波.基于單鏡頭的車輛檢測與跟蹤方法研究[D].貴州民
族大學(xué),2018.
[13] 潘蓉,孫偉.基于預(yù)分割和回歸的深度學(xué)習(xí)目標(biāo)檢測[J].光學(xué)
精密工程,2017.25(10s):221-227
[14] 劉堯.基于深度學(xué)習(xí)的氣泡水平尺自動矯正系統(tǒng)設(shè)計[D].浙
江大學(xué),2018.
[15] 李天劍,黃斌,劉江玉等.卷積神經(jīng)網(wǎng)絡(luò)物體檢測算法在物
流倉庫中的應(yīng)用[J].計算機(jī)工程,2018.44(6):176-181
[16] 張春玉,黃知紅.一種有效的基于卷積神經(jīng)網(wǎng)絡(luò)的車輛檢索
算法[J].科技創(chuàng)新與應(yīng)用,2018.13.
[17] 樂國慶.基于車載視覺系統(tǒng)的目標(biāo)檢測優(yōu)化算法研究[D].北
京交通大學(xué),2017.