辛奇峰
(上海浦江橋隧運營管理有限公司,上海200433)
隨著城市交通的不斷發展,橋梁、隧道、地下通道等新建交通設施先后投入使用。在集約化、區域化管理模式的背景下,新建設施的監控系統陸續接入原有老設施監控中心,進行集中監控。而新老設備隔代,數據格式、接口模式參差不齊,這給大型城市交通運營企業推行智能運維帶來了困難。
根據目前上海隧道綜合監控系統的設計,視頻檢測功能以半人工方式進行工作,即由每條獨立設施監控中心的視頻檢測系統通過視頻檢測,對警示的交通事件進行人工確認,并作相應的操作。但是隨著外場攝像機不斷增加,如某金融中心區域的隧道群集中監控,某郊環長距離橋隧的監控,每天產生的交通事件顯著增加,對監控人員確認及操作帶來了極大的壓力。
目前城市公路隧道使用的視頻檢測系統提供了通信接口來實現數據通信。以常用的CITILOG 系統為列,該系統提供的MediaTCP 接口可以使運行于任意平臺上的TCP 客戶端組與視頻檢測系統的流媒體服務器建立通信聯系。
接口的信息類型:
1.2.1 以A 開頭的消息,是指從服務端到TCP 客戶端(包括客戶端反饋)的消息。
1.2.2 以B 開頭的消息,是指從客戶端到服務端(包括服務端反饋)的消息。
視頻檢測服務器的端口是設置常規為33000 并且可以在運行過程中修改。建立連接之后,兩個模塊之間的通過ANSI 字符串進行信息交換。所有信息類(AID)事件會自動傳遞給客戶端。
通過上述通道可以獲取視頻檢測系統檢測到的異常停車、車輛逆行、行人、拋灑物、交通事故、車輛火情等交通事件報文信息。在日常人工二次確認后,便可以標記為訓練學習網絡的數據集。
TCP 客戶端通過建立與視頻檢測流媒體服務器的通信聯系,將日常人工確認的交通事件數據通過數據庫接口就可以自動獲取識別的交通事件、車輛圖像并自定義規范后寫入數據庫,在數據庫端獲取對應的圖像、短視頻數據。供深度學習網絡模型訓練、測試。

圖2 數據采集流程圖
隧道視頻檢測系統采集來的數據設置為自定義數據集。
1.4.1 訓練圖片標注
當采集完成原始圖片后,最關鍵的是對數據進行標框(bounding box)。使用LabelImg 工具對每一張圖片根據事件字典的事件,對目標進行標框。
1.4.2 自制數據集文件的設置
標注完后,建立如下目錄,目錄要求除了images/labels 不同外,其它文件夾名必須相同,程序會根據images 的路徑推算出labels 的路徑。

圖3 數據集目錄結構
到此數據集準備完畢,在data/coco128.yaml 文件里修改參數,將其中的文件讀取路徑、類別數、類別列表設置為自己的數據集要求即可。
2.1.1 測試操作系統為windows 10 家庭版。
2.1.2 支持Cuda 的Nvidia 顯卡。
2.1.3 Python 3.7 anaconda(開源的Python 發行版本)。
2.1.4 Cuda 10.1(Cuda 是NVIDIA 公司推出的運算平臺)。
2.1.5 Pytorch1.5.1(是開源的機器學習庫,用于自然語言處理等應用程序)。
2.1.6 Opencv(可視化工具,可現實處理結果)。
YOLO v5 神經網絡結構由3 大主要模塊組成,它們分別是:
(1)Backbone:在不同圖像細粒度上聚合并形成圖像特征的卷積神經網絡。
(2)Neck:一系列混合和組合圖像特征的網絡層,并將圖像特征傳遞到預測層。
(3)Head:對圖像特征進行預測,生成邊界框和并預測類別(Head)。
以下從神經網絡構架上分析每個組件的組成、原理及功能如圖4 所示。

圖4 YOLOv5 網絡框架圖
2.2.1 輸入端(Input)
主要功能是數據輸入與數據增強,常用有608*608、640*640等尺寸。比如對800*600 的圖像進行縮放,首先進行自適應圖片縮放,在常用的目標檢測算法中不同的圖片長寬都不相同;因此常用的方式是將原始圖片統一縮放到一個標準尺寸,再送入檢測網絡中。每次讀取四張圖片,分別對四張圖片進行翻轉、縮放、色域變化等,并且按照四個方向放置,進行圖片的組合和框的組合。經實踐,這樣設置對于小目標的檢測效果較好,適合隧道監控工況下的圖像輸入。
2.2.2 主干網絡(BackBone)
主干網絡主要包括了Focus 模塊、特征提取網絡(CSPDarknet53)以及對應的激活函數。
Focus 模塊在是圖片進入backbone 前,對圖片進行切片操作,以yolov5s 模型為例,原始的640*640 *3 的圖像輸入Focus結構,采用切片操作,先變成320*320*12 的特征圖,再經過一次32 個卷積核的卷積操作,最終變成320*320*32 的特征圖。切片操作如圖5 所示。

圖5 切片操作示意圖
這樣可以一定程度上減少了模型的計算量,并且不會帶來信息丟失,為后續的特征提取保留了更完整的圖片下采樣信息。
特征提取是深度學習在計算機視覺學科中的重要思想方法。所謂特征就是能夠代表實體某種屬性,從神經科學的角度來說,多層感知神經網絡的提取特征的方式是符合人類生物神經網絡的構成的。所以YOLO 神經網絡也是仿照了人類視覺神經的識別特征的方法。特征提取網絡是預訓練的CNN(卷積神經網絡),YOLO v5 集成了Darknet 構架CSPDarknet53 特征提取模塊。
激活函數是為了提高網絡的學習能力,提升梯度的傳遞效率。平滑的激活函數允許更好的信息深入神經網絡,從而得到更好的準確性和泛化,常用的函數有ReLU,softplus、Mish。
2.2.3 Neck 模塊
Neck 模塊是放在Backbone 和Head 之間的,是為了更好的利用Backbone 提取的特征目標檢測網絡在主干網絡和最后的輸出層之間插入FPN+PAN 結構。FPN 是自頂向下的,將高層特征通過上采樣和低層特征做融合得到進行預測的特征圖。在FPN層的后面還添加了一個自底向上的特征金字塔。這樣結合操作,FPN 層自頂向下傳達強語義特征,而特征金字塔則自底向上傳達強定位特征,兩兩聯手,從不同的主干層對不同的檢測層進行參數聚合,通過FPN+PAN 結構進行融合如圖6 所示。yolov5l.yaml 來修改的訓練方式包含兩種:一種是from scratch(從零開始訓練),一種是使用下載好的預訓練模型權重。對應的參數命令:

圖6 FPN+PAN 結構圖
--cfg ./models/YOLOv5l.yaml --weights
--cfg ./models/YOLOv5l.yaml --weights ./YOLOv5l.pt
接下來在Pycharm 中輸入以下命令進行訓練模型
python train.py --img 640 --batch 16 --epochs 5 --data./data/coco128.yaml --cfg ./models/YOLOv5l.yaml --weights ./YOLOv5l.pt
這是使用YOLOv5l.pt 預訓練模型訓練了5 個epochs,一個epoch 等于使用訓練集中的全部樣本訓練一次,其中設置的圖片大小為640*640 是根據內存情況設置的。batch(size)設為16,更多參數在train.py 文件中有解釋,如下所示,如有需要可以設置。其中最多的實驗訓練了300 個epoch。
2.2.4 Head 模塊
Head 組件是獲取網絡輸出內容的網絡,利用之前提取的特征,Head 模塊利用這些特征,并做出預測。輸出層的錨框機制是訓練時的損失函數,以及預測框篩選的修改。自適應錨框計算在YOLO 算法中,針對不同的數據集,都會有初始設定長寬的錨框。所謂錨框,就是目標檢測算法中,以錨點為中心,由算法預定義的多個不同長寬比的先驗框。在此不作配置,以默認設置運行。在網絡訓練中,網絡在初始錨框的基礎上輸出預測框,進而和真實框進行比對,計算兩者差距,再反向更新,迭代網絡參數。
在YOLOv5 官方Github(開源代碼網絡共享社區)頁面下載網絡源代碼,YOLO v5 根據模型的訓練規模與算力配置不同,設有從小到大4 個模型:v5s、v5m、v5l、v5x,如圖7 所示是這些不同規模的模型與EfficientDet 模型的性能對比圖。aml 配置文件設置好并且文件數據組織完畢,選擇效率較高的v5l 模型進行訓練。
將數據集分給3 類即:訓練集、驗證集與測試集。./models/

圖7 YOLOv5 模型效率圖

圖8 模型訓練過程
訓練完成后保存模型并繪制訓練曲線,訓練過程中的評價指標均被保存在了圖形化顯示工具(Tensorboard)和日志文件中,包括metric 和train 的數據折線圖。
Metrics 是訓練過程中完成各項數據的監控表,包括:召回率(Recall)、精確率(Precision)、正確率指標(mAP)。mAP 即平均精度均值(Mean Average Precision),是重要的訓練指標。作為目標檢測中衡量檢測精度的指標。精度越高,召回率越低。
如圖9 所示:線條分別代表:Train from pre-weight(預訓練權重模型)和Train from scatch(從零開始訓練的模型)。
loss 是計算權重大的真實有物體的格子位置(坐標)的損失。所有框都計算判別概率損失,無物體的格子權重小一點,各自計算類別損失。
結果分析:
預訓練權重模型和從零開始訓練的模型的最高mAP_0.5 均能達到46.5%。
預訓練權重模型比從零開始訓練的模型能更快收斂,但是在250epochs 左右兩者已經達到一致。總的來說預訓練權重模型能一定程度上減少訓練時間開銷。

圖9 訓練曲線

圖10 模型應用于事件檢測

圖11 隧道口云臺攝像機視頻流檢測
在城市越江隧道中,雖然設計、安裝了傳統算法的視頻檢測設備,針對某一物體如車輛、行人、逆行等交通事件,有檢測功能。但一般都是在光線均勻充足,無變化、無遮擋的環境中取得。然而實際情況在通行條件較差的隧道中,光過度、光格柵、車輛遠光燈等額外環境因素干擾,使得算法識別正確率會明顯下降,識別效果不佳。各個物體(大、小型車輛)之間會出現光線遮擋的現象,這就更多地增加了識別的難度。圖10 是在隧道環境下訓練完成的YOLOv5 模型檢測效果。
分別實現了車輛逆行檢測、非機動車、行人的交通事件檢測及檢測車流量功能。如圖10 所示,在隧道環境下訓練完成的模型克服了遠光燈、照明不均勻產生的地面光斑、光格柵等環境因素,識別效率高。
隨著隧道運營數據的不斷積累,深度學習網絡模型可以隨著環境的變化而學習環境變化,具有很強的泛化性能。結合YOLOv5 創新的模型結構,加強的特征融合能力,經驗證在不同的光照強度或者遮擋的環境中,均能表現出良好的識別效果。這是對傳統視頻檢測算法短板的良好補強。
目前隧道中使用的交通事件檢測系統,都只能應用在固定式攝像機上。這些系統使用的識別算法大多是如幀差法、光流法、邊緣檢測法以及背景法。其中以背景法居多。采用背景法技術進行目標檢測,首先,需要背景建模。但安裝在隧道進出口的可遙控轉動的云臺攝像機無法使用該算法建模,造成了事件檢測的盲點。
動態場景的目標識別,是YOLO 神經網絡模型的重要應用場景。所以將訓練好的權重模型設置好視頻流的鏈接,便可應用在隧道的進出口云臺監控上,實現實時監控,并將監控結果存儲。Pycharm 編譯設置及夜間檢測效果如圖11 所示。

圖12 安全區域及安全帽檢測

表1 模型使用前后情況對比表
養護施工是保障設施設備安全運營的重要環節。而施工作業安全是重中之重。采集相關隧道工作環境下工作的安全帽圖像數據集,訓練模型,并應用于實際施工安全檢測。施工前將YOLO 深度學習神經網絡模型部署在夜間施工區段,進行實時目標檢測,輔助安全管理。也可在5G 網絡的支持下,接入實時行車記錄裝置或視頻執法儀之類的視頻采集端,對實時接入的視頻流進行安全檢測,提高安全管理效率。安全區域及安全帽檢測如圖12 所示。
筆者對上海某條流量較大的越江隧道2 處監控點攝像機部署YOLO 網絡檢測模型進行測試,系統持續運行24 小時。YOLO 目標檢測功能投入使用之前,對交通事件的判定主要依靠人工。以某金融中心區域隧道中央監控室為例,共有2 位監控員加1 位值班長每天12 小時4 班輪轉人工監控大屏,及事件信息記錄上報等工作,工作量大、強度高、效率低。
目標檢測神經網絡模型使用前后的對比情況見表1。
由表中可以看出,在使用交通事件檢測功能后,無論從交通事件的檢測能力,還是交通數據的采集能力都比使用前有明顯躍升。特別是檢測率,系統通過24 小時不間斷自動識別監控視頻,比系統使用前效率有極大提高。
結論:工作量是一個重要指標,表中顯示了系統使用后每日交通事件檢測量提高了約3 倍,而完成這部分工作只需要1 人,下降了3 倍;每日單攝像機檢測峰值也提高了1 個數量級。
在新基建背景下,一改常規運營思維。以大數據為基礎對運維過程進行數字化改造,形成低成本高效率的運營方式。越江橋隧是城市交通主干道,重要流量節點,通過對隧道管理系統的智能化改造,形成一個自我管理的全壽命運維體系,做到每一處工作細節均可得到反饋的實時交互,提高隧道管理的技術含量。突破核心技術壁壘,解決隧道運維過程中的關鍵難題,保障了城市交通安全暢通,推動行業科技進步,實現經濟效益與社會效益的雙贏。