城市之眼視覺計算技術
雲棲TechDay40期,iDST視覺計算組算法專家亞連帶來城市之眼視覺技術技術的演講。本文著重講解了城市之眼,立足於收集、分析、索引整個城市相關的視覺數據,包括人、非機動車、車的重認證,還有全局特征和局部特征抓取,並列舉了真實數據實例,城市之眼是具有實時、全局的感知、分析、處理和決策能力的“慧眼”。
一個城市往往有數以萬計的攝像頭,但目前隻有非常少的視覺分析功能在實際中應用(例如交通處罰),大量的監控視頻都需要人工來觀看和排查,視頻中的大量有價值的信息還沒有被自動檢測和挖掘出來。城市之眼立足於收集、分析、索引整個城市相關的視覺數據,是具有實時、全局的感知、分析、處理和決策能力的“慧眼”。
City Brain
城市當中有大量的視頻監控,利用這些視頻監控抓取視頻數據來做機器學習,然後通過機器學習得到的模型去做一些事情,比如說做交通優化,現在城市當中有很多的擁堵情況會發生,我們能夠通過視覺方式自動檢測出擁堵情況。
- 從問題上來說,利用人工智能技術,可以大大減少人力,不需要人去看,而是通過機器自動去發現,這是感知層麵的。我們可以通過感知城市當中發生的事件擁堵情況,去做一些信號燈的調配,使得城市的交通效率提升,幫助公安解決大量問題。比如說公安在找失蹤人員、嫌疑犯的時候,我們能通過視覺計算,實時的去發現跟蹤。
另外在環境和教育上麵,未來可能也會做一些相關的工作。比如說監測到環境發生的一些變化,霧霾跟車尾氣排放量的關係,我們可以通過大量數據,不止是視覺數據,還包括其他的數據,融入起來一起做分析。
- 從核心技術來說,比如說交通參數,既然我們要知道擁堵程度,很多時候要去發現比如排隊長度,然後車流、車速是多少。如果我們能夠所見即所得,利用視頻的方式去把每一個路段真實的情況看清楚,並且是同時去看清楚,那麼這個帶來的收益應該會比原來用一些傳統數據例如線圈,帶來的收益會更大一些。關於城市搜索這個問題,我們能不能通過視覺上麵的一些技術,比如說特征學習,索引技術,去發現城市當中人車、非自動車的軌跡,也就是在整個城市當中,如果我要去找一個人,我通過視覺的方式,經過幾個攝像頭,我就能統一把人的軌跡給找出來。
在係統上麵,除了剛才說的算法之外,我們需要去搭建一個實時係統,因為我們其實是視頻流實時進來的,不斷的去湧現人車物,那我們該通過什麼樣的方式把它們做處理、索引,索引到城市每一個目標每一件事情,然後去做統一的搜索,這個也是係統層麵需要考慮的事情。
在最底層就是我們的平台,我們依賴於阿裏雲的流計算平台,去做實時的分析處理,然後底層借鑒阿裏雲的ODPS去把索引給搭建起來。
- 價值層麵,如果我們能夠大大的減少人力,幫他們去真正的發揮視覺當中的作用,那麼其實這樣的社會價值和商業價值都會比較大。
我們現在最主要的應用場景包括兩塊:交通和公安。首先要做的是把城市當中所有的大量的數據匯總起來,包括視頻數據,還包括一些傳統數據我們也是需要的,然後我們需要去計算,計算裏麵包括一些比較基礎的匯聚計算,也包括人工智能本身的一些計算,包括如何去做學習,最後重新賦能城市中的一些應用。
所以從整個流上麵來看,我們首先會有數據源,然後對數據做理解,做實時和全局的認知,也就是感知。有了這樣的感知以後,我們需要去做一些優化,比如能不能調節一下信號燈,能不能調節一下可變車道,使得整個交通效率能夠提升。我們能不能在城市當中,利用到時空上麵的視頻數據,這個時空指的是視頻數據本身是有時間持續的信息,空間上麵我們有相鄰的攝像頭的一些零位信息,我們能不能利用這樣的信息去預測,比如說半個小時之後,哪裏會不會堵,幫助我們出行做一些規劃。
最後對於整個社會的治理者,我們能不能通過預測方式做一些預防信息,使得情況盡量不要再發生。比如說我們擁堵情況能不能再少一點,能不能提前做好擁堵的預防,能不能最快速的知道案件。
我們在城市當中有很多的攝像頭點位,每個點位都會對應到一路的攝像,那麼能不能同時在整個城市範圍當中發現城市當中這些攝像頭所照到的路麵會不會發生一些情況,比如說是不是發生了擁堵,比如說車跟車之間的相撞,像這樣的一些事件我們能不能自動去做,現在在杭州城市大腦當中其實已經實施了,已經在杭州全量上線了,我們其實是能夠看到,在整個城市當中我們實時的看到有哪些地方是發生擁堵的,有哪些地方發生了事件事故。
Re-ID
City Re-ID
從公安的角度來說,我們能不能做城市當中的Re-ID,Re-ID顧名思義相當於重認證,認證出來人,認證出來車,認證出來非機動車是不是我們想要找的。我們的目標其實是要找到真正的這個人,而不是找到相似的衣服。那麼對於實時處理而言,我們其實有視頻上麵的數據,有時序上的信息,我們判斷一個人,不止是靜態的判斷他的體型、外貌,也包括他的一些行為。我們現在暫時利用了圖片的信息去做,但是未來,我們可以利用更多的信息去做。
在真實的場景當中,人、車和非機動車在不同攝像頭和不同的場景下麵的變化是非常大的,它會有不同的攝像頭和攝像頭之間的分辨率變化,也會有人的姿態變化,也會有攝像頭安裝的位置跟人的相對位置所產生的視角變化。就是這樣的一些變化導致整個搜索問題變得比較複雜。
Search vs. Re-ID
我們做search 和Re-ID這兩個問題上麵,不同之處在於一個找相似、相關,一個是找相同。
主要的流程分off line、on line,我們的輸入流其實是視頻流,我們實時的去處理視頻流的信息,並且把整個視頻場景當中的人車物,包括道路和建築物上麵的一些檢測,我們都需要識別和檢測出來,然後我們把檢測出來的建立索引,把相應的一些人的信息集合起來,建一個索引,方便我們去進行快速的搜索。
A Typical Visual Re-Identification System
那我們在搜索的時候勢必會有ranking的問題,我們希望將最相關的信息,最相關的人,就是我們覺得真正可能是同一個人的圖片和相關的點位信息和時間信息排在最前麵。
當輸入一個監控攝像頭上麵一個人以後,我們也過一個卷積網絡,然後卷積網絡抽出一個dense的feature,相當於通過分類網和相似度的網絡來做的,比如說我有一千個人,我對一千個人做分類,那這樣訓練出來的feature在真實場景,在測試的過程當中是沒有分類這個信息,因為測試的過程當中不會再見到一樣的人了。
Global-level Representation
我們現在用到的是全局圖片去做feature learning,去做特征學習,那麼其實我們對於這樣的問題,特別是像人在監控場景下麵,比如說100×50的像素圖片,我們該怎麼樣去最大程度的去利用信息,我們應該更細節的去把握人當中的一些屬性,人當中的一些具體位置。我們能不能更好的把這個人的不同部位的feature抓出來,在一個統一的框架下進行特征學習呢?答案是可以的,因為我們人其實是有一個結構信息,它一般都是從上到下,這個人可以在平麵內做一個旋轉,所以我們可以對feature map做一個劃分,就是說每一行去做劃分,在這樣的一個行的區域範圍之內,我們去找它的匹配patch,如果我們找到這一對的patch是很相關的,我們應該去加大它的相似程度,如果是對於不同的人,其實我們應該要去減弱patch的相關性,所以通過這樣的方式,我們把相關度的loss加在low level的feature上麵,並且疊加上high level的global feature的loss同時去做訓練,同時去做訓練的好處在於,對於這樣的網絡,將最具有判別性的局部特征encode在feature map上麵了,我們並且把這樣具有判別性的局部特征信息傳遞到下麵幾個網絡當中。使得在全局訓練當中也用到了這部分信息。這樣的一個框架它有兩個好處:一是對於全局和局部的特征都有一個刻劃;二是可以建大規模索引,如果要建一個索引,比如說hash索引或者tree索引,其實我們是一張圖片就出一個feature。

大家可以看到,這兩張圖都是同一個女生,她背了一個背包,穿白色的衣服,那我們在網絡學習過程當中,我們把feature map可視化出來,會發現她在最相關的一些區域的響應是非常強的。比如說這個包,它具有很強的判別性特征,我們能自動把它學出來,除了這個之外,也結合了一些屬性信息。那麼假如說一個人如果換一套衣服換一套褲子,可能算法就不穩定了,這個問題其實我們現在也有一些解決方案,我們可以通過數據驅動的方式,並且在模型上做若幹的修改,我們能在模型的學習過程當中,最有效的去自學那些具有判別性的區域。比如對於一個人而言,我們去自動學習出具有判別性的軀幹或者體型、步態。
圖為交通監控上麵一些非機動車數據。
非機動車沒有一個公開數據,所以在做這個事情的時候,我們先用公開數據去驗證一下算法是不是靠譜。北大實驗室提供有一個車輛Re-ID的公開數據集,這個數據集大概平均每個車大概有8.44張圖片,總共一萬多輛車。因為測試數據量很大,所以把它分成了三個子集,每個子集都有幾百到幾千輛車,然後每一個車大概就是8.44張圖片,在這樣的公開數據集上麵,其實我們利用現在的方法,可以達到一個比較不錯的水平。
這個數據集直觀的樣子如圖,它是中國的一個小城市的車輛數據,上麵的車牌被擋住了。
每個攝像頭裝的位置是交警裝在那邊的,你不可能去改變它,車怎麼開過去,你其實也是沒辦法控製的,你隻能拍到這樣的圖片,所以它的視角變化會很豐富,有一些攝像頭很高清,有一些攝像頭沒有那麼高清,包括在白天晚上一些光照上的變化。
人相對於車會更複雜一些。有幾個問題,一是人很小,二是人的姿態變化比較多,所以現在有一個公開數據,這個公開數據是Market-1501,這個指的是在清華某個超市的前麵,它有1501個人的數據集。然後把它分成訓練和測試兩部分,包括了六個攝像頭的數據,其中有五個是高清的,一個是標清的。
在Market-1501數據集上麵,通過我們的特征學習方法,把它做一個排序,如果相似度越高,距離就越小,就排在越前麵。那麼還是會有一些bad case,但相對來說我們已經把這樣的一個人找到了,就是說這個人在這個攝像頭下麵,在這一段時間裏麵,可能有很多張圖片,我們隻要找到一張在這個攝像頭當中出現圖片,我們其實就算成功了,因為我們已經把這個軌跡找到了,我們知道這個人在這個時刻經過這個攝像頭了。
還有一些分辨率會有一些變化,包括它整個姿態上麵也會有一些變化,側背麵的、正麵的,包括可能有一些錯誤的被我們找到。它包括了比如說小區裏麵,這個人可能從大廳進來,大廳的攝像頭離得很遠拍的人會很小,而且會非常模煳,而且大廳裏麵光照可能也不是很好,然後到了電梯裏麵,電梯是有一盞燈的,所以會比較亮,這兩個人如果要去做匹配其實就是比較困難了。
另外還包括一些遮擋,就是說當這個人經過攝像頭的時候,可能會被別人遮擋,或者被攝像頭遮擋,還可能會被攝像頭上麵記錄的一些OSD所遮擋。
Eagle Eyes: Search Examples
如果車牌被擋住,輸入一張出租車的圖片,隻是拿這個圖片去進行搜索,然後看它出現在這個範圍之內有哪些數據是真正經過攝像頭的數據,在流計算的時候,我們可以把相應的車給檢測到,然後把相應的信息記錄下來,它是什麼時間經過什麼攝像頭的,那麼我輸入這樣一張圖片,我通過特征抽取的方式,抽出一個特征描述這輛車,線下的這個過程當中,我本來已經把特征抽好了,建立一個索引。我使用特征在索引裏麵搜,就把相應的車都給找出來。我在不同的攝像頭當中把它找到了,同時也會把它的屬性,比如說顏色、品牌、視角等獲取到。
其實我們利用屬性還可以做一些事情,我們可以去選出那些我們認為更發散一點的,比如說除了當前的顏色,比如說我們能不能找出保時捷SUV,但是它的顏色是紅色的,或者它的顏色是藍色的,我們能不能把它找出來。
OD Stream
另外,我們既然能知道它在什麼時候經過什麼樣的位置,如果我們的準確率足夠高,我們就可以把相應的軌跡給找出來。那麼我們有了人的軌跡,車的軌跡,非機動車的軌跡以後,其實可以做很多很多的事情,幫助我們去做交通的優化。那對於公安來說,可以很快速的找到失蹤人員到底去了哪。也可以幫助更複雜的一些應用,當我們有了OD信息以後,我們可以做一些混合交通的事情,比如說我們有車,有人,有非機動車的情況下麵,我們能不能把這三者結合起來考慮,這個也是可以嚐試的。
總結
對於識別問題而言,屬性和相關的信息,其實是可以輔助提升網絡的準確性。對於feature learning,我們是不是可以通過設計不同的網絡結構,去使得網絡能夠更好的去刻畫人、車的一些信息,包括它的局部特征,包括它的全局特征能不能更好的刻畫。另外,我們要建立大規模的索引,索引其實是廣義上的索引,也就是說我們現在是做人車和非機動車,未來我們可能會將城市當中所有的目標,甚至所有的事件建一個索引,那麼通過這樣的方式,我們不止可以搜索這些目標,也許我們未來還可以搜索一些發生的變化事情。
最後更新:2017-09-05 19:02:46