本文介紹如何將基於深度學習的目標檢測算法應用到具體的項目開發中,體現深度學習技術在實際生產中的價值,算是AI算法的一個落地實現。本文算法部分可以參見前面幾篇博客:
[AI開發]Python+Tensorflow打造自己的計算機視覺API服務
[AI開發]視頻多目標跟蹤高級版(離自動駕駛又‘近’了一點點)
[AI開發]centOS7.5上基於keras/tensorflow深度學習環境搭建
背景
交通領域是深度學習技術可以發揮強大作用的一個領域。道路交通的安全性要求比較高,道路監控設備比較完備,這些設備每天可以產生無數的視頻數據,而這些數據非常有利於深度學習模型的訓練。網上也可以下載到非常多的交通數據集,包括行人、車輛、道路兩旁的基礎設施比如路燈、信號燈、公交站牌等等。
如何利用交通監控設備產生的視頻數據,來進行視頻的自動分析呢?顯然這是一個深度學習的應用場景。下面介紹,如何利用深度學習技術自動檢測車輛交通事件,比如高速路上違規停車、逆行、闖入行人、占用應急車道等等事件。下面是最終的一個效果圖:

對於一台主機設備,可同時實時檢測8路高清監控視頻,若有異常事件,會實時發出警告。
業務流程
整個系統構成非常簡單,業務流程也相對簡單。下面是兩個主要的業務分支:
視頻流分支

如上圖所示,直接將跟蹤得到的軌跡疊加到視頻幀中,然后編碼將其推到Nginx服務器中,供web播放器播放。
數據流分支

如上圖所示,根據跟蹤得到的軌跡,檢測每輛車的交通事件,將其結果寫入mysql數據庫。另外一個服務模塊定期統計數據,供web模塊進行數據顯示。
系統結構
服務器環境
1)centOS 7.5 (3.10.0內核);
2)Python 3.6 + tensorflow-gpu 1.9 + keras 2.2.2 + 各種python庫;
3)CUDA 9.0 + CUDNN 7.1 + Nvidia顯卡驅動384.130;
4)Tomcat + Mysql + Java;
5)i7 8核 + Nvidia GTX 1080顯卡;
以上是服務器軟硬件環境。
系統組成
下圖是軟件系統組成:

上圖中最上部分是核心算法在整個系統中的位置。
模型訓練
模型訓練最主要的是要收集高質量、各種天氣、各種視頻角度、各種道路狀況下的素材。下面是素材的一個簡單分類,數量大約為10W+張。
按場景:
1)外場
2)隧道
按天氣:
1)晴天
2)陰天
3)雨天
4)夜晚(紅外)
按攝像機角度:
1)正前方
2)正后方
3)側前方
4)側后方
按目標類型:
1)行人
2)汽車
3)客車
4)貨車
(高速攝像機一般安裝太遠,其他目標太小,因此不考慮其他目標)
按路況:
1)流暢
2)擁堵
3)嚴重擁堵
素材標注是個體力活,找個好用的標注工具可以事半功倍。自己寫了一個標注工具,體驗不是特別好,但是適合本項目素材的標注。相關連接參見這里:-------link--------------
事件類型/功能
由跟蹤得到的軌跡,可以分別檢測出道路面的異常事件,包括:
1)行人闖入事件
2)異常停車事件
3)逆行/倒車事件
4)占用應急車道事件
5)貨車占用超車道
6)非機動車闖入事件
7)擁堵級別告警
8)車型計數
9)平均車速統計

本文沒有源碼,思路僅供參考。
