基于FairMOT的车流量统计
1. 案例背景
截至2019年底,中國私家車保有量超過200萬輛的城市已經超過30個。公安部交通管理局最新統計數據顯示,我國汽車保有量達2.87億輛。交通擁堵、交通安全已經成為“超大城市”的通病。
應用飛槳PaddleDetection的目標跟蹤任務可以自動統計交通道路視頻的車流量,輔助分析路口、路段的交通狀況,為數字城市運營提供數據依據,讓每個人的出行都變得安全、高效,模型效果如下圖所示。
本案例提供從“模型選擇→模型優化→模型部署”的全流程指導,模型可以直接或經過少量數據微調后用于相關任務中,無需耗時耗力從頭訓練。
目標跟蹤任務的定義是給定視頻流,對多個感興趣的目標進行同時定位,并且維護個體的ID信息并記錄它們的軌跡。
目標跟蹤和目標檢測任務都能夠輸出檢測信息。對于目標檢測,輸出一段視頻流,輸出目標的類別和位置信息,但是視頻幀之間沒有關聯信息,因為目標檢測無法對幀與幀進行建模。目標跟蹤模型增加了一個目標個體的ID信息,利用目標跟蹤模型可以構建出幀與幀之間的聯系。兩個任務之間的差異點在于目標跟蹤需要持續追蹤目標運動狀態,目標檢測只需要檢測出目標在某個瞬間的狀態即可。
目標跟蹤的應用場景有流水線上零件計數、車輛行人計數與軌跡跟蹤、醫學分析等。
技術難點:
- 道路環境復雜,容易導致漏檢或重識別問題:道路及周邊環境復雜,存在車輛在行駛過程中被樹木、建筑物或其他車輛遮擋的情況,導致模型漏檢或同一輛車在不同時刻被識別成多輛車;
- 模型推理速度要求高:車輛行駛過程中速度快,實時車輛跟蹤對模型推理速度要求較高。
本案例是智慧交通的AI應用-車輛計數與軌跡跟蹤,單鏡頭多車輛追蹤計數。
1.1 目標跟蹤評估指標
MOTA
MOTA(跟蹤準確率),除了誤報、丟失目標、ID異常切換情況以外的正確預測樣本占所有樣本的比率,衡量了跟蹤器在檢測目標和保持軌跡時的性能,與目標位置的估計精度無關。
MOTP
MOTP(跟蹤精確率),默認檢測框重合度閾值下正確預測的目標與預測目標總數之比,衡量檢測器的定位精度。
IDF1-score
整體評價跟蹤器的好壞。
召回率
當IDF1-score最高時正確預測的目標數與真實目標數之比。
IDSW
IDSW衡量跟蹤器對于ID切換的程度。該值越低,模型魯棒性越好。
1.2 部署環境
本案例利用PaddleDetection套件實現。
通過下面的命令解壓PaddleDetection代碼:
%cd /home/aistudio/work/ ! unzip PaddleDetection-mot_feature_model.zip部署環境:
%cd /home/aistudio/work/PaddleDetection-mot_feature_model ! pip install -r requirements.txt ! python setup.py install ! pip install pycocotools1.3 PaddleDetection簡介
PaddleDetection飛槳目標檢測開發套件,旨在幫助開發者更快更好地完成檢測模型的組建、訓練、優化及部署等全開發流程。
PaddleDetection模塊化地實現了多種主流目標檢測算法,提供了豐富的數據增強策略、網絡模塊組件(如骨干網絡)、損失函數等,并集成了模型壓縮和跨平臺高性能部署能力。
2. 案例數據集
2.1 數據集介紹
本案例利用公開數據集BDD100K,該數據集由伯克利大學AI實驗室(BAIR)于2018年5月發布。BDD100K 數據集包含10萬段高清視頻,每個視頻約40秒,720p,30 fps。每個視頻的第10秒對關鍵幀進行采樣,得到10萬張圖片(圖片尺寸:1280*720 ),并進行標注。
BDD100K數據集標注如下:
- 道路目標邊界框:10萬張圖片。其中:訓練集7萬,測試集2萬,驗證集1萬
- 可行駛區域:10萬張圖片
- 車道線標記:10萬張圖片
- 全幀實例分割:1萬張圖片
Annotation包含了被標記對象的:
源圖像的URL、類別標簽、大小(起始坐標、結束坐標、寬度和高度)、截斷、遮擋和交通燈顏色等信息。
數據集中的GT框標簽共有10個類別,分別為:Bus、Light、Sign、Person、Bike、Truck、Motor、Car、Train、Rider。總共約有184萬個標定框,不同類型目標的數目統計如下圖所示:
其中汽車(Car)一類超過了100萬個樣本。
BDD100K數據集采集自6中不同的天氣,其中晴天樣本較多;采集的場景有6種,以城市街道為主;采集的時間有3個階段,其中白天和夜晚居多。
本實驗會用到BDD100K數據集中所有的四輪車的數據,并且所有的四輪車作為一個類別進行跟蹤。
本案例用到的數據是經過處理的,如果需要從源數據開始生成本案例數據,請參考PaddleDetection提供的BDD100K數據處理腳本。
2.2 數據準備
解壓數據集:
該過程大約需要1個多小時。
!unzip /home/aistudio/data/data110399/bdd100kmot_vehicle.zip -d /home/aistudio/work/3. 實現方案
當前主流的多目標追蹤(MOT)算法主要由兩部分組成:Detection+Embedding。Detection部分即針對視頻,檢測出每一幀中的潛在目標。Embedding部分則將檢出的目標分配和更新到已有的對應軌跡上(即ReID重識別任務)。根據這兩部分實現的不同,又可以劃分為SDE系列和JDE系列算法。
SDE(Separate Detection and Embedding)這類算法完全分離Detection和Embedding兩個環節,最具代表性的就是DeepSORT算法。這樣的設計可以使系統無差別的適配各類檢測器,可以針對兩個部分分別調優,但由于流程上是串聯的導致速度慢耗時較長,在構建實時MOT系統中面臨較大挑戰。
JDE(Joint Detection and Embedding)這類算法完是在一個共享神經網絡中同時學習Detection和Embedding,使用一個多任務學習的思路設置損失函數。代表性的算法有JDE和FairMOT。這樣的設計兼顧精度和速度,可以實現高精度的實時多目標跟蹤。
3.1 方案選擇
3.1.1 DeepSort
DeepSORT(Deep Cosine Metric Learning SORT) 擴展了原有的SORT(Simple Online and Realtime Tracking)算法,增加了一個CNN模型用于在檢測器限定的人體部分圖像中提取特征,在深度外觀描述的基礎上整合外觀信息,將檢出的目標分配和更新到已有的對應軌跡上即進行一個ReID重識別任務。DeepSORT所需的檢測框可以由任意一個檢測器來生成,然后讀入保存的檢測結果和視頻圖片即可進行跟蹤預測。
3.1.2 JDE
JDE(Joint Detection and Embedding)是在一個單一的共享神經網絡中同時學習目標檢測任務和embedding任務,并同時輸出檢測結果和對應的外觀embedding匹配的算法。JDE原論文是基于Anchor Base的YOLOv3檢測器新增加一個ReID分支學習embedding,訓練過程被構建為一個多任務聯合學習問題,兼顧精度和速度。
3.1.3 FairMOT
anchor-based的檢測框架中存在anchor和特征的不對齊問題,所以這方面不如anchor-free框架。FairMOT方法檢測選用了anchor-free的CenterNet算法,克服了Anchor-Based的檢測框架中anchor和特征不對齊問題,深淺層特征融合使得檢測和ReID任務各自獲得所需要的特征,并且使用低維度ReID特征,提出了一種由兩個同質分支組成的簡單baseline來預測像素級目標得分和ReID特征,實現了兩個任務之間的公平性,并獲得了更高水平的實時多目標跟蹤精度。
FairMOT屬于JDE(Jointly learns the Detector and Embedding model )的一種。實驗證明了現有的JDE方法存在一些不足,FairMOT根據這些不足進行了相關的改進。
綜合速度和精度,本案例選用FairMot模型實現車輛跟蹤計數。
3.2 模型訓練
修改數據集配置信息,在configs/mot/vehicle/fairmot_dla34_30e_1088x608_bdd100k_vehicle.yml文件中:
_BASE_: ['../fairmot/fairmot_dla34_30e_1088x608.yml' ]weights: output/fairmot_dla34_30e_1088x608_bdd100k_vehicle/model_final# for MOT training TrainDataset:!MOTDataSetdataset_dir: /home/aistudio/workimage_lists: ['bdd100kmot_vehicle.train']data_fields: ['image', 'gt_bbox', 'gt_class', 'gt_ide']# for MOT evaluation # If you want to change the MOT evaluation dataset, please modify 'data_root' EvalMOTDataset:!MOTImageFolderdataset_dir: /home/aistudio/work/bdd100kmot_vehicledata_root: images/valkeep_ori_im: False # set True if save visualization images or video, or used in DeepSORT# for MOT video inference TestMOTDataset:!MOTImageFolderdataset_dir: dataset/motkeep_ori_im: True # set True if save visualization images or video %cd /home/aistudio/work !mkdir image_lists !cp bdd100kmot_vehicle/bdd100kmot_vehicle.train image_lists/ /home/aistudio/work %cd /home/aistudio/work/PaddleDetection-mot_feature_model !python -u tools/train.py -c configs/mot/vehicle/fairmot_dla34_30e_1088x608_bdd100k_vehicle.yml斷點接著訓練添加:-r output/fairmot_dla34_30e_1088x608_bdd100k_vehicle/0
3.3 模型評估
本案例為大家提供了8GPUs,dla34,coco預訓練,lr=0.0005 bs=16*8卡,12epoch(8epoch降lr)的模型。該模型額外添加了bdd100k數據中四輪車檢測數據用于訓練,對應的數據集請參考:https://aistudio.baidu.com/aistudio/datasetdetail/112117。
其他的一些配置如下:
norm_type: sync_bn use_ema: true ema_delay: 0.9998TrainDataset:!MOTDataSet:dataset_dir: dataset/motimage_lists: ['bdd100kmot_vehicle.train','bdd100kdet_vehicle.train','bdd100kdet_vehicle.val']data_fields: ['image','gt_box','gt_class','gt_ide'] %cd ~/work/PaddleDetection-mot_feature_model ! python3.7 tools/eval_mot.py -c configs/mot/vehicle/fairmot_dla34_30e_1088x608_bdd100k_vehicle.yml \-o weights=/home/aistudio/work/fairmot_dla34_30e_1088x608_bdd100k_vehicle_sync_add_39.7.pdparams3.4 模型優化
可變形卷積
可變形卷積網絡(Deformable Convolution Network, DCN)顧名思義就是卷積的位置是可變形的,并非在傳統的N×NN × NN×N的網格上做卷積,這樣的好處就是更準確地提取到我們想要的特征(傳統的卷積僅僅只能提取到矩形框的特征)。本實驗在CenterNet head中加入了DCN,具體新的CenterNet head代碼見centernet_head_dcn.py。在head中加入dcn后,模型的MOTA從原來的34.9%上升為39.3%,增長了4.4%。
數據增強
Mixup 是最先提出的圖像混疊增廣方案,其原理簡單、方便實現,不僅在圖像分類上,在目標檢測上也取得了不錯的效果。為了便于實現,通常只對一個 batch 內的數據進行混疊。
Mixup原理公式為:
具體為在fairmot_reader_1088x608.yml文件中TrainReader的sample_transforms下加入- Mixup: {alpha: 1.5, beta: 1.5},在TrainReader中加入mixup_epoch: 25。
mixup_epoch (int): 在前mixup_epoch輪使用mixup增強操作;當該參數為-1時,該策略不會生效。默認為-1。
指數移動平均(EMA)
在深度學習中,經常會使用EMA(指數移動平均)這個方法對模型的參數做平均,以求提高測試指標并增加模型魯棒。指數移動平均(Exponential Moving Average)也叫權重移動平均(Weighted Moving Average),是一種給予近期數據更高權重的平均方法。
本實驗在baseline中加入dcn的基礎上加入了EMA,ema_decay=0.9998。模型MOTA為38.5%,比只加入dcn下降了0.8%。
具體為在fairmot_dla34.yml文件中添加
conf和tracked閾值修改
在fairmot_dla34.yml文件中JDETracker下有conf_thres和tracked_thresh兩個超參數,分別用于是檢測的閾值和跟蹤的閾值,默認均為0.4,將兩者都改成0.2后,在baseline基礎上加入dcn的模型,MOTA從39.3%降為35.7%,下降3.6%。
sync_bn
默認情況下,在使用多個GPU卡訓練模型的時候,Batch Normzlization都是非同步的(unsynchronized),即歸一化操作是基于每個GPU上的數據進行的,卡與卡之間不同步。在fairmot_dla34.yml文件中加入norm_type: sync_bn可實現多卡訓練時歸一化同步的功能。
baseline+dcn+ema基礎上加上sync_bn MOTA從38.5%提升到了38.6%,提升了0.1%。
dla60
baseline中centernet的backbone為dla34,將dla34換成更大的dla60后,之前的預訓練模型不能再用,在加入dcn的情況下,MOTA從39.3%降為22.5%,下降了16.8%。可見預訓練模型的重要性。
dla60具體代碼見dla.py文件,將class DLA(nn.Layer)中__init__函數輸入參數depth改為60。
hardnet85
將baseline中centernet的backbone換為hardnet85,預訓練模型在coco數據集上訓練而得。hardnet85網絡結構的配置文件見fairmot_hardnet85.yml。利用hardnet85訓練的配置文件見fairmot_hardnet85_30e_1088x608.yml。在bdd100k數據集上訓練模型的配置文件:fairmot_hardnet85_30e_1088x608_bdd100k_vehicle.yml。訓練8個epoch的mota可達到39.1%。
在上面的實驗基礎上加入sync_bn,8卡訓練epoch=12時,mota為39.8%。
繼續在上面的基礎上加入dcn,4卡訓練epoch=12是MOTA為39.2%。
BDD100K數據集中所有四輪車
上面實驗中訓練集和驗證集都只選用了BDD100K數據集中car,將BDD100K數據集中所有四輪車數據全都用于訓練和驗證后,coco預訓練,lr=0.0005 bs=16*8卡,12epoch(8epoch降lr),mota為39.6%。
3.5 模型測試
測試圖像,需要給定圖片所在的文件夾。
! unzip /home/aistudio/work/test_data/demo.zip -d /home/aistudio/work/test_data/ %cd /home/aistudio/work/PaddleDetection-mot_feature_model/ ! python3.7 tools/infer_mot.py -c configs/mot/vehicle/fairmot_dla34_30e_1088x608_bdd100k_vehicle.yml \ -o weights=/home/aistudio/work/fairmot_dla34_30e_1088x608_bdd100k_vehicle_sync_add_39.7.pdparams \ --image_dir=/home/aistudio/work/test_data/b251064f-8d92db81 \ --draw_threshold 0.2 --save_images測試視頻:
! python3.7 tools/infer_mot.py \ -c configs/mot/vehicle/fairmot_dla34_30e_1088x608_bdd100k_vehicle.yml \ -o weights=/home/aistudio/work/fairmot_dla34_30e_1088x608_bdd100k_vehicle_sync_add_39.7.pdparams \ --video_file=/home/aistudio/work/test_data/demo2.mp4 \ --save_videos --draw_threshold 0.1如果出現視頻幀為0的錯誤,嘗試安裝4.2.0.32版本的opencv-python。
3.6 模型導出
!python3.7 tools/export_model.py \ -c configs/mot/vehicle/fairmot_dla34_30e_1088x608_bdd100k_vehicle.yml \ -o weights=/home/aistudio/work/fairmot_dla34_30e_1088x608_bdd100k_vehicle_sync_add_39.7.pdparams總結
以上是生活随笔為你收集整理的基于FairMOT的车流量统计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1886)vue之电商管理系统
- 下一篇: RIA技术又起波澜