王平凱,孫光澤,朱芮萱
(長春工業大學機電工程學院,長春 130012)
卷積神經網絡(Convolutional Neural Network,CNN)是一種人工神經網絡[1],1998 年,LeCun[2]提出了第一個卷積神經網絡模型LeNet,隨著Relu 和Dropout 的提出,以及GPU 和大數據帶來的歷史機遇,相繼誕生了AlexNet、VggNet、Gool?eNet、ResNet[3-6]。由于圖像數據可以看作二維的像素網格,卷積神經網絡通過特殊的線性運算可以處理圖像數據,因此常被應用于圖像處理與目標檢測。
目標檢測目前有一階段(one-stage)和兩階段(two-stage)兩種方法,其中,一階段是指通過一遍網絡就可以得出目標的位置和類別信息,常見的方法有括YOLO(you only look once)[7]、SSD(single shot multibox detector)[8]等。兩階段是指當輸入圖片通過網絡后,會生成一些候選區域,這些區域可能會包含一個待檢測目標,然后進一步區分這些候選區域具體包含了哪些待檢測的目標。常見的方法有R-CNN(region-conventional neural network)、Fast R-CNN、Faster R-CNN、Mask R-CNN 和SPP-net(spatial pyramid pool?ing-net)[9-12]。
基于卷積神經網絡的目標檢測方法能夠快速準確地定位到目標,通過輔助設備能向人類用戶傳遞實時的場景信息。隨著物流業的蓬勃發展,智能化叉車不斷涌現,目標檢測起了推動性的作用,除了基于卷積神經網絡的目標檢測方法,還有傳統的檢測方法。J.Pagès等[13]介紹了一個完整的計算機視覺系統,提出了基于顏色和幾何特征的托盤識別方法。Mi?chael Seelinger等[14]提出了一種移動相機空間操作(MCSM)的視覺引導控制方法,將基準放在托盤本身,實驗的精度與速度都很高,但同時需要預先給托盤添加基準和多攝像頭的高成本。Sungmin Byun等[15]提出了一種基于單目視覺的托盤定位方法,該方法快速、準確,同時采用了攝像機標定技術來確定托盤的位置。
為了更好地滿足實時檢測的工程應用場景,本文采用YOLOv3 算法,其采用一個單獨的CNN 模型實現end-to-end的目標檢測[2],為了提高該算法對托盤檢測的平均精度與檢測速度,首先在YOLOv3算法的基礎上使用K-Means++聚類算法重新聚類,得到新的適用于托盤檢測的先驗框。其次引入了二元交叉熵損失函數對原有的損失函數進行改進,同時改進了輸入圖像劃分網格的機制,引入了權重矩陣,通過數據增強的手段對采集到的圖像進行擴充。最后在本文制作的數據集上進行訓練以及測試,并與其他的目標檢測算法進行比較,結果表明改進后的YOLOv3算法在平均精度以及速度上都有提升。
YOLOv3將目標檢測作為一個空間分離的邊界盒和相關類概率的回歸問題,單個神經網絡可以在一次評估中直接從完整圖像中預測邊界框和類概率[7]。通過對輸入圖像的特征提取,得到一定大小的特征圖,然后將得倒的特征圖像劃分成S×S的網格,當圖像中某個目標的中心位置落入到其中的一個網格,那么該網格將會負責預測該目標。每個網格都會預測B 個邊界框,該網絡會預測3 個固定數量的邊界框,通過K-means聚類得出9種尺寸的Anchor Box,分別為10×13、16×30、33×23、30×61、62×45、59×119、116×90、156×198、372×326。
在網絡中實際訓練的參數為tx、ty、tw、th,其中tx、ty為預測的坐標偏移值,tw、th為尺度縮放值。在先驗框的基礎上通過平移加尺度縮放進行微調,得到最終的邊界框坐標值(x,y,w,h),分別表示檢測框的橫坐標、縱坐標、寬度和高度。Bounding Box 與Anchor Box的對應關系如圖1所示。
圖1 Bounding Box 與Anchor Box的對應關系
Bounding Box的坐標計算公式為:
式中:bx、by、bw、bh分別為Bounding Box 的中心坐標、寬度和高度;cx、cy分別為當前單元網格相對于圖像左上角的橫縱偏移量;pw、ph分別為對應Anchor Box 的寬和高;σ 為Sig?moid激活函數。
每個邊界框有(x,y,w,h,confidence)5個基本參數,其中confidence為預測邊界框的置信度,其計算公式為:
式中:P(object)為網格中含有某類目標的類別概率,為真實邊界框和預測邊界框的交并比。
采用邏輯回歸方式對先驗框進行目標性評分,通過非極大值抑制方法從9種不同尺寸的先驗框中找到目標存在可能性得分最高的。最終輸出特征圖的尺度為13×13、26×26 以及52×52。
在目標檢測中,選擇合適的先驗框可以顯著提高目標檢測的速度和精度。Yolov3 使用的先驗框思想是從Faster-rcnn中引入的,其是一個具有固定寬度和高度的初始候選框。Yo?lov3 算法在mscoco 和pascal voc 數據集上通過使用K-means 聚類算法得到9 組先驗框,分別為(10,13)、(16,30)、(33,23)、(30,61)、(62,45)、(59,119)、(116,90)、(156,198)、(372,326),但是,在COCO 和VOC 數據集中使用的先驗框并不適合本文使用的托盤數據集。因此,本文采用K-means++算法對托盤數據集的w和h進行重新聚類。本文使用AvgIOU 作為目標的度量標準進行聚類分析,AvgIOU 聚類的目標函數如下:
式中:nk為第k 個聚類中心的樣本數量;K 為樣本總數;n 為聚類個數;bbox為樣本手動標注的矩形框的值;center為簇中心;IOU(bbox,center)為樣本和聚類的交并集。
本文采用訓練中生成的當前迭代中交并比IOU(Intersec?tion over Union)參數替代K-means 算法中的歐幾里得距離,其評估標準為:
式中:d(bbox,center)為邊界框與中心框之間的距離;IOU(bbox,center)為兩個框的交并比。
當d(bbox,center)的值較小時,說明聚類的效果好,同時IOU(bbox,center)的值較大,這樣才能保證1-IOU(bbox,center)的值較小。這種聚類方法可以在同一聚類中產生較大的交并比和較小的兩個框之間的距離。
本文對樣本信息重新聚類,選取的k值為1~9,在聚類過程中發現隨著k值增加,平均交并比AvgIOU也呈現逐步上升的趨勢,當k=6時出現拐點,此時為最佳的預測框數量。本文中數據集對應聚類中心的寬和高分別為(23,13)、(66,22)、(143,30)、(163,47)、(219,56)、(340,70)。該聚類方法可以加快網絡的收斂速度,有效的改善訓練過程中的梯度下降。
損失函數是一種可以很好地反映模型與實際數據差距的工具。在神經網絡的正向傳播過程中生成損失函數,同時得到的損失函數也是反向傳播的起點。該網絡中的損失函數包括中心坐標的損失、預測邊界框的損失、置信度的損失和預測類別的損失。本文應用以數據的最大似然法則得到交叉熵來作為損失函數,在YOLOv3目標檢測中,通過對輸入圖像的特征提取,得到一定大小的特征圖,然后將得到的特征圖像劃分成S×S的網格,在coco、voc數據集上,先驗框在x軸和y軸上同等密度分布。但是在實際的托盤檢測中,托盤實際的成像呈現出在y軸稀疏、在x軸上相對密集的形態,因此為了降低劃分輸入圖像網格的長寬比例對目標檢測所帶來的影響,調整劃分網格的機制,將原來的S?S 的尺寸更改為大小為2S?S,增加了沿x 軸方向的檢測密度。同時為了提高對托盤分類的準確性,避免進行錯誤的分類,引入了權重矩陣T,T=[T1,…,Ti],表示不同類別的目標分類錯誤的懲罰權重。改進后的損失函數為:
式中:L1為預測中心坐標的損失函數;λcoord為坐標誤差的權重參數,在該網絡中λcoord=5;B 為該網格具有的Bounding Box 個數;為有無目標對象中心落在預測邊界框中,當需要被識別的目標落入到第i 個網格生成的第j 個邊界框中時,分別為預測框的寬度和高度;為真實框中心點的橫縱坐標;為預測框中心點的橫縱坐標。
式中:L2為預測邊界框的損失函數;分別為真實框的寬度和高度。
式中:L3為置信度的損失函數;為預測的置信度;ci為真實的置信度;λnoobj為不含目標的置信度權重參數,在該網絡為第i個網格的第j個邊界框不負責該目標。
式中:L4為類別概率的損失函數;pi(c) 為類別概率預測;為真實的類別概率預測。
由于沒有專門用來識別托盤信息的數據集。因此本文在實際的倉儲環境中進行了托盤圖片的采集,數據集中的數據越大,整個網絡的魯棒性就越好。本次采集到的圖片935張,為了提高整體網絡的性能,增加識別精度,提高泛化能力,通過數據增強的辦法將原始圖片進行處理來擴充數據集。本文用來數據擴充的方法有3種:第一種方法包括鏡像對稱、翻轉、縮放、平移和隨機裁剪;第二種方法為添加噪聲,在擴充數據樣本的同時,也有效地提升了神經網絡的學習能力;第三種方法為對比度變換。擴充之后部分數據集如圖2所示。
圖2 對原有圖片進行數據增強
在完成數據擴充之后,借助LableImg 標注工具進行數據集的標注,找出每張圖片中的感興趣區域(ROI),并用矩形框將其標注生成xml格式的文件,如圖3所示。將標注后的數據通過修改生成訓練所需的數據形式,其中包括類別,還有歸一化后的中心點橫坐標、縱坐標、寬、高。該研究運用的是和PASCAL VOC 2007 數據集一樣的結構,分為訓練集、測試集和驗證集。
圖3 標注數據集
本文實驗基于Ubuntu 18.04操作系統,CPU 為Inte?li9-9900k,主頻為3.6 GHz,內存32G,顯卡為NVIDIA Ge?Force GTX1080Ti,顯存為8 GB,深度學習框架為Dark?net-53,CUDA版本為10.0,CUDNN的版本為7.6.4。
本研究對包含尺寸大小為416×416 的5 000 張訓練集圖片、2 000張測試集圖片的托盤數據集進行訓練。在準備訓練之前將參數batch 設置為64,表示網絡積累64 個樣本進行一次正向傳播,將subdivisions設置為16,這樣64個樣本將會分為16 次完成正向傳播,每次4 個樣本數量。初始學習率設為0.001,動量系數設置為0.9,權重衰減率設為0.000 5,配置完訓練參數后隨即對模型進行訓練,當迭代次數到達3 000次,學習率衰減為初始值的0.1 倍;當迭代次數到達3 500次,學習率進一步衰減為初始值的0.01 倍。損失值隨著迭代次數變化的曲線如圖4所示。
圖4 損失值隨迭代次數變化曲線
可以看出,損失值隨著迭代次數的上升而逐漸降低,當迭代次數小于2 000 時,損失值迅速下降,當迭代次數達到8 000時,損失值逐漸趨于平穩。檢測效果如圖5所示。
圖5 托盤識別效果
在目標檢測中,目前比較常用的目標檢測網絡包括Faster RCNN以及SSD,在基于本研究的數據集上,對Faster RCNN以及SSD網絡進行訓練與測試,對比分析各種算法的性能。如表1 所示,對比的內容包括檢測速度、mAP 值、AP 值以及漏檢率,本文用IOU=0.5,也就是PASCAL VOC數據集常用的指標這一標準來作為準確性評估的方法,當IOU=0.7時,是實際工程應用中的標準。由表可以看出,本文的算法相較于YOLOv3在檢測速度上由45 幀/s 提升至47 幀/s,當IOU=0.5 時,mAP 由91.4%上升至94.6%,提高了3.2%,漏檢率由8.7%降至5.9%,降低了2.8%。由此可以看出本文使用K-Means++算法進行重新聚類以及改進的損失函數,可以提高對托盤的檢測速度與檢測精度。
表1 不同網絡結構的測試性能對比
為了評估該模型對托盤孔的檢測效果,使用精確率(Pre?cision)和召回率(Recall)對模型進行評價。通過這兩個指標可以對模型的準確性進行評估。兩個指標的計算公式分別為:
式中:Precision 為托盤的精確率;TP 為一個正例被預測為正例,在這里表示的是正確檢測到的托盤樣本數;FP為一個負例被預測為正例,表示的是檢測的誤差樣本數;Recall為托盤的召回率;FN為一個實例被預測為負例,表示的是錯過檢測的托盤樣本數量。
不同網絡結構的測試對比如表2所示,由表中數據可以看出,本文改進的檢測算法在測試集上所得到的評價指標Preci?sion和Recall都要優于未改進的YOLOv3,Faster RCNN和SSD。
表2 不同網絡結構的測試對比
為了解決倉儲環境中對托盤以及貨物的實時檢測,本文對原有的YOLOv3算法進行改進。為了提高對檢測物體的平均精度以及檢測速度,首先運用K-Means++算法重新聚類出更合適的Anchor Box,然后調整劃分網格機制,改進損失函數。并與其他算法在本文制作的數據集上進行測試,采用在不同IOU 情況下的mAP 值、AP 值、漏檢率以及檢測速度、Preci?sion和Recall來聯合評價本文算法與其他算法的性能。雖然本文算法在托盤實時檢測以及分類方面取得了令人滿意的結果,但其性能還有待進一步提高。