基於開源模型搭建實時人臉識別系統(五):人臉跟蹤

CoderInCV發表於2023-11-01

繼續填坑,之前已經講了人臉檢測,人臉檢測是定位出畫面中人臉的位置,理論上把檢測到的人臉進行提特徵就能做人臉識別了,不過直接這樣做是有缺陷,一是存在很大的資源浪費,畢竟同一個人出現在畫面,我們實際上應該只需要做一次識別就知道他的身份(理想情況下),而不需要每一幀都去做;二是如果對每一幀都進行獨立的檢測->識別,就會出現頻繁的事件,不利於業務的開發。當然,還有一些其他需要使得我們需要一種方式在不做識別的情況下,就知道當前幀的目標和前面幀的目標是同一個目標,比如我們要對一個門口進行進出的計數,這個領域就是目標跟蹤。
多目標跟蹤是對於給定的影片序列,找到每一幀影像中的運動 目標,在連續影片幀中對同一個目標分配相同的身份標識號(ID), 從而形成不同物體各自的運動軌跡。這些物體可以是任意的,如行 人、車輛、運動員、動物以及足球等無生命物體,人臉跟蹤屬於目標跟蹤。

基於機器學習的目標跟蹤

與其他領域類似,在深度學習爆發前,也有很多基於機器學習的目標跟蹤方法,一般是依據目標的顏色分佈資訊,如Meanshift,或相鄰幀的畫素匹配,如光流法。感興趣可以自行搜尋。

基於目標檢測的跟蹤(tracking by detection)

這類方法對每一幀的檢測結果與歷史跟蹤結果進行匹配(對於第一次出現的目標分配新的ID),最簡單的一種方式是用目標檢測框與歷史跟蹤框的IOU來評價目標的匹配度,使用貪心演算法進行兩兩匹配,將IOU超過閾值的且最匹配的檢測框作為最新的跟蹤框,若有檢測框未匹配上,則新建ID, 若有跟蹤框未匹配上,則刪除ID。匹配方法還有匈牙利匹配等。
除了直接使用檢測框更新跟蹤框外,還有與卡爾曼濾波相結合更新跟蹤框的方式,代表性的方式是SORT(Simple Object Realtime Tracking)。

基於目標迴歸的跟蹤

基於目標檢測的跟蹤比較依賴目標檢測框的精度和速度,且實際上沒有利用上歷史資訊來幫助檢測。基於目標迴歸的方法則利用歷史跟蹤框,迴歸該目標在當前幀預測目標的位置。比如人臉中,有些方法利用MTCNN的Onet去迴歸人臉位置,這種方法一般要比每幀檢測要快(單目標下)。

基於深度特徵的目標跟蹤

在發生目標遮擋時,完全基於框匹配或傳統機器學習的方法容易出現目標丟失,從而目標ID發生變化。基於深度特徵的目標跟蹤透過提取目標的特徵然後匹配的方式將目標重新關聯上,代表方法是DeepSort, 這種方式需要提取目標特徵,計算量較高。

基於端到端的目標跟蹤

上面的方法基本都是分步驟的實現目標跟蹤:目標檢測/迴歸->框匹配,還有一種方式是端到端的方式,不分多個步驟,對硬體要求高,筆者也沒有了解過。

本系統的選擇

考慮到CPU實時需要,選擇基於目標檢測的跟蹤, 具體而言選擇sort方法。

專案原始碼

https://mbd.pub/o/bread/mbd-ZJyTmZty

相關文章