劉敬宇 裴悅琨 常志遠(yuǎn) 柴 智 曹佩佩
(1.大連大學(xué)遼寧省北斗高精度位置服務(wù)技術(shù)工程實(shí)驗(yàn)室,遼寧 大連 116622;2.大連大學(xué)大連市環(huán)境感知與智能控制重點(diǎn)實(shí)驗(yàn)室,遼寧 大連 116622)
果品分級(jí)一直是果蔬產(chǎn)品銷售中的一個(gè)重要環(huán)節(jié),并且隨著電商行業(yè)的日漸壯大,果品能夠在全球?qū)崿F(xiàn)流通銷售。如果想要占有較大的市場(chǎng)份額,實(shí)現(xiàn)工業(yè)化果品分級(jí)尤為重要[1]。利用圖像視覺和神經(jīng)網(wǎng)絡(luò)算法對(duì)水果進(jìn)行缺陷及分級(jí)檢測(cè)是目前的研究熱點(diǎn),國(guó)內(nèi)外許多學(xué)者對(duì)此進(jìn)行了大量工作[2-10]。但是,在櫻桃分級(jí)的實(shí)際應(yīng)用中,由于環(huán)境復(fù)雜、缺陷不明顯、正負(fù)樣本不均衡等因素極易影響檢測(cè)效率和精度。因此,如何提高櫻桃分級(jí)的檢測(cè)精度和檢測(cè)速度是應(yīng)用的關(guān)鍵。
研究擬通過改進(jìn)多特征融合模塊[11]和損失函數(shù)[12],提出一種基于改進(jìn)YOLOX[13]的櫻桃缺陷檢測(cè)方法。結(jié)合注意力機(jī)制CBAM[14],用于加強(qiáng)關(guān)鍵特征信息的學(xué)習(xí),提高對(duì)櫻桃大小和成熟度分級(jí)的精度,并與現(xiàn)有的櫻桃分級(jí)算法進(jìn)行對(duì)比,驗(yàn)證試驗(yàn)算法在櫻桃分級(jí)檢測(cè)中的可行性,旨在為后期實(shí)現(xiàn)自動(dòng)化櫻桃缺陷及分級(jí)檢測(cè)提供理論基礎(chǔ)和技術(shù)支持。
公開的櫻桃數(shù)據(jù)集缺少不同缺陷、大小和顏色的櫻桃圖像,僅僅依靠公開數(shù)據(jù)集難以獲取合適的數(shù)據(jù)。為了解決這個(gè)問題,在遼寧省大連市金州區(qū)當(dāng)?shù)貦烟夜麍@進(jìn)行采集,并通過實(shí)驗(yàn)室設(shè)備進(jìn)行拍攝和標(biāo)注完成數(shù)據(jù)集。
將采集到的櫻桃放置于實(shí)驗(yàn)室滾輪上,轉(zhuǎn)動(dòng)滾輪將樣本各個(gè)角度進(jìn)行拍攝,每張圖片中有1~10個(gè)櫻桃,圖像分辨率為 2 046像素×1 080 像素,圖像均為 JPG 格式。共采集10 000張圖片,其中,缺陷果可以分為鼻尖裂口、裂口、病變、刺激生長(zhǎng)、腐爛、干疤、畸形、霉變、雙生9類[15](見圖1),完好果根據(jù)其成熟度和櫻桃顏色分為大果成熟、大果半熟、中果成熟、中果半熟、小果成熟、小果半熟6類(見圖2)。使用LabelImg 軟件對(duì)圖像進(jìn)行標(biāo)注,并將標(biāo)注信息PASCAL VOC的格式保存為XML文件。
依次為鼻尖裂口、裂口、病變、刺激生長(zhǎng)、腐爛、干疤、畸形、霉變、雙生、完好
依次為大果成熟、大果半熟、中果成熟、中果半熟、小果成熟、小果半熟
實(shí)驗(yàn)室硬件設(shè)備主要由圖像采集設(shè)備和計(jì)算機(jī)處理單元兩部分組成(見圖3)。其中圖像采集設(shè)備主要是由工業(yè)攝像機(jī)CMOS 攝像機(jī)(acA2000-50g型)、鏡頭(M1614-MP29(CH)3 型)、頻閃控制器組成的紅外觸發(fā)器,通過頻閃控制器和紅外觸發(fā)器觸發(fā)相機(jī)拍照,以及LED光源漫光片和梯臺(tái)型光源罩,保障照片質(zhì)量。
1.電腦 2.同步光源控制器 3.激光接近傳感器 4.滾輪 5.傳送齒輪 6.相機(jī) 7.遮光罩 8.光源
計(jì)算機(jī)處理單元主要是GeForce GTX 3080 顯卡,運(yùn)行內(nèi)存為16 G并配置POE千兆網(wǎng)卡;Inter(R)Core(TM)i9-10900K 處理器,32 G 內(nèi)存,頻率 DDR43000。
櫻桃缺陷及分級(jí)檢測(cè)主要根據(jù)櫻桃是否有缺陷、果體大小和成熟度3個(gè)標(biāo)準(zhǔn)。在實(shí)際需求中,首先需要對(duì)缺陷櫻桃進(jìn)行剔除,保留完好的櫻桃,然后對(duì)完好櫻桃進(jìn)行分級(jí)。所以對(duì)于櫻桃缺陷及分級(jí)檢測(cè)系統(tǒng)來說,主要由兩部分組成,第1部分進(jìn)行櫻桃缺陷檢測(cè),第2部分根據(jù)櫻桃的大小和顏色對(duì)櫻桃進(jìn)行分級(jí)。系統(tǒng)流程圖如圖4 所示。
圖4 系統(tǒng)流程圖
試驗(yàn)提出一種基于改進(jìn)YOLOX的櫻桃缺陷及分級(jí)檢測(cè)算法,以實(shí)現(xiàn)對(duì)櫻桃的實(shí)時(shí)分級(jí)。YOLOX網(wǎng)絡(luò)主要分為3個(gè)部分:CSPDarknet、FPN[16]以及Yolo Head,結(jié)構(gòu)圖如圖5所示。
圖5 YOLOX結(jié)構(gòu)圖
2.2.1 特征提取網(wǎng)絡(luò) 特征提取網(wǎng)絡(luò)是目標(biāo)檢測(cè)中的骨干網(wǎng)絡(luò),決定了檢測(cè)模型的速度和準(zhǔn)確性,通過主干特征提取網(wǎng)絡(luò)會(huì)生成3個(gè)有效特征層。YOLOX的主干特征提取網(wǎng)絡(luò)為CSPDarknet,每輸入一張櫻桃圖片會(huì)先對(duì)其進(jìn)行resize,將其大小變?yōu)?40×640,然后通過Focus網(wǎng)絡(luò)結(jié)構(gòu)對(duì)其進(jìn)行特征提取,之后使用卷積標(biāo)準(zhǔn)化和激活函數(shù)對(duì)其通道數(shù)進(jìn)行調(diào)整,然后通過4次Resblock body結(jié)構(gòu)進(jìn)行特征提取。Resblock body結(jié)構(gòu)首先會(huì)利用一個(gè)3×3的卷積進(jìn)行高和寬的壓縮,并調(diào)整其通道數(shù),然后使用CSPLayer結(jié)構(gòu)進(jìn)行特征提取。在第4個(gè)Resblock body結(jié)構(gòu)中加入了SPP結(jié)構(gòu),該結(jié)構(gòu)使用不同池化核的最大池化進(jìn)行特征提取,將池化后的結(jié)果堆疊,再利用卷積來調(diào)整通道數(shù)。
2.2.2 FPN FPN算法主要是為了解決物體在檢測(cè)過程中的多尺度問題,通過簡(jiǎn)單的網(wǎng)絡(luò)連接改變,大幅度提升了小物體檢測(cè)的性能。由于低層的特征語義信息比較少,但是目標(biāo)位置準(zhǔn)確,高層的特征語義信息比較豐富,但是目標(biāo)位置較模糊,所以將頂層特征通過上采樣和低層特征進(jìn)行融合,而且每層都是獨(dú)立預(yù)測(cè)的[17]。
2.2.3 Yolo Head 在YOLOX算法中,Yolo Head被分為兩部分,最后預(yù)測(cè)時(shí)才整合在一起,Yolo Head結(jié)構(gòu)如圖6所示。獲得的Cls.是用來判斷每一個(gè)特征點(diǎn)所包含的物體種類,Reg.用于判斷每一個(gè)特征點(diǎn)的回歸參數(shù),回歸參數(shù)調(diào)整后可以獲得預(yù)測(cè)框,Obj.用于判斷每一個(gè)特征點(diǎn)是否包含物體。
圖6 Yolo Head結(jié)構(gòu)圖
在櫻桃缺陷檢測(cè)中,首先需要將缺陷櫻桃剔除。對(duì)于櫻桃的缺陷種類來說,一般可以分為兩類,第1類缺陷果可以分為鼻尖裂口、裂口、病變、刺激生長(zhǎng)、干疤、畸形、雙生,這類缺陷果可以作為次品果進(jìn)行降價(jià)銷售;第2類缺陷果包括腐爛和霉變,這類缺陷果需要及時(shí)與其他櫻桃分開,避免造成更大的損失[15]。
3.1.1 櫻桃缺陷檢測(cè)算法改進(jìn)
(1)使用融合因子配置FPN:對(duì)于缺陷不明顯的櫻桃檢測(cè)的難點(diǎn)主要是目標(biāo)自身尺度小,信息量少,細(xì)節(jié)特征不夠多。FPN作為多尺度檢測(cè)的手段,適合處理小目標(biāo)檢測(cè)的算法[18],影響小目標(biāo)檢測(cè)的FPN性能有兩個(gè)主要因素:下采樣因子和相鄰特征層之間的耦合度。對(duì)于下采樣因子,下采樣比率越低,特征圖越大,越適合小目標(biāo)檢測(cè),但是計(jì)算較為復(fù)雜。
FPN特征融合方式如圖7所示,可以用式(1)表示:
圖7 FPN結(jié)構(gòu)圖
(1)
式中:
finner——通道匹配的 1×1 卷積運(yùn)算;
fupsample——分辨率匹配的2×上采樣運(yùn)算;
flayer——特征處理的3×3卷積運(yùn)算;
α——融合因子。
P5=flayer5[finner5(C5)],
(2)
(3)
(4)
(5)
經(jīng)過一系列試驗(yàn)發(fā)現(xiàn),通過調(diào)整融合因子可以對(duì)弱小目標(biāo)檢測(cè)的性能產(chǎn)生影響,由于默認(rèn)α為1,通過調(diào)整α的值,對(duì)試驗(yàn)結(jié)果平均檢測(cè)精度的值產(chǎn)生影響。由圖8可知,當(dāng)α為0.5時(shí),試驗(yàn)結(jié)果得到了明顯提升。
圖8 融合因子變化對(duì)試驗(yàn)結(jié)果的影響
(2)Focal Loss集成到損失函數(shù)中:在目標(biāo)檢測(cè)算法中,對(duì)于每輸入一張圖像,可能會(huì)生成許許多多的預(yù)選框(region proposal),但是其中只有很少一部分包含真實(shí)目標(biāo),這就造成了類別不均衡問題。YOLOX屬于one-stage方法,相比于two-stage來說,其未生成候選框,直接對(duì)anchor box進(jìn)行分類,所以速度較快,但是精度會(huì)降低。
由于正負(fù)樣本之間不平衡可能會(huì)嚴(yán)重降低檢測(cè)的準(zhǔn)確性,這種不平衡是不可避免的,實(shí)際操作中,完好的櫻桃圖像數(shù)量會(huì)多于缺陷櫻桃的數(shù)量,同時(shí)也會(huì)有許多不明顯的缺陷樣本。為了解決正負(fù)樣本間的不平衡,提高對(duì)訓(xùn)練樣本的關(guān)注,提出一種新的交叉熵?fù)p失函數(shù)即Focal Loss。新的損失函數(shù)通過使用一個(gè)可調(diào)整的因子來動(dòng)態(tài)調(diào)整,自動(dòng)降低容易樣本分類的檢測(cè),主要集中在難分類樣本上。
Loss為各個(gè)訓(xùn)練樣本交叉熵的直接求和,即各個(gè)樣本的權(quán)重公式相同。
(6)
式中:
pt——預(yù)測(cè)樣本屬于1的概率。
當(dāng)yt=1時(shí),說明第t個(gè)樣本屬于該類物體;當(dāng)yt=0時(shí),說明第t個(gè)樣本不屬于該類物體。此時(shí)會(huì)存在樣本不平衡造成損失函數(shù)傾斜,因此,用如下函數(shù)來改進(jìn)原始損失函數(shù)。
(7)
(8)
式中:
γ——一個(gè)可以調(diào)整的參數(shù),γ≥0;
(1-pt)γ——調(diào)制系數(shù)(通過減少易分類樣本的權(quán)重,使得模型在訓(xùn)練時(shí)更專注于難分類的樣本)。
3.1.2 結(jié)果與分析 為了更全面探究試驗(yàn)算法對(duì)檢測(cè)精度和速度的影響,通過對(duì)櫻桃缺陷數(shù)據(jù)集采用多種策略進(jìn)行實(shí)驗(yàn)驗(yàn)證。由表1可知,對(duì)櫻桃缺陷系統(tǒng)進(jìn)行改進(jìn)后,其對(duì)所有類別的檢測(cè)結(jié)果均有促進(jìn)作用,對(duì)于每一類別都有較大提升,平均檢測(cè)精度(mAP)達(dá)97.59%,效果顯著。其主要原因是通過對(duì)網(wǎng)絡(luò)的改進(jìn),提高了不明顯特征的檢測(cè)能力。
表1 測(cè)試集上不同改進(jìn)策略對(duì)比
針對(duì)FPN檢測(cè)器提出融合因子,用來描述特征金字塔中相鄰層的耦合程度。其中,自上而下和側(cè)向連接的特征融合機(jī)制有助于檢測(cè)器得到更好的特征表達(dá),分層匹配機(jī)制將不同大小的目標(biāo)對(duì)應(yīng)到不同分辨率的特征層上學(xué)習(xí),不同分辨率的特征層可以更專注于適合當(dāng)前特征層的分辨率大小目標(biāo)的學(xué)習(xí)。由表1可知,加入融合因子后,其對(duì)病變和腐爛的改善效果得到了明顯提升,檢測(cè)精度(AP)值分別提高了4.89%和4.27%,模型整體平均檢測(cè)精度(mAP)值提高了2.72%。
在上述改進(jìn)的基礎(chǔ)上,進(jìn)一步改進(jìn)交叉熵?fù)p失函數(shù),該函數(shù)通過減少易分類樣本的權(quán)重,使得模型在訓(xùn)練時(shí)更專注于難分類的樣本,緩解樣本間不平衡。在保證原網(wǎng)絡(luò)速度的優(yōu)勢(shì)下,進(jìn)一步提高了檢測(cè)精度。由圖9可知,真實(shí)值與預(yù)測(cè)值差別越大,Loss越大,損失函數(shù)越小,模型的處理速度越快且精度越高,改進(jìn)前后的模型損失函數(shù)如圖10所示。
圖9 不同優(yōu)化策略模型Eval mAP圖
圖10 模型損失對(duì)比圖
為了驗(yàn)證所提改進(jìn)YOLOX算法對(duì)櫻桃缺陷檢測(cè)精度和效率的有效性和先進(jìn)性,在保證模型參數(shù)一致的前提下,對(duì)比目前目標(biāo)檢測(cè)算法研究中性能較優(yōu)的YOLOv4算法[19]、Faster R-CNN算法[20]及SSD算法[21],使用測(cè)試集對(duì)各算法的試驗(yàn)結(jié)果進(jìn)行測(cè)試。由表2 可知,與Faster R-CNN算法、SSD算法及YOLOv4算法相比,試驗(yàn)所提算法在AP值和mAP值上都具有更高的檢測(cè)精度,效果顯著。在檢測(cè)速度上,試驗(yàn)所提算法檢測(cè)速度(FPS)可達(dá)33.8幀/s,相比于其他3種算法有大幅提升。
表2 櫻桃測(cè)試集上不同算法對(duì)比
3.2.1 櫻桃分級(jí)檢測(cè)算法改進(jìn) 在實(shí)際檢測(cè)系統(tǒng)中,下方軌道是黑色,當(dāng)櫻桃顏色較深時(shí),目標(biāo)與周圍背景較為相似,會(huì)造成漏檢。注意力機(jī)制是聚焦于局部信息的機(jī)制,隨著任務(wù)的變化,注意力區(qū)域往往會(huì)發(fā)生變化,因此通過注意力機(jī)制能夠有效地找到最有用的消息。在櫻桃分級(jí)檢測(cè)網(wǎng)絡(luò)中,加入注意力機(jī)制,使得網(wǎng)絡(luò)只關(guān)注櫻桃的大小和顏色。試驗(yàn)算法引入CBAM模塊,進(jìn)一步增強(qiáng)特征表達(dá)能力,模塊結(jié)構(gòu)如圖11所示。
圖11 CBAM模塊結(jié)構(gòu)
卷積層輸出的結(jié)果會(huì)先通過一個(gè)通道注意力模塊,得到加權(quán)結(jié)果后,再經(jīng)過一個(gè)空間注意力模塊,最終進(jìn)行加權(quán)得到結(jié)果,其數(shù)學(xué)表達(dá)式為:
F′=Mc(F)?F,
F″=MS(F′)?F′,
(9)
式中:
?——元素相乘;
F——輸入的特征圖;
MC(F)——通道注意力模塊的輸出;
MS(F′)——空間注意模塊的輸出;
F″——CBAM輸出的特征圖。
當(dāng)一個(gè)特征圖的每個(gè)通道被考慮作為特征探測(cè)器,通道注意力被用來關(guān)注哪些特征是有意義的。為了有效地計(jì)算通道的注意力,將輸入特征圖的空間維數(shù)進(jìn)行壓縮。為了聚焦空間信息,同時(shí)使用平均池化和最大池化。通道注意模塊結(jié)構(gòu)如圖12所示。
圖12 通道注意模塊結(jié)構(gòu)
首先將輸入的特征圖分別經(jīng)過平均池化和最大池化操作,然后傳入一個(gè)具有共享權(quán)重的多層感知器(MLP)。MLP包含一個(gè)隱藏層,相當(dāng)于兩個(gè)全連接層。最后通過一個(gè)Sigmoid激活函數(shù)獲得通道注意力圖。數(shù)學(xué)表達(dá)式為:
(10)
式中:
σ——Sigmoid激活函數(shù);
W0、W1——MLP的權(quán)重,W0∈RC/r×C,W1∈RC×C/r。
與通道注意力不同的是,空間注意力被用來關(guān)注有意義的特征來自哪里,這是對(duì)通道注意力的補(bǔ)充??臻g注意模塊結(jié)構(gòu)如圖13所示。
圖13 空間注意模塊結(jié)構(gòu)
首先在每一個(gè)特征點(diǎn)的通道上取最大池化和平均池化,將這兩個(gè)結(jié)果進(jìn)行一個(gè)堆疊,生成一個(gè)通道數(shù)為2的特征圖。再通過7×7的卷積將通道數(shù)減少為1,最后通過一個(gè)Sigmoid激活函數(shù)得到一個(gè)空間注意力圖。其數(shù)學(xué)表達(dá)式為:
(11)
式中:
7×7——卷積核的大小。
3.2.2 結(jié)果與分析 注意力機(jī)制是一個(gè)即插即用的模塊,由于放置在主干會(huì)導(dǎo)致網(wǎng)絡(luò)的預(yù)訓(xùn)練權(quán)重?zé)o法使用,所以在YOLOX主干網(wǎng)絡(luò)提取出來的3個(gè)有效特征層上增加注意力機(jī)制,同時(shí)在上采樣模塊后增加注意力機(jī)制。
通過在網(wǎng)絡(luò)中加入注意力機(jī)制模塊,最后獲得經(jīng)過重標(biāo)定的特征,即強(qiáng)調(diào)重要特征,壓縮不重要特征。由表3 可知,在保證分級(jí)檢測(cè)速度近似不變的基礎(chǔ)上,mAP得到了明顯提升。對(duì)櫻桃分級(jí)檢測(cè)系統(tǒng)進(jìn)行改進(jìn)后,其對(duì)6類櫻桃的AP值均有提升,且各類之間檢測(cè)準(zhǔn)確率較為平均,mAP達(dá)95.92%。
表3 測(cè)試集上系統(tǒng)改進(jìn)前后對(duì)比
由圖14可知,YOLOX損失在迭代30輪次時(shí)才逐漸降低至0.4,最終穩(wěn)定在0.34左右;引入CBAM模塊后,網(wǎng)絡(luò)損失值降低且收斂速度加快,最終穩(wěn)定在0.19左右,說明試驗(yàn)提出的改進(jìn)算法達(dá)到了較好的效果。
圖14 損失函數(shù)曲線
提出了一種基于YOLOX的櫻桃缺陷及分級(jí)檢測(cè)模型。結(jié)果表明,對(duì)于缺陷檢測(cè)網(wǎng)絡(luò),使用融合因子配置FPN,提高了不明顯缺陷櫻桃的檢測(cè)能力,并且將Focal loss集成到損失函數(shù)中,改善了各類間樣本不平衡的問題。改進(jìn)后的網(wǎng)絡(luò)平均檢測(cè)精度值達(dá)到了97.59%,相比原始網(wǎng)絡(luò)提高了5.75%。對(duì)于櫻桃分級(jí)檢測(cè)網(wǎng)絡(luò),采取融合注意力機(jī)制的方法指引模型關(guān)注方向,平均檢測(cè)精度達(dá)到了95.92%,相比原始網(wǎng)絡(luò)提升了6.99%。因此,基于YOLOX算法的櫻桃缺陷及分級(jí)檢測(cè)算法的準(zhǔn)確度得到了明顯提升。雖然YOLOX算法的檢測(cè)速度相比于現(xiàn)有的主流算法得到了明顯提升,但是改進(jìn)前后的YOLOX算法檢測(cè)速度基本不變,今后將繼續(xù)研究此項(xiàng)工作。