1. 程式人生 > >物件檢測之行人檢測(1)

物件檢測之行人檢測(1)

  • 問題定義
    物件檢測技術是計算機視覺研究中一個重要的研究課題。這個問題所處理資料主要是圖片(對於視訊則是抽取成關鍵幀然後對每一幀進行處理),行人檢測則作為物件檢測的子問題,與通用物件檢測的不同點在於所檢測類別僅有行人。整個檢測過程的目標在於為圖片中所有的行人新增位置標註,通俗點說就是用一個框把人框住(給出該框的左上角座標、長寬值以及這個框作為行人的置信分數[x,y,w,h,score])。如圖1所示。
    行人檢測示意圖
    圖1 行人檢測示意圖

  • 問題難點

    (1)人的姿態變化。由於人本身是非剛體,在影象中出現時可以具備不同的姿態,可以具有站、跑、跳、蹲等不同的動作,同時呈現給攝像頭的角度也有區別,採集資料的攝像頭可能拍攝到行人正面、側面抑或背面的資訊,因此需要檢測系統具備足夠強的識別能力。
    (2)光照的變換。在資料採集時,由於天氣晴朗、陰暗的變幻,光線的明暗,採集裝置的解析度限制等,都會影響到最終輸入影象的質量。特別是對於在夜晚採集的監控視訊資料,由於燈光的影響而使得噪聲加大,大大加劇了從中準確提取出行人的難度。但夜晚通常又會是犯罪分子選擇作案的時機,因此需要行人檢測演算法在這部分資料上具有較好的魯棒性。
    (3)遮擋。在監控攝像頭採集的資料中,通常行人都不是單獨存在的。對於人類來說,大腦可以很容易的通過所呈現的資訊自動補全被遮擋的部分,可是對計算機來說,則需要擁有一些先驗的背景知識,才能夠識別出被遮擋的行人,因此有效處理遮擋也是該問題的難點之一。
    (4)複雜場景。對於行人檢測的問題,監控拍攝的場景一般都較為複雜,監控攝像頭也多放置在人員密集的場所,例如街道、機場、車站等,,其中所拍攝到的行人著裝各異,並可能和背景相互混淆,因此從複雜場景中準確提取行人也是此問題的難點之一。
    (5)行人尺寸不同。對於同一個待檢測的行人物件在一個視訊的多個位置出現時,會因為距離攝像頭的遠近而使得他在最終的資料中呈現出不同的尺寸。對於固定解析度的攝像頭而言,此點最終表現為該行人所佔區域畫素總面積多少的區別。不同尺寸行人所保留的細節資訊的多少也有很大差異。因此是否可以同時檢測不同尺度的行人也是一個好的行人檢測系統需要考慮的重要一環。

  • 解決方案
    (1)滑動視窗
    對於檢測這個問題,最初始的解決方案是由Viola和Jones兩位大神提出來,稱為滑動視窗(Sliding-window)。如圖2所示。
    滑動視窗示意圖
    圖2 滑動視窗示意圖
    該過程首先選取一定大小的視窗(圖中黃色方框,通常可能是64x128畫素大小),然後從圖片左上角開始,每次向右移動一定步長(例如4個畫素),並且對當前視窗做一個分類,判斷是否含有行人。這個掃面的過程逐行進行,直到將整個圖片掃面過一遍(黃色視窗抵達圖片右下角),此時,我們就找到了圖片中所有64x128大小的行人。由於行人有不同的尺寸,所以下一步需要調整視窗的大小,再次進行如上的掃描過程,找到下一個尺寸的行人。
    在剛才這個過程中,涉及到兩個問題需要解決。第一個是視窗怎樣描述使得計算機能夠識別的問題;第二個是如何分類的問題。
    (2)視窗描述
    對於第一個問題,最容易想到的方法就是將整個窗口裡所有畫素羅列成一個向量來作為視窗描述(如64x128的視窗則被拉成1x8192維的向量),這種方法方法相當於利用每個點的畫素值作為特徵值,缺點在於畫素值本身並不魯棒,受光照影響較大(當然,如果是神經元網路的演算法就另當別論)。因此,在VJ的文章中是使用了Haar-like特徵來做人臉檢測。而在梯度直方圖(Histogram of Gradient,HoG)裡,則是通過這個視窗的梯度直方圖特徵來作為視窗的描述。此處不管是採用何種方法,最終目的都只有一個,就是對視窗形成統一維度的特徵向量,以便用於下一步視窗的分類。
    (3)級聯分類器
    在剛才描述滑動視窗的過程中,你可能已經發現,那個分類的過程是需要進行很多很多次的,這豈不是很耗時間。因為圖中每個位置都要形成一次視窗的描述,然後對這個描述要進行一次分類,同時視窗的大小在完成一次掃描之後還會變化,如果想得到良好的檢測結果,那麼可能需要數十個不同大小的視窗去掃描圖片,也就是說一幅圖要進行數十萬次分類過程,O My God,計算機豈不要算掛掉。對此,VJ的解決方案是級聯分類器。見圖3
    級聯分類器


    圖3 級聯分類器示意圖
    對於每個當前要分類的視窗,都訓練了一系列連在一起的分類器,對於每個分類器,僅需要計算一個特徵,(例如分類器1只需要視窗第一個特徵值大小,>10,負樣本,<=10,待分類,送入分類器2),這樣,就會使得大量負樣本可以通過的很少的幾次計算就被過濾掉,考慮到通常輸入圖片中難分的樣本其實並不多,大量的背景區域可以很容易過濾,那麼這個級聯分類器的意義就很大了。
    (4)非最大抑制(Non-Max Suppression, NMS)
    在完成了滑動視窗掃描的過程之後,圖片中所有的行人應該都已經標註出來了。但是對於同一個行人來說,可能存在幾個有部分割槽域相互重疊的視窗都對該行人做了標註(圖4中四個綠色虛線所示的視窗),但此時僅存在一個行人(圖中藍色實線所示的視窗),此時應該去除其中的重疊視窗,僅留下一個視窗作為最終的標定結果。否則在最後計算檢測準確率的時候,雖然另外幾個視窗的標註都沒有出錯,但是卻只有一個視窗能與標準答案相匹配,這將導致系統的準確率降低。這個去除重複視窗的過程就叫做非最大抑制,見圖4。抑制的過程是這樣的,首先計算兩個視窗的重疊度(overlap=兩個視窗重疊部分面積/二者總面積),然後對比例超過一定閾值視窗對,將其中分類器認為該視窗行人分數較低的一個去掉。
    非最大抑制

    圖4 非最大抑制示意圖
    好了,到此為止,介紹了行人檢測大概是個什麼東東,下次再來講講聚合通道特徵(Aggregate Channel Feature,ACF)這個行人檢測裡常用的演算法吧。