楊 亞, 徐增丙, 王 銳, 廖 劍
(1. 武漢科技大學(xué)機(jī)械自動(dòng)化學(xué)院,湖北 武漢 430081; 2. 武漢科技大學(xué)冶金裝備及其控制教育部重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430081; 3. 武漢市農(nóng)業(yè)科學(xué)院,湖北 武漢 430065)
農(nóng)業(yè)監(jiān)測(cè)是實(shí)施智能化精細(xì)農(nóng)業(yè)的一個(gè)重要環(huán)節(jié)。在蘑菇生產(chǎn)過(guò)程中,蘑菇的采摘及分類(lèi)是最后一道重要工序,傳統(tǒng)方法都靠人工判斷蘑菇是否成熟,然后再進(jìn)行采摘和分類(lèi),這不僅對(duì)人工經(jīng)驗(yàn)要求極高,而且增加了勞動(dòng)強(qiáng)度,不利于蘑菇智能化種植的推廣。
近年來(lái),隨著深度學(xué)習(xí)技術(shù)的飛速發(fā)展,很多研究人員將深度學(xué)習(xí)技術(shù)應(yīng)用到了農(nóng)作物的檢測(cè)和識(shí)別方面[1]?;谏疃壬窠?jīng)網(wǎng)絡(luò)(deep neural networks,DNN)的方法可以自動(dòng)學(xué)習(xí)特征表示,不再需要人工提取特征。DIAS P A 等[2]使用卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)和支持向量機(jī)(support vector machine,SVM)相結(jié)合的方法來(lái)提取復(fù)雜背景下蘋(píng)果花的特征。有學(xué)者將R-CNN(regions with CNN features)網(wǎng)絡(luò)用于溫室作物圖像中檢測(cè)成熟和未成熟的草莓[3-4]。還有學(xué)者使用Faster R-CNN 網(wǎng)絡(luò)利用RGB、NIR 圖像及它們的組合來(lái)檢測(cè)不同的水果(甜瓜、鱷梨、芒果和橙子等)[5-6]。也有學(xué)者提出基于ResNet-101 的RFCN(region-based fully convolutional networks) 網(wǎng)絡(luò)用于疏果前蘋(píng)果識(shí)別[7-8]。SONG Y 等[9]提出了一種檢測(cè)和計(jì)算溫室中辣椒數(shù)量的方法。利用上述方法雖然能較好地檢測(cè)和識(shí)別出農(nóng)作物,但精度不高,只是輸出農(nóng)作物周?chē)臋z測(cè)框,并沒(méi)有農(nóng)作物的具體輪廓,而且農(nóng)作物的單體分割效果不佳。
本文在做蘑菇的檢測(cè)和識(shí)別任務(wù)時(shí),使用了Mask R-CNN 網(wǎng)絡(luò),不僅提升了蘑菇檢測(cè)的準(zhǔn)確度,能較好地區(qū)分出成熟與未成熟的蘑菇,同時(shí)由于Mask R-CNN網(wǎng)絡(luò)具有良好的實(shí)例分割性能,對(duì)有遮擋或重疊的蘑菇也能進(jìn)行精準(zhǔn)地單體分割[10]。
Mask R-CNN 是由HE 等[10]在2017 年提出的一種新的目標(biāo)檢測(cè)模型,不僅能實(shí)現(xiàn)對(duì)物體的檢測(cè),同時(shí)還能對(duì)物體實(shí)現(xiàn)精準(zhǔn)的實(shí)例分割。Mask R-CNN 算法流程如圖1 所示。首先,將輸入的彩色圖像利用ResNet50+FPN 的特征提取網(wǎng)絡(luò)來(lái)提取圖像特征。其次,將提取的圖像特征輸入到RPN(region proposal network)網(wǎng)絡(luò),RPN 網(wǎng)絡(luò)對(duì)所有的感興趣區(qū)域通過(guò)Anchor 機(jī)制進(jìn)行篩選得到最終的候選區(qū)域。然后,使用基于雙線性插值的RoIAlign 池化層,得到特征點(diǎn)連續(xù)的特征向量。最后,將特征向量輸入到兩個(gè)并行的結(jié)構(gòu)分支,第1 個(gè)分支經(jīng)過(guò)FC 層得到邊界框和類(lèi)別,第2 個(gè)分支通過(guò)FCN網(wǎng)絡(luò)獲得Mask 圖,兩個(gè)分支合并得到最終的檢測(cè)結(jié)果。

圖1 Mask R-CNN 算法流程Fig. 1 Algorithm flow of Mask R-CNN
經(jīng)典Mask R-CNN 采用的是ResNet101+FPN 網(wǎng)絡(luò)對(duì)圖像進(jìn)行特征提取,而本文只是對(duì)同類(lèi)蘑菇進(jìn)行檢測(cè)和識(shí)別,因此將ResNet101 替換為ResNet50,以減少計(jì)算參數(shù),同時(shí)防止過(guò)擬合。ResNet50+FPN 網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。

圖2 ResNet50 與FPN 網(wǎng)絡(luò)結(jié)構(gòu)Fig. 2 Network structure of ResNet50 and FPN
從結(jié)構(gòu)圖中可看出,ResNet50 分為從Stage0~Stage4 共5 個(gè)階段,每個(gè)階段經(jīng)過(guò)卷積后會(huì)輸出尺寸不同的特征圖。其中Stage0 可以看作對(duì)Input 進(jìn)行預(yù)處理,因其占用內(nèi)存過(guò)大,不參與構(gòu)建FPN 網(wǎng)絡(luò),其余4 個(gè)階段生成的特征圖M1~M4 被用來(lái)構(gòu)建FPN 網(wǎng)絡(luò),這是一個(gè)自底向上的前饋計(jì)算過(guò)程,底層的特征層通過(guò)1×1 的卷積得到與上一層相同的通道數(shù)。接著是一個(gè)自頂向下的特征映射過(guò)程,上層的特征層通過(guò)2 倍的最近鄰上采樣得到與下一層特征層一樣的寬和高,再經(jīng)過(guò)橫向連接得到融合后的新特征層。然后,將融合后的特征層經(jīng)過(guò)一個(gè)3×3 的卷積來(lái)消除上采樣的混疊現(xiàn)象。最后,對(duì)特征圖P4 采用0.5 倍的下采樣得到特征圖像P5,將P1~P5 輸入到RPN 網(wǎng)絡(luò)。
RPN 是在Faster R-CNN 網(wǎng)絡(luò)中首次被提出來(lái)的,它替換了之前R-CNN 和Fast R-CNN 網(wǎng)絡(luò)中選擇性搜索的算法,真正實(shí)現(xiàn)了目標(biāo)檢測(cè)中端到端的計(jì)算,在提升檢測(cè)精度的同時(shí)大大提高了檢測(cè)速度[11]。RPN 網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示。首先,使用3×3 的卷積滑動(dòng)窗口對(duì)特征圖上的特征點(diǎn)進(jìn)行掃描遍歷,每次滑動(dòng)生成9 種不同大小和縱橫比的錨框,目的是盡可能多地包含該特征點(diǎn)所映射的目標(biāo)。接著有兩個(gè)1×1 卷積的并行分支,一個(gè)分支對(duì)錨框使用softmax 進(jìn)行二分類(lèi),判斷錨框?yàn)榍熬斑€是背景;另一個(gè)分支對(duì)錨框進(jìn)行BBox 回歸操作,對(duì)錨框的位置進(jìn)行微調(diào)。最后,Proposal 層對(duì)兩個(gè)分支的結(jié)果進(jìn)行處理,保留前景得分高的錨框,并進(jìn)行非極大值抑制處理,得到最終的RoIs。

圖3 RPN 網(wǎng)絡(luò)結(jié)構(gòu)Fig. 3 Network structure RPN
為了保證實(shí)例分割的精準(zhǔn)度,在Mask R-CNN 中采用RoIAlign 層替代了Faster R-CNN 中的RoIPooling 層,取消了量化和整數(shù)化操作。RoIAlign 原理如圖4 所示。虛線表示feature map,實(shí)線表示RoI,可看出特征圖上的RoI 被分為2×2 個(gè)bin,在每個(gè)bin 中平均采樣得到4個(gè)點(diǎn)的位置,并通過(guò)雙線性插值的方法計(jì)算這4 個(gè)點(diǎn)對(duì)應(yīng)的像素值,然后對(duì)這4 個(gè)點(diǎn)的像素值進(jìn)行最大或平均池化,得到該bin 的像素值,并生成2×2 的特征圖。

圖4 RoIAlign 原理Fig. 4 Schematic diagram of RoIAlign
FCN(全卷積)網(wǎng)絡(luò)能夠準(zhǔn)確地分割圖像中的目標(biāo),它是一種包含卷積和反卷積的端到端、點(diǎn)到點(diǎn)的網(wǎng)絡(luò)。對(duì)輸入的圖像進(jìn)行卷積后,可通過(guò)反卷積對(duì)最后一個(gè)卷積層的特征圖進(jìn)行上采樣,使其恢復(fù)成輸入時(shí)的尺寸,從而可對(duì)每個(gè)像素點(diǎn)進(jìn)行分類(lèi),使目標(biāo)物體的邊緣信息更加準(zhǔn)確,以此實(shí)現(xiàn)目標(biāo)物的精準(zhǔn)分割。
Mask R-CNN 的損失函數(shù)如式(1)所示。

損失函數(shù)是平均二值交叉熵?fù)p失函數(shù),可對(duì)每個(gè)像素采用sigmoid 函數(shù)進(jìn)行二分類(lèi)。mask 分支對(duì)每一個(gè)RoI 都有k×m2維度的輸出,k為類(lèi)別數(shù),m2代表二值mask 分辨率,為m×m。若某個(gè)RoI 的類(lèi)別為k,則Lmask僅定義在第k個(gè)mask 上,其他類(lèi)別對(duì)應(yīng)的mask 不參與損失計(jì)算。
算法流程如圖5 所示。首先,對(duì)蘑菇圖像進(jìn)行采集,將采集到的圖像劃分為訓(xùn)練集和測(cè)試集;然后,對(duì)訓(xùn)練集進(jìn)行手工標(biāo)注,將蘑菇分為成熟和未成熟兩類(lèi),并生成json 文件開(kāi)始訓(xùn)練網(wǎng)絡(luò);最后,對(duì)訓(xùn)練好的模型用測(cè)試集進(jìn)行測(cè)試,輸出結(jié)果并進(jìn)行相應(yīng)的分析。

圖5 算法流程Fig. 5 Algorithm flow
以蘑菇為研究對(duì)象,為了獲得訓(xùn)練樣本,在湖北省某公司的蘑菇培育大棚中進(jìn)行蘑菇圖片的采集工作。拍攝設(shè)備為??低暺放频墓I(yè)攝像機(jī),最高像素為500 萬(wàn),為了防止拍攝過(guò)程中相機(jī)抖動(dòng)造成圖片模糊,將相機(jī)布置在云臺(tái)上。本文是對(duì)蘑菇的成熟度做出預(yù)測(cè),而蘑菇的成熟度是依據(jù)蘑菇菌褶的開(kāi)傘程度決定的,菌褶開(kāi)了代表蘑菇已成熟,菌褶沒(méi)開(kāi)代表蘑菇未成熟,因此從圖6a 中可判斷出左邊的蘑菇未成熟,右邊的兩個(gè)蘑菇已成熟。為了得到菌褶部位的特征,將相機(jī)斜向上對(duì)蘑菇進(jìn)行拍攝,圖像分辨率設(shè)為2 448×2 448,以png 格式進(jìn)行存儲(chǔ)。同時(shí),為了獲得蘑菇樣本的多樣性,到不同環(huán)境的培育棚對(duì)蘑菇進(jìn)行拍攝,獲得圖片2 000 多張,經(jīng)篩選后為2 000 張,將其中1 800 張作為訓(xùn)練樣本,200 張作為測(cè)試集。
利用開(kāi)源軟件Labelme 對(duì)原始圖片進(jìn)行手動(dòng)標(biāo)注,圖像標(biāo)注示例過(guò)程如圖6 所示。在圖6d 中共有3 類(lèi)標(biāo)簽,標(biāo)簽0 代表背景,標(biāo)簽1 代表未成熟的蘑菇,標(biāo)簽2 代表成熟的蘑菇。標(biāo)注完成后,訓(xùn)練樣本被保存為json 格式文件,再通過(guò)Labelme 軟件將json 文件轉(zhuǎn)換為訓(xùn)練時(shí)所需要的標(biāo)簽文件。

圖6 圖像標(biāo)注示例過(guò)程Fig. 6 Example process of image annotation
主要訓(xùn)練環(huán)境:Windows10 64 位操作系統(tǒng),處理器是Inter(R) Core(TM) i9-10900k,顯卡是NVIDIA Quadro RTX4000,Python 版本為3.6,Tensorflow-gpu 版本為1.14,Keras 版本為2.1.5,cuda 版本為10.0,cudnn版本為7.4。
主要訓(xùn)練參數(shù):學(xué)習(xí)率為0.001,動(dòng)量值為0.9,學(xué)習(xí)衰減率為0.000 1,訓(xùn)練epochs 次數(shù)為20 次。為了減少對(duì)模型的計(jì)算量,在訓(xùn)練時(shí)將圖像分辨率重新標(biāo)定為1 024×800。由于顯卡顯存的限制,訓(xùn)練時(shí)每次只能對(duì)一張圖片進(jìn)行處理。
模型訓(xùn)練完成后,挑選測(cè)試圖片對(duì)模型進(jìn)行測(cè)試,測(cè)試效果如圖7 所示。從圖中可看出右下角的蘑菇被判定為成熟狀態(tài),成熟概率為0.090 8,實(shí)際可看出該蘑菇的菌褶部位已逐漸開(kāi)傘,因此判斷無(wú)誤;其余4 個(gè)蘑菇均被判定為未成熟狀態(tài),左邊2 個(gè)及上面的1 個(gè)蘑菇未成熟概率均為1,右邊的蘑菇未成熟概率為0.091 9,實(shí)際也可看出這4 個(gè)蘑菇的菌褶完全未開(kāi)傘,因此判斷也無(wú)誤。同時(shí),檢測(cè)了Mask R-CNN 的分割性能,從圖中可看出,即使有蘑菇存在重疊或遮擋現(xiàn)象,也能將每個(gè)蘑菇單獨(dú)分割出來(lái),證明了Mask R-CNN 模型實(shí)例分割的優(yōu)越性。

圖7 Mask R-CNN 檢測(cè)結(jié)果Fig. 7 Detection results of Mask R-CNN
為了說(shuō)明Mask R-CNN 網(wǎng)絡(luò)能提高目標(biāo)檢測(cè)的精度和準(zhǔn)度,與Faster R-CNN 網(wǎng)絡(luò)進(jìn)行對(duì)比,用兩個(gè)模型對(duì)同一張蘑菇圖片進(jìn)行檢測(cè),檢測(cè)效果如圖8 所示。兩圖對(duì)比可看出,Mask R-CNN 在引入mask 分支后,檢測(cè)精度和準(zhǔn)度相比于Faster R-CNN 都有所提高,F(xiàn)aster R-CNN 對(duì)有遮擋和重疊的蘑菇分割出現(xiàn)偏差。

圖8 檢測(cè)效果對(duì)比Fig. 8 Comparison of detection results
用200 張測(cè)試集圖片分別對(duì)兩種網(wǎng)絡(luò)模型進(jìn)行測(cè)試,結(jié)果如表1 所示。雖然Mask R-CNN 單圖檢測(cè)時(shí)間更長(zhǎng),但對(duì)蘑菇成熟度的判別精度更高。

表1 蘑菇目標(biāo)檢測(cè)統(tǒng)計(jì)結(jié)果Tab. 1 Detection statistics of mushroom target
針對(duì)傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)對(duì)農(nóng)作物進(jìn)行檢測(cè)與識(shí)別時(shí)具有識(shí)別精度低、魯棒性差等缺點(diǎn),在對(duì)蘑菇培育棚中的蘑菇目標(biāo)進(jìn)行成熟度檢測(cè)時(shí),首次提出一種基于Mask R-CNN 網(wǎng)絡(luò)的檢測(cè)蘑菇成熟度的方法,與Faster R-CNN 對(duì)比后得出,Mask R-CNN 模型檢測(cè)、識(shí)別準(zhǔn)確率更高。同時(shí),Mask R-CNN 在引入mask 分支后,對(duì)有遮擋或重疊的蘑菇分割更為精準(zhǔn)。
本文方法不足之處在于沒(méi)有輸出蘑菇的相關(guān)尺寸,無(wú)法利用尺寸信息判斷蘑菇的長(zhǎng)勢(shì),在今后的研究中,將處理這些問(wèn)題。