







摘要:現如今交通標志識別作為智能駕駛中不可或缺的一部分有著重要的研究意義。為了提高交通標志識別的分類準確度,結合當下流行的YOLOv5卷積神經網絡目標檢測模型,本文以國內交通標志為例,研究如何運用YOLOv5算法實現交通標志目標檢測,同時結合軟件開發技術,使用Flask后臺框架、Vue前端框架設計了一套基于卷積神經網絡的交通標志識別系統,系統包含可交互界面,支持用戶上傳圖片進行實時識別,并返回相應的識別結果,提高了交通標志識別模型的可用性。
關鍵詞:卷積神經網絡;交通標志識別;YOLOv5;深度學習;目標檢測
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2025)04-0032-04 開放科學(資源服務) 標識碼(OSID) :
0 引言
近些年, 基于深度學習的方法在諸多目標檢測算法中得到廣泛使用,其中 YOLO 算法因其良好的識別性能而備受關注。本位旨在采用卷積神經網絡,結合YOLOv5目標識別模型,通過大量已有的交通標志真實場景圖片進行訓練,獲得指定目標的特征,實現對交通標志的檢測和定位。這樣不僅可以精準識別復雜的道路環境,幫助使用者做出正確的判斷,進而提高智能駕駛的安全性,進一步提高交通運行效率,緩解交通擁堵問題。交通標志識別主要是用于識別前方道路的警示或行人信息,并將信息反饋給相關使用者,以達到調節道路交通流量的目的。
眾多學者對交通標志識別進行了深入的研究,同時,YOLOv5作為一種基于卷積神經網絡的目標檢測算法,在相關目標檢測任務中也得到了廣泛運用[1]。在國內,畢超等人提出一種提高識別夜間交通標志的方法,該方法僅用于夜間交通標志識別[2]。袁穆佳惠等人提出RI-Model交通標志識別模型,該方法在昏暗、運動模糊等情況下均可以達到較好的識別結果,同時其整個網絡結構還有很多改進空間以應對惡劣天氣等場景[3]。馮潤澤設計了一種兩階段的交通標志識別算法,提升了整體算法的識別精度,其mAP值提升明顯[4]。王翰文等人提出改進的 YOLOv5 算法,大幅度降低了模型復雜度和參數量,實現了對交通標志檢測精度和檢測速度的平衡[5]。周峰等人提出了將多頭自注意力機制應用到 YOLOv4-tiny模型的主干網絡中,該算法在一定程度上減少模型大小,并帶來了檢測精度的提升,同時該算法是基于像素級操作,導致計算量較大、推理速度較慢,在檢測精度仍需進一步提升[6]。尹靖涵提出了一種使用YOLOv5模型的交通標志識別模型,能夠在霧霾等復雜天氣下取得較高的識別準確率,解決了面對特殊天氣難以識別交通標志的問題[7]。楊佳義設計基于BP神經網絡的交通標志檢測識別系統,可以準確識別圖像中交通標志,目標識別系統快速可靠,能夠廣泛應用于不同場景,同時需要滿足原始圖像清晰且有交通標志的情況下,交通識別率才比較理想[8]。金曉康等人將訓練完成的深度網絡部署在嵌入式設備,增強了該識別系統的可移動性和可用性[9]。溫艷等人設計一種基于機器視覺的交通標志識別系統,可以對交通標志進行有效識別,實時性和魯棒性較好[10]。在國外,最早由Janssen等人提出基于交通標志明顯的顏色特征,結合RGB圖像特點,對交通標志進行檢測識別[11]。在實際情況中,因溫度、光照等單一采用RGB思想對交通標志進行識別無法進一步提高識別的準確度。因此,部分學者采用了基于形狀特征的交通標志檢測方法,該方法能夠彌補基于RGB識別交通標志的缺陷,同時也存在實用性不強等缺陷[12]。隨著深度學習技術的發展,以卷積神經網絡為代表的深度學習算法、模型被廣泛地運用在諸多目標識別領域。本文首先介紹了交通標志識別的相關理論基礎,然后詳細闡述了基于 YOLOv5 的交通標志識別算法,接著介紹了系統的實現過程,最后對全文進行了總結和展望。
1 相關理論基礎
1.1 卷積神經網絡
卷積神經網絡(Convolutional Neural Networks,CNN) 是一種由輸入層、卷積層、池化層以及輸出層所構成的深度神經網絡。當前,卷積神經網絡已在圖像、語音、文本等分類任務中被廣泛運用,它能夠有效地提取識別對象特征,從而實現識別與分類。卷積神經網絡通過多層的卷積操作對圖像特征進行提取,其訓練過程可以描述為傳入圖像、進行卷積、池化并通過全連接,最后返回識別結果。
卷積神經網絡結構主要由以下部分構成。
1) 輸入層:輸入層為CNN第一層,負責接收輸入數據,通過對原始數據進行標準化處理,使其符合模型要求。
2) 卷積層:卷積層是CNN的核心,負責提取輸入數據的特征。卷積層由多個卷積核(或濾波器) 組成,每個卷積核負責提取輸入數據的一個特定特征。同時,卷積層的輸入結果是圖像相關特征,因此輸出結果又被稱作特征圖。
3) 池化層:池化層用于降低特征圖的空間維度,減少參數數量,使最有價值的信息保留下來,防止過擬合。
4) 全連接層:全連接層是CNN的最后一層,負責將特征圖轉換為最終的分類結果。
卷積神經網絡通過多層卷積和池化操作來提取圖像特征,并通過全連接層進行分類或回歸,它具有特征提取能力強、參數共享和稀疏連接、平移不變性、可視化和解釋性強等優點,此外,它選用局部連接的方式使得網絡的復雜性得以降低,進一步提高了算法效率。
1.2 目標檢測模型
目標檢測對于計算機卻是一項復雜且艱巨的任務,涉及目標定位、分類等任務。眾多學者對圖像目標檢測展開的研究多涉及Viola-Jones算法[13]等,它們雖然能夠實現目標檢測功能,但在目標檢測識別方面均存在著一定的缺陷,如運行速度慢、易受外界影響、準確率低等。
近年來,基于卷積神經網絡的目標檢測模型因其準確率高、更新迭代速度快而被廣泛運用,它不僅能更加全面地適應現實環境下的目標檢測需求,而且在精度和速度上相比傳統的圖像檢測模型均有明顯的提升。目前,基于深度學習技術的目標檢測算法可以分為兩個階段網絡和單階段網絡兩類,其中YOLO作為單階段(one-stage) 網絡最具代表性的框架,在目標檢測領域得到了廣泛應用[14]。本文中,使用版本為YOLOv5的YOLO系列模型,其最大優勢在于其精度和速度的提升,可以實時檢測圖像中的目標,并且適應較為復雜的場景[15]。YOLOv5網絡結構的組成分為三個部分:① Backone:主干網絡,主要負責對輸入圖像進行特征提取;② Neck:加強特征提取,負責對特征圖進行多尺度特征融合,并把這些特征傳遞給預測層;③ Head:預測模塊及損失函數優化,進行最終的回歸預測。在識別過程中,首先是將整張圖像劃分為若干個網格,每個網格預測出該網格內物體的種類和位置信息,然后根據預測框與真實框之間的IoU值進行目標框的篩選,最終輸出預測框的類別和位置信息。
1.3 Flask 框架和Vue 框架
在系統實現方面采用前后端分離實現前期訓練模型的調用,在用戶上傳圖片后可實現圖片交通標志的檢測識別。系統后臺采用Flask 框架進行開發。Flask框架是由Python語言實現的一個微型Web開發框架,具有輕量級、易學易用、強大的擴展性等諸多優點[16]。在Flask框架中,每次客戶端發送請求時,會創建一個包含客戶端方法、請求頭、請求數據等信息的Request對象。
系統前端采用主流的Vue框架,Vue框架具有輕量級、靈活性、可復用性、響應式和虛擬DOM等特點, 它的第三方庫可以參考使用,功能強大,因此開發效率較高。另外,Vue框架是基于MVVM模式的框架,即Model-View-ViewModel 框架。當Model 層數據發生變化時,ViewModel 層會監測到數據的變化,通知View層進行數據的修改。在這種模式下,能夠實現View與Model層之間的解耦。同時,Vue框架還具有如下的特點:① 組件化開發:對于組件化開發而言,即模塊化的思想。在組件化開發中,Vue.js能夠將各個模塊進行拆分,實現了HTML的封裝和重用;② 簡單易學:具有非常豐富的文檔,便于學習和理解。
2 基于YOLOv5的交通標志識別算法研究
2.1 數據集
我國交通標志與國外存在明顯差異,本文聚焦于國內場景,故對比篩選使用了TT100K 數據集(Tsinghua?Tencent 100K) 。該數據集由清華-騰訊聯合實驗室整理并公布的,提供的10萬張圖像包含了30 000個交通標志,圖像來源于國內多個城市拍攝的騰訊街景全景圖,包括城市道路、鄉村道路以及高速公路等諸多生活場景,數據集中照片像素質量較高,涉及的天氣情況也較多,整體較為規范,便于后期模型訓練,提高準確率。由于數據集過于龐大且部分類別交通標志數量少,本實驗僅篩選出TT100K數據集中具有重要語義信息的45種交通標志進行模型訓練。為加快訓練速度,得到更加實用的交通標志識別模型,并根據項目需要,將TT100K數據集的交通標志分類分為3 類:指示標志(對應原數據集“i”開頭的類別) 、禁令標志(對應原數據集“p”開頭的類別) 、警告標志(對應原數據集“w”開頭的類別) 。
TT100K 數據集的標注文件為annotation.json 文件,其對圖像的標注文件以字典的格式儲存標注信息。但對于YOLOv5框架而言,需要對數據集格式進行轉換,轉成YOLOv5能識別的數據集格式,從而在后期訓練的過程中能夠正確調用上述數據集進行訓練。
2.2 創建YAML 文件
在YOLOv5中,YAML作為配置文件,其包含了諸多信息,如模型的結構、參數、訓練設置等,同時還分為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x等4個模型,其主要差異是在模型深度和模型寬度方面,可以結合實際需求采用不同的模型。YAML文件主要由以下3個參數組成:① nc:類別數,取決于實際分類任務中類別的數量;② depth_multiple:控制模型的深度;③ width_multiple:控制卷積核的個數。通過上述參數的調整可以實現不同復雜度的模型設計。
2.3 修改train.py
文件train.py是YOLOv5訓練過程的核心腳本,主要功能是負責構建模型、加載數據、訓練模型等,文件中包含了配置文件、模型結構等,其具體功能介紹如下。
1) 獲取配置參數:在train.py 中,可以通過arg?parse庫讀取配置文件中的具體參數,包含了迭代次數Epoch、學習率Learning_Rate、批次大小Batch_Size等。同時,在該文件中,給出了模型的路徑等信息。
2) 構建模型結構:通過train.py中的create_model 函數,構建模型。在構建模型的過程中,會使用模型配置文件中的具體參數,同時也會加載已訓練的模型權重。若沒有預訓練的權重,則權重隨機進行初始化。
3) 數據預處理:數據的預處理包含了尺寸調整、標簽映射轉換、圖像增強等,在train.py中,數據的預處理和加載操作通過create_dataloader函數實現。
4) 訓練和驗證過程:train.py中定義了train函數,用于進行模型的訓練和驗證過程。訓練過程中,train.py會對訓練數據進行多次迭代,每個迭代周期稱為一個Epoch。在每個Epoch結束時,train.py會對模型在驗證集上的表現進行評估,并輸出相應的指標,例如平均精度(mAP) 、召回率(Recall) 等。
5) 模型保存和日志輸出:train.py會定期保存訓練過程中得到的最佳模型權重,并將訓練和驗證過程中的各種指標輸入日志文件中。訓練結束后,train.py還會輸出最終的測試指標,并保存最終的模型權重文件。
2.4 訓練結果
在數據集準備、配置文件修改等工作完成后,便可開始模型訓練。訓練的實驗環境為Windows 10,開發環境為Pycharm 2023,深度學習方面采用了Pytorch 框架。在模型訓練的過程中,本文設定Epoch為80,Batch-Size設置為64,同時設置斷點保存功能,防止程序中斷過程中模型未及時保存造成時間浪費,實際訓練過程如圖2、圖3所示。
3 基于YOLOv5的交通標志識別系統實現
3.1 前臺框架
前臺界面使用Vue框架實現,Vue可以幫助開發者建立高效的Web應用程序。在Web應用中,用戶登錄驗證是至關重要的一部分。首先,需要創建一個登錄表單,該表單應該包括輸入框,以便用戶可以輸入其用戶名和密碼,若不存在該用戶名,則提醒用戶需要注冊;其次,在Vue實例中添加數據,來存儲輸入的賬號信息,并記錄是否登錄成功;最后,根據用戶是否登錄成功來顯示不同的內容。登錄頁面如圖4 所示。
系統歡迎頁面整體布局分為左側菜單欄和右側內容欄。當用戶點擊左側菜單時,右側內容會隨點擊菜單而變化,操作較為方便;右側內容為標題和輪播圖,輪播圖采用Element UI中的〈el-carousel〉組件,該組件能夠實現在有限空間內,循環播放同一類型的圖片、文字等內容,后期僅需修改圖片就可得到不同的輪播效果。首頁展示如圖5所示。
登錄成功后選擇“識別圖像”便進入圖像識別功能,該頁面分別由左側的待識別圖像欄以及右側的識別結果欄構成。在待識別圖像一欄中,用戶選擇上傳待識別圖片后,該部分會展示原始圖像。系統完成識別后,會將識別后的圖像結果在“識別結果”一欄中進行展示。用戶上傳圖片時將對圖片格式、大小進行了限制,用戶上傳完圖片會有相應的縮略圖進行展示,當上傳完圖片成功,通過Flask框架在線調用模型,將對前臺界面上傳圖片進行目標檢測,獲取目標檢測結果,如圖6所示。由于識別后的圖片標注信息較小,本文系統開發的過程中,設置了點擊預覽大圖的形式進行查看。用戶點擊右側識別結果的圖像,即可查看大圖,如圖7所示。
3.2 后臺框架
后臺采用Flask框架實現模型調用,Flask框架編寫相應的登錄、注冊、識別等接口供前端界面調用。當前端界面發起登錄、注冊、識別請求時,后臺能夠接收請求,并處理相關數據,返回相應的結果。當處理登錄請求時,首先由前端發起登錄請求,后臺通過建立數據庫連接,核對賬號信息,返回相應結果。其核心代碼如下。
@app.route('/login',methods=['post'])
def login():
query = \"SELECT * FROM account\"
cursor.execute(query)
result = cursor.fetchall()
username = request.json.get('username')
password = request.json.get('password')
for i in result:
print(i[1])
if(username==i[1] and password==i[2]):
return jsonify({\"message\": \"登錄成功!\"})
return jsonify({\"message\": \"登錄失敗\"})
圖片上傳后,前端將圖片傳遞到后臺,由Flask框架接收相關請求。當接收到前臺傳遞的圖片后,后臺會調用訓練好的模型對圖片進行交通標志的識別,并將檢測框在圖像上進行標出,最后保存識別結果。保存完畢后,會將識別后的圖片傳回前臺,供用戶查看結果。
4 結束語
本文基于卷積神經網絡設計了一款交通標志識別系統,該系統采用前后端分離的架構、使用 YO?LOv5 算法進行目標檢測。YOLOv5框架不僅擁有實現目標檢測的能力,能夠舉一反三運用在不同場景的目標識別需求中,而且YOLOv5具備了將不同的數據集統一轉換成YOLO所需格式的能力。通過YOLOv5 框架的目標檢測能力,實現了系統的檢測速度高效性和檢測精度準確性,更便于訓練模型。本系統可以應對大部分場景并取得較高的識別精度,同時在惡劣天氣等不利識別情形下還有提升的空間。
參考文獻:
[1] 鄭紅彬,宋曉茹,劉康.基于YOLOv5的交通標志識別[J].計算機系統應用,2023,32(8):230-237.
[2] 畢超,李晨陽.基于改進圖卷積神經網絡的夜間交通標志識別方法[J].裝備制造技術,2023(11):51-53.
[3] 袁穆佳惠,陳曉.基于卷積神經網絡的交通標志識別方法研究[J].計算機與數字工程,2023,51(6):1323-1327,1370.
[4] 馮潤澤,江昆,于偉光,等.基于兩階段分類算法的中國交通標志牌識別[J].汽車工程,2022,44(3):434-441,448.
[5] 王翰文,葛青,朱寧可,等.自然場景下的中國交通標志檢測算法[J/OL].計算機工程,1-10[2024-02-29].
[6] 周峰,劉云翔,石艷嬌.結合卷積和自注意力機制的交通標志識別模型[J].計算機仿真,2023,40(9):140-145,430.
[7] 尹靖涵,瞿紹軍,姚澤楷,等.基于YOLOv5的霧霾天氣下交通標志識別模型[J].計算機應用,2022,42(9):2876-2884.
[8] 楊佳義.基于機器視覺的交通標志檢測識別系統設計[J].科技創新與應用,2022,12(18):103-106.
[9] 金曉康,吳瑤,施瑩娟,等.基于YOLO框架的實時交通標志識別算法研究與系統實現[J].軟件,2023,44(1):20-23.
[10] 溫艷,邵毅,曹吉花.基于機器視覺的交通標志識別系統設計[J].齊齊哈爾大學學報(自然科學版),2017,33(5):19-22,27.
[11] JANSSEN R,RITTER W,STEIN F,et al.Hybrid approach fortraffic sign recognition[C]//Proceedings of the Intelligent Ve?hicles '93 Symposium.Tokyo,Japan.IEEE,1993.
[12] 楊廣柱,龍澤鏈,李毅,等.基于深度學習的交通標志識別技術研究進展[J].西部交通科技,2023(12):194-197.
[13] VIOLA P, JONES M J. Robust real-time object detection. In?ternational Journal of Computer Vision, 2001(4):51-52.
[14] 李躍華,仲新,姚章燕,等.基于改進YOLOv5s的著裝不規范檢測算法研究[J/OL].圖學學報,1-12[2024-03-19].
[15] 侯艷林,艾爾肯·亥木都拉,李賀南.基于改進YOLOv5s的田間移動障礙物檢測[J].現代電子技術,2024,47(6):171-178.
[16] 吳狄.基于Python的分布式信息采集發布系統設計實現[D].洛陽:河南科技大學,2019.
【通聯編輯:王力】
基金項目:廣西科技項目( 桂科AA21077018) ;廣西科技師范學院科研項目(GXKS2024YB033、GXKS2024YB032、GXKS2024QNTD20) ;來賓市項目(來科能220903)