基于Perclos&改进YOLOv7的疲劳驾驶DMS检测系统(源码&教程)
1.研究背景
疲勞駕駛成為了導致交通事故發生的重要因素之一,并呈現出逐年遞增的趨勢,若能設計出一種在駕駛員發生疲勞時,就能檢測出駕駛員處于疲勞狀態對其進行警告,這樣就可以較好地降低交通事故的發生的概率.論文介紹了一種檢測駕駛員在駕駛過程中是否為疲勞駕駛的方法,基于PERCLOS對駕駛員進行疲勞檢測.首先對設備采集的人臉圖像進行膚色分割,根據程序中設定的膚色閾值,確定圖像中屬于膚色的區域,對得到的膚色區域進行眼睛追蹤,人臉特征部位進行積分投影操作,獲取眼睛區域,捕捉眼睛的實時狀態,并對眼睛的面積進行計算,最后根據疲勞值來判定疲勞狀態.根據實驗證明,該方法滿足車載、實時、非接觸的基本要求,并能準確地做出對駕駛員駕駛過程中是否出現疲勞的判定.
2.圖片演示
3.視頻演示
基于Perclos&改進YOLOv7的疲勞駕駛DMS檢測系統(哈欠&喝水&抽煙&打電話檢測)_嗶哩嗶哩_bilibili
4.算法流程圖
5.PERCLOS測試原理
參考該博客提出的方案,PERCLOS(Percentage of Eyelid Closure Overthe Pupil Over Time)的含義是指在單位時間內眼睛閉合狀態下所占用的時間百分比[4]
結合圖 1 可以較為容易地理解其測量原理。根據下面的計算公式,通過測量 t1~t4 的值來計算
PERCLOS的值。
其中 f 為計算后求得的 PERCLOS 值,t1~t4 代表的[圖片上傳中…(image.png-f4d849-1669187187473-0)]
含義如測量原理圖所示,表示時間區間內眼睛開閉程度。在具體實驗中 PERCLOS 有三種度量標準,即為 P70、P80、EM,分別代表眼睛在不同閉合程度下所占用的時間百分比。其中 P80 指的是在測試過程中,檢測對象的眼睛閉合面積超過80%所占用的時間百分比。大量研究表明,在三種度量標準中對疲勞駕駛的檢測準確率最高的是P80[5]標準。因此本文采用此標準進行疲勞判定,計算公式如下:
用此方法追蹤眼睛狀態時,由攝像頭對駕駛員的頭部區域進行捕獲,對采集過程中可能出現的過暗圖像加上光照補償,采取YCbCr對膚色進行分割來確定人臉區域,對眼部輪廓進行提取,運用圖像處理來判斷眼睛的開閉狀態。定義檢測過程中人物眼睛睜開程度只要滿足大于20%這個條件,就記為睜開狀態,反之為閉合。
6.人臉眼睛、嘴巴開閉狀態、喝水抽煙打電話檢測
YOLOv7
YOLOv7是YOLO系列中最先進的新型目標檢測器。根據論文所述,它是迄今為止最快、最準確的實時目標檢測器,最好的模型獲得了56.8%的平均精度(AP),這是所有已知目標檢測器中最高的,各種模型的速度范圍在 5~160 FPS。
本文主要介紹簡化的YOLOv7論文解讀和推理測試以及YOLOv7與 YOLO系列的其他目標檢測器的比較。
YOLOv7通過將性能提升一個檔次建立了重要的基準。從YOLOv4開始在極短的時間內,我們看到YOLO家族的新成員接踵而至。每個版本都引入了一些新的東西來提高性能。早些時候,我們已經詳細討論了以前的 YOLO 版本。
不同的應用需要不同的模型。雖然有些人需要高度準確的模型,但有些人優先考慮速度。執行模型縮放以適應這些要求并使其適合各種計算設備。
在縮放模型大小時,會考慮以下參數:
1.分辨率(輸入圖像的大小)
2.寬度(通道數)
3.深度(網絡層數)
4.階段(特征金字塔的數量)
NAS(Network Architecture Search)是一種常用的模型縮放方法。研究人員使用它來迭代參數以找到最佳比例因子。但是,像 NAS 這樣的方法會進行參數特定的縮放。在這種情況下,比例因子是獨立的。
YOLOv7論文的作者表明,它可以通過復合模型縮放方法進一步優化。在這里,對于基于連接的模型,寬度和深度是連貫地縮放的。
算法改進
YOLOv7 改進特征融合網絡BiFPN結構 ,參考EfficientDet中提出的加權的雙向特征金字塔網絡,它允許簡單和快速的多尺度特征融合。為了追求更高效的多尺度融合方式。以往的特征融合是平等地對待不同尺度特征,CVPR 2017的FPN指出了不同層之間特征融合的重要性,并且以一種比較簡單,Heuristic的方法把底層的特征乘兩倍和淺層相加來融合。之后人們也試了各種別的融合方法,比如PANet先從底向上連,再自頂向下連回去(上圖b);NAS-FPN 采用神經架構搜索來搜索更好的跨尺度特征網絡拓撲,但是在搜索過程中需要花費數千個GPU小時,并且發現的網絡不規則,難以解釋或修改,如上圖 ( c )所示。總之上述都是一些人工各種連接的設計,包含Conv,Sum,Concatenate,Resize,Skip Connection等候選操作。很明顯使用哪些操作、操作之間的順序是可以用NAS搜的。
代碼實現
class Concat(nn.Module):# Concatenate a list of tensors along dimensiondef __init__(self, c1, c2):super(Concat, self).__init__()# self.relu = nn.ReLU()self.w1 = nn.Parameter(torch.ones(2, dtype=torch.float32), requires_grad=True)self.w2 = nn.Parameter(torch.ones(3, dtype=torch.float32), requires_grad=True)self.epsilon = 0.0001self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)self.swish = MemoryEfficientSwish()def forward(self, x):outs = self._forward(x)return outsdef _forward(self, x): # intermediate resultif len(x) == 2:# w = self.relu(self.w1)w = self.w1weight = w / (torch.sum(w, dim=0) + self.epsilon)x = self.conv(self.swish(weight[0] * x[0] + weight[1] * x[1]))elif len(x) == 3: # final result# w = self.relu(self.w2)w = self.w2weight = w / (torch.sum(w, dim=0) + self.epsilon)x = self.conv(self.swish(weight[0] * x[0] + weight[1] * x[1] + weight[2] * x[2]))7.系統整合
下圖完整源碼&環境部署視頻教程&數據集&自定義UI界面
參考博客《基于Perclos&改進YOLOv7的疲勞駕駛DMS檢測系統(源碼&教程)》
8.參考文獻
[1]荔小虎,唐晶磊.基于膚色匹配和積分投影結合的人眼定位方法研究[J].自動化應用.2018,(12).DOI:10.3969/j.issn.1674-778X.2018.12.026.
[2]楊恒,張再軍,楊東,等.融合YCbCr膚色模型與區域標記的人臉檢測算法研究[J].軟件導刊.2016,(2).DOI:10.11907/rjdk.161028.
[3]牛清寧,周志強,金立生,等.基于眼動特征的疲勞駕駛檢測方法[J].哈爾濱工程大學學報.2015,(3).DOI:10.3969/j.issn.1006-7043.201311044.
[4]何光輝,張太平.局部匹配的人臉識別方法[J].重慶大學學報:自然科學版.2012,(12).
[5]楊超,李博文.基于積分投影的眼睛定位系統設計[J].軟件導刊.2011,(9).
[6]于興玲,王民,張立材.基于PERCLOS的駕駛員眼睛狀態檢測方法[J].微計算機信息.2007,(14).DOI:10.3969/j.issn.1008-0570.2007.14.103.
[7]李杰,郝曉莉.一種基于橢圓膚色模型的人臉檢測方法[J].計算機測量與控制.2006,(2).DOI:10.3969/j.issn.1671-4598.2006.02.012.
[8]李志春,何仁,林謀有,等.駕駛員疲勞檢測技術的研究現狀及發展趨勢[J].農機化研究.2006,(5).DOI:10.3969/j.issn.1003-188X.2006.05.068.
[9]馮建強,劉文波,于盛林.基于灰度積分投影的人眼定位[J].計算機仿真.2005,(4).DOI:10.3969/j.issn.1006-9348.2005.04.021.
[10]王文成,常發亮.一種基于區域投影的人眼精確定位方法[J].光電子·激光.2011,(4).
總結
以上是生活随笔為你收集整理的基于Perclos&改进YOLOv7的疲劳驾驶DMS检测系统(源码&教程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最让人暖心的Numpy笔记~干货满满!你
- 下一篇: 关于数据埋点的认识以及在流量分析系统中的