交通標誌識別

2021-08-01 06:36:55 字數 2840 閱讀 7881

交通標誌識別實際上包括交通標誌的檢測和識別兩個過程,檢測是在影象中尋找到感興趣目標並定位,識別是對感興趣目標進行分類。現在r-cnn系列、yolo、ssd能夠很好的將檢測和分類兩個過程融合到一起,並且在pascal voc等資料集上取得了很好的效果,但對像交通標誌這種小目標的檢測效果並不好。就交通標誌檢測而言,如果在faster rcnn的anchor中,將scale調小一點,ratio調下再做訓練,是可以很好的檢測到影象中尺寸較小的交通標誌;也可以訓練級聯cnn,將目標檢測問題轉化為分類問題。傳統的檢測方法中,可以人工設計特徵來檢測感興趣目標,例如可以利用交通標誌的顏色和形狀等資訊來檢測並定位到交通標誌;然後對檢測到的標誌進行識別或分類,判斷它是哪種交通標誌。

我們暫時先不考慮檢測問題,先做分類實驗。利用卷積神經網路來試試交通標誌識別的效果如何。

the german traffic sign recognition benchmark是ijcnn 2011舉辦的乙個影象分類挑戰賽,其提供了gtsrb資料集,共包含了43類交通標誌,訓練樣本39209張,測試樣本12630張。提供的樣本影象中包含了標誌區域及其周圍10%的區域(這是為採用邊緣方法者所考慮),樣本影象尺寸範圍為15x15到250x250,當然它不一定是正方形。

該挑戰賽的冠軍是idsia團隊所採用的multi-column deep neural network即多列深度神經網路的方法來進行交通標誌識別,最後在43類交通標誌的識別準確率達到了99.46%,超過了人類表現的98.84%。該方法採用了25個具有完全相同網路結構的dnn(實際上是總共9層的卷積神經網路) *****位址

1.資料集準備

2.訓練卷積神經網路

在models\gtsrb資料夾下,準備好網路模型檔案train_val.prototxt、訓練超引數檔案solver.prototxt,測試時還需要用到deploy.prototxt,需要注意的是不要在prototxt中對樣本進行映象。卷積神經網路結構如下圖:

經過多次調整引數實驗後確定,我的訓練超引數solver.prototxt檔案內容如圖,學習率0.001,步進式衰減,4000次迭代衰減10倍,最大迭代20000次,train_val.prototxt中訓練集和驗證集batchsize分別為50和20,test_iter為632次(12630/20),每次20個剛好能覆蓋12630個測試樣本,每5000次列印一次快照。

3 實驗初步效果

以不做預處理的原圖訓練單列dnn最後的測試(驗證),迭代20000次後,準確率可以達到96%左右,由於隨機初始化最後的結果會稍有差異。

下圖給出了部分識別出錯的標誌影象,可以發現,部分影象中標誌人眼很好識別但演算法識別出錯,說明網路在極端情況還有提公升空間,還有一些傾斜嚴重、影象質量太差、最小包圍框不夠準確等情況。

4 實驗改進

考慮兩種改進思路:

(1)對資料集進行資料增廣,例如部分交通標誌具有水平映象或垂直映象的不變性,還可以對訓練樣本影象隨機旋轉乙個較小的角度來應對真實場景下影象中的標誌傾斜問題(上圖中就有因標誌傾斜而出現識別出錯),訓練耗時增加而測試時耗時不變,泛化能力提高。

(2)採用多列深度網路的思路,對原始資料集進行多種預處理得到多個資料集,對每個資料集採用同樣的網路結構進行訓練,在測試時對測試影象進行多種預處理,分別送入到各自的卷積神經網路中,最後將輸出結果取平均。

博主首先對資料進行了增廣,對具有水平映象或垂直映象的不變性的標誌進行了映象,對所有標誌額外進行了隨機旋轉某個小角度,單列dnn的測試結果提高到96.79%。

然後採用了原資料集和經過三種預處理(影象調整、直方圖均衡、自適應直方圖均衡)共四種資料來源,每種採用兩個不同初始化的dnn網路構成了的8列dnn,對8列dnn求平均的結果作為輸出,最後將準確率提高到了97.88%(也犧牲了速度),12630張測試影象中有268張識別出錯,相比於人類表現還有一段距離。

其中在做影象預處理時,對彩色影象進行對比度拉伸、直方圖均衡化和自適應直方圖均衡化,實際上先將rgb空間轉換到lab顏色空間,其中l為影象亮度,取值範圍0~100,表示從純黑到純白,然後對亮度通道l進行對比度拉伸、直方圖均衡化和自適應直方圖均衡化,然後再轉回到rgb空間。

另外也曾嘗試在網路中加入relu層、norm層和dropout層但效果均不理想,大家也可以試試改改網路引數來刷準確率。

交通標誌識別 語句筆記

np.unique 該函式是去除陣列中的重複數字,並進行排序之後輸出。計算label個數時適用。from colletions import counter 求陣列中每個數字出現了幾次 from collections import counter a 1,4,2,3,2,3,4,2 b count...

PaddleHub實現交通標誌識別

完成深度學習的過程一般是這個樣子的 由於資料 模型 和算力的限制,我們很難在短時間內完成乙個快速準確的工程專案,所以我們會採用遷移學習 transfer learning paddlehub完成遷移學習的過程可以被描述為六個步驟 載入資料 載入模型 資料處理 優化策略 執行配置 finetune p...

交通標誌的檢測與識別

正在投稿中,專案已開源在github article,author journal number pages year publisher 如果本文幫助了您,請您引用我們的 本科畢業設計的時候曾經做過交通標誌的檢測與識別,這個作為很好的影象處理與識別領域的入門project還是非常不錯的.交通場景圖...