隨著日新月異的科技推動著時代的前進,持續為人類生活帶來改變,各國在汽車工藝上也有了跨世紀的轉變,各大車廠都在追求最頂尖、先進的技術和原料零件,相繼導入感測技術,使得一台汽車不在只是代步的工具。
近年來,人工智慧(Artificial Intelligence, AI)及車聯網的蓬勃發展,路上的行車不再是單獨的個體,網路的互聯使智慧型交通工具成為一個生態體系,透過深度學習、通訊科技,將大量的行車資訊匯集成一個系統,並且透過這套系統使車輛知道彼此的資訊和車況,進而透過安全輔助系統等提升車輛更全面的安全,達到預防車禍以降低事故發生。汽車科技提倡智慧化、自動化,讓車輛結合人工智慧能感知周遭環境、自動駕駛等功能。車聯網建立在提供人類更便利、安全的搭乘服務,現今科技的發展走向都是為了滿足人們在生活上的個別需求,亦指說相比於傳統車輛更能強調其安全性能。
台灣是機車密度較高的國家之一,根據內政部警政署對近十年道路交通事故分析,機車事故成為各車種之最大宗,並且逐年提升,十八歲至二十五歲的年輕機車族更是占了其中的五成以上,尤其雨天、霧天及夜晚等等視線不佳或路面濕滑之因素,更常導致交通事故發生。依調查顯示,年輕機車族之事故原因往往是超速、未注意前車狀況、路面濕滑、與前車車距不夠長和闖紅燈等違規行為。除此之外,汽車對機車的事故比例位居其中的第二,主因則是汽車駕駛於車內的視線死角、汽機車彼此爭奪車道和交通路線衝突等。前述事故通常涉及機車、汽車及行人,如何運用人工智慧技術來改善交通安全是一重要的課題。
對於機車行車安全,除了加強交通安全宣導外,發展汽車對機車的駕駛安全輔助系統能幫助駕駛注意周圍的行車動態,大大降低傷亡。透過擷取車內與車外之訊息,車與外界訊息交換(V2X)的關鍵技術在於偵測周圍的情況,例如碰撞風險、不當超車、盲點範圍內的車輛、危險道路、以及視線外的前方煞車等資訊,並將可能發生的危險通知駕駛,避免發生事故。
為達成嵌入式系統於場域實地結合路測單元(RSU)資訊應用於特殊情境之影像辨識與追蹤技術,於國立高雄科技大學第一校區測試場域安排架設相關系統設備,蒐集機車行車資訊。利用拍攝的畫面進行影像標示和辨識,以提供車輛行進軌跡的擷取和相關資訊,供發展軌跡追蹤與預測演算法,幫助預測及追蹤機車動向。利用路側單元攝影機拍攝之機車動態影像,特別是在大雨或大霧天氣的情況之下,本計畫完成了「以深度學習方法對拍攝影像進行識別及標記」、「進行機車路徑軌跡的抽取及機車追蹤」、「在惡劣氣候下,進行除雨、除霧影像處理後再進行識別」等三個目標。
訂定研究目的決定測試方法
本次研究主要針對外在環境能見度不佳的特殊情境,例如大雨、大霧等特殊情境進行機車影像識別與行進軌跡之預測的相關研究,以改善識別效能,增進安全駕駛輔助系統的效益。
以路側單元的攝影機為基礎,在場域取得機車行進之影像,同時透過不同視角的拍攝,做為演算法精確度的評量依據以及影像辨識的訓練參考,進行下列之研究:對影像進行辨識及標記;追蹤與抽取機車行進路徑軌跡;在惡劣氣候下,如大雨、大霧等等環境下發展演算法,改善影像辨識的效能。
而研究方法為嵌入式系統於場域實地結合多項路側資訊應用於特殊情境之軌跡追蹤辨識技術,進行影像辨識與標記、軌跡抽取與追蹤、除雨與除霧演算法開發。
在建構軟硬體環境方面,則是在國立高雄科技大學第一校區測試場域架設拍攝設備,將拍攝到的畫面匯入Python中進行測試車輛行進軌跡和追蹤。硬體環境建構部分,將GoPro攝影機架設在校園中交通流量較高之斜坡主要幹道的交通號誌告示牌上。位置如圖1中編號1、2、3及4圓紅點所示,而拍攝所需之設備清單,詳細如表1所示。在軟體開發環境建構部分,則使用OpenCV影像處理程式庫與Python語言進行軟體開發。以下將說明Python開發軟體Anaconda及OpenCV之安裝。
採用影像辨識與標記
拍攝所需之設備如表1所示,影片錄製分為白天、傍晚、雨天及霧天,本計畫以GoPro攝影機錄製影片,並針對機車行駛進行影像辨識,實際拍攝雨天影像,如圖2所示。
使用背景相減法,取得目標物,其原理如圖3所示,將當前影像減去背景,取得差值,並設定門檻值,當差值高於茲門檻值,將該像素(Pixel)設為「1」;反之設為「0」(二值化),多個像素「1」所組成之集合為目標物。
圖4為影像標記之流程,將欲處理之影像串流輸入儲存,再使用背景相減法去除背景並二值化,處理後之影像串流中像素「1」即為目標,依據目標大小給予適當的外框。
進行軌跡抽取及追蹤
使用Python搭配OpenCV進行軌跡抽取,首先呼叫OpenCV函式庫中的cv2.VideoCapture()將影片輸入,再使用cv2.findContours()檢測出影片中目標物每一幀的輪廓,並利用deque()函數能建立一個空的陣列。接著,計算出目標中心點並將中心點的座標值放入deque()函數中,最後使用OpenCV函式庫中的cv2.line()函數將取得的上一幀與這一幀的座標值連接起來畫出軌跡(圖5)。
使用粒子濾波器進行影像追蹤,分為影像標框、初始化階段、預測下一步軌跡、設定權重、重新取樣等五個步驟。首先輸入需辨識之影像,並針對目標進行標框,接著進行初始化,初始化是藉由粒子濾波器以均勻分布的方式來取得數值之位置,算出其中心點,並設為起始點,在算出初始位置後,進行下一個中心點位置之預測,接著計算其權重,計算方式為每個粒子與框之中心點距離取倒數,再進行正規化,讓所有粒子的機率總和為1。
緊接著,進行重新取樣,根據上述所計算出之權重給予適當的門檻值。大於門檻值之粒子其權重較大,離目標軌跡較近,則保留其粒子位置,小於門檻值之粒子其權重較小,離目標軌跡較遠,則刪除其粒子位置,將留下之粒子產生數目相同的另一組粒子,散布在權重較大的區域,讓粒子逼近於真實之軌跡。
除雨演算法原理介紹
除雨演算法是使用深度學習的殘差網路(ResNet)進行影像除雨。輸入的陰雨圖像和相應的無雨圖像分別為X和Y。圖像是直接訓練了深層的CNN架構為多個圖像以最小化目標函數,如公式1所示:
................公式1
除雨演算法為了簡化學習過程將映射形式改為負殘差映射,簡稱為負映射,如公式2所示:
.............公式2
除雨演算法為了能快速地將雨天影像中的雨條紋分離出來,而使用了深度細節網路,將雨天的圖像分成基礎層和細節層,針對雨天原始影像X使用低通濾波器後獲得基礎層,再將雨天原始影像X減去基礎層,即可獲得,如公式3所示:
......................公式3
為了能夠進一步改善去除效果,針對訓練期間的高頻細節(HF)來使用先驗影像,這消除了背景干擾並將模型聚焦在影像中的雨水結構上。這表明深層架構不但有利於高階視覺處理,也能夠解決低階的成像問題,輸入端為雨天原始影像,使用濾波器分解出HF部分,針對HF部分,使用先驗影像消除背景干擾並將圖片聚焦在影像中的無雨水結構上,再與原始圖片合成。圖6為除雨演算法之影像比較圖,左圖為未除雨影像,右圖為除雨後影像。
除霧演算法開發利用
Python搭配OpenCV之環境進行影像除霧,除霧演算法使用暗通道理論進行影像除霧,透過暗通道理論將未經處理之霧影像進行解析,從中計算出空中光氣和透射率,此演算法中將透射率設定接近於零時,容易造成雜訊干擾,使透射率限制在一定之門檻值,並配合導向濾波原理,減少霧天影像造成辨識率下降之干擾,在霧天下所取得的影像,光線受到視線中的小分子和水氣等介質的影響,導致場景可見性差、對比度降低、顏色變化與分辨率及影像品質下降。圖7與圖8皆為除霧演算法之影像比較圖,左圖為未除霧影像,右圖為除霧後影像。
透過演算法程式設計
以下將說明影像辨識與標記、軌跡抽取與追蹤、除雨演算法及除霧演算法之程式開發與設計。
影像辨識與標記演算法除錯與修正
原影像辨識與標記使用背景相減法來達到影像辨識的效果,經實驗後因物體有遠近造成大小不同,以物體大小辨識會將較遠之汽車與較近之機車歸類同一類,故後來使用深度學習的方法,辨識物體。由於深度學習辨識物體是利用特徵的方式來辨識物體,故在解析度較低或是有雜訊(如雨天)也能達到不錯的效果(圖9)。
使用深度學習YOLO(You Only Look Once) v3,YOLOv3的CNN網路會先將影片改變為S×S的大小,然後每個單元格負責去檢測那些中心點落在該格子內的目標,如圖10所示,可以看到車輛這個目標的中心落在中間偏上的一個單元格內,那麼該單元格負責預測這輛車輛。
每個單元格會預測B個邊界框(Bounding Box)以及邊界框的信心分數(Confidence Score)。信心分數包含兩個方面,一是邊界框含有目標的可能性大小,二是邊界框的準確度。前者為,當該邊界框是背景時(即不包含目標),此時。而當該邊界框包含目標時,。邊界框的準確度可以用預測框與實際框(Groundtruth)的並交比(Intersection over Union, IOU)來表示,記為
。因此信心分數可以定義為
。
而邊界框的大小與位置可以用四個值來表示,其中是邊界框的中心座標,而w和h是邊界框的寬與高。中心座標的預測值x和y是相對於每個單元格左上角座標點的偏移值。
而邊界框的w和h預測值是相對於整個圖片的寬與高的比例,四個元素的大小應該在[0,1]範圍內。
標記後,對於每一個單元格預測出C個類別機率值,其表示的是由該單元格負責預測的邊界框其目標屬於各個類別的機率。且這些機率值是由各個邊界框置信度下的條件機率,即。最後將機率值最大的類別設為辨識後之類別,如圖11所示。
影像辨識與標記演算法其流程圖,如圖12所示。首先將影片讀入網路中,以預先訓練好的權重來判斷是否有無物體,辨識到物體後給予適當邊界框與該物體類別,直到影片結束。
軌跡抽取與追蹤演算法
軌跡是由眾多的(x,y)點所集合而成的,把軌跡設為一個固定長度,而長度隨時會接收新匯入的(x,y)點,再把舊的(x,y)點淘汰掉,並使用deque()函數創立空的陣列避免軌跡無限延伸,接著匯入任意點(x,y)至陣列中,再把舊的(x,y)點刪除,讓軌跡保持在固定長度。影像抽取流程圖,如圖13所示。
使用Python搭配OpenCV進行粒子濾波器之追蹤,先將二值化影像讀入,針對物體長寬進行標框,接著進行初始化階段,藉由粒子以均勻分布抓取數值所在位置,計算其中心點。然後,計算權重,計算方式為框之中心點與每個粒子位置之距離取倒數,再進行正規化,使其機率總合為1。接著,利用重新取樣將保留的粒子生成相同數目的另一組粒子,使其逼近真實軌跡。影像追蹤流程圖,如圖14所示。
除雨演算法開發與設計
除雨演算法使用深度學習的殘差網路(ResNet)進行影像除雨。將原始影像輸入深度殘差網路,透過濾波器找出雨滴的特徵,再將有雨部分進行消除,最後照片合成輸出,即為除雨之影像。除雨程式設計流程圖,如圖15所示。
除霧演算法運作流程
除霧演算法使用暗通道理論進行影像除霧,透過暗通道理論將未經處理之霧影像進行解析,從中計算出空中光氣及透射率,此演算法中將透射率設定接近於零時,容易造成雜訊干擾,使透射率限制在一定之門檻值,並配合導向濾波原理,減少霧天影像造成辨識率下降的干擾。除霧程式設計流程圖,如圖16所示。
執行成果及結果說明
接著說明GoPro攝影機的拍攝影像、影像辨識與標記、軌跡抽取與追蹤、除雨演算法及除霧演算法之程式與實際應用測試報告。
編號1~4的GoPro攝影機的拍攝影像
本計畫利用GoPro攝影機與校園監視器在晴天、雨天、霧天下進行各種不同的影像拍攝。圖17為晴天之四個GoPro攝影機現場拍攝狀況,圖18則為霧天之四個GoPro攝影機現場拍攝狀況,而圖19是雨天之四個GoPro攝影機現場拍攝狀況。
影像辨識與標記演算法實驗結果
由於深度學習是使用特徵的方式來辨識物體,即使是兩個物體相連,也可正確辨識出種類,且在影像中會有物體遠近而造成同一物體卻有大小不同的問題,以特徵的方式來辨識物體,可大大減少辨識的錯誤率,如圖20所示。
軌跡抽取與追蹤測試結果
在天氣為晴天、雨天與霧天的狀態下,於校園內拍攝機車行徑的影片進行測試,經由影像辨識後由黃色框標示出目標物再使用粒子濾波器進行目標追蹤,先將粒子均勻地撒在影像畫面中,使其能夠計算出目標位置和中心點,當追蹤到目標物時能夠讓粒子集中在目標周圍,並將上一幀與這一幀中心點的座標值連接起來,即可畫出目標物的行徑軌跡達到追蹤效果。如果影片中有雨滴或異物遮擋鏡頭時,可能會影響辨識效果導致追蹤效果較為不佳。
將除霧前與除霧後以及雨天的影像進行追蹤測試,皆能追蹤到機車,但軌跡抽取的效果較差。其效果如圖21上下為除霧前之追蹤結果,圖22上下為除霧後之追蹤結果,圖23上下則是雨天追蹤結果。
除雨演算法測試成果
對編號1、2、3及4之大雨影像進行除雨測試,其測試結果如下。其中圖24是編號1大雨測試影片除雨前後之影像比較圖,上圖為大雨原始影像,下圖為除雨後的影像,圖25、圖26、圖27的情況可以此類推。
除霧演算法改善修正與測試結果
影像為各攝影機有霧場景的實際測試,經除霧演算法處理後效果如圖所示。圖28為編號1攝影機、圖29為編號2攝影機、圖30為編號3攝影機、圖31為編號4攝影機,上述皆為除霧前後之比較圖,左方為未除霧影像,右方為除霧後影像,而圖32為資策會提供的霧天影像,左方為未除霧影像,右方為除霧後影像。
判定辨識準確率
本文測量結果以準確率表示,將辨識後之影片轉出照片,再以人眼來判斷TP、FP、TN和FN。真陽性(TP)是機車、汽車和人,且辨識正確,偽陽性(FP)辨識成機車、汽車和人但不是機車、汽車和人,真陰性(TN)不是機車、汽車和人的都沒辨識出來,而偽陰性(FN)是機車、汽車和人,但是沒有辨識出來。而準確度(Accuracy, ACC)計算公式為ACC=(TP+TN)/(TP+FP+TN+FN)。
以圖33為例,可以得到TP:7、FP:1、FN:1和TN:0。以此類推,將整部影片標示完可得出影片辨識後的準確率,如圖34~圖41所示。
以下為GoPro攝影機與校園監視器在雨天及霧天的影像進行辨識前後的準確率計算,其結果分別如表2及表3所示。
檢驗測試結果四種方式各有所長
最後,針對影像辨識與標記、軌跡抽取與追蹤、除雨演算法、除霧演算法的最終測試結果,分別加以說明。
首先是影像辨識與標記測試結果。關於影像辨識與標記,影片錄製分為雨天及霧天,以GoPro攝影機拍攝影片,並針對機車、行人及汽車進行影像辨識。由於深度學習是使用特徵的方式來辨識物體,即使是兩個物體相連,也可正確辨識出種類,且在影像中會有物體遠近而造成同一物體卻有大小不同的問題,以特徵的方式來辨識物體,可減少辨識的錯誤率。
而軌跡抽取與追蹤測試結果,在晴天、雨天及霧天的天氣情況下進行測試,先經由影像辨識後再進行目標追蹤及軌跡抽取,可以將目標物的行徑軌跡劃出並達到追蹤效果,如果影片中有雨滴或異物遮擋鏡頭時可能會影響到追蹤效果。
至於除雨演算法測試結果,經測試後得知,除雨演算法是針對特定形式與較為明顯的大雨條紋,進行影像除雨,一般大雨影像的雨條紋是不規則狀的,也沒有非常明顯,所以測試影片經過除雨演算法後並不能有效地去除雨條紋。但本計畫經除雨演算法將影像處理後,辨識準確率有提升,代表此演算法是有效的。另外,因為有些影片是取用學校監視器的畫面,但監視器畫面解析度比較低,所以導致辨識率沒有理想中的高。
關於除霧演算法測試結果,將測試影片經過除霧演算法後,可明顯看出除霧的效果,但部分影像尤其天空區域會出現過度曝光的情形;如圖32所示,影片經除霧演算法除霧後,效果不佳,並破壞大部分之影像,使影像無法清楚辨識。此演算法套用在校園並且霧比較少的環境,處理效果不錯且影像處理之後的辨識率也有提升不少,但編號4處理過後反而辨識率下降,原因是原本在有霧的環境下有些輪廓像機車的物體經過除霧演算法處理過後變得清晰,所以導致除霧後的辨識率下降,這個也是必須要探討的。
測試影片經演算法測試結果後,除雨與除霧演算法對拍攝的單一照片影像相當有效,但對實測的影片效果相當有限,且會增加系統複雜度與計算時間。上述兩種演算法是針對整體的照片進行運算,而本次針對影片中的物件進行影像識別與追蹤,考量整體系統複雜度與即時性,而人眼的識別方式也並不會先進行除雨與除霧後再識別,而本案霧與雨之效果,建議仿照人眼之識別方式直接以影像識別進行處理,或在未來另行研究更適合之演算法以提升識別準確率。
(本文作者郝敏忠、林壽煦任教於國立高雄科技大學電腦與通訊工程系,陳聖文任職於財團法人資訊工業策進會智慧系統研究所)