標題:Small-scale Pedestrian Detection Based on Somatic Topology Localization and Temporal Feature Aggregation

本文主要目的是為了復現,做記錄(點坑)。

海康的這篇主要是在修改annotation,把原來的box換成點和線的標註。

具體來說是通過top(頭部),bottom(底部)和從top指向bottom的line這三個標註來檢測行人。

為了方便生成這三個標註,選用比較tight的Caltech和Citypersons,這樣既方便從box生成標註,也方便用預測結果乘以一個固定係數來生成box。如果使用KITTI這樣box標註比較松的數據集來做,就算有了top和bottom之類的,也沒法還原出好的box。雖然說檢測未必要有box,但是還原出box才方便和其他方法作比較。

NETWORK:魔改Resnet50。

DATA:現在先嘗試caltech,用github上的轉化工具把視頻和標註轉換到jpg和json。然後採樣的時候記得所有圖片都要考慮,哪怕是沒有任何行人的圖片。訓練集從每個視頻第3張圖片採樣,間距為3。測試集從每個視頻第30張圖片開始採樣,間距為30。這樣就能得到42782和4024張訓練集和測試集了。(不多不少

ANNOTATION:top、bottom是高斯分佈,而line是從top指向bottom的單位向量(unit vector)。top是box上邊框的中點,bottom是box下邊框的中點。但是由於box是方方正正的,所以top和bottom的x軸坐標完全一樣,所以其實line就是一堆1組成的而已,其實這種情況下根本算不上單位向量。那麼這裡就有一個問題了,訓練只有(0,1)一種結果,測試的時候要怎麼保證有單位向量的多樣性呢?但是除了旋轉這種方法外,我想不出來還有什麼方法可以增加單位向量的多樣性。但是即使旋轉了,同一個圖的單位向量還是一樣的,那麼line標註的處理方法中提到的average就顯得沒有意義了,因為大家都一樣。

然後文中說a two dimension Gaussian distribution with empirically chosen variance σ,看圖的話會發現大的人的高亮區域肯定是高於小的人的,所以這個σ是會變的。這樣會造成各個人最高亮的區域的數值不一樣。感覺可以先做一個高斯分佈的模版,然後按照height去縮放,這樣可能更合理。然後直到我去找了份做pose的代碼看,原來高斯的exp之前的部分是不被考慮的,這樣σ就不會影響了,這樣做非常好。

top和bottom的gt是各個個體的結果取max,line是各個個體的結果取平均,line的寬度由box的高scale而來。

LOSS : 用mean squared error(MSE)來做loss。其實現在很多做pose的用L1做訓練,還有不少論文用ADAM而不是SGD的。

INFERENCE:用NMS獲得top和bottom的點。然後按下面這個公式去算各種可能的連接的邊的score。這個公式的話,基本上就是連線上採樣出來的點的方向和連線的方向越一致越好。最後得到了各種連線的score,然後用匈牙利演算法做匹配。MRF什麼的就先不寫了。

NMS也是值得注意的地方,有興趣可以參考tensorboy/pytorch_Realtime_Multi-Person_Pose_Estimation這份代碼,裡面有gaussian和NMS的處理。

這種heatmap對局部做相應然後拼物體的方法有兩個需要注意點,一是你對什麼東西對heatmap,也就是說你對什麼做局部響應,二是組合的方法。前者也會影響到後者,理想的方法應該是前者的響應結果很好,並且針對結果的組合方法速度快準確度又高。

推薦閱讀:

查看原文 >>
相關文章