最近選舉到了,不管是造勢還是遊行場合,台上的主持人為了炒熱氣氛,總是會喊出誇張的人數來滿足與會人士的信心,甚至會質疑其它個人(如某椅子精算師)、媒體或警方以較科學(合理)的方式所計算的結果,造成社會上更多的對立,難道在這個充滿人工智慧的時代沒有更科學的方式來進行計算嗎?有的,今年初有一位網友PULKIT SHARMA寫了一篇「人群計數(Crowd Counting)」的文章幫大家解決了這個難題,不僅給出充份的說明,還提供相關測試數據及模型,有興趣的朋友可以追一下這篇部落格文章「It’s a Record-Breaking Crowd! A Must-Read Tutorial to Build your First Crowd Counting Model using Deep Learning」
【尬場拚人數】罷韓50萬vs.挺韓35萬 雙方均超過「樓地板」20萬人(資料來源:上報) |
傳統上人群計數(Crowd Counting)或人群密度(Crowd Desity Estimation)估測主要用於監看大型活動以確保參加群眾的安全或方便調派資源評估。類似的技術亦可用於高密度群體(如南極企鵝群、生物細胞數量等)的計算以統計族群活動,以便了解族群的變化。傳統警方最簡單會以面積密度法進行估測,每平方公尺從1~7人不等,但此類方法會受人員流動、密度不均等問題干擾,所以只能得到很粗略的人數。另外也有採用人流法方式計算,在特定路口或天橋上計算通過人數,同樣地無法保證所有遊行群眾都從指定路線通過,且可能受攜帶物件(如雨傘、背包等)影響,所以得到的數值也僅供參考。不過不管是以上那一種方法,用真人計數基本上都是不太可能的,所以此時電腦視覺及人工智慧(AI)就派上用場了。
一般想到用AI來計算人群數量,第一個大概會想到用人臉計數,但事情總是沒有這麼簡單,因為在人群計數常會遇到下面幾個問題不易克服。
- 人群過於密集,人臉會有嚴重遮蔽(人遮人、物遮人)現象。
- 前方人群人臉清楚尺寸適中,後方相當模糊且尺寸很小。
- 不是所有人臉都朝前方,可能背對或側向、低頭等非正面。
- 若採高視角,人頭可能有髮色、飾物、帽子、背包等影響。
- 拍攝距離過遠,幾乎分辨不出人臉特徵。
- 人群持續運動,並非所有人臉都是清晰。
PULKIT SHARMA這篇部落格文主要受「CSRNet : Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes」啟發並進行實做測試也有給出範例程式。文中點出通常有四大類方法可達成人群計數,包括「基於檢測(Detection-based)」、「基於回歸(Regression-based)」、「基於密度估測(Density estimation-based)」、「基於卷積神經網路(CNN-based)」,而此篇文章把重點放在基於CNN方法的CSRNet上。而CSRNet主要使用VGG-16作為前端,依其強大的遷移學習能力,VGG的輸出大小是原始輸入大小的1/5。另外CSRNet還在後端使用膨脹的捲積層,更進一步數學原理可直接參考其部落格文章,這裡就不謷述。
文中所引用用的數據集主要來自ShanghaiTech Dataset,其中包含1198張帶註釋的圖像,總計330,165人。部落格文中提供的連結已經失效,經簡單查找在KAGGLE上有找到其替代資料集,可參考下列網址。
CVPR2016 paper, Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
Dataset appeared in CVPR 2016 paper MCNN (166MB)
https://www.kaggle.com/tthien/shanghaitech
ShanghaiTech With People Density Map (3GB)
https://www.kaggle.com/tthien/shanghaitech-with-people-density-map
這篇文章有給出完整範例程式碼及實驗結果,可自行參考其部落格文章,相關結果影像如下所示。
資料來源:PULKIT SHARMA |
另外好友CH.Tseng最近也寫了一篇「CrowdHuman Dataset 介紹」也非常精采,這篇主要是用於較平行視角及略高一些視角的人群計數,有興趣的朋友也可多多參考。
沒有留言:
張貼留言