龍健寧,劉 斌,龔德文
(1.華南理工大學 聚合物成型加工工程教育部重點實驗室 廣東省高分子先進制造技術(shù)及裝備重點實驗室聚合物新型成型裝備國家工程研究中心,廣州510641;2.廣東昌恒智能科技有限公司,東莞523841)
目標檢測是以圖像識別技術(shù)為基礎,對圖像中的目標對象進行分類和識別,并在目標對象周圍繪制預測框進行定位。目前,應用深度學習方法的目標檢測技術(shù)已經(jīng)被廣泛地應用到無人駕駛、圖片搜索、人臉識別、光學字符識別等方面[1]。傳統(tǒng)的圖像檢測一般采用“人工設計特征+分類器”的模式,通過人工設計提取局部特征再借助于向量機等分類器進行圖像的分類和識別。人工設計特征容易受到光照變化、位置變化以及角度變化等因素的影響[2],而深度學習的方法能夠自動提取圖像特征,克服了傳統(tǒng)圖像檢測的這一缺點,魯棒性和泛化能力更強,應用也更為廣泛。
Tensorflow 是谷歌公司發(fā)布的基于數(shù)據(jù)流圖的開源的深度學習框架,具有高度的靈活性、通用性、擴展性以及良好的移植性,能夠適應實際生產(chǎn)環(huán)境,被廣泛地應用到圖像識別、自然語言識別和語音識別等深度學習領(lǐng)域[3]。Object Detection API 是Tensorflow 框架下的目標檢測庫,集成了SSD、Faster R-CNN 以及Mask R-CNN 等主流的目標檢測算法,易于構(gòu)建、訓練和部署目標檢測模型。深度學習方法在復雜環(huán)境下進行目標檢測效果卓越。
物流倉儲環(huán)境條件復雜多變,物流周轉(zhuǎn)箱是物流環(huán)境下貨物流通的主要載體之一。本文基于Object Detection API,利用相機拍照分別對單元貨架上擺放的物流周轉(zhuǎn)箱進行目標檢測,以期為無人叉車或機械臂對物流單元貨架上的物流周轉(zhuǎn)箱進行智能搬運提供依據(jù)。單元貨架目標檢測示意圖如圖1所示。
圖1 物流單元貨架目標檢測示意圖Fig.1 Diagram of object detection of logistics unit shelf
目標檢測算法主要分為兩大類[4]。一類是基于分類的目標檢測框架(two stage),另一類是基于回歸的目標檢測框架(one stage)?;诜诸惖哪繕藱z測算法首先生成可能包含被檢測目標的候選區(qū)域,再對候選區(qū)域進行進一步地分類和位置精修,以獲得最終檢測結(jié)果,主要算法包括R-CNN、Fast RCNN、Faster R-CNN、Mask R-CNN 及其改進算法等。基于回歸的目標檢測算法則不需要生成候選區(qū)域,直接在原圖上生成最終結(jié)果,因此速度更快,但是精度有所下降,主要算法包括YOLO、SSD 及其改進算法等。本文選用Object Detection API 中集成的Fast R-CNN 模型和SSD-MobileNet 模型進行單元貨架的目標檢測任務。
Faster R-CNN[5]是由Girshick R 等人在2016年提出的基于分類的目標檢測模型。Faster R-CNN 模型結(jié)構(gòu)如圖2所示。
圖2 Faster R-CNN 模型結(jié)構(gòu)Fig.2 Model structure of Faster R-CNN
Faster R-CNN,首先利用卷積神經(jīng)網(wǎng)絡自動提取輸入圖像的特征信息,并傳遞給RPN(region proposal network)生成多個不同大小和比例的候選區(qū)域;接著,ROI Pooling 利用RPN 生成的候選區(qū)域和卷積神經(jīng)網(wǎng)絡提取到的共享特征圖(feature map),得到固定大小的候選區(qū)域特征圖;最后,利用softmax 對候選區(qū)域進行具體類別的分類,利用邊框回歸獲得物體的精確位置,輸出檢測分類信息和位置信息。
SSD[6]是由Wei Liu 等人在2016年提出的基于回歸的目標檢測算法。SSD 以VGG16 卷積神經(jīng)網(wǎng)絡為主體,將兩個全連接層改成卷積層,再增加4 組卷積、8 個卷積層構(gòu)造網(wǎng)絡結(jié)構(gòu),同時,借鑒了YOLO的回歸思想和Faster R-CNN 的Anchor 機制,各卷層將圖像分成若干相同大小的網(wǎng)格(feature map cell),對每個網(wǎng)格設定一系列默認大小長寬比的包圍盒(default boxes),最后分別預測default boxes 的偏移以及類別得分,通過非極大值抑制方法得到檢測結(jié)果,輸出類別和位置。
而SSD-MobileNet 模型,則是利用輕量化的MobileNet[7]神經(jīng)網(wǎng)絡結(jié)構(gòu)替換傳統(tǒng)SSD 模型當中的VGG16 卷積神經(jīng)網(wǎng)絡結(jié)構(gòu),在MobileNet 網(wǎng)絡的最后卷積層conv13 后面再增加8 個卷積層,分別為conv14_1,conv14_2,conv15_1,conv15_2,conv16_1,conv17_1,conv17_2,從中抽取conv11,conv13,conv14_2,conv15_2,conv16_2 以 及conv17_2 等6層進行檢測。輸入圖像歸一化為300×300,conv11,conv13,conv14_2,conv15_2,conv16_2 以及conv17_2的特征尺寸分別為19×19,10×10,5×5,3×3,2×2 以及1×1。SSD-MobileNet 綜合了SSD 和MobileNet 兩者的優(yōu)點,在保證精度的同時,具有計算量小、節(jié)約資源、響應迅速等特點。SSD-MobileNet 模型結(jié)構(gòu)如圖3所示。
圖3 SSD-MobileNet 模型結(jié)構(gòu)Fig.3 Model structure of SSD-Mobilenet
單元貨架上物流周轉(zhuǎn)箱的擺放形式如圖4所示。由此可知,物流周轉(zhuǎn)箱的側(cè)面是檢測的目標對象。
圖4 物流周轉(zhuǎn)箱擺放方式Fig.4 Style of placing the logistics turnover box
在真實的物流倉儲環(huán)境下采集了36 張圖像。為了擴充數(shù)據(jù),對原圖像作順時針旋轉(zhuǎn)10°和逆時針旋轉(zhuǎn)10°處理,并對原圖像以及旋轉(zhuǎn)圖像進行椒鹽噪點處理和高斯模糊處理;另外,考慮到光線變化的情況,還對原圖像進行了亮度增加和亮度減少的處理。最終一幅原圖像能夠得到10 幅擴充圖像,如圖5所示。數(shù)據(jù)集總共有36×11=396 張圖像。
圖5 圖像增強效果Fig.5 Effect of image enhancement
基于Faster R-CNN 和SSD-MobileNet 的目標檢測,都屬于監(jiān)督學習,利用labelImg 標注工具獲得圖像中目標對象的類別和像素位置坐標,保存成xml格式文件。
將獲得的數(shù)據(jù)集xml 文件劃分為訓練集、驗證集和測試集,比例分別為75%,15%和10%;然后將訓練集、驗證集和測試集轉(zhuǎn)換成csv 格式文件,再通過Object Detection API 下的generate_tfrecord.py將csv 格式文件轉(zhuǎn)換成Tensorflow 能夠調(diào)用的tfrecord格式文件。
在Object Detection API 下訓練模型十分方便,以訓練SSD-Mobilenet 模型為例。為了加快訓練的速度,實驗中采用了預訓練模型ssd_mobilenet_v1_coco_11_06_2017,修改配置文件,將初始學習率設置為0.004,衰減步數(shù)和衰減系數(shù)分別設置為100 和0.95,訓練步數(shù)設置為10000 步。實驗采用GPU 訓練的方式來加快訓練速度,利用Object Detection API下的train.py 開始訓練,經(jīng)過約3 h 的訓練,得到訓練模型。訓練結(jié)束后,利用export_inference_graph.py可以將訓練得到了包含模型結(jié)構(gòu)和參數(shù)的臨時文件轉(zhuǎn)化為可獨立運行的pb 格式文件,方便模型的移植與集成。
訓練結(jié)束后,利用Tensorboard 可以方便地得到模型的損失率變化情況。Faster R-CNN 模型和SSD-Mobilenet 模型的loss 曲線分別如圖6 和圖7所示。
由圖6 和圖7 可知,loss 隨著迭代次數(shù)的增加而下降,經(jīng)過10000 次迭代,F(xiàn)aster R-CNN 模型的loss 逐漸穩(wěn)定在0.1 左右,SSD-MobileNet 模型的loss 逐漸穩(wěn)定在1.5,而Faster R-CNN 模型的收斂速度比SSD-MobileNet 模型快。
圖6 Faster R-CNN 模型loss 曲線Fig.6 Loss curve of Faster R-CNN
圖7 SSD-MobileNet 模型loss 曲線Fig.7 Loss curve of SSSD-Mobilenet
利用Object Detection API 下的eval.py 可以對訓練結(jié)果進行驗證,獲得檢測準確率;另外,對同一張圖像進行目標檢測,可以獲得Faster R-CNN 模型和SSD-MobileNet 模型的檢測時間。二者的檢測準確率和檢測時間對比如表1所示。
表1 檢測準確率和檢測時間對比Tab.1 Comparison of detection accuracy and detection time
由表1 可知,對于采集的物流周轉(zhuǎn)箱數(shù)據(jù)集,F(xiàn)aster R-CNN 模型的檢測準確率可以達到100%,而SSD-MobileNet 模型的檢測準確率也達到了98.5%。而在檢測時間方面,二者相差巨大,通過對比可知,相比于Faster R-CNN 模型,SSD-Mobilenet 模型更能滿足物流環(huán)境下單元貨架目標檢測的實時性需求。
SSD-MobileNet 模型能夠檢測出物流周轉(zhuǎn)箱在單元貨架上的位置,并畫出包圍盒,通過包圍盒的像素高度可以得到物流周轉(zhuǎn)箱的層數(shù)。所用的單元貨架分為4 層,每一層分為左右位置,最上面一層的左右位置分別最多能放置一個物流周轉(zhuǎn)箱,其余三層的每個位置最多能疊放3 個物流周轉(zhuǎn)箱。將整個貨架劃分為8 個區(qū)域,分別編號01,02,1,2,3,4,5,6,如圖8所示。
圖8 單元貨架劃分區(qū)域Fig.8 Division of logistics unit shelf
當相機拍照時,相機與單元貨架的位置相對固定,這樣就可以根據(jù)檢測到的包圍盒的中心點的像素坐標,判斷包圍盒所在的單元貨架區(qū)域,繼而得到物流周轉(zhuǎn)箱在單元貨架上的位置。
QT 是跨平臺的C++圖形用戶界面開發(fā)框架,利用訓練轉(zhuǎn)換得到的SSD-MobileNet 模型的pb 文件并結(jié)合OpenCV 庫,在QT 平臺上設計了物流單元貨架檢測界面,如圖9所示。
物流單元貨架檢測界面由相機狀態(tài)顯示模塊、原圖及檢測結(jié)果顯示模塊、設置模塊以及貨架狀態(tài)顯示模塊組成,各模塊的功能如下:
(1)相機狀態(tài)顯示模塊,主要用于顯示相機連接狀態(tài)以及獲取相機名稱;
(2)原圖及檢測結(jié)果顯示模塊,用于顯示采集到的圖像以及檢測后的圖像;
圖9 物流單元貨架目標檢測界面Fig.9 Interface of object detection of logistics unit shelf
(3)設置模塊,主要包括“打開相機”按鈕、“關(guān)閉相機”按鈕、“圖像采集”按鈕和“貨架檢測”按鈕以及“保存圖片”選項;
(4)貨架狀態(tài)顯示模塊,能夠直觀地反映檢測結(jié)果,顯示單元貨架上每一層每個位置的物流周轉(zhuǎn)箱的層數(shù)。
本文將深度學習的方法應用到物流環(huán)境下的單元貨架目標檢測,基于Tensorflow 框架下的Object Detection API,通過采集實地圖像進行模型訓練,綜合對比了Faster R-CNN 模型和SSD-MobileNet 模型的檢測準確率和檢測時間,實驗發(fā)現(xiàn)二者的檢測準確率均能滿足要求,而SSD-MobileNet 的檢測時間僅為166.94 ms,因此,選擇了兼顧準確性與實時性的SSD-MobileNet 模型來檢測單元貨架上的物流周轉(zhuǎn)箱的擺放位置與疊放層數(shù),并在QT 平臺上設計開發(fā)了基于SSD-MobileNet 算法的物流單元貨架目標檢測界面。該檢測界面能夠方便直觀地查看物流單元貨架的狀態(tài)。