您當前的位置:首頁 > 收藏

[Crowd_Counting]-Bayesian_loss-ICCV2019

作者:由 Zee Jay 發表于 收藏時間:2019-11-14

[Crowd_Counting]-Bayesian_loss-ICCV2019

1。Contribution

本文全程把counting當作是一個機率問題,預測的density map是一個機率圖,每個點表示該點處有人存在的機率,把density map每個點看作是

樣本觀測值

,然後這個點存在某個人的機率當作

先驗機率

,用均勻分佈表示,即每個點可能存在N個人中的某一個,或者是背景,然後基於觀測值和先驗機率,我們可以估計該點處是否存在某個人的後驗機率,後驗機率其實是對真實分佈的估計,ground truth就是真實分佈,因此拿後驗機率與真實機率做差,就可以作為loss去最佳化模型

2。Method

(1)關於貝葉斯估計的背景知識

貝葉斯估計是引數估計的一種,所謂引數估計,就是實現假定資料服從某個分佈,比如高斯分佈,那麼我們就希望透過實際的資料去確定高斯分佈N(μ,σ)的均值μ和方差σ,這兩個一旦確定,我們就相當於獲得了資料的預測模型,大致上對未來獲得的新的資料心裡有了大概的一個估計,

引數估計最常用的有極大似然估計和貝葉斯估計,極大似然估計的基本思想是,當取得一組觀測資料之後,μ和σ取什麼值,最可能會得到這組觀測資料,就像醫生看病一樣,他透過詢問你問題,獲得有關病情的觀測資料,然後他就在推斷,哪種病最可能會導致病人的這種狀況,極大似然估計就是在做這個推斷,具體的方法是要將機率密度函式乘起來,代入觀測值,並求導,找到極值的過程,這裡不展開,但是你得知道,極大似然估計它估計了一個具體的μ和σ的值

貝葉斯估計不像極大似然估計那麼絕對,就認為μ和σ就是算出來的兩個值,貝葉斯估計它透過觀測值去估計μ和σ可能服從的分佈,也就是說,貝葉斯估計,估計的是引數本身服從的分佈,相比於極大似然估計的精確估計,貝葉斯估計則是一種模糊的估計,具體如下:

事先,你也要假設一下引數服從的分佈,如果有事先的經驗,那就可以根據經驗設計一個引數服從的分佈,如果事先啥都不知道,那麼就先假設維正態分佈,因此我們稱這個事先假設的引數分佈為先驗分佈,

即常用p(θ)=π(θ),π表示某種先驗分佈

當然先驗分佈只是事先假設,不一定對,我們要透過觀察資料樣本,根據觀察值,來對先驗分佈進行修正,用D表示一組觀測值,如下所示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

基於這組觀測值,我們可以利用貝葉斯定理,反推這樣一組觀測值是θ取某個值所導致的機率的大小,以下就是貝葉斯定理的公式了:

[Crowd_Counting]-Bayesian_loss-ICCV2019

這個透過貝葉斯公式推斷的各種θ的可能性,就是θ所服從的後驗分佈,也就是根據觀測值修正後的分佈,所以其實貝葉斯公式只是一個公式,貝葉斯估計是拿貝葉斯公式進行引數估計的一種估計方法

其實到這裡已經用完了貝葉斯估計了,接下來你若一定要得到引數θ的一個估計值,那往往用後驗機率的期望值去作為引數θ的估計值:

[Crowd_Counting]-Bayesian_loss-ICCV2019

上面這個就是連續隨機變數的期望計算公式

(2)看看本文怎麼把貝葉斯估計跟counting結合的

首先本文從某個人出現在某個位置的機率問題用貝葉斯估計去代入,如下所示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

Xm表示density map上某個位置,yn表示第n個人,總共是N個人,觀測值是Xm,表示Xm處觀測到一個人,然後p(yn|Xm)在Xm處觀測到的人是yn的機率,Xm處觀測到的人可能是N個人中的任意一個,所以先驗分佈p(yn)用均勻分佈1/N表示,然後p(Xm|yn)表示yn出現在Xm處的機率,那麼這個機率好表示,文中用了2D的高斯分佈表示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

等於:

[Crowd_Counting]-Bayesian_loss-ICCV2019

Zn表示yn這個人所在的座標,也就是說距離yn越遠,那yn出現在這裡的機率就越小。

以上p(yn|Xm)就是Xm處要是存在一個人,那麼這個人是yn的機率,然後利用期望,本文求了yn這個人出現在整張圖上的機率

[Crowd_Counting]-Bayesian_loss-ICCV2019

預測的density map有M個點,然後每個點的值代表該點處存在一個人的機率,然後結合後驗機率p(yn|Xm)的概念,上面的公式表示yn這個人在整張density map上出現的機率,當然他是存在的,且應該是1,所以ground truth就是1,所以loss可以表示為如下所示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

這就是本文的核心,即貝葉斯loss,F在這裡表示L1的loss,即絕對誤差。因此本文是在根據預測的density map,來推斷每個標註了的人存在的機率,期望每個標註了的人存在的機率接近於1。

(3)測試的時候怎麼做

以上貝葉斯loss的推斷過程解釋了本文如何訓練模型,但是測試的時候,我們就是輸入圖片,輸出一張density map,然後如何表示預測的人數呢?還像以前一樣對density map求和就表示人數了嗎?答案是yes!按照機率的思想,根據預測的density map,我們用期望的方式去分析每個標註了的人存在的機率,然後加起來,就是總人數,按照這個邏輯,我們得到了下面的公式:

[Crowd_Counting]-Bayesian_loss-ICCV2019

但是對於測試圖片,我們不知道標註的人在哪裡,因為沒有標註,即圖中的p(yn|Xm)不知道,但是把兩個求和Σ的順序對調,先對p(yn|Xm)求和,那因為這個求和就是1,所以剩下來的就是對整張density map求和,所以測試時,還是這麼做

(4)考慮背景的影響

以上的貝葉斯loss只考慮了每個人我希望其存在的機率接近於1,但是沒有對背景進行約束,即原圖中還存在大量背景呢,本文的做法是,在貝葉斯公式中,不僅考慮N個人,還加上了一個背景的選項,即當作現在又N+1人,多的一個人是背景,用y0表示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

所以後驗機率的分母多了背景存在於Xm處的機率,p(Xm|y0), 然後統一p(Xm|yn)和p(Xm|y0)都為1/(N+1),即把背景也當作一個人,那麼後驗機率如下所示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

同樣,類似於之前根據density map去估計第n個人yn存在的機率,我們也去估計背景人y0存在的機率,用期望計算:

[Crowd_Counting]-Bayesian_loss-ICCV2019

當然由於估計的density map上的每個點表示這裡有人的機率,所以一旦Xm處有人,那麼Xm處為背景的機率p(y0|Xm)為0,因此上面的期望E[c0]=0。 考慮了背景之後的貝葉斯loss如下所示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

然後背景出現在Xm處的機率,也用2D高斯分佈表示,對於某個人yn,這個好辦,距離yn越遠,則yn出現在這裡的機率越小,但是對於背景y0,背景沒有一個標註點,那麼本文是透過距離最近的標註點越遠,就越可能是背景的思想,對y0出現在Xm處的機率建模的,同時提出了一個背景的中心點Z0,如下所示:

[Crowd_Counting]-Bayesian_loss-ICCV2019

對於Xm這個位置,先找到距離它最近的人頭點Zn,然後認為距離Zn的距離為d的點Z0就是一個背景中心點,然後圍繞這個假想的背景中心點,用一個2D的高斯分佈去建模:

[Crowd_Counting]-Bayesian_loss-ICCV2019

ok,所有的理論推導完了

3。Experiment

(1)本文采用的模型

本文采用VGG16和AlexNet作為backbone,對於VGG19,最後輸出1/16尺寸太小,於是他們加了一個上取樣,到1/8,再預測density map

(2)視覺化後驗機率分佈

每個人在每個位置,都存在一個後驗機率分佈p(yn|Xm),然後將N個人的後驗機率分佈加起來,就得到了整圖的後驗機率分佈了,本文將這個透過計算entropy的方式視覺化,

[Crowd_Counting]-Bayesian_loss-ICCV2019

entropy越小,則表示這裡要麼是人,要麼是背景,很明確,如果entropy越大,則表示這裡有些模稜兩可,

[Crowd_Counting]-Bayesian_loss-ICCV2019

這裡越亮越表示模稜兩可,越暗表示越明確是人或是背景,然後圖中可以看到基本上人頭區域都是暗的,人頭邊界和部分背景比較亮,符合後驗機率的計算原理,σ越小圖越清晰,因為小的σ不容易導致兩個人頭區域有重疊,d越小,則表示某個點更容易倍判斷為背景,圖中的e比f人頭輪廓更合理,是因為被判斷為背景的點更多

(3)與SOTA的比較

[Crowd_Counting]-Bayesian_loss-ICCV2019

(4)ablation study

baseline就是用VGG直接訓MSE進行訓練,Bayesian表示不考慮背景的bayesian loss,Bayesian+表示考慮了背景的loss

[Crowd_Counting]-Bayesian_loss-ICCV2019

可見對於稀疏的部分,加了bayesian loss,定位地更好,加了背景約束,效果比不加背景好

σ和d的影響:

[Crowd_Counting]-Bayesian_loss-ICCV2019

backbone的影響:

[Crowd_Counting]-Bayesian_loss-ICCV2019

QNRF是否resize的影響:

[Crowd_Counting]-Bayesian_loss-ICCV2019

(5)模型泛化能力

[Crowd_Counting]-Bayesian_loss-ICCV2019

可見在QNRF上訓練,在SHA上可以獲得不錯的泛化能力,但是在SHB和UCF_CC_50上還是一般

4。Comment

本文不愧是Oral的paper,角度很獨特,而且數學邏輯非常清晰,雖然看似只是加了一個loss,但是從數學上很合理地證明了其可行性,而且文章確實也寫的很好。

標簽: xm  yn  貝葉斯  機率  估計