車輛追蹤演算法大PK:SVM+HOGvs.YOLO
介紹
對於Udacity(優達學城)自動駕駛汽車納米學位的汽車檢測和跟蹤項目,如果使用傳統的計算機可視化技術將是一個挑戰,就像方向梯度直方圖(Histogram of Oriented Gradients,HOG)和其它特徵組合在一起在視頻里跟蹤汽車一樣,理想的解決方案應該是實時運行的,如>30FPS,我曾經使用線性SVM來處理視頻,在一台i7 CPU計算機上得到的結果只有可憐的3FPS。最後我使用YOLO來處理視頻終於通過了Udacity的項目,YOLO是一個超快的用於對象檢測的卷積神經網路,如果你的GPU夠快(我當時使用的是GTX 1080),視頻處理的速度可以達到65FPS,比我用SVM+HOG的方法足足快20倍。
數據集
我使用了KITTI和GTI數據集,以及來自項目訓練倉庫的一些其它數據,只有兩類數據:有車的和沒有車的,GTI數據從視頻流獲得,因此所有圖像都完全是隨機的,然後被分為訓練和測試數據集,在訓練和測試數據集之間建立相關關係,我將每個數據源30%的數據集作為驗證和測試數據集,所有圖像都被重置為64x64像素的大小,以便於特徵的提取。
特徵提取
我使用的特徵向量如下:
空間特徵:除了用於自檢的像斑(16x16像素)外啥都沒有。
顏色直方圖特徵:捕獲每個像斑的統計顏色信息,通過這種特徵向量捕獲的汽車顏色通常是非常飽和的。
方向梯度直方圖(HOG)特徵:捕獲每個圖像通道的梯度結構,在不同的光線條件下,這種方法表現得還不錯。
在這篇博客里有關於HOG特徵的詳細描述,其思想始終是,在一個直方圖裡,在一個圖像上聚集梯度,讓特徵向量在不同視角和光線條件下變得更加穩定。下面是HOG特徵應用於有車的和沒車的圖像上時的可視化呈現。
最後一個特徵向量包含前面3個不同方法提取的特徵,因此有必要對每一個特徵進行計量,防止因取值範圍不同導致某一特徵佔主導地位,我使用了scikit學習包中的Standard.Scaler函數,通過移動平均值和按比例縮放到單位方差來標準化特徵。
訓練一個線性支持向量機
和其它分類和檢測問題不同,檢測汽車需要強實時,因此,要在高準確性和速度之間取得平衡,影響性能最主要的兩個參數是特徵向量的長度和汽車檢測演算法,線性SVM在速度和準確性之間提供了最好的折中方案,比隨機森林(快但準確性不夠)和非線性SVM(rbf內核,非常慢)的表現要好得多。最後測試時使用了一個包含6156個特徵的特徵向量,準確性超過了98.5%,但仍然有將近1.5%的像斑時不時的晃眼,特別是車道線、事故故障和欄杆。
滑動窗口
通常情況下,汽車檢測和攝像機使用滑動窗口掃描圖像一幀一幀記錄類似,對每個窗口而言,通過計算特徵向量並輸入到分類器中,汽車在不同距離出現時,有必要搜索多個尺度,通常會有100多個特徵向量需要提取,然後輸入到分類器中,對每一幀圖像進行處理。下面是正面檢測大約150個窗口的例子,不出意外,仍然會有一些失誤。
為了過濾掉誤判結果,我一直跟著檢測窗口直到最後30幀,只考慮被準確識別的圖像,最後有超過15次檢測被記錄下來,我用熱圖來呈現最終結果,可以看到噪點大大減少,
通過熱圖的閾值,包含所有非零值的熱圖最小矩形邊界框就可以確定下來。
全文點擊:車輛追蹤演算法大PK:SVM+HOG vs. YOLO
推薦閱讀:
※美國現代藝術博物館的軟數據:111件服裝展品的前世今生
※從頭學習大數據培訓課程 NOSQL 資料庫 hbase(三)hbase 的 filter 用法,hbase 數據的批量導入
※HDFS中的Namenode和Datanode
※你是蘋果用戶,活該多交錢!老用戶與狗不得優惠?
※大數據計數原理1+0=1這你都不會算(二)No.50
TAG:大數據 |