余思黔,趙麒榮,林嘉晨,賈雁飛,陳廣大
(北華大學(xué) 電氣與信息工程學(xué)院,吉林 吉林 132013)
核桃外殼對(duì)核桃仁起到保護(hù)作用,一旦核桃外殼發(fā)生破損,核桃仁很容易受到外界污染,而且核桃仁長(zhǎng)時(shí)間暴露在空氣中,容易引起受潮、滋生黃曲霉菌等情況,影響核桃仁的食用安全.因此,在核桃生成加工過(guò)程中,需要及時(shí)發(fā)現(xiàn)和篩選出外殼有缺陷的核桃,提高核桃產(chǎn)品質(zhì)量.傳統(tǒng)人工篩選核桃耗時(shí)費(fèi)力,漏檢率較高,而且速度較慢.為了解決這一問(wèn)題,近年來(lái)隨著人工智能技術(shù)的發(fā)展,基于機(jī)器視覺(jué)的核桃篩選已經(jīng)逐漸應(yīng)用于實(shí)際,逐漸代替人工篩選,對(duì)核桃外殼缺陷識(shí)別的性能直接影響基于機(jī)器視覺(jué)的核桃外殼篩選性能.
核桃外殼缺陷檢測(cè)可以采用傳統(tǒng)的目標(biāo)檢測(cè)方法[1],即利用特征提取方法對(duì)核桃外殼缺陷特征進(jìn)行提取,然后利用支持向量機(jī)或者相關(guān)向量機(jī)等分類方法[2]從已提取的特征中識(shí)別出有外殼缺陷的核桃.傳統(tǒng)方法需要人為設(shè)計(jì)特征提取方法,受人為因素影響較大,而且識(shí)別精度較低.近年來(lái),基于深度學(xué)習(xí)的目標(biāo)檢測(cè)方法已經(jīng)被大量應(yīng)用于農(nóng)業(yè)、交通和電力等領(lǐng)域[3-5].現(xiàn)有基于深度學(xué)習(xí)的目標(biāo)檢測(cè)方法可以分為兩類,一類是R-CNN類檢測(cè)方法[6-7],一類是YOLO類檢測(cè)方法[8-10].前者檢測(cè)精度相對(duì)較高,但是檢測(cè)速度相對(duì)較慢;后者檢測(cè)精度相對(duì)較低,但是檢測(cè)速度相對(duì)較快,主要用于實(shí)時(shí)性較高的檢測(cè)場(chǎng)景.現(xiàn)有方法雖然對(duì)核桃外殼缺陷有較高的識(shí)別準(zhǔn)確率,但是檢測(cè)方法結(jié)構(gòu)比較復(fù)雜,需要部署在計(jì)算能力較高的設(shè)備上,檢測(cè)速度較慢,影響核桃外殼缺陷檢測(cè)速度.為此,首先提出利用深度可分離卷積代替YOLOv5s模型中的殘差網(wǎng)絡(luò)中卷積核大小為3的卷積,構(gòu)建改進(jìn)的CBL模塊,并用于YOLOv5s模型中,提高核桃外殼缺陷檢測(cè)速度.其次,提出利用改進(jìn)的均值聚類對(duì)改進(jìn)的YOLOv5s模型檢測(cè)框進(jìn)行初始化,提高生成檢測(cè)框的質(zhì)量,進(jìn)而提高核桃外殼缺陷檢測(cè)精度.基于改進(jìn)后的YOLOv5s模型的核桃外殼缺陷檢測(cè),雖然檢測(cè)精度有一定的降低,但是極大地提高了檢測(cè)速度,實(shí)現(xiàn)了核桃外殼缺陷檢測(cè)速度和精度之間的均衡.
YOLOv5是繼YOLOv3之后提出的YOLO類目標(biāo)檢測(cè)方法,雖然在YOLOv5提出的前幾個(gè)月就提出了YOLOv4,但是YOLOv5和YOLOv4是不同的團(tuán)隊(duì)提出的,所以YOLOv5不是YOLOv4的改進(jìn)版本,YOLOv5和YOLOv4都可以看作是對(duì)YOLOv3的改進(jìn).YOLOv5的網(wǎng)絡(luò)框架結(jié)構(gòu)和YOLOv3的類似,同樣繼承了檢測(cè)速度較快的優(yōu)點(diǎn).在圖像預(yù)處理方面,YOLOv5和YOLOv4一樣都采用了Mosaic數(shù)據(jù)增強(qiáng)方法,也就是將訓(xùn)練集中的4張圖像先進(jìn)行隨機(jī)旋轉(zhuǎn),然后再拼接到1張圖像上,作為訓(xùn)練圖像對(duì)模型進(jìn)行訓(xùn)練,提高目標(biāo)檢測(cè)能力.在網(wǎng)絡(luò)結(jié)構(gòu)方面,YOLOv5主干網(wǎng)絡(luò)由Focus結(jié)構(gòu)和CSP結(jié)構(gòu)組成,YOLOv5首次引入了Focus結(jié)構(gòu),其主要作用就是對(duì)圖像進(jìn)行切片操作,將1張圖像中每隔1個(gè)像素取1個(gè)值,然后得到4個(gè)圖像,接著將4張圖像在通道上進(jìn)行連接,最后利用卷積操作,在沒(méi)有信息丟失的情況下進(jìn)行二倍下采樣,提高了檢測(cè)速度.YOLOv4只有主干網(wǎng)絡(luò)中使用了CSP結(jié)構(gòu),而YOLOv5中設(shè)計(jì)了兩種CSP結(jié)構(gòu),CSP1_X應(yīng)用于主干網(wǎng)絡(luò),另一種CSP_2X結(jié)構(gòu)則應(yīng)用于頸部網(wǎng)絡(luò)中.在頸部網(wǎng)絡(luò)中,同樣采用了和YOLOv4類似的FPN+PAN結(jié)構(gòu),不同之處就是設(shè)計(jì)了CSP2_X結(jié)構(gòu),加強(qiáng)了網(wǎng)絡(luò)特征融合能力.在損失函數(shù)方面,Yolov5采用其中的GIoU作為檢測(cè)框回歸損失函數(shù),提高檢測(cè)框定位精度.
YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)有4個(gè)版本,分別是YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x,4個(gè)版本的網(wǎng)絡(luò)深度和網(wǎng)絡(luò)寬度逐漸增加,參數(shù)量和平均精度也同樣逐漸增加,YOLOv5s雖然精度最低,但是檢測(cè)速度最快,更適合對(duì)檢測(cè)速度要求較高的場(chǎng)景.
YOLOv5s雖然網(wǎng)絡(luò)結(jié)構(gòu)比YOLOv5其他版本以及YOLOv4的完整版本網(wǎng)絡(luò)結(jié)構(gòu)都要簡(jiǎn)單,計(jì)算速度相對(duì)也更快,但是比起其他輕量化的目標(biāo)檢測(cè)算法,其網(wǎng)絡(luò)結(jié)構(gòu)相對(duì)復(fù)雜,計(jì)算速度有待提高.為了提高基于YOLOv5s的核桃外殼缺陷檢測(cè)方法的檢測(cè)速度,考慮到Y(jié)OLOv5s中大量采用CBL模塊,CBL模塊含有卷積核為3的卷積,其計(jì)算量較大.為此,利用深度可分離卷積替換卷積核為3的卷積,改進(jìn)后的CBL模塊如圖1所示.
圖1 改進(jìn)后的CBL模塊
在使用標(biāo)準(zhǔn)卷積的卷積層中,其參數(shù)量和計(jì)算量計(jì)算如下:
params=Cin×k2×Co,
(1)
F=Cin×k2×Co×H×W,
(2)
式中:Cin是輸入通道數(shù);C0是輸出通道數(shù);k2是卷積核的寬和高的乘積.F表示浮點(diǎn)運(yùn)算量即乘運(yùn)算和加運(yùn)算的總和;H和W分別是輸入圖像的高和寬.
在使用深度可分離卷積的卷積層中,其參數(shù)和計(jì)算量的計(jì)算公式如下:
params=Cin×k2+Cin×1×1×Co,
(3)
F=Cin×k2×H×W+Cin×1×1×Co×H×W,
(4)
式中:Cin是輸入通道數(shù);C0是輸出通道數(shù);k2是卷積核的寬和高的乘積;H和W分別是輸入圖像的高和寬.深度卷積中的卷積核只對(duì)同維度通道中的特征圖進(jìn)行卷積運(yùn)算,輸出通道數(shù)與輸入通道數(shù)相等.逐點(diǎn)卷積在深度卷積之后由1×1的標(biāo)準(zhǔn)卷組成,用來(lái)融合深度卷積中的特征信息.深度可分離卷積與標(biāo)準(zhǔn)卷積的計(jì)算量之比如下:
(5)
在YOLOv5s算法中,采用K均值聚類的方法在標(biāo)記的真值框?qū)捄透叩募仙暇垲惓鰇個(gè)中心,將這k個(gè)聚類中心作為預(yù)測(cè)邊界框的初始寬和高,以避免模型在調(diào)整邊界框的寬和高時(shí)花費(fèi)大量的時(shí)間.k-均值聚類方法的復(fù)雜度是Ο(nkd),其中使用了d維的數(shù)據(jù),k個(gè)聚類中心,數(shù)據(jù)集的數(shù)量是n.因此,對(duì)于大規(guī)模的檢測(cè)數(shù)據(jù)集,需要花費(fèi)更多的時(shí)間進(jìn)行模型處理,并且它對(duì)于初始聚類中心很敏感.k均值聚類方法存在的問(wèn)題會(huì)影響算法在檢測(cè)過(guò)程中生成的預(yù)測(cè)邊界框的質(zhì)量,導(dǎo)致預(yù)測(cè)邊界框與真值框不能很好地對(duì)齊,從而影響了算法的檢測(cè)性能.
為了解決這些問(wèn)題,采用一個(gè)改進(jìn)的聚類方法,它借鑒了Afkmc2方法中通過(guò)構(gòu)建馬爾科夫鏈的思想來(lái)確定初始聚類中心,完成了聚類中心初始點(diǎn)的選取[11].因此,改進(jìn)的聚類方法通過(guò)構(gòu)建馬爾科夫鏈,并將馬爾科夫鏈的最后一個(gè)點(diǎn)作為初始聚類中心,進(jìn)而完成初始聚類中心的選取,其中,使用交并比(IoU)的方法來(lái)計(jì)算每個(gè)候選點(diǎn)與已選初始聚類中心之間的距離.之后從整個(gè)數(shù)據(jù)集合中選取部分元素來(lái)“微調(diào)”選定的聚類中心,將最終確定的聚類中心作為預(yù)測(cè)邊界框的初始寬和高.改進(jìn)的聚類方法的具體步驟如下.
為了方便表示,假設(shè)真值框?qū)捄透叩募鲜铅?{(w1,h1),(w2,h2),…,(wn,hn)}.首先從集合中隨機(jī)選取一對(duì)寬和高作為第1個(gè)初始聚類中心c1.然后是選取其他k-1個(gè)初始聚類中心,它們是通過(guò)迭代k-1次構(gòu)建出k-1條長(zhǎng)度為m的馬爾科夫鏈,并選取每條馬爾科夫鏈的最后一個(gè)點(diǎn)作為初始聚類中心來(lái)完成.構(gòu)建馬爾科夫鏈的過(guò)程如下:
第一,先計(jì)算每個(gè)點(diǎn)的提案分布q(φj),其中,提案分布的作用是為每個(gè)點(diǎn)分配一個(gè)概率,該概率是點(diǎn)被選為馬爾科夫鏈候選點(diǎn)的可能性,它的表達(dá)式如公式(6)所示.
(6)
式中:φj∈φ,j=1,2,…,n;c1是第初始聚類中心,點(diǎn)到聚類中心之間的距離是通過(guò)交并比來(lái)計(jì)算,這樣得到的聚類中心可以獲得更好的分?jǐn)?shù),并且它們與框的大小沒(méi)有關(guān)系.點(diǎn)φj到聚類中心c1之間的距離d(φj,c1)的計(jì)算表達(dá)式如公式(7)所示.
d(φj,c1)=1-IoU(φj,c1) ,
(7)
式中:IoU(φj,c1)是第j個(gè)邊界框φj=(wj,hj)與第1個(gè)初始聚類中心c1=(wi,hi)的相交集的面積除以相并集的面積(交并比),它被用來(lái)衡量φj與c1的重疊情況.如果IoU(φj,c1)越大,意味著φj與c1重疊程度越高.
第二,依據(jù)提案分布q(φ)從數(shù)據(jù)集中選擇一對(duì)寬和高φi作為馬爾科夫鏈的初始點(diǎn).對(duì)于同一條馬爾科夫鏈的其他點(diǎn),可以通過(guò)提案分布q(φ)從集合φ中選擇候選點(diǎn)φt,并計(jì)算候選點(diǎn)φt的采樣分布p(φt),其中,采樣分布的作用是為候選點(diǎn)分配一個(gè)概率,該概率是候選點(diǎn)被選為馬爾科夫鏈上點(diǎn)的可能性,它的表達(dá)式如公式(8)所示.
(8)
式中,C是已經(jīng)選擇的初始聚類中心的集合;d(φt,C)是d(φt,ci)(i=1,2,…,k)中的最小值,它的表達(dá)式如公式(9)所示.
(9)
式中:d(φt,C)是候選點(diǎn)φt與已選聚類中心的集合C之間的距離,它通過(guò)計(jì)算候選點(diǎn)φt與集合C中的每個(gè)初始聚類中心之間的距離,選擇出最小值作為候選點(diǎn)φt與集合C之間的距離.
第三,基于φt的采樣分布和提案分布,可以計(jì)算φt被選擇作為馬爾科夫鏈的下一點(diǎn)的接受概率,它的表達(dá)式如公式(10)所示.
(10)
式中:φt-1是馬爾科夫鏈的當(dāng)前點(diǎn).如果接受概率α(φt,φt-1)大于閾值N∈Unif(0,1),則φt可以被接受作為馬爾科夫鏈的下一點(diǎn),否則,φt-1繼續(xù)作為馬爾科夫鏈的下一點(diǎn).這樣就可以構(gòu)建出長(zhǎng)度為m的馬爾科夫鏈.基于上面的過(guò)程就可以構(gòu)建出k-1條長(zhǎng)度為m的不同的馬爾科夫鏈,并且使用馬爾科夫鏈的最后一個(gè)點(diǎn)作為初始聚類中心.在計(jì)算候選點(diǎn)的接受概率時(shí),避免了計(jì)算候選點(diǎn)采樣分布的分母部分,這樣可以減少許多計(jì)算時(shí)間.將選擇的第1個(gè)初始聚類中心和通過(guò)構(gòu)建馬爾科夫鏈來(lái)選取的k-1個(gè)初始聚類中心組成了k個(gè)初始聚類中心C=[c1,c2,…ck].
在構(gòu)建馬爾科夫鏈中,每一個(gè)候選點(diǎn)要求去計(jì)算與每個(gè)已選初始聚類中心之間的距離,如果選擇的候選點(diǎn)是已經(jīng)被選為初始聚類中心的點(diǎn),則該點(diǎn)與已選初始聚類中心的距離是0,即候選點(diǎn)的接受概率是0,這樣候選點(diǎn)將不會(huì)作為馬爾科夫鏈上的點(diǎn).因此,在構(gòu)建不同的馬爾科夫鏈時(shí),避免了將已經(jīng)選擇的初始聚類中心作為馬爾科夫鏈上的點(diǎn),因此,改進(jìn)的聚類方法選擇出了k個(gè)不同的初始聚類中心.
最后,從集合φ中隨機(jī)選擇S個(gè)點(diǎn)組成集合Φ,計(jì)算在集合Φ中每個(gè)點(diǎn)與k個(gè)初始聚類中心之間的距離.如果一個(gè)點(diǎn)接近那個(gè)初始聚類中心,就將這個(gè)點(diǎn)分配給那個(gè)初始聚類中心,這樣就可以構(gòu)建出k個(gè)簇,然后再計(jì)算每個(gè)簇里所有點(diǎn)的平均值作為新的聚類中心,計(jì)算公式如下所示:
(11)
(12)
式中:(pwi,phi)是新的聚類中心;|H|是新簇中點(diǎn)的數(shù)量;wi,j和hi,j分別是新簇中的真值框?qū)捄透?之后,繼續(xù)從集合φ中隨機(jī)選擇S個(gè)點(diǎn),計(jì)算每個(gè)點(diǎn)與k個(gè)新的聚類中心之間的距離.通過(guò)彼此之間的距離來(lái)構(gòu)建新的簇,使用公式(11)和(12)可以獲得新的聚類中心,直到新的聚類中心不再變化或達(dá)到最大迭代次數(shù),這樣就可以構(gòu)建出最終的聚類中心,將最終選定的聚類中心作為預(yù)測(cè)邊界框的初始寬和高來(lái)完成檢測(cè)任務(wù).
相比于k均值聚類方法,改進(jìn)的聚類方法需要更少的運(yùn)行時(shí)間,尤其是對(duì)于大規(guī)模的檢測(cè)數(shù)據(jù)集.因此,在YOLOv5s檢測(cè)算法中,可以將改進(jìn)的聚類方法所得到的聚類中心用作預(yù)測(cè)邊界框的初始寬和高,來(lái)實(shí)現(xiàn)對(duì)目標(biāo)邊界框的預(yù)測(cè).
從網(wǎng)絡(luò)上搜集整理了1 500張含有核桃外殼破損的圖片,選擇1 200張圖片作為訓(xùn)練集,300張圖片作為測(cè)試集,采用Labelme軟件對(duì)數(shù)據(jù)集樣本進(jìn)行標(biāo)注.采用了召回率和準(zhǔn)確率作為算法精度指標(biāo),召回率和準(zhǔn)確率越大,表示算法的檢測(cè)誤差越小.圖2是利用算法對(duì)測(cè)試集中隨機(jī)選取的圖像進(jìn)行測(cè)試,從圖中可以看出,算法成功地實(shí)現(xiàn)了對(duì)破損核桃外殼的檢測(cè),證明了算法的有效性.
圖2 基于算法的檢測(cè)結(jié)果
為了驗(yàn)證提出的基于改進(jìn)的CBL模塊和均值聚類方法的YOLOv5s模型在核桃外殼破損檢測(cè)中的有效性,分別用原YOLOv5s模型,基于改進(jìn)的CBL模塊的YOLOv5s模型,基于改進(jìn)的聚類方法的YOLOv5s模型以及基于改進(jìn)的CBL模塊和聚類方法的YOLOv5s模型對(duì)核桃外殼破損進(jìn)行檢測(cè).采用IoU閾值為0.5的平均精度(mAP_0.5)和召回率(Recall)來(lái)衡量不同算法模型的檢測(cè)準(zhǔn)確度性能,采用幀每秒(FPS)來(lái)衡量不同算法的檢測(cè)速度,各種算法對(duì)核桃外殼破損檢測(cè)性能結(jié)果如圖1所示.在平均檢測(cè)精度和召回率方面,基于改進(jìn)的CBL模塊的YOLOv5s精度和召回率均為最低,其次是基于改進(jìn)的CBL和均值聚類的YOLOv5s以及原YOLOv5s,基于改進(jìn)的均值聚類的YOLOv5s的精度和召回率均為最高.在檢測(cè)速度方面,原YOLOv5s的FPS最低,其次是基于改進(jìn)的均值聚類的YOLOv5s和基于改進(jìn)的CBL模塊的YOLOv5s,基于改進(jìn)的CBL和均值聚類的YOLOv5s的FPS值最高,也就是檢測(cè)速度最快.
圖3 各種算法性能比較
從上述分析可以看出:基于改進(jìn)的CBL模塊的YOLOv5s相對(duì)原YOLOv5s算法雖然檢測(cè)精度和召回率降低了,但是檢測(cè)速度提高了;基于改進(jìn)的均值聚類的YOLOv5s相對(duì)原YOLOv5s算法檢測(cè)精度,召回率和檢測(cè)速度都有所提高;基于改進(jìn)的CBL模塊的YOLOv5s相對(duì)基于改進(jìn)的均值聚類的YOLOv5s計(jì)算量更小,因此檢測(cè)速度更快;基于改進(jìn)的CBL和均值聚類的YOLOv5s的檢測(cè)精度和召回率介于基于改進(jìn)的CBL模塊的YOLOv5s和基于改進(jìn)的均值聚類的YOLOv5s之間,但是檢測(cè)速度最快.此外,相對(duì)于原YOLOv5s,基于改進(jìn)CBL和均值聚類YOLOv5s的精度和召回率分別降低了0.2%和0.5%,但是檢測(cè)速度提高了大約20%,基于改進(jìn)的CBL和均值聚類的YOLOv5s實(shí)現(xiàn)了核桃外殼缺陷檢測(cè)的速度和精度之間的均衡.
提出了基于改進(jìn)的CBL模塊和均值聚類的YOLOv5s的核桃缺陷檢測(cè)方法.基于改進(jìn)的CBL模塊的YOLOv5s檢測(cè)精度和召回率相對(duì)原方法分別降低了大約2.4%和2.3%,但是檢測(cè)速度提高了大約16.8%.基于改進(jìn)的均值聚類的YOLOv5s的檢測(cè)精度和召回率相對(duì)原方法分別提高了大約1.5%和1.7%,檢測(cè)速度提高了大約3.3%.基于改進(jìn)的均值聚類的YOLOv5s方法相對(duì)基于改進(jìn)的CBL模塊的YOLOv5s方法,有效地提高了檢測(cè)精度和召回率,但是檢測(cè)速度提高相對(duì)較小.為了實(shí)現(xiàn)檢測(cè)精度、召回率與檢測(cè)速度之間的均衡,將改進(jìn)的CBL模塊和均值聚類方法同時(shí)用于YOLOv5s中,完整的改進(jìn)的YOLOv5s方法相對(duì)原YOLOv5s方法,雖然精度和召回率分別降低了0.2%和0.5%,但是檢測(cè)速度提高了大約20%,在保證精度和召回率滿足要求的同時(shí),極大地提高了核桃外殼缺陷檢測(cè)的實(shí)時(shí)性.