王子鈺,趙怡巍,劉振宇
(沈陽工業(yè)大學(xué)信息科學(xué)與工程學(xué)院,沈陽110870)
中國是茶葉的主要原產(chǎn)地,是世界上茶葉種植量、消費(fèi)量、出口量最大的國家之一。目前茶葉的采摘通常采用人工采摘,但是難以保證采摘的質(zhì)量,成本也較高。
茶葉的自動(dòng)化采摘目前還處于研究階段,通常是基于茶葉嫩芽的顏色特征和形狀特征,運(yùn)用圖像處理的方法先將茶葉嫩芽識別出來,再進(jìn)行采摘。如楊福增等人[1]利用G顏色特征以及“兩瓣一心”的形狀特征來識別嫩芽。汪建[2]利用顏色空間的H、S特征和區(qū)域生長算法完成了對3種拍攝角度的茶葉嫩芽的分割。唐仙[3]等人則根據(jù)R-B顏色特征,利用多種閾值分割反法實(shí)現(xiàn)嫩芽分割。吳雪梅[4]等人在G-B顏色特征的基礎(chǔ)上,加入了中值濾波和形態(tài)學(xué)運(yùn)算來實(shí)現(xiàn)嫩芽的識別。張可[5]等人則在前人的基礎(chǔ)上加入k-means聚類分割和偽目標(biāo)去除的形態(tài)學(xué)方法。方坤禮[6]等人在G-B顏色特征基礎(chǔ)上采用了改進(jìn)的JSEG技術(shù)來識別嫩芽。基于顏色和形狀的算法雖然研究較多,但普遍存在諸如適用性差、易受多種因素影響等不足之處。
近年來,隨著硬件和大數(shù)據(jù)的發(fā)展,人工智能與深度學(xué)習(xí)的應(yīng)用日漸廣泛,利用深度學(xué)習(xí)來實(shí)現(xiàn)目標(biāo)檢測已經(jīng)成為計(jì)算機(jī)視覺的熱門研究方向。目標(biāo)檢測算法主要分為兩種思想:第一種是“兩步走”,先進(jìn)行區(qū)域推薦,而后進(jìn)行目標(biāo)分類,典型代表有RCNN系列(R-CNN[7]、Fast R-CNN[8]以及Faster RCNN[9]等),其檢測準(zhǔn)確率雖然不低,但是在速度方面還遠(yuǎn)不能滿足實(shí)時(shí)檢測需求;第二種是“一步走”,即基于深度學(xué)習(xí)的回歸思想,采用一個(gè)網(wǎng)絡(luò)進(jìn)行端到端的一步到位,典型代表有YOLO[10]、SSD[11]。YOLO雖然能夠達(dá)到實(shí)時(shí)檢測的需求,但是其檢測準(zhǔn)確率與第一種方法存在較大差距,且對于多尺度目標(biāo)檢測的準(zhǔn)確率較低。相比而言,SSD對于多尺度目標(biāo)的檢測準(zhǔn)確率更高,同時(shí)兼具速度快、精度高等優(yōu)點(diǎn),在如今的各個(gè)行業(yè)都有許多最新的研究,如江鵬等人[12]利用SSD檢測蘋果葉片的病害;吳水清等人[13]實(shí)現(xiàn)了不同場景下車輛的檢測;方陽等人[14]利用SSD將人臉的檢測與頭部姿態(tài)的估計(jì)融合在了一起;朱玉剛[15]實(shí)現(xiàn)了無人駕駛時(shí)的多目標(biāo)檢測;黃豪杰[16]等人對SSD輸入模型進(jìn)行了改進(jìn),使其在水果識別上有了更好的效果。但目前國內(nèi)外運(yùn)用SSD算法識別茶葉嫩芽則仍處于構(gòu)思狀態(tài),尚無相關(guān)研究。
在茶葉嫩芽的實(shí)際采摘中,常存在一張茶葉圖像中含有多個(gè)嫩芽的情況,需要一種算法對茶葉圖像中的多個(gè)嫩芽目標(biāo)進(jìn)行檢測識別。在此提出一種基于TensorFlow深度學(xué)習(xí)框架的目標(biāo)檢測算法,即利用SSD算法來對茶葉嫩芽進(jìn)行檢測識別。其主要工作包括兩部分:第一部分是茶葉數(shù)據(jù)集的制作,在采集了茶葉圖像之后,利用提取顏色特征的方法對茶葉圖像進(jìn)行預(yù)處理,使茶葉與背景信息分離。隨后通過數(shù)據(jù)集增強(qiáng)的方法建立茶葉數(shù)據(jù)集,流程如圖1所示。第二部分是利用SSD算法檢測茶葉嫩芽,首先要對茶葉數(shù)據(jù)集進(jìn)行人工標(biāo)注,隨后導(dǎo)入神經(jīng)網(wǎng)絡(luò)中利用SSD算法進(jìn)行訓(xùn)練,之后多次調(diào)整參數(shù)得到可以檢測識別出茶葉嫩芽的神經(jīng)網(wǎng)絡(luò)模型,并進(jìn)行測試評價(jià),流程如圖2所示。
圖1數(shù)據(jù)集制作
圖2 SSD算法檢測茶葉嫩芽
圖像的采集就是茶葉圖像的拍攝。此處所拍攝圖像主要是浙江省湖州市安吉縣溪龍鄉(xiāng)黃杜村的白茶以及杭州市西湖風(fēng)景區(qū)的龍井茶,采用單反照相機(jī)拍攝,共800余張,圖像素質(zhì)為3216×2136像素。從中挑選出拍攝清晰的多張圖像,經(jīng)分割等處理后,全部統(tǒng)一為512×512像素,jpg格式,用于后續(xù)的圖像預(yù)處理。
圖像預(yù)處理旨在利用傳統(tǒng)的提取顏色特征的方法來隱去茶葉圖像中的一些無關(guān)的背景和噪聲信息,以便于后續(xù)的訓(xùn)練。主要的圖像預(yù)處理步驟包括:圖像降噪、提取顏色特征、圖像分割、形態(tài)學(xué)處理、掩模處理等。
2.2.1 圖像降噪
茶葉圖像在拍攝過程中因?yàn)橄鄼C(jī)硬件因素、拍攝環(huán)境、光照強(qiáng)度等因素,會(huì)包含大量噪聲,因此需要進(jìn)行濾波降噪來獲取高質(zhì)量圖像。
濾波降噪在盡量保證茶葉原始圖像信息完整的同時(shí),可以初步消除圖像中無用的噪聲信息,便于后續(xù)的圖像處理。由于茶葉圖像均為512×512像素,1×1、2×2的濾波器降噪效果不明顯,而4×4、5×5的濾波器降噪效果又過強(qiáng),會(huì)破壞原始圖像的信息,使圖像變得模糊,因此此處采用3×3的均值濾波器來對茶葉原始圖像進(jìn)行濾波降噪。
2.2.2 提取顏色特征
顏色特征是茶葉與背景進(jìn)行區(qū)分的一個(gè)重要特征,茶葉圖像中,嫩芽多為嫩綠色與淺綠色,老葉多為深綠色,背景信息則為其他顏色,顏色差別較大。因此可以通過提取茶葉圖像的顏色特征來區(qū)分出茶葉與背景信息。
提取顏色特征需要用到顏色模型,常用的主要有RGB、HSI、Lab等。提取顏色特征后,將圖像進(jìn)行灰度化,可以進(jìn)一步縮減每張圖像的信息量,便于對比與分割。
圖3給出了對G-B、S、a、R-B四種顏色特征進(jìn)行提取的灰度圖。其中,圖3(a)提取的是G-B顏色特征(一般稱為超綠因子),可以看到,相比于其他三種特征,這一圖像中的嫩芽和老葉,與背景的灰度區(qū)分度最大,可以被更好分割出來。
圖3提取顏色特征灰度圖
2.2.3圖像分割
提取顏色特征轉(zhuǎn)化為灰度圖后,需要進(jìn)行圖像分割處理。
圖像分割的目的是剔除茶葉桿、過老的老葉等與茶葉嫩芽差別較大的背景信息,將茶葉嫩芽和一些老葉保留下來。圖像分割時(shí)使用Otsu算法,它是由日本學(xué)者大津(Nobuyuki Otsu)于1979年提出的一種圖像灰度自適應(yīng)閾值的分割算法。Otsu算法的思想是根據(jù)圖像灰度值的特性,將圖像分成背景和前景(即茶葉嫩芽和一些老葉)兩部分。
分割之后,圖像變?yōu)榱硕祱D,即僅有“0”、“1”兩個(gè)元素的黑白圖像。其中,茶葉嫩芽和一些老葉部分變?yōu)榱恕?”元素,在圖像中表現(xiàn)為白色,背景信息為“0”元素,在圖像中表現(xiàn)為黑色。
2.2.4 形態(tài)學(xué)處理與掩模處理
通常,受到噪聲、嫩葉輪廓不完整等因素的影響,圖像在閾值化分割后所得到的二值圖的邊界都不平滑,目標(biāo)內(nèi)部有孔洞或輪廓不連續(xù),背景區(qū)域上也會(huì)散布一些小的噪聲點(diǎn),還需進(jìn)一步處理[17]。形態(tài)學(xué)運(yùn)算的腐蝕和膨脹可以有效地解決上述問題。
相較于原圖像,因?yàn)楦g的結(jié)果要使得各像元比之前變得更小,所以適用于去除高峰噪聲。而膨脹的結(jié)果會(huì)使得各像元比之前的變得更大,所以適用于去除低谷噪聲。因此,這里使用半徑為4的“disk”結(jié)構(gòu)來對分割后的二值圖進(jìn)行開運(yùn)算(先腐蝕后膨脹)來去除噪聲,再進(jìn)行閉運(yùn)算(先膨脹后腐蝕)填充空洞。
隨后對茶葉圖像進(jìn)行掩模處理,即令二值圖與原圖進(jìn)行按位與運(yùn)算,便可得到去除了背景信息的圖像。圖4給出了圖像預(yù)處理的一個(gè)示例。
圖4圖像預(yù)處理示例
數(shù)據(jù)集的數(shù)量決定著訓(xùn)練效果的好壞。因?yàn)椴杉膱D像數(shù)量有限,所以采取數(shù)據(jù)集增強(qiáng)的方法來擴(kuò)充數(shù)據(jù)集,包括每一張圖像鏡像翻轉(zhuǎn)、每一張圖像旋轉(zhuǎn)±15°、施加隨機(jī)顏色特征(亮度、飽和度)等。
經(jīng)過數(shù)據(jù)集增強(qiáng)后,樣本數(shù)量可達(dá)到2400張。按照3:1的比例分配訓(xùn)練集與驗(yàn)證集。其中訓(xùn)練集數(shù)量為1800張,驗(yàn)證集數(shù)量為600張。
將該數(shù)據(jù)集命名為tea_leaf。由此,便建立了后續(xù)SSD算法訓(xùn)練所需要的數(shù)據(jù)集。
SSD(Single Shot MultiBox Detector)是劉偉(Wei Liu)在2016年提出的一種目標(biāo)檢測算法,是目前主流的目標(biāo)檢測框架之一。SSD的網(wǎng)絡(luò)模型基于一個(gè)前饋的卷積神經(jīng)網(wǎng)絡(luò)VGG16,其結(jié)構(gòu)如圖5所示。但相比VGG16做出了如下的更改[18]:
(1)將VGG16全連接層中的FC6層和FC7層替換成3×3的卷積層Conv6和1×1的卷積層Conv7;
(2)去掉VGG16中所有的Dropout層和FC8層;
(3)將VGG16中的池化層pool5由原來stride=2的2×2變成stride=1的3×3;
(4)添加了Atrous算法(hole算法),目的是獲得更加密集的得分映射;
(5)在VGG16的基礎(chǔ)上新增了卷積層來獲得更多的特征圖用于檢測。
圖5 SSD網(wǎng)絡(luò)框架圖
SSD算法在訓(xùn)練后會(huì)產(chǎn)生一個(gè)如圖6所示的矩形框,用以標(biāo)記檢測物體所在區(qū)域,被稱為bounding box(邊界框)。目標(biāo)檢測的是為了使邊界框生成的和人工標(biāo)注的ground truth(真實(shí)框)盡可能的一致,因此還需要經(jīng)過設(shè)置默認(rèn)框、人工標(biāo)注真實(shí)框、NMS算法、損失函數(shù)計(jì)算、參數(shù)調(diào)節(jié)幾個(gè)步驟。
圖6 SSD邊界框選中區(qū)域
在SSD算法的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中,共有Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2、Conv4_3這六個(gè)卷積層,當(dāng)圖像輸入網(wǎng)絡(luò)后,每個(gè)卷積層的特征圖上都會(huì)以每個(gè)特征點(diǎn)為中心,生成一系列同心的矩形框,稱為默認(rèn)框,如圖7所示。換言之,默認(rèn)框是特征圖上預(yù)設(shè)的一些目標(biāo)預(yù)選框。
圖7設(shè)置默認(rèn)框
一般情況下,每個(gè)特征圖上都會(huì)設(shè)置多個(gè)默認(rèn)框,其尺度和長寬比存在差異。假設(shè)網(wǎng)絡(luò)中有m個(gè)特征圖,每個(gè)特征圖會(huì)生成k個(gè)默認(rèn)框,則每個(gè)默認(rèn)框的尺度為:
其中,Sk表示默認(rèn)框大小相對于圖像的比例,Smin和Smax表示比例的最小值與最大值,這里取0.2和0.9。對于不同的特征圖,默認(rèn)框的尺度都會(huì)隨著特征圖大小的降低而線性增加。
按照上述基礎(chǔ)尺寸會(huì)生成一個(gè)正方形的默認(rèn)框,但默認(rèn)框數(shù)量太少且類型單一,所以在此引入五種長寬比ar:
根據(jù)式(1)的尺度和式(2)的五種長寬比,可以得到在不同特征圖上的每一個(gè)默認(rèn)框的寬和高:
此外,每個(gè)特征圖還會(huì)設(shè)置一個(gè)長寬比ar=1且尺度為的默認(rèn)框,以此每個(gè)特征圖都會(huì)對應(yīng)六種默認(rèn)框。這樣定義的默認(rèn)框在不同特征圖有不同尺度,在同一個(gè)特征圖有不同的長寬比,基本可以覆蓋輸入圖像中各種形狀和大小的目標(biāo)。
確認(rèn)了默認(rèn)框后,還需要確認(rèn)真實(shí)框,真實(shí)框是人為地在茶葉原圖上標(biāo)注出來的嫩芽位置。在神經(jīng)網(wǎng)絡(luò)中,真實(shí)框就是數(shù)據(jù)集的標(biāo)簽,引導(dǎo)神經(jīng)網(wǎng)絡(luò)進(jìn)行有監(jiān)督學(xué)習(xí)。
利用labelImg工具制作標(biāo)簽,人工標(biāo)注出每幅圖像中茶葉嫩芽的位置,如圖8所示,進(jìn)而生成xml文件,再將其轉(zhuǎn)化成tfrecords文件。xml文件包含著圖像的全部標(biāo)注信息,tfrecords文件用于導(dǎo)入tensorflow深度學(xué)習(xí)框架中。
圖8人工標(biāo)注真實(shí)框
由于生成的大量默認(rèn)框可能存在相互重疊的情況,需要用到NMS算法(Non-Maximum Suppression,非極大值抑制)對生成的大量默認(rèn)框進(jìn)行后處理[19],去除冗余的默認(rèn)框。NMS算法的本質(zhì)思想是搜素局部最大值,抑制非極大值,通過合并策略生成一個(gè)茶葉嫩芽的最終預(yù)測框。合并時(shí)主要是socre(參考置信度)與IOU(Intersection over Union,交并比)這兩個(gè)指標(biāo)[20]。
在訓(xùn)練時(shí),真實(shí)框與默認(rèn)框按照如下方式進(jìn)行配對:首先,尋找與每一個(gè)真實(shí)框有最大IOU的默認(rèn)框。此處,兩個(gè)框的IOU計(jì)算采用Jaccard系數(shù),設(shè)A,B為兩個(gè)框,則有:
通過Jaccard系數(shù)求出兩個(gè)框的IOU,可以保證每一個(gè)真實(shí)框與唯一的一個(gè)默認(rèn)框?qū)?yīng)起來。
然后將沒有配對的默認(rèn)框與任意一個(gè)真實(shí)框嘗試配對,只要兩者之間的IOU大于閾值(SSD300網(wǎng)絡(luò)框架中默認(rèn)為0.5),即判定為已匹配上,并將此歸為正樣本。
最后再將仍沒有配對到真實(shí)框的設(shè)置為負(fù)樣本,并在SSD神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)控制正樣本與負(fù)樣本之比為1:3。
確定了訓(xùn)練樣本后,還需要計(jì)算樣本的訓(xùn)練損失值,以保證生成的預(yù)測框盡可能與人工標(biāo)注的真實(shí)框接近。
因此,訓(xùn)練的最終目的就是求得使損失函數(shù)最小時(shí)的神經(jīng)網(wǎng)絡(luò)參數(shù)。SSD算法中神經(jīng)網(wǎng)絡(luò)的損失函數(shù)為定位損失(location loss)和置信度損失(confidence loss)兩部分的加權(quán)和,其表達(dá)式如下:
其中,N是匹配到真實(shí)框的默認(rèn)框數(shù)量,如果N=0,則將損失設(shè)為0;參數(shù)琢用于調(diào)整定位損失和置信度損失之間的比例,默認(rèn)琢=1。
定位損失函數(shù)的計(jì)算是典型的smmothL1損失,其公式如下:
其中:
l為預(yù)測框,g為真實(shí)框,cx、cy為補(bǔ)償后的默認(rèn)框的中心坐標(biāo),ww 、h為默認(rèn)框的寬和高。表示第i個(gè)默認(rèn)框與第j個(gè)真實(shí)框是否匹配,取值為0或1為默認(rèn)框經(jīng)過編碼后的位置預(yù)測值為真實(shí)框編碼后的位置參數(shù)。
置信度損失函數(shù)是交叉熵?fù)p失函數(shù),其式如下:
其中i為默認(rèn)框序號,j為真實(shí)框序號,p為類別序號,p=0表示背景表示正樣本的損失,即分類為類別p的損失表示負(fù)的損失,即分類為背景的損失表示第i個(gè)默認(rèn)框?qū)?yīng)類別p的預(yù)測概率,由神經(jīng)網(wǎng)絡(luò)中的Softmax層產(chǎn)生。默認(rèn)框i與真實(shí)框j關(guān)于類別p匹配時(shí),p的預(yù)測概率越高,則損失越小。
在訓(xùn)練過程中,需要多次調(diào)整參數(shù),進(jìn)行多次訓(xùn)練,以求得損失最小的神經(jīng)網(wǎng)絡(luò)模型。
環(huán)境搭建主要是TensorFlow GPU版框架、NVIDIA CUDA9.0、NVIDIA cuDNN 8.0。
TensorFlow GPU版改變了常用的基于CPU進(jìn)行計(jì)算的框架,改為運(yùn)用GPU進(jìn)行計(jì)算;CUDA是NVIDIA推出的運(yùn)算平臺;cuDNN則是專門針對深度學(xué)習(xí)框架設(shè)計(jì)的一套GPU計(jì)算加速方案。三者進(jìn)行搭配,可以有效提高機(jī)器學(xué)習(xí)的速度。
在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,Learning rate(學(xué)習(xí)率)、Learning rate decay(學(xué)習(xí)率衰減)、Batch size(一次訓(xùn)練樣本數(shù))是影響最終結(jié)果的三個(gè)重要因素。
其中,Learning rate作為監(jiān)督學(xué)習(xí)與深度學(xué)習(xí)中重要的參數(shù),它表示神經(jīng)網(wǎng)絡(luò)訓(xùn)練的速率,決定著損失函數(shù)能否以及在何時(shí)能內(nèi)收斂到最優(yōu)點(diǎn)。Learning rate過大會(huì)導(dǎo)致?lián)p失值振蕩或無法收斂,過小會(huì)導(dǎo)致訓(xùn)練過慢,影響效率。在SSD算法對圖像的訓(xùn)練中,它的范圍通常為1×10-2~1×10-6。
Learning rate decay的目的是防止Learning rate過大,在收斂到最優(yōu)點(diǎn)的時(shí)候會(huì)來回?cái)[蕩,所以要讓Learning rate隨著訓(xùn)練輪數(shù)不斷按指數(shù)級下降。在SSD算法對圖像的訓(xùn)練中,它的范圍通常為略小于1的數(shù),例如0.90~0.99。
Batch size的大小影響模型的優(yōu)化程度和速度,同時(shí)其直接影響到GPU內(nèi)存的使用情況。Batch size過大會(huì)導(dǎo)致GPU滿載運(yùn)行,引起內(nèi)存爆炸。過小則會(huì)導(dǎo)致梯度跳動(dòng),影響訓(xùn)練的準(zhǔn)確率和速率。在SSD算法對圖像的訓(xùn)練中,它的范圍通常為1~32(取2的平方數(shù))。
經(jīng)過多次調(diào)整參數(shù)訓(xùn)練,最終得出了如下的對比結(jié)果(任選其中三次為例,均為訓(xùn)練50000次后的結(jié)果),如表1所示。
表1三組網(wǎng)絡(luò)參數(shù)
選取序號1所保存的模型,作為本次的實(shí)驗(yàn)結(jié)果。
訓(xùn)練之后,選取一定數(shù)量的圖像對保存的模型進(jìn)行測試,嫩芽檢測效果如圖9。
圖9茶葉嫩芽檢測效果
圖9由上到下分別為茶葉原圖、掩模圖、檢測結(jié)果圖。由左到右則為普通多株茶葉嫩芽、處于邊緣位置的茶葉嫩芽、處于雜亂背景下的茶葉嫩芽??梢钥闯觯瑢τ诓煌慕嵌?、不同位置、不同數(shù)量的茶葉圖像,在經(jīng)過預(yù)處理后,SSD算法都可以用矩形框?qū)⒉枞~嫩芽檢測出來。
計(jì)算模型的AP和mAP,作為模型性能的評價(jià)指標(biāo)。AP表示準(zhǔn)確率(precision)的平均值,用于衡量檢測器在每個(gè)類別上的性能好壞。mAP表示AP的平均值,是對多個(gè)驗(yàn)證集個(gè)體求平均AP值,即:
其中,QR為全部驗(yàn)證集為驗(yàn)證集中預(yù)測正確集合的累加和。由于茶葉嫩芽的識別是二分類,在檢測識別時(shí)只需區(qū)分嫩芽和背景,所以此處m=1,即AP=mAP。
經(jīng)過計(jì)算,算法的準(zhǔn)確率達(dá)到了91.5%,相比于傳統(tǒng)的只提取了顏色特征算法[21]的85.6%,有了出色的提升。說明此種不僅利用顏色特征進(jìn)行圖像預(yù)處理、還利用SSD神經(jīng)網(wǎng)絡(luò)進(jìn)行目標(biāo)檢測的算法具有更高的準(zhǔn)確率,同時(shí)對于多個(gè)嫩芽也有更好的檢測效果。也說明所提算法對于茶葉嫩芽的識別效果更好,符合預(yù)期。
介紹了一種利用SSD算法來對茶葉嫩芽進(jìn)行自動(dòng)檢測識別的算法,由實(shí)驗(yàn)結(jié)果可見,該算法以較高的準(zhǔn)確率實(shí)現(xiàn)了對茶葉嫩芽的檢測識別,符合設(shè)計(jì)預(yù)期。其結(jié)果也存在一些不足,如個(gè)別檢測框位置有偏差,存在個(gè)別漏檢情況等。后續(xù)可以通過比如進(jìn)一步豐富數(shù)據(jù)集的方法,使目標(biāo)具有更加豐富多樣的特征,來加以解決。此外也可利用GAN(Generative Adversarial Networks,生成式對抗網(wǎng)絡(luò))來對數(shù)據(jù)集進(jìn)行進(jìn)一步擴(kuò)充,對于提高識別的準(zhǔn)確率以及適用性都有更大幫助,有待進(jìn)一步研究。本研究可為未來大規(guī)模的茶葉自動(dòng)化采摘打下理論基礎(chǔ),具有廣闊的應(yīng)用前景。