摘要:本研究詳述了一種采用深度學(xué)習(xí)技術(shù)的疲勞駕駛檢測(cè)系統(tǒng),該系統(tǒng)集成了最新的YOLOv8算法,并與YOLOv7、YOLOv6、YOLOv5等早期算法進(jìn)行了性能評(píng)估對(duì)比。該系統(tǒng)能夠在各種媒介——包括圖像、視頻文件、實(shí)時(shí)視頻流及批量文件中——準(zhǔn)確地識(shí)別疲勞駕駛行為。文章深入闡述了YOLOv8算法的機(jī)理,并附帶了Python語(yǔ)言的實(shí)現(xiàn)代碼、所需訓(xùn)練數(shù)據(jù)集,以及基于PySide6框架構(gòu)建的用戶界面(UI)。此外,系統(tǒng)還融合了SQLite數(shù)據(jù)庫(kù)的用戶管理功能,實(shí)現(xiàn)了一鍵切換YOLOv5/v6/v7/v8模型的便捷操作,以及提供了界面的自定義修改選項(xiàng)。本文目的是為疲勞駕駛檢測(cè)領(lǐng)域的研究人員以及深度學(xué)習(xí)初學(xué)者提供實(shí)用指導(dǎo)和資源。完整的代碼庫(kù)和數(shù)據(jù)集可通過(guò)文末提供的鏈接進(jìn)行下載。本文結(jié)構(gòu)如下:
?點(diǎn)擊跳轉(zhuǎn)至文末所有涉及的完整代碼文件下載頁(yè)?
基于YOLOv8/v7/v6/v5的疲勞駕駛檢測(cè)系統(tǒng)演示與介紹(Python+PySide6界面+訓(xùn)練代碼)
前言
????????在當(dāng)今社會(huì),隨著汽車數(shù)量的劇增和人們生活節(jié)奏的加快,疲勞駕駛已成為導(dǎo)致交通事故的重要因素之一。疲勞駕駛不僅危及駕駛員本人的生命安全,也對(duì)其他道路使用者構(gòu)成威脅。因此,開(kāi)發(fā)有效的疲勞駕駛檢測(cè)系統(tǒng)顯得尤為重要,它能夠?qū)崟r(shí)監(jiān)控駕駛員的狀態(tài),及時(shí)發(fā)出警報(bào),從而預(yù)防可能發(fā)生的交通事故。
????????近年來(lái),隨著人工智能技術(shù)的飛速發(fā)展,特別是深度學(xué)習(xí)在圖像處理和模式識(shí)別領(lǐng)域的廣泛應(yīng)用,基于YOLO1(You Only Look Once)系列模型的疲勞駕駛檢測(cè)技術(shù)受到了研究者的高度關(guān)注。YOLO作為一種先進(jìn)的實(shí)時(shí)物體檢測(cè)算法,因其高效性和準(zhǔn)確性而在多個(gè)領(lǐng)域得到了應(yīng)用。通過(guò)對(duì)駕駛員面部特征的實(shí)時(shí)監(jiān)測(cè)和分析,如眨眼頻率、打哈欠次數(shù)以及頭部姿態(tài)等,YOLO模型能夠準(zhǔn)確地判斷駕駛員是否處于疲勞狀態(tài)。此外,隨著YOLOv52、YOLOv63、YOLOv74到最新的YOLOv85的迭代更新,模型的檢測(cè)速度和準(zhǔn)確性得到了顯著提升,使得基于YOLO的疲勞駕駛檢測(cè)系統(tǒng)更加可靠和實(shí)用。
????????除了YOLO系列,深度學(xué)習(xí)領(lǐng)域的其他算法,如卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、以及長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)也在疲勞駕駛檢測(cè)領(lǐng)域中發(fā)揮著重要作用。這些算法能夠處理時(shí)間序列數(shù)據(jù),對(duì)駕駛員的行為模式進(jìn)行分析,提高疲勞檢測(cè)的準(zhǔn)確性和效率。例如,LSTM在分析連續(xù)駕駛行為時(shí)能夠考慮到時(shí)間上的依賴關(guān)系,從而更準(zhǔn)確地預(yù)測(cè)疲勞狀態(tài)。相比之下,傳統(tǒng)的機(jī)器學(xué)習(xí)方法如支持向量機(jī)(SVM)和決策樹在處理復(fù)雜的圖像和序列數(shù)據(jù)時(shí)表現(xiàn)不足,難以達(dá)到深度學(xué)習(xí)方法的準(zhǔn)確率和效率。
????????數(shù)據(jù)集是深度學(xué)習(xí)研究的基礎(chǔ),對(duì)算法的訓(xùn)練和測(cè)試至關(guān)重要。近年來(lái),針對(duì)疲勞駕駛檢測(cè)的專用數(shù)據(jù)集逐漸豐富,從最初的小規(guī)模、單一場(chǎng)景發(fā)展到包含多種照明條件、多樣化駕駛行為的大規(guī)模數(shù)據(jù)集。這些數(shù)據(jù)集不僅提高了模型的泛化能力,還促進(jìn)了算法在實(shí)際場(chǎng)景中的應(yīng)用。相比之下,早期研究常常受限于數(shù)據(jù)的質(zhì)量和數(shù)量,難以充分訓(xùn)練復(fù)雜的深度學(xué)習(xí)模型。
????????盡管疲勞駕駛檢測(cè)技術(shù)取得了顯著進(jìn)步,但仍面臨諸多挑戰(zhàn)。首先,在復(fù)雜的駕駛環(huán)境下,如變化的光照條件、駕駛員的不同面部表情和姿勢(shì),都會(huì)影響疲勞檢測(cè)的準(zhǔn)確性。其次,不同個(gè)體之間在疲勞狀態(tài)下的生理和行為特征存在差異,這要求算法能夠適應(yīng)個(gè)體差異,提高檢測(cè)的普適性。此外,實(shí)時(shí)性是疲勞駕駛檢測(cè)系統(tǒng)的另一個(gè)重要需求,這要求算法在保證準(zhǔn)確性的同時(shí),還需具備快速響應(yīng)的能力。
????????未來(lái)的疲勞駕駛檢測(cè)技術(shù)發(fā)展趨勢(shì)將集中在提高算法的準(zhǔn)確性、實(shí)時(shí)性和魯棒性上。一方面,通過(guò)深度學(xué)習(xí)模型的進(jìn)一步優(yōu)化和新算法的開(kāi)發(fā),提升系統(tǒng)的檢測(cè)性能;另一方面,多模態(tài)數(shù)據(jù)融合,如結(jié)合生理信號(hào)(心率、眼動(dòng)等)和行為數(shù)據(jù),將進(jìn)一步提高疲勞檢測(cè)的準(zhǔn)確度和可靠性。此外,隨著邊緣計(jì)算技術(shù)的發(fā)展,將深度學(xué)習(xí)模型部署到邊緣設(shè)備上,實(shí)現(xiàn)數(shù)據(jù)的本地處理和實(shí)時(shí)反饋,也是未來(lái)疲勞駕駛檢測(cè)技術(shù)的一個(gè)重要發(fā)展方向。
????????本博客的主要貢獻(xiàn)在于結(jié)合最新的技術(shù)趨勢(shì)和實(shí)用工具,構(gòu)建了一個(gè)先進(jìn)的疲勞駕駛檢測(cè)系統(tǒng)。通過(guò)采用當(dāng)前最先進(jìn)的目標(biāo)檢測(cè)算法—YOLOv8,本文不僅推動(dòng)了疲勞駕駛檢測(cè)技術(shù)的進(jìn)步,還為相關(guān)研究和應(yīng)用提供了實(shí)際的參考價(jià)值。以下是本文的五大貢獻(xiàn):
- 采用最先進(jìn)的YOLOv8算法進(jìn)行疲勞駕駛檢測(cè):本文詳細(xì)介紹了如何應(yīng)用YOLOv8算法進(jìn)行高效準(zhǔn)確的疲勞駕駛檢測(cè)。與早期的深度學(xué)習(xí)模型相比,YOLOv8在效率和精確度方面的優(yōu)勢(shì)明顯,為疲勞駕駛檢測(cè)提供了一種新的解決方案。
- 利用PySide6實(shí)現(xiàn)友好的用戶界面:通過(guò)Python的PySide6庫(kù),開(kāi)發(fā)了一個(gè)用戶友好的疲勞駕駛檢測(cè)系統(tǒng)界面。這使得用戶能夠以直觀便捷的方式進(jìn)行疲勞駕駛檢測(cè),大大降低了技術(shù)門檻,推廣了YOLOv8算法的應(yīng)用。
- 設(shè)計(jì)登錄管理功能以提升系統(tǒng)安全性:系統(tǒng)集成了登錄管理功能,確保了使用過(guò)程的安全性,并為將來(lái)添加更多個(gè)性化功能奠定了基礎(chǔ)。這一設(shè)計(jì)不僅提高了系統(tǒng)的實(shí)用性,也增強(qiáng)了用戶體驗(yàn)。
- 對(duì)YOLOv8模型進(jìn)行深入研究和評(píng)估:本文不僅應(yīng)用了YOLOv8算法,還對(duì)其性能進(jìn)行了全面的評(píng)估,包括精準(zhǔn)度、召回率及在不同環(huán)境下的表現(xiàn)分析。這項(xiàng)工作為YOLOv8算法的進(jìn)一步優(yōu)化和應(yīng)用提供了重要的實(shí)驗(yàn)數(shù)據(jù)和分析基礎(chǔ)。
- 提供完整的數(shù)據(jù)集和代碼資源包:為了便于讀者更好地理解和應(yīng)用YOLOv8及其他版本算法在疲勞駕駛檢測(cè)中的操作,本文提供了包含訓(xùn)練和測(cè)試所需的詳細(xì)數(shù)據(jù)集和完整代碼資源包。這一貢獻(xiàn)使得讀者能夠直接復(fù)現(xiàn)實(shí)驗(yàn)結(jié)果,并在此基礎(chǔ)上進(jìn)行進(jìn)一步的研究和開(kāi)發(fā)。
1.數(shù)據(jù)集介紹
????????在本博客的疲勞駕駛檢測(cè)系統(tǒng)開(kāi)發(fā)過(guò)程中,我們特別重視數(shù)據(jù)集的質(zhì)量和構(gòu)成,因?yàn)檫@直接影響到模型的訓(xùn)練效果和最終性能。本系統(tǒng)所使用的數(shù)據(jù)集包含16,246張圖像,這些圖像經(jīng)過(guò)精心篩選和預(yù)處理,旨在訓(xùn)練出能夠準(zhǔn)確識(shí)別疲勞駕駛跡象的機(jī)器學(xué)習(xí)模型。我們將圖像分為三個(gè)部分:訓(xùn)練集包含13,719張圖像,驗(yàn)證集1,380張,測(cè)試集則有1,147張。這種分布確保了模型可以在廣泛的數(shù)據(jù)上進(jìn)行訓(xùn)練,同時(shí)在獨(dú)立的數(shù)據(jù)集上進(jìn)行有效的驗(yàn)證和測(cè)試。
????????數(shù)據(jù)集的多樣性對(duì)模型的泛化能力至關(guān)重要。我們的數(shù)據(jù)集包含了不同性別、年齡和種族的駕駛員,在多種光照條件下的圖像,以及多樣的駕駛行為,如打哈欠、閉眼、無(wú)表情和眼睛睜開(kāi)。這些類別標(biāo)簽不僅反映了疲勞的關(guān)鍵跡象,也包括了正常駕駛狀態(tài)下的圖像,從而為疲勞駕駛檢測(cè)提供了一個(gè)全面的視角。
????????我們進(jìn)一步通過(guò)數(shù)據(jù)增強(qiáng)技術(shù)來(lái)提升模型的魯棒性。這包括50%概率的水平翻轉(zhuǎn),使模型能夠識(shí)別鏡像中的駕駛員行為;90度旋轉(zhuǎn)增強(qiáng),讓模型適應(yīng)不同方向的頭部姿態(tài);以及隨機(jī)裁剪和高斯模糊,以模擬真實(shí)世界中的視覺(jué)干擾和圖像質(zhì)量變化。所有圖像最終被統(tǒng)一調(diào)整至640x640像素,保證了輸入數(shù)據(jù)的一致性。
????????對(duì)于類別分布,我們的數(shù)據(jù)集呈現(xiàn)出明顯的不平衡性。'nodawn’即無(wú)疲勞跡象的類別樣本數(shù)量最多,而關(guān)鍵疲勞跡象如’close’和’yawn’的樣本較少,'open’類別樣本最少。這種不平衡可能會(huì)影響模型對(duì)疲勞跡象的識(shí)別能力,因此我們?cè)谀P陀?xùn)練時(shí)特別注意了對(duì)少數(shù)類的重采樣或權(quán)重調(diào)整,以提升模型對(duì)疲勞跡象的敏感性。
????????通過(guò)對(duì)標(biāo)注框位置和尺寸的分析,我們發(fā)現(xiàn)大部分標(biāo)注框集中在圖像中心區(qū)域,邊界框的寬高比也相對(duì)一致,這符合人臉的自然形狀和圖像采集時(shí)的人體工程學(xué)設(shè)定。這種分布有助于模型快速定位和識(shí)別駕駛員的面部特征,是模型檢測(cè)準(zhǔn)確性的關(guān)鍵。
????????在圖像標(biāo)注方面,我們深知準(zhǔn)確的標(biāo)簽對(duì)于訓(xùn)練有效的機(jī)器學(xué)習(xí)模型的重要性。我們的數(shù)據(jù)集包含多個(gè)類別的標(biāo)簽,標(biāo)簽及其對(duì)應(yīng)的中文名稱如下所示:
Chinese_name = {'Yawn': '打哈欠', 'close': '閉眼', 'noYawn': '未打哈欠', 'open': '睜眼'}
????????綜上所述,我們精心構(gòu)建和優(yōu)化的數(shù)據(jù)集不僅在數(shù)量上足夠支持深度學(xué)習(xí)模型的訓(xùn)練,其多樣性和數(shù)據(jù)增強(qiáng)措施也為模型提供了強(qiáng)大的泛化基礎(chǔ)。我們對(duì)數(shù)據(jù)集的分析不僅提供了對(duì)當(dāng)前數(shù)據(jù)集結(jié)構(gòu)的深入理解,還為未來(lái)的數(shù)據(jù)采集和模型訓(xùn)練提供了寶貴的指導(dǎo)。通過(guò)這樣的數(shù)據(jù)集,我們期望本疲勞駕駛檢測(cè)系統(tǒng)能夠在實(shí)際應(yīng)用中表現(xiàn)出色,為確保道路安全做出積極貢獻(xiàn)。
2. 系統(tǒng)界面效果
????????系統(tǒng)以PySide6作為GUI庫(kù),提供了一套直觀且友好的用戶界面。下面,我將詳細(xì)介紹各個(gè)主要界面的功能和設(shè)計(jì)。
(1)系統(tǒng)提供了基于SQLite的注冊(cè)登錄管理功能。用戶在首次使用時(shí)需要通過(guò)注冊(cè)界面進(jìn)行注冊(cè),輸入用戶名和密碼后,系統(tǒng)會(huì)將這些信息存儲(chǔ)在SQLite數(shù)據(jù)庫(kù)中。注冊(cè)成功后,用戶可以通過(guò)登錄界面輸入用戶名和密碼進(jìn)行登錄。這個(gè)設(shè)計(jì)可以確保系統(tǒng)的安全性,也為后續(xù)添加更多個(gè)性化功能提供了可能性。
(2)在主界面上,系統(tǒng)提供了支持圖片、視頻、實(shí)時(shí)攝像頭和批量文件輸入的功能。用戶可以通過(guò)點(diǎn)擊相應(yīng)的按鈕,選擇要進(jìn)行疲勞駕駛檢測(cè)的圖片或視頻,或者啟動(dòng)攝像頭進(jìn)行實(shí)時(shí)檢測(cè)。在進(jìn)行疲勞駕駛檢測(cè)時(shí),系統(tǒng)會(huì)實(shí)時(shí)顯示檢測(cè)結(jié)果,并將檢測(cè)記錄存儲(chǔ)在數(shù)據(jù)庫(kù)中。
(3)此外,系統(tǒng)還提供了一鍵更換YOLOv8/v5模型的功能。用戶可以通過(guò)點(diǎn)擊界面上的"更換模型"按鈕,選擇不同的YOLOv8模型進(jìn)行檢測(cè)。與此同時(shí),系統(tǒng)附帶的數(shù)據(jù)集也可以用于重新訓(xùn)練模型,以滿足用戶在不同場(chǎng)景下的檢測(cè)需求。
(4)為了提供更個(gè)性化的使用體驗(yàn),這里系統(tǒng)支持界面修改,用戶可以自定義圖標(biāo)、文字等界面元素。例如,用戶可以根據(jù)自己的喜好,選擇不同風(fēng)格的圖標(biāo),也可以修改界面的文字描述。
3. YOLOv8算法原理
????????YOLOv8代表了目標(biāo)檢測(cè)領(lǐng)域的最新進(jìn)展,它在保持YOLO系列一貫的實(shí)時(shí)性的同時(shí),引入了一系列創(chuàng)新技術(shù)以提升檢測(cè)精度。2023年1月由YOLOv5的開(kāi)發(fā)團(tuán)隊(duì)UltraLytics公布的這一算法,不僅在標(biāo)準(zhǔn)的測(cè)試集上達(dá)到了前所未有的準(zhǔn)確度,還在處理速度上做出了顯著提升。在我們的疲勞駕駛檢測(cè)系統(tǒng)中,YOLOv8算法起著核心作用。YOLOv8是YOLO(You Only Look Once)系列算法的最新迭代,它是一個(gè)高效的實(shí)時(shí)目標(biāo)檢測(cè)算法,旨在實(shí)現(xiàn)快速而準(zhǔn)確的物體定位和分類。
????????YOLOv8沿用了CSPNet的設(shè)計(jì),同時(shí)在C3模塊中集成了多尺度特征融合,這些特征融合能夠強(qiáng)化網(wǎng)絡(luò)對(duì)小目標(biāo)的檢測(cè)能力。這是因?yàn)樵诙喑叨忍卣魅诤现校W(wǎng)絡(luò)能夠利用不同層次的特征信息,增強(qiáng)對(duì)復(fù)雜場(chǎng)景中微小或遮擋物體的識(shí)別能力。
????????YOLOv8還引入了一種新穎的損失函數(shù)——一種基于概率分布的方法。傳統(tǒng)的目標(biāo)檢測(cè)算法中,損失函數(shù)通常會(huì)簡(jiǎn)單地將每個(gè)目標(biāo)的分類和位置誤差相加來(lái)計(jì)算總損失。而YOLOv8通過(guò)這種新穎的損失函數(shù),能夠在優(yōu)化過(guò)程中考慮不同任務(wù)的權(quán)重,避免某一項(xiàng)任務(wù)(如分類)的損失對(duì)總損失的影響過(guò)大,從而達(dá)到更加平衡的訓(xùn)練效果。
????????在算法的訓(xùn)練過(guò)程中,YOLOv8引入了Task Aligned Assigner和Distribution Focal Loss來(lái)進(jìn)一步優(yōu)化性能。Task Aligned Assigner負(fù)責(zé)為每個(gè)預(yù)測(cè)框分配最合適的目標(biāo),它通過(guò)考慮任務(wù)的特性和目標(biāo)狀態(tài)來(lái)選擇最合適的預(yù)測(cè)框,而不是簡(jiǎn)單地根據(jù)預(yù)測(cè)框和目標(biāo)之間的重疊程度(IoU)。Distribution Focal Loss則是一種新穎的損失函數(shù),它不僅關(guān)注于正確分類的損失,還關(guān)注于錯(cuò)誤分類的概率分布,提供更精細(xì)的損失權(quán)重調(diào)整,以提高模型的識(shí)別準(zhǔn)確率。
????????總之,YOLOv8的設(shè)計(jì)理念是提高算法的準(zhǔn)確性和實(shí)時(shí)性,使其在實(shí)時(shí)的目標(biāo)檢測(cè)任務(wù)中表現(xiàn)出色。通過(guò)先進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)、損失函數(shù)以及標(biāo)簽分配策略,YOLOv8在目標(biāo)檢測(cè)領(lǐng)域中實(shí)現(xiàn)了快速、準(zhǔn)確的檢測(cè),特別是在處理復(fù)雜場(chǎng)景和小目標(biāo)檢測(cè)方面有顯著的優(yōu)勢(shì)。這些特性使得YOLOv8成為疲勞駕駛檢測(cè)系統(tǒng)中不可或缺的一部分,它提供了一個(gè)強(qiáng)大的工具,能夠幫助系統(tǒng)實(shí)時(shí)識(shí)別和記錄可能導(dǎo)致事故的疲勞駕駛行為。
4. 代碼簡(jiǎn)介
????????在本節(jié)中,我們將詳細(xì)介紹如何使用YOLOv8進(jìn)行疲勞駕駛檢測(cè)的代碼實(shí)現(xiàn)。代碼主要分為兩部分:模型預(yù)測(cè)和模型訓(xùn)練。
4.1 模型預(yù)測(cè)
????????在模型預(yù)測(cè)部分,首先導(dǎo)入了OpenCV庫(kù)和YOLO模型。OpenCV庫(kù)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),包含了眾多的視覺(jué)處理函數(shù),使用它來(lái)讀取和處理圖像。YOLO模型則是要用到的目標(biāo)檢測(cè)模型。
import cv2
from ultralytics import YOLO
????????接著,加載自行訓(xùn)練好的YOLO模型。這個(gè)模型是在大量的圖像上預(yù)訓(xùn)練得到的,可以直接用于目標(biāo)檢測(cè)任務(wù)。
model.load_model(abs_path("weights/best-yolov8n.pt", path_type="current"))
????????然后,使用OpenCV讀取了一個(gè)圖像文件,這個(gè)圖像文件作為要進(jìn)行目標(biāo)檢測(cè)的圖像輸入。
img_path = abs_path("test_media/test.png")
image = cv_imread(img_path)
????????在讀取了圖像文件之后,就可以使用加載的模型對(duì)圖像進(jìn)行預(yù)測(cè)了。下圖為預(yù)測(cè)結(jié)果。
pred, superimposed_img = model.predict(pre_img)
4.2 模型訓(xùn)練
????????這里我們開(kāi)始訓(xùn)練和測(cè)試自己的數(shù)據(jù)集,在cmd終端或pycharm中運(yùn)行run_train_model.py進(jìn)行訓(xùn)練,以下是訓(xùn)練過(guò)程中的結(jié)果截圖。YOLOv8的損失函數(shù)是其性能的關(guān)鍵部分,它指導(dǎo)模型學(xué)習(xí)如何準(zhǔn)確地檢測(cè)和分類對(duì)象。
????????以下表格詳細(xì)介紹了YOLOv8模型訓(xùn)練中使用的一些重要超參數(shù)及其設(shè)置:
超參數(shù) | 設(shè)置 | 說(shuō)明 |
---|---|---|
學(xué)習(xí)率(lr0 ) |
0.01 | 決定了模型權(quán)重調(diào)整的步長(zhǎng)大小,在訓(xùn)練初期有助于快速收斂。 |
學(xué)習(xí)率衰減(lrf ) |
0.01 | 控制訓(xùn)練過(guò)程中學(xué)習(xí)率的降低速度,有助于模型在訓(xùn)練后期細(xì)致調(diào)整。 |
動(dòng)量(momentum ) |
0.937 | 加速模型在正確方向上的學(xué)習(xí),并減少震蕩,加快收斂速度。 |
權(quán)重衰減(weight_decay ) |
0.0005 | 防止過(guò)擬合,通過(guò)在損失函數(shù)中添加正則項(xiàng)減少模型復(fù)雜度。 |
熱身訓(xùn)練周期(warmup_epochs ) |
3.0 | 初始幾個(gè)周期內(nèi)以較低的學(xué)習(xí)率開(kāi)始訓(xùn)練,逐漸增加到預(yù)定學(xué)習(xí)率。 |
批量大?。?code>batch) | 16 | 每次迭代訓(xùn)練中輸入模型的樣本數(shù),影響GPU內(nèi)存使用和模型性能。 |
輸入圖像大?。?code>imgsz) | 640 | 模型接受的輸入圖像的尺寸,影響模型的識(shí)別能力和計(jì)算負(fù)擔(dān)。 |
????????在模型訓(xùn)練部分,首先導(dǎo)入YOLO模型,并加載了預(yù)訓(xùn)練的YOLOv8模型。
from ultralytics import YOLO
model = YOLO('./weights/yolov8s.pt', task='detect')
????????接著開(kāi)始訓(xùn)練模型。其中指定了訓(xùn)練數(shù)據(jù)的配置文件路徑,使用GPU進(jìn)行訓(xùn)練,使用2個(gè)工作進(jìn)程加載數(shù)據(jù),輸入圖像的大小為640x640,訓(xùn)練100個(gè)epoch,每個(gè)批次的大小為8。
results2 = model.train(
data=data_path,
device='0',
workers=workers,
imgsz=640,
epochs=120,
batch=batch,
name='train_v8_' + data_name
)
????????首先,框損失負(fù)責(zé)量化模型預(yù)測(cè)的邊界框與實(shí)際標(biāo)注邊界框之間的差異。從圖中可以觀察到,隨著訓(xùn)練的進(jìn)行,訓(xùn)練和驗(yàn)證集上的框損失都呈下降趨勢(shì),這表明模型在邊界框定位方面的性能隨著訓(xùn)練逐步提高。尤其是在訓(xùn)練集上,框損失的下降速度和穩(wěn)定性顯示了模型對(duì)訓(xùn)練數(shù)據(jù)的適應(yīng)性和學(xué)習(xí)效果。
????????接著是分類損失,這一損失函數(shù)衡量的是模型在分類疲勞駕駛行為時(shí)的準(zhǔn)確性。圖表中顯示訓(xùn)練集和驗(yàn)證集的分類損失都有明顯的下降,說(shuō)明模型在區(qū)分不同駕駛狀態(tài)(如正常、打哈欠、閉眼等)上取得了進(jìn)展。這種下降趨勢(shì)在驗(yàn)證集上的平穩(wěn)性也表明模型沒(méi)有出現(xiàn)過(guò)擬合現(xiàn)象,而是在逐步學(xué)習(xí)如何泛化到未見(jiàn)過(guò)的數(shù)據(jù)。
????????目標(biāo)損失(即定位損失)是一個(gè)綜合指標(biāo),它結(jié)合了框損失和分類損失,以優(yōu)化檢測(cè)任務(wù)的整體性能。從圖中可以看出,這一損失在訓(xùn)練和驗(yàn)證過(guò)程中都有所下降,驗(yàn)證了模型在訓(xùn)練過(guò)程中學(xué)習(xí)的有效性和魯棒性。
????????性能指標(biāo)方面,精確度(precision)和召回率(recall)兩個(gè)圖表表明,模型在保持較高召回率的同時(shí),也保持了相對(duì)穩(wěn)定的精確度。這兩個(gè)指標(biāo)的平衡是目標(biāo)檢測(cè)任務(wù)中非常重要的,因?yàn)樗鼈児餐绊懼P偷膶?shí)際應(yīng)用效果。另外,平均精度均值(mAP)在不同IoU閾值下的表現(xiàn)也顯示了模型的優(yōu)秀性能,尤其是在更嚴(yán)格的mAP50-95(考慮了IoU從0.5到0.95的范圍)指標(biāo)上,模型顯示出了良好的檢測(cè)精度。
????????在評(píng)估疲勞駕駛檢測(cè)模型的性能時(shí),F(xiàn)1得分是一個(gè)非常重要的指標(biāo),它綜合考慮了模型的精確度和召回率。F1得分的最佳值為1,最差值為0,較高的F1得分表明模型在精確度和召回率之間達(dá)到了良好的平衡。
???????? ‘Yawn’(打哈欠)和’close’(閉眼)兩個(gè)類別的F1得分較高,尤其在中等置信度閾值區(qū)域。這表明模型對(duì)于檢測(cè)這兩種疲勞駕駛相關(guān)的行為表現(xiàn)良好。相比之下,‘noYawn’(無(wú)哈欠)類別的F1得分相對(duì)較低,這可能是因?yàn)椤痭oYawn’狀態(tài)在視覺(jué)上沒(méi)有明顯的特征,使得模型難以區(qū)分。
???????? 整體來(lái)看,所有類別的F1得分在置信度閾值約為0.217時(shí)達(dá)到峰值,此時(shí)F1得分為0.55。這個(gè)閾值平衡了誤報(bào)和漏報(bào)的數(shù)量,使得模型達(dá)到了相對(duì)最優(yōu)的性能。
????????在較低的置信度閾值時(shí),模型傾向于檢測(cè)出更多的目標(biāo),從而提高了召回率,但這同時(shí)會(huì)增加誤報(bào),導(dǎo)致精確度下降。隨著置信度閾值的增加,模型變得更為保守,只有那些模型更有信心的檢測(cè)結(jié)果會(huì)被視為正檢測(cè),從而提高精確度但降低召回率。這種趨勢(shì)在所有類別中都能觀察到。
????????在設(shè)計(jì)和優(yōu)化疲勞駕駛檢測(cè)模型時(shí),選擇合適的置信度閾值對(duì)于模型的最終性能至關(guān)重要。在實(shí)際應(yīng)用中,我們可能需要根據(jù)具體場(chǎng)景和需求(如是否更重視減少誤報(bào)還是漏報(bào))來(lái)調(diào)整置信度閾值。此外,對(duì)于性能較低的類別,我們可能需要進(jìn)一步分析數(shù)據(jù)或調(diào)整模型結(jié)構(gòu),以提升這些類別的檢測(cè)精度。
4.3 YOLOv5、YOLOv6、YOLOv7和YOLOv8對(duì)比
(1)實(shí)驗(yàn)設(shè)計(jì):
????????本實(shí)驗(yàn)旨在評(píng)估和比較YOLOv5、YOLOv6、YOLOv7和YOLOv8幾種模型在疲勞駕駛目標(biāo)檢測(cè)任務(wù)上的性能。為了實(shí)現(xiàn)這一目標(biāo),博主分別使用使用相同的數(shù)據(jù)集訓(xùn)練和測(cè)試了這四個(gè)模型,從而可以進(jìn)行直接的性能比較。該數(shù)據(jù)集包含疲勞駕駛的圖像。本文將比較分析四種模型,旨在揭示每種模型的優(yōu)缺點(diǎn),探討它們?cè)诠I(yè)環(huán)境中實(shí)際應(yīng)用的場(chǎng)景選擇。
模型 | 圖像大小 (像素) | mAPval 50-95 | CPU ONNX 速度 (毫秒) | A100 TensorRT 速度 (毫秒) | 參數(shù)數(shù)量 (百萬(wàn)) | FLOPs (十億) |
---|---|---|---|---|---|---|
YOLOv5nu | 640 | 34.3 | 73.6 | 1.06 | 2.6 | 7.7 |
YOLOv8n | 640 | 37.3 | 80.4 | 0.99 | 3.2 | 8.7 |
YOLOv6N | 640 | 37.5 | - | - | 4.7 | 11.4 |
YOLOv7-tiny | 640 | 37.4 | - | - | 6.01 | 13.1 |
(2)度量指標(biāo):
- F1-Score:F1-Score是精確率(Precision)和召回率(Recall)的調(diào)和平均值。精確率是指模型正確識(shí)別的正例與所有識(shí)別為正例的案例之比,而召回率是指模型正確識(shí)別的正例與所有實(shí)際正例之比。F1-Score對(duì)于不平衡的數(shù)據(jù)集或者需要同時(shí)考慮精確率和召回率的任務(wù)特別重要。
- mAP(Mean Average Precision):mAP是衡量模型在多個(gè)類別上平均檢測(cè)準(zhǔn)確度的指標(biāo)。它計(jì)算了模型在所有類別上的平均精度,是目標(biāo)檢測(cè)領(lǐng)域中常用的性能度量。
名稱 | YOLOv5nu | YOLOv6n | YOLOv7-tiny | YOLOv8n |
---|---|---|---|---|
mAP | 0.650 | 0.602 | 0.583 | 0.641 |
F1-Score | 0.55 | 0.55 | 0.56 | 0.55 |
(3)實(shí)驗(yàn)結(jié)果分析:
??????? 在深度學(xué)習(xí)領(lǐng)域,尤其是在目標(biāo)檢測(cè)任務(wù)中,模型的選擇至關(guān)重要。YOLO系列作為目標(biāo)檢測(cè)的代表算法,其不同版本在疲勞駕駛檢測(cè)任務(wù)上的表現(xiàn)各有千秋。通過(guò)詳細(xì)分析實(shí)驗(yàn)數(shù)據(jù),我們可以深入了解各版本模型的性能和適用場(chǎng)景。
??????? 首先,觀察mAP值,YOLOv5nu以0.650的成績(jī)領(lǐng)先,這表明在平均精度上,YOLOv5nu的表現(xiàn)最為出色。mAP是一個(gè)重要的性能指標(biāo),它衡量了模型在不同置信度閾值下的精確度和召回率的平均值。YOLOv5nu的高mAP得分表明它在多種情況下都能夠保持較高的檢測(cè)性能,特別是在識(shí)別物體的準(zhǔn)確性上。緊隨其后的是YOLOv8n,以0.641的mAP值顯示了與YOLOv5nu相近的性能。這可能歸功于YOLOv8n在架構(gòu)和損失函數(shù)上的優(yōu)化,使得它在檢測(cè)不同對(duì)象時(shí)能夠維持高準(zhǔn)確度。相比之下,YOLOv6n和YOLOv7-tiny的mAP值分別為0.602和0.583,顯示出在精度上略有不足。
??????? F1-Score則是一個(gè)綜合了精確度和召回率的指標(biāo),它是精確度和召回率的調(diào)和平均數(shù),較高的F1-Score意味著模型在減少誤報(bào)和漏報(bào)之間取得了良好的平衡。在這個(gè)指標(biāo)上,四種算法表現(xiàn)出相當(dāng)接近的結(jié)果。YOLOv5nu、YOLOv6n和YOLOv8n都達(dá)到了0.55的F1-Score,而YOLOv7-tiny以0.56略高一籌。這意味著盡管YOLOv7-tiny在mAP上表現(xiàn)不及其他幾個(gè)版本,但在平衡誤報(bào)和漏報(bào)方面卻做得略好。這也表明在特定應(yīng)用場(chǎng)景,特別是在召回率更為重要時(shí),YOLOv7-tiny可能是一個(gè)更好的選擇。
???????盡管YOLOv8n在mAP上的表現(xiàn)很接近YOLOv5nu,但F1-Score并沒(méi)有體現(xiàn)出顯著的優(yōu)勢(shì),這可能表明YOLOv8n在某些情況下可能產(chǎn)生了更多的誤報(bào),或者在特定類別的檢測(cè)上存在漏報(bào)。為了進(jìn)一步提升YOLOv8n的性能,可能需要對(duì)模型進(jìn)行更細(xì)致的調(diào)整,如改進(jìn)分類損失函數(shù)或調(diào)整置信度閾值。
???????綜合以上分析,每個(gè)YOLO版本都有其優(yōu)勢(shì)和適用場(chǎng)景。YOLOv5nu在整體精度上表現(xiàn)最好,而YOLOv7-tiny在保持召回率和減少誤報(bào)方面略勝一籌。YOLOv6n和YOLOv8n則顯示出平衡的性能,適合在需要較好準(zhǔn)確性和召回率平衡的情況下使用。選擇哪個(gè)模型取決于具體的應(yīng)用需求,如對(duì)速度、精度或是模型大小的特定要求。在實(shí)際應(yīng)用中,我們可能需要根據(jù)任務(wù)的特性進(jìn)行適當(dāng)?shù)哪P瓦x擇和調(diào)優(yōu),以達(dá)到最佳的性能表現(xiàn)。
4.4 代碼實(shí)現(xiàn)
????????在這篇博客中,我們將深入探討如何利用Python和深度學(xué)習(xí)框架構(gòu)建一個(gè)疲勞駕駛檢測(cè)系統(tǒng)。這個(gè)系統(tǒng)基于YOLOv8模型,通過(guò)分析駕駛員的面部動(dòng)作,如打哈欠和閉眼,來(lái)實(shí)時(shí)檢測(cè)疲勞駕駛行為。本文將展示系統(tǒng)的核心代碼,并詳細(xì)解釋其工作原理。
(1)導(dǎo)入必要的模塊和配置
????????首先,我們的代碼引入了必要的Python模塊。例如,random模塊用于生成顏色代碼,sys模塊用于與Python解釋器交互,time模塊用于記錄推理時(shí)間。接著,我們導(dǎo)入了cv2庫(kù),這是處理圖像的核心庫(kù)。此外,我們的用戶界面是基于PySide6庫(kù)構(gòu)建的,這是一個(gè)提供Qt工具集綁定的Python庫(kù)。
import sys # 導(dǎo)入sys模塊,用于處理Python運(yùn)行時(shí)環(huán)境的一些操作
import time # 導(dǎo)入time模塊,用于處理時(shí)間相關(guān)的操作
import cv2 # 導(dǎo)入OpenCV庫(kù),用于處理圖像和視頻
from QtFusion.path import abs_path
from QtFusion.config import QF_Config
from QtFusion.widgets import QMainWindow # 從QtFusion庫(kù)中導(dǎo)入FBaseWindow類,用于創(chuàng)建主窗口
from QtFusion.handlers import MediaHandler # 從QtFusion庫(kù)中導(dǎo)入MediaHandler類,用于處理媒體數(shù)據(jù)
from QtFusion.utils import drawRectBox # 從QtFusion庫(kù)中導(dǎo)入drawRectBox函數(shù),用于在圖像上繪制矩形框
from QtFusion.utils import get_cls_color # 從QtFusion庫(kù)中導(dǎo)入get_cls_color函數(shù),用于獲取類別顏色
from PySide6 import QtWidgets, QtCore # 導(dǎo)入PySide6庫(kù)的QtWidgets和QtCore模塊,用于創(chuàng)建GUI和處理Qt的核心功能
from YOLOv8Model import YOLOv8Detector # 從YOLOv8Model模塊中導(dǎo)入YOLOv8Detector類,用于進(jìn)行YOLOv8物體檢測(cè)
from datasets.Drowsiness.label_name import Label_list
QF_Config.set_verbose(False)
????????在代碼中,我們使用QtFusion庫(kù),這是一個(gè)封裝了Qt功能的庫(kù),它提供了創(chuàng)建現(xiàn)代化窗口和控件的方法。
(2)定義類別和模型
????????接下來(lái),代碼初始化了一個(gè)YOLOv8檢測(cè)器,并加載了訓(xùn)練好的權(quán)重文件。這一步是實(shí)現(xiàn)疲勞駕駛檢測(cè)的關(guān)鍵,因?yàn)樗b載了我們模型的智能核心。
cls_name = Label_list # 定義類名列表
model = YOLOv8Detector() # 創(chuàng)建YOLOv8Detector對(duì)象
model.load_model(abs_path("weights/best-yolov8n.pt", path_type="current")) # 加載預(yù)訓(xùn)練的YOLOv8模型
colors = get_cls_color(model.names) # 獲取類別顏色
(3)創(chuàng)建主窗口
????????MainWindow類繼承自QMainWindow,它構(gòu)成了我們應(yīng)用的主窗口。在這個(gè)類中,我們?cè)O(shè)置窗口的基本屬性,如大小和標(biāo)簽,這些標(biāo)簽將用于顯示圖像和檢測(cè)結(jié)果。此外,我們還定義了鍵盤事件的處理函數(shù),以便用戶可以通過(guò)按鍵來(lái)控制應(yīng)用程序。
class MainWindow(QMainWindow): # 自定義主窗口類
def __init__(self): # 構(gòu)造函數(shù)
super().__init__() # 調(diào)用父類構(gòu)造函數(shù)
self.resize(850, 500) # 設(shè)置窗口大小
self.label = QtWidgets.QLabel(self) # 創(chuàng)建標(biāo)簽用于顯示圖像
self.label.setGeometry(0, 0, 850, 500) # 設(shè)置標(biāo)簽位置和大小
def keyPressEvent(self, event): # 鍵盤事件處理
if event.key() == QtCore.Qt.Key.Key_Q: # 按下Q鍵時(shí)
self.close() # 關(guān)閉窗口
????????在我們的系統(tǒng)中,MainWindow類繼承自QMainWindow,它是主窗口的基礎(chǔ)。在定義了用戶界面的主窗口類MainWindow之后,我們?yōu)閼?yīng)用程序設(shè)置了事件處理,比如按下’Q’鍵退出程序的功能。這為用戶提供了直觀的交互方式。
(4)主程序流程
????????接下來(lái)的部分是frame_process函數(shù),它是系統(tǒng)的核心。這個(gè)函數(shù)負(fù)責(zé)處理視頻流的每一幀圖像。我們先對(duì)圖像進(jìn)行了大小調(diào)整,然后將其傳遞給預(yù)先加載的YOLOv8模型進(jìn)行預(yù)測(cè)。預(yù)測(cè)完成后,我們對(duì)結(jié)果進(jìn)行后處理,包括繪制邊界框和標(biāo)簽,并將處理后的圖像顯示在主窗口的標(biāo)簽上。
def frame_process(image): # 定義幀處理函數(shù),用于處理每一幀圖像
image = cv2.resize(image, (850, 500)) # 將圖像的大小調(diào)整為850x500
pre_img = model.preprocess(image) # 對(duì)圖像進(jìn)行預(yù)處理
t1 = time.time() # 獲取當(dāng)前時(shí)間
pred, superimposed_img = model.predict(pre_img) # 使用模型進(jìn)行預(yù)測(cè)
t2 = time.time() # 獲取當(dāng)前時(shí)間
use_time = t2 - t1 # 計(jì)算預(yù)測(cè)所花費(fèi)的時(shí)間
print("推理時(shí)間: %.2f" % use_time) # 打印預(yù)測(cè)所花費(fèi)的時(shí)間
det = pred[0] # 獲取預(yù)測(cè)結(jié)果
# 如果有檢測(cè)信息則進(jìn)入
if det is not None and len(det):
det_info = model.postprocess(pred) # 對(duì)預(yù)測(cè)結(jié)果進(jìn)行后處理
for info in det_info: # 遍歷檢測(cè)信息
name, bbox, conf, cls_id = info['class_name'], info['bbox'], info['score'], info[
'class_id'] # 獲取類別名稱、邊界框、置信度和類別ID
label = '%s %.0f%%' % (name, conf * 100) # 創(chuàng)建標(biāo)簽,包含類別名稱和置信度
# 畫出檢測(cè)到的目標(biāo)物
image = drawRectBox(image, bbox, alpha=0.2, addText=label, color=colors[cls_id]) # 在圖像上繪制邊界框和標(biāo)簽
window.dispImage(window.label, image) # 在窗口的label上顯示圖像
????????最后,我們?cè)O(shè)置了視頻源,連接了frame_process函數(shù)以處理每一幀圖像,并啟動(dòng)了媒體流的處理。當(dāng)一切準(zhǔn)備就緒后,我們顯示主窗口并進(jìn)入Qt應(yīng)用程序的主循環(huán)。
app = QtWidgets.QApplication(sys.argv) # 創(chuàng)建QApplication對(duì)象
window = MainWindow() # 創(chuàng)建MainWindow對(duì)象
filename = abs_path("test_media/疲勞駕駛.mp4", path_type="current") # 定義視頻文件的路徑
videoHandler = MediaHandler(fps=30) # 創(chuàng)建MediaHandler對(duì)象,設(shè)置幀率為30fps
videoHandler.frameReady.connect(frame_process) # 當(dāng)有新的幀準(zhǔn)備好時(shí),調(diào)用frame_process函數(shù)進(jìn)行處理
videoHandler.setDevice(filename) # 設(shè)置視頻源
videoHandler.startMedia() # 開(kāi)始處理媒體
# 顯示窗口
window.show()
# 進(jìn)入 Qt 應(yīng)用程序的主循環(huán)
sys.exit(app.exec())
????????通過(guò)這些代碼,我們能夠創(chuàng)建一個(gè)實(shí)時(shí)的疲勞駕駛檢測(cè)系統(tǒng)。該系統(tǒng)不僅能夠處理視頻流,還能通過(guò)圖形界面實(shí)時(shí)展示檢測(cè)結(jié)果,為用戶提供直觀的反饋。這一整合應(yīng)用程序的開(kāi)發(fā)展示了深度學(xué)習(xí)模型在實(shí)際應(yīng)用中的潛力,以及如何將其應(yīng)用于提高道路安全的實(shí)際問(wèn)題中。
5. 疲勞駕駛檢測(cè)系統(tǒng)實(shí)現(xiàn)
????????在開(kāi)發(fā)交互式疲勞駕駛檢測(cè)系統(tǒng)時(shí),我們的系統(tǒng)設(shè)計(jì)思路旨在實(shí)現(xiàn)高效的人機(jī)交互,確保用戶能夠直觀地監(jiān)測(cè)和分析疲勞駕駛行為。此系統(tǒng)不僅涉及到前沿的機(jī)器學(xué)習(xí)技術(shù),而且還包括用戶界面設(shè)計(jì)和實(shí)時(shí)數(shù)據(jù)處理等多個(gè)層面的工作。基于這一目標(biāo),系統(tǒng)的設(shè)計(jì)采納了模塊化的架構(gòu),每個(gè)模塊負(fù)責(zé)處理特定的任務(wù),同時(shí)確保了整個(gè)系統(tǒng)的高度集成和協(xié)同工作。
5.1 系統(tǒng)設(shè)計(jì)思路
????????我們首先定義了MainWindow類作為系統(tǒng)的核心,該類的設(shè)計(jì)符合MVC(Model-View-Controller)設(shè)計(jì)模式,將用戶界面、數(shù)據(jù)處理和業(yè)務(wù)邏輯清晰地分離。這不僅有助于代碼的維護(hù)和更新,還使得未來(lái)的功能擴(kuò)展和迭代變得更加容易。
(1)架構(gòu)設(shè)計(jì)
????????在系統(tǒng)的架構(gòu)設(shè)計(jì)上,我們遵循了分層的方法,確保了各個(gè)組件的清晰劃分和高內(nèi)聚性,同時(shí)也易于維護(hù)和擴(kuò)展。具體來(lái)說(shuō),我們的架構(gòu)分為三個(gè)主要層次:
- 處理層(Processing Layer):在處理層面,我們集成了YOLOv8Detector類,該類搭載了先進(jìn)的YOLOv8算法。這個(gè)預(yù)訓(xùn)練的模型是系統(tǒng)智能分析的核心,負(fù)責(zé)實(shí)時(shí)檢測(cè)視頻流中的疲勞駕駛行為,如頻繁打哈欠或閉眼等。模型的高效性能確保了檢測(cè)的準(zhǔn)確性和快速響應(yīng),使得系統(tǒng)能夠及時(shí)警告用戶注意安全駕駛。
- 界面層(UI Layer):界面層則通過(guò)PySide6框架實(shí)現(xiàn),這是一個(gè)跨平臺(tái)的Python庫(kù),用于創(chuàng)建高質(zhì)量的用戶界面。我們定制的UI不僅外觀簡(jiǎn)潔美觀,而且操作直觀易用。用戶可以通過(guò)界面上的按鈕和菜單來(lái)控制視頻流的播放、暫停以及檢測(cè)過(guò)程,同時(shí),實(shí)時(shí)的檢測(cè)結(jié)果將直接在界面上展示,為用戶提供即時(shí)的反饋。
- 控制層(Control Layer):控制層作為系統(tǒng)的指揮中心,協(xié)調(diào)界面層和處理層的互動(dòng)。通過(guò)在MainWindow類中實(shí)現(xiàn)的槽函數(shù),系統(tǒng)能夠響應(yīng)用戶的交互命令,并調(diào)用YOLOv8模型進(jìn)行數(shù)據(jù)處理。此外,控制層還負(fù)責(zé)管理視頻流的讀取和幀處理,確保視頻數(shù)據(jù)流暢地輸送到模型中進(jìn)行分析。
????????系統(tǒng)還充分利用了Qt框架的信號(hào)和槽機(jī)制,這是一種強(qiáng)大的事件通信機(jī)制,允許不同組件之間的松耦合通信。當(dāng)視頻幀準(zhǔn)備就緒時(shí),通過(guò)信號(hào)通知系統(tǒng)進(jìn)行處理;當(dāng)檢測(cè)結(jié)果出現(xiàn)時(shí),通過(guò)槽函數(shù)將結(jié)果渲染到界面上。這種設(shè)計(jì)使得系統(tǒng)能夠靈活響應(yīng)各種事件,同時(shí)保持了代碼的清晰和易管理。
????????綜上所述,我們的系統(tǒng)設(shè)計(jì)通過(guò)精心的層次劃分和模塊化,確保了疲勞駕駛檢測(cè)系統(tǒng)既能以高準(zhǔn)確率執(zhí)行復(fù)雜的圖像分析任務(wù),又能提供友好的用戶體驗(yàn)。通過(guò)這樣的設(shè)計(jì),我們?yōu)橛脩籼峁┝艘粋€(gè)可靠的工具,幫助他們?cè)隈{駛過(guò)程中識(shí)別和預(yù)防疲勞駕駛行為,從而提高道路安全。
(2)系統(tǒng)流程
????????在本博客中,我們將展開(kāi)講述一個(gè)基于YOLOv8模型的疲勞駕駛檢測(cè)系統(tǒng)的設(shè)計(jì)流程。這個(gè)系統(tǒng)通過(guò)智能算法分析駕駛員的面部狀態(tài),從而實(shí)時(shí)檢測(cè)疲勞駕駛行為。系統(tǒng)的操作流程經(jīng)過(guò)精心設(shè)計(jì),確保了用戶的便捷性和系統(tǒng)的高效性。
-
當(dāng)用戶啟動(dòng)應(yīng)用程序時(shí),系統(tǒng)首先創(chuàng)建MainWindow類的實(shí)例。這一實(shí)例不僅負(fù)責(zé)加載和初始化應(yīng)用程序界面,還負(fù)責(zé)設(shè)置應(yīng)用程序運(yùn)行所需的各項(xiàng)參數(shù)。用戶界面的直觀設(shè)計(jì)使得用戶能夠輕松地選擇和配置媒體輸入源。這些輸入源可以是實(shí)時(shí)的攝像頭數(shù)據(jù)流、預(yù)錄制的視頻文件,甚至是靜態(tài)的圖像文件,為不同用戶需求提供靈活性。
-
選擇好輸入源后,系統(tǒng)將激活媒體處理器,對(duì)輸入數(shù)據(jù)進(jìn)行適配和預(yù)處理。這些處理包括對(duì)視頻流的捕捉、視頻文件的解碼以及圖像文件的讀取等。系統(tǒng)在這一階段將確保數(shù)據(jù)以正確的格式和參數(shù)被送入后續(xù)的處理流程。
-
隨著媒體輸入源的準(zhǔn)備就緒,系統(tǒng)進(jìn)入了核心的連續(xù)幀處理循環(huán)。首先,每一幀圖像都會(huì)經(jīng)過(guò)一系列預(yù)處理操作,這包括調(diào)整圖像大小、轉(zhuǎn)換色彩空間以及歸一化處理,以適配YOLOv8模型的輸入需求。接下來(lái),在檢測(cè)與識(shí)別階段,預(yù)處理后的圖像被輸入到Y(jié)OLOv8模型中,模型運(yùn)用其深度學(xué)習(xí)算法檢測(cè)圖像中的人臉位置,并識(shí)別可能表明疲勞的表情特征,如打哈欠和閉眼等。
-
一旦模型輸出了檢測(cè)結(jié)果,界面更新階段開(kāi)始。系統(tǒng)界面會(huì)實(shí)時(shí)顯示檢測(cè)框,并標(biāo)注出駕駛員的表情類別。同時(shí),系統(tǒng)還會(huì)在界面上展示相關(guān)的統(tǒng)計(jì)數(shù)據(jù),如檢測(cè)到的疲勞次數(shù),這些數(shù)據(jù)以圖表或列表的形式呈現(xiàn),為用戶提供直觀的反饋。
-
此外,用戶交互是系統(tǒng)設(shè)計(jì)中的重要考慮。用戶可以通過(guò)界面上的控制按鈕,執(zhí)行各種操作,例如保存檢測(cè)結(jié)果的功能、查詢系統(tǒng)信息,以及使用篩選功能對(duì)特定的檢測(cè)結(jié)果進(jìn)行深入分析。系統(tǒng)也提供了播放控制功能,用戶可以通過(guò)界面控制媒體的播放、暫停或停止,從而實(shí)時(shí)監(jiān)控分析過(guò)程。
????????總之,這個(gè)疲勞駕駛檢測(cè)系統(tǒng)的設(shè)計(jì)思路是將高級(jí)的YOLOv8檢測(cè)算法與用戶友好的交互界面相結(jié)合,通過(guò)精心設(shè)計(jì)的操作流程,不僅提升了用戶體驗(yàn),也確保了系統(tǒng)處理的準(zhǔn)確性和實(shí)時(shí)性。我們的目標(biāo)是為用戶提供一個(gè)易于操作、反應(yīng)迅速且準(zhǔn)確度高的疲勞駕駛監(jiān)測(cè)工具,進(jìn)而為道路交通安全貢獻(xiàn)力量。
5.2 登錄與賬戶管理
????????在本博客中,我們將詳細(xì)探討疲勞駕駛檢測(cè)系統(tǒng)中的用戶賬戶管理功能。該系統(tǒng)不僅集成了先進(jìn)的YOLOv8檢測(cè)算法,還在用戶體驗(yàn)方面下了一番功夫,特別是在個(gè)性化服務(wù)和數(shù)據(jù)管理方面。賬戶管理功能的加入,使得每個(gè)用戶都能夠在一個(gè)安全的私人空間內(nèi)操作系統(tǒng),管理自己的數(shù)據(jù)和設(shè)置,從而提供了一種更加個(gè)性化的使用體驗(yàn)。
????????用戶賬戶管理是通過(guò)結(jié)合PySide6 —— 一個(gè)強(qiáng)大的Python庫(kù),用于創(chuàng)建Qt應(yīng)用程序 —— 與SQLite數(shù)據(jù)庫(kù)構(gòu)建的。SQLite是一種輕量級(jí)的數(shù)據(jù)庫(kù),非常適用于需要輕便、無(wú)需復(fù)雜配置的場(chǎng)景。通過(guò)這樣的組合,我們?cè)O(shè)計(jì)了一個(gè)友好的用戶登錄界面,支持新用戶注冊(cè)和現(xiàn)有用戶登錄。注冊(cè)時(shí),用戶可以創(chuàng)建自己的賬戶,設(shè)置密碼,甚至上傳個(gè)人頭像,而這些信息都將被安全地存儲(chǔ)在數(shù)據(jù)庫(kù)中。
????????登錄成功后,用戶將進(jìn)入系統(tǒng)的主界面,可以開(kāi)始進(jìn)行疲勞駕駛的檢測(cè)工作。在主界面中,用戶不僅可以實(shí)時(shí)查看檢測(cè)結(jié)果,包括檢測(cè)框、類別和置信度等信息,還可以對(duì)檢測(cè)結(jié)果進(jìn)行保存和管理。系統(tǒng)支持多種輸入源,包括圖片、視頻、實(shí)時(shí)攝像頭捕捉以及批量文件,使得系統(tǒng)的應(yīng)用場(chǎng)景更加廣泛。
????????在用戶個(gè)性化服務(wù)方面,我們的系統(tǒng)提供了一系列功能,使用戶能夠更加便捷地管理自己的賬戶。用戶可以隨時(shí)修改密碼以保障賬戶安全,更換頭像以個(gè)性化自己的界面,以及在需要時(shí)注銷賬戶。在用戶管理界面中,這些操作都被設(shè)計(jì)得簡(jiǎn)單直觀,只需要幾個(gè)點(diǎn)擊即可完成,確保了用戶可以無(wú)障礙地進(jìn)行各項(xiàng)操作。
????????此外,對(duì)于已經(jīng)登入的用戶,系統(tǒng)還能夠記住用戶的偏好設(shè)置和檢測(cè)歷史,為用戶提供持續(xù)的個(gè)性化體驗(yàn)。這意味著用戶可以在任何時(shí)候回到系統(tǒng)中,查看之前的檢測(cè)記錄和設(shè)置,繼續(xù)之前的工作。這樣的設(shè)計(jì)不僅提高了用戶體驗(yàn),也方便了用戶對(duì)疲勞駕駛行為的長(zhǎng)期監(jiān)測(cè)和分析。
????????綜上所述,通過(guò)以上的設(shè)計(jì)和實(shí)現(xiàn),我們的疲勞駕駛檢測(cè)系統(tǒng)不僅具備了高效的檢測(cè)能力,還提供了一系列便利的用戶管理功能,從而滿足用戶在實(shí)時(shí)目標(biāo)檢測(cè)場(chǎng)景下的多元化需求。這些特性使得系統(tǒng)不僅是一個(gè)強(qiáng)大的檢測(cè)工具,也是一個(gè)用戶友好、易于管理的個(gè)性化平臺(tái)。
下載鏈接
????若您想獲得博文中涉及的實(shí)現(xiàn)完整全部資源文件(包括測(cè)試圖片、視頻,py, UI文件,訓(xùn)練數(shù)據(jù)集、訓(xùn)練代碼、界面代碼等),這里已打包上傳至博主的面包多平臺(tái),見(jiàn)可參考博客與視頻,已將所有涉及的文件同時(shí)打包到里面,點(diǎn)擊即可運(yùn)行,完整文件截圖如下:
完整資源中包含數(shù)據(jù)集及訓(xùn)練代碼,環(huán)境配置與界面中文字、圖片、logo等的修改方法請(qǐng)見(jiàn)視頻,項(xiàng)目完整文件下載請(qǐng)見(jiàn)演示與介紹視頻的簡(jiǎn)介處給出:???
演示與介紹視頻:https://www.bilibili.com/video/BV1FK421878L/
????在文件夾下的資源顯示如下,下面的鏈接中也給出了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,復(fù)制離線依賴包至項(xiàng)目目錄下進(jìn)行安裝,另外有詳細(xì)安裝教程:(1)Pycharm軟件安裝教程;(2)Anaconda軟件安裝教程;(3)Python環(huán)境配置教程;
離線依賴安裝教程:https://www.bilibili.com/video/BV1hv421C7g8/
離線依賴庫(kù)下載鏈接:https://pan.baidu.com/s/1y6vqa9CtRmC72SQYPh1ZCg?pwd=33z5 (提取碼:33z5)
6. 總結(jié)與展望
????????在本博客中,我們?cè)敿?xì)介紹了一個(gè)基于YOLOv8模型的疲勞駕駛檢測(cè)系統(tǒng),還實(shí)驗(yàn)了YOLOv7、YOLOv6、YOLOv5等模型。系統(tǒng)以模塊化的方式設(shè)計(jì),充分采用了合理的架構(gòu)設(shè)計(jì),帶來(lái)良好的可維護(hù)性和可擴(kuò)展性。其用戶界面友好,能夠提供實(shí)時(shí)的疲勞駕駛檢測(cè)和識(shí)別結(jié)果展示,同時(shí)支持用戶賬戶管理,以便于保存和管理檢測(cè)結(jié)果和設(shè)置。
????????該系統(tǒng)支持?jǐn)z像頭、視頻、圖像和批量文件等多種輸入源,能夠滿足用戶在不同場(chǎng)景下的需求。在后面可以添加更多預(yù)訓(xùn)練模型,增加檢測(cè)和識(shí)別的種類;優(yōu)化用戶界面,增強(qiáng)個(gè)性化設(shè)置;并積極聆聽(tīng)用戶反饋,以期不斷改進(jìn)系統(tǒng),以更好地滿足用戶的需求。
結(jié)束語(yǔ)
????????由于博主能力有限,博文中提及的方法即使經(jīng)過(guò)試驗(yàn),也難免會(huì)有疏漏之處。希望您能熱心指出其中的錯(cuò)誤,以便下次修改時(shí)能以一個(gè)更完美更嚴(yán)謹(jǐn)?shù)臉幼?,呈現(xiàn)在大家面前。同時(shí)如果有更好的實(shí)現(xiàn)方法也請(qǐng)您不吝賜教。
-
Fang W, Wang L, Ren P. Tinier-YOLO: A real-time object detection method for constrained environments[J]. IEEE Access, 2019, 8: 1935-1944. ??
-
Wu W, Liu H, Li L, et al. Application of local fully Convolutional Neural Network combined with YOLO v5 algorithm in small target detection of remote sensing image[J]. PloS one, 2021, 16(10): e0259283. ??
-
Li C, Li L, Jiang H, et al. YOLOv6: A single-stage object detection framework for industrial applications[J]. arXiv preprint arXiv:2209.02976, 2022. ??
-
Wang C Y, Bochkovskiy A, Liao H Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 7464-7475. ??文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-856874.html
-
Talaat F M, ZainEldin H. An improved fire detection approach based on YOLO-v8 for smart cities[J]. Neural Computing and Applications, 2023, 35(28): 20939-20954. ??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-856874.html
到了這里,關(guān)于基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的疲勞駕駛檢測(cè)系統(tǒng)(Python+PySide6界面+訓(xùn)練代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!