李奧
(遼寧 大連 116100)
隨著社會的發展,汽車已經越來越成為我們的生活中不可或缺的交通工具。我國的人均汽車擁有量也在呈持續上升狀態,汽車給當今社會帶來了極大的推動力,給人們提供生活上的許多便利,改變了人們的交通出行方式,隨著汽車的快速發展,其所帶來的問題也日漸顯露出來,其中最重要的問題就是安全問題。嚴峻的交通安全問題,受到社會的廣泛關注。
汽車在行駛過程中,主要由駕駛員控制,由此可見,駕駛員是汽車駕駛中最重要的一個人。研究指出,絕大多數交通事故的發生,都要歸咎于駕駛員的狀態及反應,首當其沖的便是疲勞駕駛或酒駕等。基于此現象,有關人士通過研究表明,大多數的交通事故實際上是可以避免的。然而現實生活中,汽車都是由駕駛員駕駛,道路上的各種信息都是通過駕駛員來感知的,如果由于特殊原因導致駕駛員判斷錯誤,那么就可能引發交通事故。試想如果現在有一個全自動的系統,能夠在發生事故之前避開危險,這不僅可以大大降低交通事故的數量,而且可以保障人們的生命安全,于是便有了智能車輛。其最重要的功能就是能夠根據道路信息,結合相關技術,幫助駕駛員駕駛汽車或直接代替駕駛員駕駛汽車,通過智能判斷,避開道路上的危險。由此可見,智能車輛越來越符合社會的需求,這也是許多國家花費大量人力物力研究智能車輛的發展的原因,所以,本課題具有重要的研究意義和應用價值。
Felzenszwalb等人提出了基于利用彈簧形變來模擬目標姿態形變的模型,對于不同的姿態以及形狀的相同種類的物體檢測有著非常好的效果,為后來目標檢測算法的研究奠定了良好的基礎。Dalai等人提出了將有向HOG描述子與SIFT特征級聯,得到新的對目標局部區域有著很好效果的目標區域描述子。該特征描述子改進后在行人測試任務中取得了很好的效果,橫向對比其他方法都要有優勢。但是由于該特征的優勢目前只應用于一個測試項目,所以還有待進一步研究。Riori等人提出了LeNet網絡模型,由于該網絡模型基于CNN算法,在二值圖像上的處理優勢明顯展露出來,相較其他算法都要略高一籌。該模型事實上是CNN中最早的一個被用于手寫數字識別任務的模型,并且在當時取得了最佳效果。Nowlan等人介紹了手勢識別系統,該系統借助CNN算法來實現實施高精度定位每一幀圖像中手的位置與手勢,由此判斷手勢狀態該實驗可在適當環境中進行快速高精度的運行,并得到準確度幾乎高達100%的結果。Ouyang等人提出的行人檢測任務中,利用CNN算法,將端到端CNN作為目標檢測人物模型,極大地改善了許多問題。
目標檢測是計算機視覺的一個基礎的任務,主要的目標是根據給定的一張圖片,從中檢測出我們想要檢測的物體,用一個框去將物體包括起來。本文用4個值來表示一個物體,分別是物體在整幅圖像中的左下角的x,y坐標,以及物體的長和寬。
本文在自建的數據集上進行目標檢測任務,數據集中包括的圖片為高速公路上采集的數據,總共包括13000張圖片,我們選擇其中的10000張作為訓練數據集,其余的作為測試數據集。總共包括5個類別,分別是車輛、自行車、行人、摩托車以及廣告牌,另外包括一個背景類,背景類的類別是0。
對于一個完整的目標過程來說,我們首先要做的是構建一個供我們的算法學習的數據集,這個數據集中應該包括原始圖像,以及原始圖像的每一個物體的位置,詳細的信息我們已經在2.2中介紹過了。接下來我們需要對數據集做一個簡單的處理,由于本文使用的算法的原因,我們需要將圖像調整為固定的大小,本文中所使用的固定的大小為300×300。接下來需要對數據做一個增強,主要原因是因為本文包括的訓練數據比較少,因此需要增加數據的數量。
本文中使用的圖像增強操作主要包括圖像的隨機翻轉,以及隨機對長和寬做裁剪。第四步是對構造檢測模型,這一部分我們主要在第三部分進行介紹,最后是使用我們已經訓練好的網絡對圖像進行預測,獲得檢測的最終結果。
首先,在做檢測的時候我們需要使用一個基礎網絡來提取數據的特征,由于resnet在圖像分類這一任務上取得了最好的效果,同時應為其相比vgg來說具有更少的參數以及更深的網絡結構,因此我們選擇resnet作為我們的基礎網絡。同時我們對基礎網絡做了如下的修改,首先將resnet最后作為分類的全連接層去掉,本文在此基礎上增加了6個卷積層,分為三組,每一組包括兩個卷積層。第一個卷積層是用來提取本層的特征的,因此我們使用1×1的卷積核,第二層我們想要獲得不同大小的特征圖,因此這一層我們使用3×3的卷積核,同時stride設置為2,這樣卷積過后的特征圖剛好為原先的一半。
根據其他人的研究成果,我們發現使用多種不同尺度的特征圖進行預測,會獲得比較好的效果,因此本文選擇使用6個卷積層的輸出作為我們的網絡的預測層,分 別 是 res3b3,res5c/conv1-2, res5c/conv2-2,res5c/conv3-2,pool6。分別在每一層后會有兩個分支,一個分支負責預測候選框,直接在特征圖后接一個卷積層預測候選框即可,另外一個分支負責預測候選框屬于哪一個類別,當然,每一層預測的候選框以及所屬類別的個數都是固定的。因此,我們可以獲得6組候選框,接下來只需要將6組候選框合并到一起并且計算損失函數,然后更新網絡的參數即可。下面介紹網絡的詳細結構。
對于上面的每一層中的一個特征圖來說,會產生固定個數的候選框。比如說特征圖的大小是m×n,并且每個位置產生的候選框的個數是k個,那么對于一個c類物體的檢測任務來說,會產生(c+4)×k×m×n個數據。我們把他叫做prior box。下面介紹k是如何產生的。
之所以需要在特征圖的同一個位置產生k個不同的候選框,是因為這樣可以處理不同尺度的物體的問題。本文中使用的長寬比是{2,3},在res3b3這一層的特征圖中我們只使用長寬比為2,也就是說,在res3b3這一層,特征圖上的每一個點產生3個候選框,其他特征圖上的每一個點產生4個候選框。這樣我們就獲得了m×n×k個候選框。6個候選框包括兩個正方形的,分別是min_size×min_size, max_size×max_size,另外兩個根據長寬比以及min_size進行計算。這樣我們就獲得了很多個候選框了。接下來需要將候選框與我們的數據集中標定的真實的框進行匹配,就可以獲得我們的訓練的真實的框了。首先我們需要計算我們在當前層中產生的候選框與真實的框的IOU,然后挑選出IOU大于0.5的作為正樣本,小于0.5的就作為負樣本。但是,這樣做有一個很大的問題就是由于我們在每一個位置上都產生一個候選框,會有大量的樣本是負樣本,這樣我們在訓練的時候就會出現樣本不均衡的現象,會對最終的訓練結果產生比較大的影響。因此,我們需要在這里處理樣本不均衡的現象,是使用focal loss來處理這樣的情況,主要是在loss上對負樣本與正樣本做一個均衡。本文使用的方法是,使用難樣本挖掘方法,本文在前向計算的時候會計算出每一個候選框的損失函數的值,然后選取幾個具有最大的損失函數值的候選框保留下來,其他的候選框直接丟掉,以保證我們在訓練的過程中正負樣本的比例是3:1即可。這樣,我們就獲得了所有的訓練的數據。
RefineDet在SSD的基礎上做了一些修改,結合以一步做檢測的方法的優點以及兩步做檢測的方法的優點,不僅增加了模型的準確率,而且模型的速度也比較快。兩步做檢測的方法通會有一步用于篩選掉大量的不包含物體的樣本,只保留包含物體的樣本,這樣可以解決正負樣本不均衡的問題,但是一步做檢測的方法中,往往是不包含這樣的步驟的,所以雖然一步做檢測的方法速度比較快,但是由于網絡中存在著大量的負樣本,因此會造成樣本不均衡的情況,這樣準確率上就沒有非常大的提高了。
RefineDet為了解決這樣的問題,在原先SSD的基礎上分成了兩個模塊,一個是圖1中上面的部分,我們稱之為ARM,主要用于盡可能多的在這一步移除掉大量的負樣本,另一個模塊就是檢測的模塊,主要用準確的回歸出物體的位置以及增加檢測的準確度。另外由于在多個位置中做檢測的時候特征圖的大小不一致,因此我們在連接的時候,也就是下圖1中的TCB模塊,需要對較小的圖做一個反卷積來增加特征圖的大小,這樣我們就可以把上一層的特征與當前層的特征加起來,獲得不同尺度的信息,接下來就和SSD一樣直接預測出候選框的位置以及類別來了。

圖1
本文所使用的GPU是3塊Titan X,每一塊的顯存為12GB。基礎網絡選擇ResNet,輸入的圖像尺寸為300×300,batch_size為24,即每一塊GPU上的batch為8,網絡的的優化方法為SGD,初始的學習率為0.01,在訓練的第40000步將為初始學習率的1/10,網絡總共的迭代次數為60000次,每隔10000次保存一下網絡的參數。Momentum為0.9。SSD中所使用的長寬比在第一個特征圖中是2,在其他的特征圖中使用的長款比是2和3。另外在實際的程序調試中,本文在生成候選框的時候,分別對左下角坐標以及候選框的長款做了微調,在左下角的坐標中每個值中加了0.1,長寬加了0.2。
在當今的信息社會中,目標檢測在我們的生活中的應用也越來越多,如手機相機中的人臉定位,各種監控系統中的車輛檢測人臉檢測,自動駕駛中的各種檢測任務等。另外隨著GPU并行計算的發展,為深度學習提供了比較良好的硬件基礎。
本文主要介紹了目標檢測的背景、意義,當前的研究現狀以及目標檢測的多個方法,包括SSD、RefineDet等方法,并進行了視線。
目前目標檢測的方法仍然存在著比較多的問題,主要包括:(1)對于較小物體的檢測比較困難;(2)對于特別大的物體的定位仍然存在著問題。