日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

车流量统计

發布時間:2023/12/10 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 车流量统计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

車流量統計(1)

  • 1.多目標追蹤(MOT)
  • 輔助功能
  • 卡爾曼濾波器
  • 卡爾曼濾波器實踐

使用yolov3模型進行目標檢測,然后使用SORT算法進行目標追蹤,使用卡爾曼濾波器進行目標位置預測,并利用匈牙利算法對比目標的相似度,完成車輛目標追蹤,利用虛擬線圈的思想實現車輛目標的計數,完成車流量的統計。

1.多目標追蹤(MOT)

在一段視頻中同時跟蹤多個目標。多目標跟蹤可以看作多變量估計問題。
初始化方法:常見初始化方法DBT和DFT。
DBT:先檢測目標,然會將目標關聯進入跟蹤軌跡中。
DFT:單目標跟蹤領域的常見初始化方法,即每當新目標出現時,人為告訴算法新目標的位置。
處理模式:online,offline
online:對視頻幀逐幀進行處理,當前幀的跟蹤僅利用過去的信息。
offline:會利用前后視頻幀的信息對當前幀進行目標跟蹤,只適用于視頻。
運動模型
為了簡化多目標跟蹤的難度,我們引入運動模型類簡化求解過程,運動模型捕捉目標的動態行為,它估計目標在未來幀中的潛在位置,從而減少搜索空間。
對于車輛的運動法制可以分為線性和非線性運動。
跟蹤方法:基于Kalman和KM算法的后端優化算法
這類算法能達到實時性,但依賴于檢測算法效果要好(輸出最終結果的好壞依賴于較強的檢測算法,而基于卡爾曼加匈牙利匹配的準總算法作用在于能夠輸出檢測目標的id,其次能保證追蹤算法的實時性),這樣追蹤效果會好,id切換少。代表算法是SORT。
SORT是一種實用的多目標跟蹤算法,引入線性速度模型與卡爾曼濾波來進行位置預測,在無合適匹配檢測框的情況下,使用運動模型來與預測物體的位置。
匈牙利算法是一種尋找二分圖的最大匹配的算法,在多目標跟蹤問題中可以簡單理解為尋找前后兩幀的若干目標的匹配最優解的一種算法。而卡爾曼濾波可以看作是一種運動模型,用于對目標的軌跡進行預測,并且使用確信度較高的跟蹤結果進行預測結果的修正。
先實現目標檢測網絡,檢測的輸出結果主要是將檢測框的位置信息輸入到多目標追蹤算法中。

輔助功能

交并比
IOU是目標檢測中使用的一個概念是產生的候選框與原標記框的交疊率。
在多目標跟蹤中,用來判別跟蹤框核目標檢測框之間的相似度。

def iou(bb_test,bb_gt):xx1=np.maximum(bb_test[0],bb_gt[0])yy1=np.maximum(bb_test[1],bb_gt[1])xx2=np.minimum(bb_test[2],bb_gt[2])yy2=np.minimum(bb_test[3],bb_gt[3])w=np.maximum(0.,xx2-xx1)h=np.maximum(0,yy2-yy1)wh=w*ho=wh/((bb_test[2]-bb_test[0])*(bb_test[3]-bb_test[1])+(bb_gt[2]-bb_gt[0])*(bb_gt[3]-bb_gt[1])-wh)return o

候選框的表現形式
一種是左上角坐標核右下角坐標
[x,y,s,r]表示中心點坐標,s是面積尺度,r是縱橫比,卡爾曼濾波器中進行運動估計是使用該方式。

卡爾曼濾波器

濾波器根據上一個時刻的值來估計當前時刻的狀態,得到k時刻的先驗估計值,然后使用當前時刻的測量值來更正這個估計值得到當前狀態的估計值。=
我們將卡爾曼濾波看做一種運動模型==,用來對目標的位置進行預測,并且利用預測結果對跟蹤的目標進行修正,屬于自動控制理論中的一種方法。
如果目標運動速度比較快,或者進行隔幀檢測時,在后續幀中,目標A已運動到前一幀B所在位置,這時再進行關聯就會得到錯誤的結果。
如何避免出現這種關聯錯誤,可以在進行目標關聯之前,對目標在后續幀中出現的位置進行預測,然后與預測結果進行對比關聯。
我們在對比關聯之前,先預測出A和B在下一幀中的位置,然后再使用實際檢測位置與預測的位置進行對比關聯,只要預測足夠精確,幾乎不會出現由于速度太快而存在的誤差。
卡爾曼濾波就可以用來預測目標在后續幀中出現的位置
卡爾曼濾波器最大的優點是采用遞歸的方法來解決線性濾波問題,它只需要當前的測量值和前一個周期的預測值就能進行狀態估計。這種遞歸方法不需要大量的存儲空間,每一步的計算量小,計算步驟清晰,非常適合計算機處理。
原理介紹:
無論計算還是檢測都會存在一定的誤差,所以我們只能認為當前狀態是器真實狀態的一個最優估計。設當前狀態服從一個高斯分布。高斯分布的中心。因為有兩個變量,所以可以用一個協方差矩陣來表示數據之間的相關性和離散程度。
下一個時刻的狀態,Fk為狀態轉移矩陣。

系統的不確定性和相關性可以通過協方差矩陣描述,那么根據當前協方差矩陣預測下一時刻的協方差矩陣。

增加小車的內部控制

B狀態控制矩陣,u為狀態控制向量,前者表示加速減速如何改變小車的狀態,后者表示控制的力度和大小。
考慮系統的外部影響


當前狀態和觀測狀態之間的關系:通過預測值得到觀測值的預測。

卡爾曼濾波需要做的最重要的核心的事情就是融合預測和觀測的結果,充分利用兩者的不確定性來得到更加準確的估計。

通過預測和觀測值的高斯分布的乘積得到的即是卡爾曼濾波的最優估計。

實際中的卡爾曼濾波:
預測階段:

更新階段:

卡爾曼濾波器實踐

初始化:預先設定狀態變量dim_x和觀測變量維度dim_z,協方差矩陣P、運動形式和觀測矩陣H等,一般各個協方差矩陣都會初始化為單位矩陣,根據特定的場景需要相應的設置。
預測階段:為了保證通用性引入以往系數,其作用在于調節過往信息的依賴程度,遺忘系數越大對歷史信息的依賴越小。
更新階段:
小車案例:

import matplotlib.pyplot as plt import seaborn as sns import numpy as np from filterpy.kalman import KalmanFilter#小車運動數據生成假設速度為1的勻速運動 #生成1000個位置,是小車的實際位置 z=np.linspace(1,1000,1000) #添加噪聲 mu,sigma=0,1 noise=np.random.normal(mu,sigma,1000) #小車的觀測值 z_noise=z+noise#參數初始化 my_filter=KalmanFilter(dim_x=2,dim_z=1)#狀態向量以及測量值 #定義卡爾曼濾波中所需的參數 my_filter.x=np.array([[0.],[0.]]) #這個初始值不重要,在利用觀測值進行更新迭代后會接近真實值#協方差矩陣,假設速度和位置沒關系 my_filter.P=np.array([[1.,0.],[1,0.]]) #狀態轉移矩陣 my_filter.F=np.array([[1.,1.],[0.,1.]])#狀態轉移協方差矩陣也就是外界噪聲 my_filter.Q=np.array([[0.0001,0.],[0.,0.0001]])#觀測矩陣 my_filter.H=np.array([[1,0]]) #測量噪聲,方差為1 my_filter.R=1#卡爾曼濾波進行預測 z_new_list=[] v_new_list=[] for k in range(len(z_noise)):#預測過程my_filter.predict()#利用觀測值進行更新my_filter.update(z_noise[k])x=my_filter.x#收集卡爾曼濾波后的速度和位置信息z_new_list.append(x[0][0])v_new_list.append(x[1][0])# 位移的偏差 dif_list = [] for k in range(len(z)):dif_list.append(z_new_list[k]-z[k]) # 速度的偏差 v_dif_list = [] for k in range(len(z)):v_dif_list.append(v_new_list[k]-1) plt.figure(figsize=(20,9)) plt.subplot(1,2,1) plt.xlim(-50,1050) plt.ylim(-3.0,3.0) plt.scatter(range(len(z)),dif_list,color ='b',label = "位置偏差") plt.scatter(range(len(z)),v_dif_list,color ='y',label = "速度偏差") plt.legend() plt.show()

主要初始化參數:初始的狀態變量,F,P狀態轉移矩陣,協方差矩陣,噪聲和觀測值的協方差矩陣。

總結

以上是生活随笔為你收集整理的车流量统计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。