Segmentation Guided Attention Network for Crowd Counting via Curriculum Learning
貢獻
作者主要從網絡結構的角度出發,之前SANet論文只簡單用了inception module,這裏作者充分利用inception的網絡結構.
1)用inception-v3的結構更好學習scale的信息;
2)並且加入分割區分前後景,減少背景帶來的誤;
3)最後作者採用curriculum learning, 從易到難學習更加(crowd的區域loss權重更大)
方法
網絡結構
- 對inception-v3通過一個stride-2的卷積,2個maxpooling,2個 inception module對網絡降採樣,最後的feature map是原圖輸入的 , 作者通過去掉所有的max pool和全連接網絡並在最後一個inception模塊加入上採樣,這樣使得最後的feature map降採樣
- 作者直接將分割的結果作爲最終的attention map來讓網絡計算所有前景的人數, 從倒數第二個個inception的特徵添加一個卷積,在跟一個sigmoid,這樣attention map就和density map有同樣大小的空間分辨率,直接用人頭點爲1,其他爲0作爲分割的ground truth
損失函數
對於分割部分採用的是BCELoss, counting部分採用的L2Loss
Loss是二者之間加權求和
課程學習
課程學習是一種學習策略, 作者認爲擁擠的區域密度預測更加難,但是稀疏的區域預測其實也是有問題的,但是因爲作者這裏加入segmentaion map去掉了backgroud的影響,所以就認爲現在crowd的區域預測更難了. 這裏課程學習的方式就是將密集區域和稀疏區域的loss設置不同的權重,這樣網絡關注就不同了.
具體來說權重矩陣, 閾值爲T
就是預測的density map, 如果密度小於T,那麼權重爲1;如果密度大於T,那麼, 小於1. 這樣訓練酒鬼更加關注簡單的樣本,也就是稀疏的區域
閾值T作爲訓練epoch e的函數,隨着epoch數目增加,T也逐漸增加,這樣網絡密度高的就逐漸權重增加,越來容易學習
k,b可以根據先驗知識density map的ground truth得到,b爲初始epoch的threshold,爲表示單個人頭點區域最大的density map. k控制學習難度增加的速度,可以通過不用課程學習訓練的學習曲線來決定.
最終的損失函數
實現細節
Adam, 初始學習率1e-4每50個epoch變爲原來0.5一共訓練500個epoch,採用隨機從原圖crop 128* 128 圖片,每一個batch包含8張圖,每張圖4個patch,一共32張圖
Ablation study
首先inception-v3這個backbone就已經很強SHA到60.1,SHB到6.4,backbone就已經很強,加上segmentation後SHA下降了2個點,其他的變化不大
採用這種課程學習,在5個網絡都得到驗證,網絡學習的更好
感想
counting任務中,除了自己提出的網絡框架外,backbone大家基本都是選擇vgg, resnet這篇文章選了inception-v3
- ResNet,爲了保證密度圖的大小不至於過小(不小於原圖尺寸的1/8),我們修改了res.layer3中第一層stride的大小(將原本的2改爲1),以此當做encoder。本着簡單的原則,decoder由兩層卷積構成。
- 我們完全採用了VGG-16模型的前10個卷積層。其中,VGG採用了最爲簡單的decoder,而VGG+decoder則是簡單設計了一個含有三個反捲積的模塊
可以看出不同模型設計理念在人羣計數任務的影響,確實inception這種更適應人羣,可能是對scale 提取特徵更加合適在這裏插入圖片描述