作者|Priya Dwivedi
編譯|Flin
來源|medium
介紹
美國和歐洲的許多城市現在都在謹慎地重新開放,人們被要求在外出時保持安全距離,但是人們照著做嗎?城市對人們的安全距離是否符合規則進行評估并采取相應的行動是很重要的,如果大多數人都遵守疫情期間的命令,那么就可以安全地開放更多的公共場合,
然而,如果出現了太多違規行為,那么關閉這些場合可能更安全,
這正是邁阿密海灘公園發生的事,公園于四月底開放,但由于太多人藐視與戴口罩和社交安全距離有關的規定,公園在一周內就關閉了,該市通過警員監控公園并發出警告,但人類監測可能不是一個切實可行的解決辦法,
我們如何使用人工智能和機器學習來檢測人們是否遵循社交距離規則?大多數城市已經在公共場所安裝了攝像頭,這些攝像頭正好可以用于此目的,
在這個博客中,我展示了如何使用行人跟蹤演算法來監控違規行為,我也在我的Github上開源了代碼,請參閱下面的模型,
- 我的Github
- https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation
社會距離違規檢測和計數:

在深度學習分析中,我們非常熱衷于使用資料科學和機器學習來解決問題,如果你需要資料科學幫助來應對這場危機,請聯系我們,原稿全文刊登在我們的網站上:
- https://deeplearninganalytics.org/using-ai-to-detect-social-distancing-violations/
行人跟蹤
資料
我們首先需要的是視頻資料來構建和測驗我們的模型,我使用了開放的MOT資料集(https://motchallenge.net/) ,
MOT資料集是計算機視覺行人跟蹤的標準資料集,許多最先進的演算法都是在這些資料上訓練和測驗的,這個資料集有許多開源的剪輯片段顯示在不同的相機角度下的人的運動,我選擇了一個固定在一個高度的攝像機的一個小片段,它顯示在德國的城鎮中心,
你可以從這里(http://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/project.html#datasets) 下載這個剪輯片段,請看下面這個剪輯片段中的一個幀,

使用深度排序進行行人跟蹤
在計算機視覺中,行人跟蹤是指給一個人一個ID,在他出現的每一幀中檢測出他,并將他的ID轉發出去,一旦他離開了這個ID,我們就不會重復使用他的ID,如果一個新的人進入,他就會被一個新的ID初始化,
跟蹤往往是一項困難的任務,因為人們可能看起來很相似,導致模型切換ID,人們可能會被另一個人或物體擋住,當他們出現時會被分配一個新的ID,近年來,深度學習技術在多目標跟蹤基準(https://motchallenge.net/results/MOT16/) 上的性能有了顯著提高,目前多目標跟蹤技術的精度是62.0
你可以在我的博客中閱讀更多關于深度學習行人跟蹤的內容,
- https://towardsdatascience.com/people-tracking-using-deep-learning-5c90d43774be?gi=7af825362a53
為什么我們需要進行行人跟蹤?
原因是我們想找出違反社會距離規則的人的數量,在沒有跟蹤器的情況下,如果兩個人走得很近,那么他們在每一幀中都會被視為違規,但是如果我們使用跟蹤器,那么我們可以將其視為一次違規事件,
在這個博客中,我使用了深度排序模型(https://arxiv.org/abs/1703.07402) 進行跟蹤,
這個模型的代碼是作者在他們的GitHub(https://github.com/nwojke/deep_sort) 上公開發布的,
深度排序模型使用人的位置和外觀來跟蹤,位置資訊通過Kalman濾波器捕獲,Kalman濾波器預測盒子的下一個可能位置,而外觀資訊是使用生成嵌入的深度學習模型生成的,
若要在此視頻上運行代碼,需要將原始影像和包含所有邊界框位置的檢測檔案傳遞給跟蹤器,然后,跟蹤器使用這些資訊為每幀中的每個人分配一個ID,deep sort博客上詳細解釋了這一點,請參見下面對此剪輯執行跟蹤的結果,正如你所看到的,每個人都被分配了一個ID,這個ID被成功地轉入下一幀,跟蹤器還輸出一個csv,其中包含軌跡的詳細資訊,
我已經在Github上(https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation) 共享了這個檔案,我們將在代碼的下一部分使用它,
使用深度排序模型進行行人跟蹤:

發現違反社交距離的行為
為了檢測社會距離違規行為,我們在框架中選取每個軌道,并測量其與框架中其他軌道的距離,每個軌跡基本上都是一個帶ID的邊界框,因此可以使用它們之間的歐氏距離將邊界框與另一個邊界框進行比較,代碼如下所示,
def distance_boxes (boxA, boxB):
import math
center_boxA = [(boxA[0] + boxA[2])/ 2.0, (boxA[1] + boxA[3])/2.0]
center_boxB = [(boxB[0] + boxB[2])/ 2.0, (boxB[1] + boxB[3])/2.0]
pixel_distance = math.sqrt( ((center_boxA[0]-center_boxB[0])**2)+((center_boxA[1]-center_boxB[1])**2) )
return pixel_distance
現在我們開始建模,其代碼在下面共享,這與我的Github中的代碼相同,
- https://github.com/priya-dwivedi/Deep-Learning/blob/master/detecting_social_distancing_violation/Social Distancing Violation.ipynb

對每個幀運行的主要步驟是:
-
比較每個軌跡和其他軌跡之間的像素距離
-
如果距離小于接近距離閾值,則兩人距離太近,因此,將 safe=1 放在兩個邊界框的資料框中,變數“safe”稍后用于可視化
-
我們還想計算每個ID的總違規次數,這被計算為它們太接近的其他ID,因此,只要距離小于接近距離閾值,我們都會在字典中維護一個過于接近的軌跡串列
代碼運行得很慢,因為它需要將每個軌道與其他軌道進行比較,并在600幀以上執行此操作,這些計算中有許多是重復的,因為它將分別測量軌道1與軌道2之間的距離,然后軌道2與軌道1之間的距離,
為了節省時間,我將兩次計算的結果存盤在一次傳遞中,因此,當比較track1和track 2時,結果將寫入資料幀中各自的行中,這樣可以將運行時間減少一半,
我發現,像素距離為70對于檢測那些“似乎”走得太近的人來說是相當合理的,代碼的可視化模塊會在框太近時亮顯紅色框,并顯示每個框的違規計數,帶有結果的示例框架如下所示,

實際部署
如果要部署它,需要考慮一些事情,
-
攝像機需要注冊,這樣我們就可以正確地將像素距離映射到現實世界中的距離
-
如果存在連續的攝像機陣列,那么我們可能需要添加行人重識別功能,以幫助跟蹤器在攝像機之間轉發ID和違規計數,在過去的幾年里,人們對行人重識別(https://arxiv.org/abs/2001.04193) 進行了大量的研究
-
這里的代碼是輕量級的,可以在與攝像機系結的Jetson TX2(https://developer.nvidia.com/embedded/jetson-tx2) 之類的嵌入式設備上運行,
結論
跟蹤是計算機視覺中的一個重要問題,有著廣泛的應用,其中一個應用程式就是檢測社交距離違規行為,這可以幫助城市評估公共衛生風險,并在較安全的情況下重新開放公共場合,
我希望你能嘗試一下代碼,并嘗試一下在更改接近標準距離時會發生什么,
參考文獻
-
MOT挑戰
- https://motchallenge.net/
-
深度排序演算法
- https://arxiv.org/abs/1703.07402
原文鏈接:https://medium.com/swlh/using-ai-to-detect-social-distancing-violations-4707301844be
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方檔案:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/149597.html
標籤:其他
上一篇:Python和TensorFlow2實作ELMO(Embedding From Language Model)模型,并對原始碼做了一些改進
