陳俊松 - 何自芬 - 張印輝 -
(昆明理工大學(xué)機電工程學(xué)院,云南 昆明 650500)
筷子在中國有著巨大的市場需求,據(jù)不完全統(tǒng)計[1],中國目前每年大概需要消耗450億雙一次性筷子,因此筷子加工質(zhì)量檢測技術(shù)有著很大的市場需求。目前,中國的部分中小型筷子加工制造企業(yè)仍然采用人工檢測的方法,隨著筷子生產(chǎn)效率的進一步提高,傳統(tǒng)的人工檢測方法已經(jīng)不能滿足生產(chǎn)的需求。也有一部分中大型企業(yè)采用質(zhì)檢機檢測,但現(xiàn)有的筷子質(zhì)檢機大多通過光纖檢測出彎曲、細、半截料、發(fā)黑、發(fā)霉等不合格產(chǎn)品,再通過PLC(處理器)控制氣動電磁閥自動去除不合格的產(chǎn)品,但不能對帶有毛刺的筷子進行準確分揀。
卷積神經(jīng)網(wǎng)絡(luò)是一種常用于分析和處理視覺數(shù)據(jù)的深度學(xué)習(xí)模型或多層感知機,先由卷積層對圖像進行特征提取,再通過分類器對卷積層所提取到的特征進行分類。由于卷積神經(jīng)網(wǎng)絡(luò)具有簡單、高效的特點,因此近年來卷積神經(jīng)網(wǎng)絡(luò)得到了快速發(fā)展,越來越多的傳統(tǒng)工作中開始運用機器視覺與圖像處理的方式來代替原來人眼的勞動[2],例如針對自然場景下蘋果圖像的檢測需求,程鴻芳等[3]提出了一種基于改進LeNet卷積神經(jīng)網(wǎng)絡(luò)的蘋果目標識別模型,并利用該模型對不同場景的蘋果圖像進行識別訓(xùn)練與驗證,試驗結(jié)果表明該算法具有較強的抗干擾能力,圖像識別速度快、識別率更高。胡小慧等[4]提出基于圖像分割的筷子瑕疵檢測研究,利用圖像處理技術(shù)對筷子圖像進行增強、邊緣檢測及圖像分割,獲取筷子圖像的RGB數(shù)據(jù);對RGB三通道所占百分比及百分比方差進行統(tǒng)計分析最終能夠?qū)η嗥ぁ⑸?、燒?種瑕疵進行處理分析。
筆者擬提出一種基于改進YOLOv3(You Only Look Once,YOLO)算法的筷子毛刺缺陷檢測方法,通過對YOLO算法的改進得出一個檢測效果更好的網(wǎng)絡(luò)模型,以解決帶毛刺筷子的檢測問題,進一步提高筷子加工業(yè)的自動化水平。
YOLOv1算法是由Redmon等[5]于2015年提出的,它主要是采用直接回歸的思想,對輸入的圖像進行S×S的網(wǎng)格劃分,通過物體中心所在網(wǎng)格對其進行預(yù)測,每個網(wǎng)格需要預(yù)測B個邊界框以及C個類別概率。YOLOv1算法通過設(shè)置閾值過濾掉概率低的候選框,再對保留的候選框進行非極大值抑制,得到最終的檢測結(jié)果。該法存在諸多缺點,如對于密集的小目標種群以及近距離目標的檢測效果不理想;檢測結(jié)果的定位誤差較大等。
Redmon等[6]針對YOLOv1缺點進行了改進,提出了YOLOv2網(wǎng)絡(luò)模型。YOLOv2網(wǎng)絡(luò)主要是在分類的準確度不變的情況下,提高了網(wǎng)絡(luò)的查全率以及定位精度。YOLOv2模型通過提高訓(xùn)練圖像的分辨率;在網(wǎng)絡(luò)中添加 Batch Normalization 層,從而提高網(wǎng)絡(luò)收斂性,同時還消除了其對其他形式的正則化的依賴。取消全連接層,使用anchor boxes來預(yù)測目標方框等措施進行改進。YOLOv2網(wǎng)絡(luò)包含了19個卷積層以及5個最大池化層,所以也被稱為Darknet19,最終YOLOv2模型在識別精度、定位精度、查全率等方面都有較大的提高。
針對兩個近距離的同類或者異類目標的檢測這一問題。很多新的算法不斷地被提出,YOLOv3便是其一,YOLOv3網(wǎng)絡(luò)在近距目標與小目標的檢測上有很好的魯棒性,在一定程度上解決了這一問題。YOLOv3網(wǎng)絡(luò)是在YOLOv2模型的基礎(chǔ)上,針對YOLOv2模型的一些問題又作了一些改進,連續(xù)使用3×3和1×1卷積層;參考殘差網(wǎng)絡(luò),在新的網(wǎng)絡(luò)的一些層之間添加快捷鏈路,形成一個深度達到53層的網(wǎng)絡(luò);利用多尺度特征進行對象檢測,通過獲得不同尺度的感受野,來加強對不同尺度對象的檢測;用能夠支持多標簽對象的Logistic分類器替換YOLOv2模型中softmax分類器[7]。經(jīng)過改進最終提出了YOLOv3模型[8],也被稱Darknet53。
文中通過刪除YOLOv3網(wǎng)絡(luò)多尺度檢測中的32倍降采樣的檢測層、在YOLOv3網(wǎng)絡(luò)中增加4倍降采樣層,進一步得到深層特征并與第二次降采樣中的淺層特征進行融合,讓網(wǎng)絡(luò)同時學(xué)習(xí)深層和淺層特征后進行檢測,重新聚類與待檢測目標最合適的anchor box尺寸、改變YOLOv3網(wǎng)絡(luò)的超參數(shù),減小抖動、減小權(quán)重衰減正則項、選擇合適的動量值等方法對原網(wǎng)絡(luò)進行改進。最終得到相對于原來的網(wǎng)絡(luò)具有更高的平均精度、查全率、查準率、檢測速度以及平均交并比(intersection over union,IOU)的新的網(wǎng)絡(luò)模型。
YOLOv3原網(wǎng)絡(luò)中參考SSD[9]的思想分別在32倍降采樣、16倍降采樣、8倍降采樣等3個不同的地方進行了3次檢測。其中32倍降采樣的感受野最大,主要是用于大型目標的檢測,而16倍降采樣適合檢測中等大小的物體,8倍的感受野最小,則是主要是用于小型目標的檢測,由于筷子毛刺屬于中小目標檢測,因此文中刪除了原YOLOv3網(wǎng)絡(luò)中32倍降采樣時的YOLO檢測層,獲得新的網(wǎng)絡(luò)模型。
網(wǎng)絡(luò)層越深,特征表達效果越好。在YOLOv3網(wǎng)絡(luò)中使用up-sample(上采樣),能使16倍降采樣和8倍降采樣使用深層特征。YOLOv3網(wǎng)絡(luò)為了讓網(wǎng)絡(luò)同時學(xué)習(xí)深層和淺層特征,獲得更好的表達效果,因此使用route層把16倍采樣得到的feature map與第4次下采樣得到的淺層特征進行融合,將8倍采樣得到的feature map與第3次下采樣得到的淺層特征進行融合。為了使網(wǎng)絡(luò)得到更好的檢測效果,在8倍采樣后面增加了一個具有更小感受野的4倍降采樣,并利用route層使其與網(wǎng)絡(luò)中的第2次下采樣的淺層特征進行融合然后用于YOLO層的檢測,相對于原網(wǎng)絡(luò),改進后的網(wǎng)絡(luò)平均檢測精度提升了1.5%、查準率提高了5.0%、查全率提高了1.0%。
Anchor box的作用是解決傳統(tǒng)檢測中,一個窗口只能檢測一個目標以及多尺度預(yù)測的問題。YOLOv3先驗框與Faster R-CNN[10]和SSD的設(shè)定方法不同,F(xiàn)aster R-CNN和SSD采用人工設(shè)定的方法,在YOLOv3中采用K-means聚類的方式確定Anchor box尺寸。K-means算法是基于距離的聚類算法,基本思想是隨機選取初始聚類中心,再計算每個樣本點到初始聚類中心的歐式距離,按照距離最近的準則將它們分配給相似度最大的聚類中心所代表的類。計算每個類別所有樣本點的均值,更新聚類中心,直到目標準則函數(shù)收斂為止[11],見圖1。通過K-means聚類的方法重新計算了多組,并與文中數(shù)據(jù)集相適應(yīng)的且在416×416網(wǎng)絡(luò)輸入下的anchor box尺寸。當anchor box尺寸為4,7,7,15,10,13,16,30,33,23,30,61,62,45,59,119,116,90時的網(wǎng)絡(luò)相對于原網(wǎng)絡(luò)的平均檢測精度提升了2.6%、查準率降低了2.0%、查全率提高了6.0%。
圖1 K-means聚類法示意圖
利用數(shù)據(jù)抖動產(chǎn)生更多數(shù)據(jù),防止過擬合。抖動是裁剪的參數(shù),抖動0.1,就在0.0~0.1中裁剪。試驗中當抖動為0.1時,改進后的網(wǎng)絡(luò)相對于原網(wǎng)絡(luò),平均檢測精度提升了4.31%、查準率提高了2.00%、查全率提高了8.00%。抖動為0.1時裁剪效果如圖2所示。
圖2 裁剪效果示意圖
在損失函數(shù)中加入一些正則項可以防止網(wǎng)絡(luò)的過擬合。在隨機梯度下降(SGD)[12]中加入正則項對損失函數(shù)進行規(guī)范化:
(1)
Z=wx+b,
(2)
式中:
λ——權(quán)值衰減參數(shù);
ωi——權(quán)重;
b——偏置;
Z——輸出值;
E——損失函數(shù);
η——學(xué)習(xí)率。
由式(1)可知,權(quán)值衰減參數(shù)λ增大,權(quán)重ωi則會衰減。由式(2)可知,權(quán)重ωi的衰減使得Z值不斷減小,實際上Z的取值范圍很小,因此激活函數(shù)會相對線性,整個神經(jīng)網(wǎng)絡(luò)會計算離線性函數(shù)近的值,這個線性函數(shù)相對簡單且不會發(fā)生過擬合。權(quán)值衰減參數(shù)λ越大對過擬合的抑制能力越強。在文中通過網(wǎng)絡(luò)搜索的方式對0.001 5、0.000 5(基準)、0.000 3、0.000 2、0.000 1 5組參數(shù)進行訓(xùn)練,結(jié)果顯示,當權(quán)重衰減正則取0.000 1時改進后的網(wǎng)絡(luò)相對于原網(wǎng)絡(luò),平均檢測精度提升了5.0%、查準率提高了4.0%、查全率提高了9.0%。
動量影響梯度下降到最優(yōu)值的速度,由式(3)可知梯度下降法參數(shù)的更新只與當前梯度有關(guān)。但動量梯度下降法是先求每個mini-batch的梯度,然后再進行指數(shù)加權(quán)平均得到新的參數(shù)V與V用以更新之前的參數(shù),由于指數(shù)加權(quán)平均后的梯度中含有之前梯度的更新方向的信息,所以利用指數(shù)加權(quán)平均之后的梯度對參數(shù)進行更新得出最終的更新方向,是一種較優(yōu)的梯度下降方法,其過程如式(4)所示。動量梯度下降算法不僅能夠增加穩(wěn)定性而且還能避免局部最優(yōu)。若當前梯度與歷史梯度一致則增強此梯度,反之則梯度衰減抑制震蕩,其作用效果如圖3所示。通過試驗,當動量取0.9時,平均精度達到最大值。
(3)
(4)
式中:
W——權(quán)重;
b——偏置;
α——步長;
β——加權(quán)參數(shù);
V——指數(shù)加權(quán)平均數(shù)。
圖3 梯度下降示意圖
表1中所列為Anchor box尺寸、權(quán)重衰減正則項、抖動、動量4個參數(shù)的不同取值組。用darknet53.conv.74預(yù)訓(xùn)練權(quán)重對表1中的不同參數(shù)依次由上往下,逐步使用網(wǎng)絡(luò)搜索的方法進行訓(xùn)練,每次訓(xùn)練次數(shù)為4 000次,使得網(wǎng)絡(luò)的平均檢測精度、查全率、平均IOU、F1-score逐步得到提高,最終得到更優(yōu)的網(wǎng)絡(luò)模型。
通過網(wǎng)絡(luò)搜索的方式對數(shù)組參數(shù)分別進行訓(xùn)練,取到其中的最優(yōu)值。通過試驗所確定的各組最優(yōu)參數(shù)見表2。
表1 試驗參數(shù)取值
表2 試驗最優(yōu)參數(shù)
數(shù)據(jù)集主要通過相機拍攝的方式獲取。文中的數(shù)據(jù)集全部是來源于C型一次性竹筷。為了增加模型的泛發(fā)性和訓(xùn)練精度,文中數(shù)據(jù)集在獲取圖像時,增加了許多不同形態(tài)特征、不同角度、不同位置的筷子毛刺的圖片??曜由霞瓤赡馨卣鬏^為明顯的毛刺也可能包含特征不明顯的毛刺(見圖4)。毛刺可能出現(xiàn)在筷子上的任何位置,且由于拍攝角度和筷子本身姿態(tài)的影響,同一個筷子毛刺可能會在圖像中表現(xiàn)出不同的特征(見圖5)??曜由系拿虜?shù)量不一,可能只有一個也可能有多個(見圖6)。數(shù)據(jù)集總共包含了303圖片,其中222張圖片作為訓(xùn)練集,81張圖片作為測試集。由于筷子毛刺檢測環(huán)境并不復(fù)雜,因此不需要人工制造負樣本數(shù)據(jù)用于網(wǎng)絡(luò)訓(xùn)練,采用YOLO網(wǎng)絡(luò)中的Grid Cell機制,來確定相應(yīng)的正負樣本。其作用是通過計算其與一個或者多個Object的Ground Truth Box的IOU,再選擇特定閾值對正、負樣本進行分類。數(shù)據(jù)集標注時只標注毛刺這一類缺陷。
試驗在 PC端完成。PC主要配置為:i7處理器、電腦運行內(nèi)存為16G、GPU(GTX-1060)、顯存為6G。開發(fā)環(huán)境為Visual Studio2015,需要配置CUDA9.0、CUDANN9.0、OpenCV3.0和YOLOv3物體檢測框架。
圖4 不同程度毛刺筷子的示意圖
圖5 不同姿態(tài)毛刺筷子的示意圖
Figure 5 Schematic diagram of chopsticks glitches in different poses
圖6 不同數(shù)量毛刺筷子的示意圖
Figure 6 Illustration of burrs with different number of chopsticks
文中提出的改進YOLOv3算法的筷子毛刺缺陷檢測方法具體的檢測過程主要有以下幾個步驟:① 通過相機獲取待檢測筷子的圖像;② 將獲取到的圖像傳輸?shù)接?xùn)練好的網(wǎng)絡(luò)模型中進行檢測,判斷是否具有毛刺;③ 獲取模型的檢測結(jié)果,若未檢測到毛刺則為合格,若檢測到毛刺則對此筷子進行剔除;④ 對合格的筷子進行收集。工程流程圖見圖7。
用改進后的網(wǎng)絡(luò)模型對darknet53.conv.7預(yù)訓(xùn)練模型進行訓(xùn)練,訓(xùn)練次數(shù)為4 000次,得到一系列檢測模型,其結(jié)果見圖8。由圖8可知,訓(xùn)練到4 000次時檢測模型的平均檢測精度最高,此時的平均loss值降到了0.070。原網(wǎng)絡(luò)的訓(xùn)練結(jié)果見圖9。由表3可知,當IOU為50時改進后的網(wǎng)絡(luò)的平均檢測精度提高了5.0%,查準率提高了4.0%,查全率相比提高了9.0%,平均IOU提高到了3.5%,F(xiàn)1-score提高到了0.92,檢測速度由16.8幀/s提升到了21幀/s,從而每小時檢測的圖像數(shù)為75 600張,已經(jīng)超過了目前市面上筷子質(zhì)檢機每小時70 000只的檢測效率。綜上所述可知,相比原網(wǎng)絡(luò)模型,改進后的網(wǎng)絡(luò)模型在平均檢測精度、查準率、查全率、檢測速度等各方面都有較大的提升。
圖7 筷子毛刺檢測工作流程圖
IOU為50時,分別對原網(wǎng)絡(luò)的檢測模型與改進后的最優(yōu)檢測模型進行測試,其結(jié)果見圖10、11。在圖10(a)原網(wǎng)絡(luò)中從左往右,兩處缺陷的檢測精度分別為92%,65%。而在圖11(a)改進后網(wǎng)絡(luò)中從左往右,兩個空閑車位的檢測精度分別提升到了99%,91%。在圖10(b)中原網(wǎng)絡(luò)出現(xiàn)了誤檢的情況,圖中從左往右,3個缺陷的檢測精度分別為63%,76%,99%,但圖中其實只有兩處缺陷,分別為圖中的筷子的中部和右部,筷子的左部并無毛刺缺陷,因此出現(xiàn)了誤檢的情況。而在圖11(b)改進后網(wǎng)絡(luò)中并未出現(xiàn)誤檢的情況,且圖中從左往右,兩個毛刺缺陷的檢測精度分別提升到了99%、98%。由對比結(jié)果可以看出,由于改進后的模型有更高平均檢測精度、查全率、查準率、平均IOU以及F1-score,所以檢測效果明顯優(yōu)于改進前的模型,不僅檢測精度明顯提高,且有更高的查全率以及更好的泛化能力,不易發(fā)生漏檢的情況。
圖8 改進后網(wǎng)絡(luò)訓(xùn)練結(jié)果示意圖
Figure 8 Schematic diagram of improved network training results
圖9 原網(wǎng)絡(luò)訓(xùn)練結(jié)果示意圖
Figure 9 Schematic diagram of original network traini-ng results
表3 當IOU為50時最優(yōu)模型檢測結(jié)果
圖10 原模型的測試結(jié)果
圖11 改進后模型的測試結(jié)果
采用具有較快檢測速度與精度的SSD神經(jīng)網(wǎng)絡(luò)[9]對文中的筷子毛刺缺陷數(shù)據(jù)集進行了訓(xùn)練檢測,并與文中提出的方法進行對比,結(jié)果見表4。通過對比可知,基于改進YOLOv3的檢測方法與SSD神經(jīng)網(wǎng)絡(luò)算法相比,在準確率與檢測速率的上都有明顯的優(yōu)勢。
表4 不同檢測方法的訓(xùn)練結(jié)果
研究提出了一種基于改進YOLOv3算法的筷子毛刺缺陷檢測方法,通過刪除YOLOv3網(wǎng)絡(luò)多尺度檢測中的32倍降采樣的檢測層、在YOLOv3網(wǎng)絡(luò)中增加4倍降采樣層并與第二次下采樣進行融合、重新聚類anchor box尺寸、改變YOLOv3網(wǎng)絡(luò)的超參數(shù),減小抖動、減小權(quán)重衰減正則項、選擇合適的動量值等方法對原網(wǎng)絡(luò)進行改進,最終得到了新的網(wǎng)絡(luò)模型。再利用新的網(wǎng)絡(luò)模型進行訓(xùn)練,最后得到了一個相對原模型具有更好檢測效果的檢測模型,當交并比為50時其平均檢測精度達到了94%、查準率達到了93%、查全率達到了91%、平均檢測速度21幀/s。該方法基本能滿足筷子毛刺的檢測需求。在后續(xù)的研究中將通過進一步改進網(wǎng)絡(luò)結(jié)構(gòu)等方法繼續(xù)提高模型的泛化能力和檢測速度。