物體檢測是計算機視覺領域的熱門研究課題之一,其在智能交通、視頻監控、醫療診斷、工業檢測和智能機器人等領域具有非常廣泛的應用. 物體檢測的主要任務就是定位出感興趣物體在圖像中的位置,并指出其所屬類別名稱.
物體檢測算法主要包括傳統物體檢測算法和深度學習物體檢測算法兩大類. 傳統物體檢測算法采用“人工設計特征+分類器”的設計思路:首先提取物體的特征,然后將提取到的物體特征送入訓練好的分類器進行分類. 例如,Haar-like特征[1,2]+Adaboost分類器[3]、方向梯度直方圖(histogram of oriented gradient,HOG)[4]+支持向量機(support vector machine,SVM)分類器[5]、尺度不變特征變換(scale-invariant feature transform,SIFT)[6]+SVM分類器以及可變形的組件模型(deformable part model,DPM)[7]等. 卷積神經網絡(convolutional neural network,CNN)通過學習就能獲得顏色、輪廓等底層的特征和更高級、抽象的特征. 與傳統人工設計特征相比,基于CNN的物體檢測算法對局部遮擋、光照條件和尺度變化等影響因素具有更好的魯棒性和泛化能力,同時還能對多類物體進行檢測.
近年來,基于CNN的倉儲物體檢測逐漸成為一個新興的研究方向,其屬于通用物體檢測的范疇,而基于CNN的通用物體檢測算法大體可以分為兩大類:基于區域提議的算法和基于無提議的算法.
基于區域提議的物體檢測算法采用兩個階段來解決物體檢測問題. 該類算法中最具有代表性的是 R-CNN[8]、Fast R-CNN[9]以及Faster R-CNN[10]等. R-CNN首先采用選擇性搜索(selective search,SS)[11]從圖像中提取出物體區域,然后對提取出的物體區域進行分類. Fast R-CNN和Faster R-CNN主要通過共享計算和采用神經網絡生成區域提議來提高物體檢測效率.
基于無提議的物體檢測算法僅采用單個階段來處理物體檢測任務. 該類算法中最具有代表性的是YOLO(you only look once)[12]和SSD(single shot multibox detector)[13]. 此類算法去除區域提議階段,采用單個前饋卷積神經網絡來直接預測物體類別和具體位置.
當前,公開的物體檢測數據集大多都是基于自然場景. 例如,常用的物體檢測數據集ImageNet、Pascal VOC(pascal visual object classes)均是在自然場景中采集的圖像. 基于工業檢測應用場景的公開數據集很少[14],而基于倉儲環境中的物體檢測公開數據集幾乎沒有. 因此,通過CNN來實現倉儲環境中的物體檢測,創建一個質量高且規模大的倉儲物體數據集尤為重要.
本文通過攝像機采集真實倉儲環境中包含貨物、托盤和叉車的大量圖像進行標注,創建了一個倉儲物體數據集. 同時將基于CNN的DSOD(deeply supervised object detectors)[15]應用于倉儲環境中,通過在自己創建的倉儲物體數據集上從零開始訓練DSOD模型,實現了倉儲環境中的貨物、托盤、叉車檢測.
CNN是當前深度學習算法實現的主要途徑和研究計算機視覺、圖像處理以及人工智能等方向的重要工具之一,其主要由輸入層、卷積層、池化層、全連接層和輸出層構成,基本結構如圖1所示.
卷積層是對輸入層輸出的特征做卷積運算,再經過激活函數得到特征圖,其作用是提取一個局部區域特征,每一個卷積核相當于一個特征提取器,第l層卷積層中第j個特征圖的計算公式如下:
式中,klijijl是卷積核矩陣,bljjl是卷積層的偏置,Mj表示前一層輸出的特征圖集合,uljjl表示卷積層l層的第j個神經元,xljjl是l層卷積層的第j個通道的輸出結果,*表示卷積運算,對于l層某一特征圖uljjl,其對應的每個輸入圖的卷積核大小可以是不同的,卷積核的大小一般為3×3或5×5. f(·)代表非線性激活函數,常用的激活函數有:
Sigmoid(x)=11+e?x(x)=11+e-x. (2)
Tanh(x)=ex?e?xex+e?xΤanh(x)=ex-e-xex+e-x. (3)
池化層是通過對不同位置的局部特征區域進行特征統計,實現特征合并和特征降維操作,以有效地縮小矩陣尺寸,從而減少參數數量,并且經過池化后的特征具有平移不變性,這對圖像分類至關重要. 常用的池化操作有:最大池化、平均池化和隨機池化,其原理如圖2所示. 最大池化是選取圖像區域的最大值作為該區域池化后的值;平均池化是計算圖像區域的平均值作為該區域池化后的值;隨機池化是對特征圖中的元素按照其概率值大小隨機選擇,即元素值大的被選中的概率也大.
在整個CNN中,全連接層類似于分類器. 卷積層和池化層的作用是將原始數據映射到隱含層特征空間中,而全連接層的作用是將CNN學習到的特征映射到樣本的標記空間中,同時將卷積輸出的2維特征圖轉化為一個1維向量. 最終,網絡將這些特征輸入到Softmax分類器中,并通過最小化損失函數來進行全局訓練.
分類是機器學習和人工智能領域的基本問題之一,例如,字符識別、圖像識別、語音識別等都可以轉化為分類問題. 邏輯回歸(logistic regression,LR)是機器學習領域經典的二分類器,而Softmax回歸是LR在多分類上的推廣,其將分類問題轉化成概率問題,即首先求解統計所有可能的概率,然后概率最大的就被認為是該類別.
假設有m個訓練樣本{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},對于Softmax回歸,它的輸入特征為:x(i)∈Rn+1,類標記為:y(i)∈{0,1,...,k}. 假設函數是對于每一個樣本估計其所屬的類別的概率p(y=j|x),其具體表達式如下:
式中,θi(i=1,2,...,k)∈Rn+1表示Softmax分類器的參數,1∑j=1keθTjx(i)1∑j=1keθjΤx(i)表示歸一化因子,其使所有類別概率和為1. 對于每一個樣本估計其所屬類別的概率為:
p(y(i)=j|x(i);θ)=eθTjx(i)∑l=1keθTlx(i)θ)=eθjΤx(i)∑l=1keθlΤx(i). (6)
Softmax分類器的訓練過程就是不斷地調整參數,優化損失函數,使損失函數達到最小值的過程.
基于CNN的DSOD框架類似于SSD多尺度無提議框架. 它的網絡結構主要由用于特征提取的主干子網(backbone sub-network)和用于在多尺度響應圖上進行預測的前端子網(front-end sub-network)兩個部分構成. 主干子網是密集連接卷積網絡(densely connected convolutional networks,DenseNet)[16]16]結構的變體,它由主干塊(stem block),四個密集塊(dense blocks),兩個過渡層(transition layers)和兩個無池化層的過渡層(transition w/o pooling layers)組成. 前端子網(即DSOD預測層)融合了多尺度預測密集連接結構.
DSOD最大的亮點在于其可以在相應的數據集上從零開始訓練網絡,而不需要ImageNet預訓練模型. 這有效地避免了從預訓練模型領域到物體檢測領域可能存在巨大差異的困難,同時DSOD訓練的模型比較小,在內存開銷上也占有相對優勢. DSOD的設計原則如下:
(1)免提議. R-CNN和Fast R-CNN需要額外的區域提議提取算法,如:選擇性搜索(SS);Faster R-CNN 需要區域提議網絡(region propose network,RPN)來生成相對較少的區域提議;YOLO和SSD是不需要提議的算法,由于DSOD框架與SSD框架類似,故DSOD不需要區域提議.
(2)深度監督. 深度監督的核心思想是通過綜合的目標函數來對淺層的隱含層進行直接監督,而不僅僅是輸出層,附加在隱含層中的目標函數能有效緩解梯度消失問題. 免提議檢測框架包含分類損失和位置損失,增加復雜的側輸出層是一個比較好的解決方案,以在每個隱藏層為檢測任務引入附加目標函數. 根據文獻[16]所述,使用DenseNet的密集層級連接,其中密集塊是塊中所有先前的層都連接到當前層. 這樣,目標函數可以通過跳躍連接直接監督DenseNet中的淺層. 無池化層的過渡層,使得在增加密集塊的數量時不會降低最終的特征圖分辨率.
(3)主干塊. 主干塊由3個3×3的卷積層連接1個2×2的最大池化層組成,其目的是減少信息損失.
(4)密集預測結構. DSOD與SSD的預測結構略有不同,在SSD的簡單預測結構中,每個后續的尺度直接由相鄰的前一尺度轉換得到,而DSOD一方面會綜合每個尺度獲取的多尺度信息. 另一方面DSOD中的每個尺度,一半的特征圖是通過之前尺度連接卷積層學習得到,剩余的一半由相鄰的高分辨率的特征圖直接下采樣得到. 每個尺度只學習一半新的特征圖,并復用前一個特征圖剩余的一半. 因此,DSOD的密集預測結構比SSD的簡單預測結構產生的參數少.
DSOD的損失函數是位置損失(localization loss)和置信度損失(confidence loss)的加權和,其表達式為
L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g))L(x,c,l,g)=1Ν(Lconf(x,c)+αLloc(x,l,g)). (7)
式中,N是匹配的默認框數目,l和g分別是預測框和真值框,c為多類置信度,α為權重項. 位置損失如文獻[9]所述,是l和g之間的smoothL1損失,其表達式如式(8)所示. 類似于Faster R-CNN,DSOD回歸得到邊界框的中心及其寬度和高度的偏移.
位置損失:
Lloc(x,l,g)=∑i∈PosN ∑m∈{cx,cy,w,h}∑i∈ΡosΝ∑m∈{cx,cy,w,h}xkijsmoothL1(lmi?g?mj)xijksmoothL1(lim-g^jm). (8)
式中,smoothL1(x)可以表示為:
置信度損失是多類置信度c下的Softmax損失,并且通過交叉驗證將權重項α設置為1,其表達式如式(10)所示.
置信度損失:
Lconf(x,c)=-∑i∈PosN∑i∈ΡosΝxpijlg(c?pi)?xijplg(c^ip)-∑i∈Neg∑i∈Νeglg(c?c^0ii0). (10)
式中,c?pi=c^ip=exp(cpi)∑pexp(cpi).exp(cip)∑pexp(cip).
本文實驗所需的數據均是在真實倉儲環境中通過攝像機采集獲得的圖像,其分辨率為1 920×1 080. 為了減少模型的訓練時間,以使網絡更快地收斂,我們將圖像的分辨率縮小了3倍,所以實驗數據的最終分辨率為640×360. 本文創建的倉儲物體數據集共有10 450張圖像,這些圖像中包含貨物、托盤和叉車 3個物體類別,其中包含貨物和托盤的圖像共有7 893張,包含叉車的圖像有2 557張.
圖像標注采用圖像標注工具LabelImg,通過該工具可以直接將倉儲物體用矩形框的形式標注出來,并且還能將標注的矩形框生成為可擴展標記語言(extensible markup language,XML)文本文件. XML文件記錄了標注矩形框的最小/最大坐標、寬、高以及物體類別等信息,以方便訓練模型時直接讀取圖像信息. 倉儲物體標注的實例圖如圖3所示.
本文算法實驗所需的軟硬件配置如表1所示,并且使用了深度學習中的Caffe框架.
表1 實驗配置 導出到EXCEL
Table 1 Experimental configuration
Operating System |
CPU | Memory | GPU | CUDA |
Ubuntu16.04 |
Intel i7-7700k | 16 GB | NVIDIA TITAN X | CUDA8.0 |
在訓練模型之前,我們首先按4∶1的比例將自己創建的倉儲物體數據集隨機分為訓練驗證集和測試集,然后將訓練驗證集也按4∶1的比例隨機分為訓練集和驗證集. 其中,訓練集有6 688張,測試集有 2 090 張,驗證集有1 672張.
采用CNN訓練模型時,設置學習率的大小尤為重要. 如果學習率設置過大,模型收斂速度太快,但是訓練誤差會出現震蕩,無法收斂到全局最優值;反之,如果學習率設置得過小,網絡收斂速度就會很慢,需要花費大量的時間才能達到最優.
本文中,我們將網絡訓練的迭代次數設置為60 000次,根據動態調整學習率的策略,我們將學習率具體設置為:(1)初始迭代階段(0~20 000)設為0.1;中間迭代階段(20 001~40 000)設為0.01;(3)最后優化階段(40 001~60 000)設為0.001. 同時,我們采用動量為0.9,權重衰減為0.000 5以及批量尺度為5的隨機梯度下降(stochastic gradient descent,SGD)在自己創建的倉儲物體數據集上從零開始訓練DSOD模型. 為了能更好地觀察訓練過程中損失(Loss)隨迭代次數(Iterations)的變化情況,我們畫出了 0~60 000次的Loss-iterations 曲線圖,如圖4所示.
我們從圖4可以觀察到,Loss曲線比較平滑,幾乎沒有出現震蕩現象,說明我們設置的學習率比較適當,使模型達到了最優收斂的狀態.
在物體檢測領域中,平均準確率均值(mean Average Precision,mAP)是評價物體檢測算法優劣的主要評價指標. 因此,我們同樣采用mAP來評價本文倉儲物體檢測算法的優劣. 在相同訓練集和測試集的情況下,本文算法與Faster R-CNN、SSD進行了比較,對比實驗結果如表2所示.
表2 不同算法對比實驗結果 導出到EXCEL
Table 2 Comparison of experimental results with different algorithms
算法 |
測試圖像數量/張 | 模型大小/MB | mAP/% |
Faster R-CNN |
2 090 | 235.8 | 93.77 |
SSD |
2 090 | 94.7 | 92.37 |
本文算法 |
2 090 | 51.3 | 93.81 |
由表2可知,本文算法在自己創建的倉儲物體數據集上的mAP達到了93.81%,比Faster R-CNN提高了0.04%,比SSD提高了1.44%. 并且模型大小僅有51.3 MB,比Faster R-CNN減少了184.5 MB,比SSD減少了43.4 MB. 因此,本文算法能較好地滿足倉儲物體檢測的準確性要求,并且模型占用內存小,適用于移動、嵌入式電子設備等低端設備.
我們給出部分倉儲物體測試圖像的檢測效果圖,如圖5所示.
由圖5(a)、圖5(b)可知,對于不同顏色的貨物,本文算法均能較好地檢測出來. 由圖5(c)可知,當倉儲環境中的光照條件發生變化時,本文算法也能較好地檢測出貨物、托盤. 由圖5(a)、圖5(d)可知,無論是尺寸大的貨物、托盤,還是尺寸小的貨物、托盤,本文算法同樣能較好地檢測出來. 由圖5(f)可知,對于局部遮擋的貨物,本文算法依然能較好地檢測出來. 因此,無論是光照條件、物體尺寸以及顏色等變化,還是存在局部遮擋,本文算法都能較好地檢測出倉儲物體,獲得了較為滿意的檢測效果.
基于倉儲環境中的物體檢測應用場景,我們創建了一個倉儲物體數據集,將基于CNN的DSOD應用于倉儲環境中,通過在自己創建的倉儲物體數據集上從零開始訓練DSOD模型,實現了倉儲環境中的物體檢測. 該算法的mAP比Faster R-CNN、SSD高,模型大小比Faster R-CNN、SSD小,并且對倉儲物體顏色、尺寸大小以及光照條件等變化具有較好的魯棒性,獲得了較為滿意的檢測效果. 但本文算法對于尺寸較小的倉儲物體仍然會出現漏檢問題. 因此,下一步打算對DSOD的網絡結構作相應的改進,并擴充倉儲物體數據集,以進一步提升倉儲物體檢測準確率.
上一篇: 煙草倉儲物流中心托盤信息管理系統技術分析
下一篇: 立體倉儲系統貨位優化算法比較與分析