利用OpenCV開發行人檢測程序,怎樣提高檢測速率呢?
02-05
檢測演算法:HOG+SVM,使用的是detectMultiScale()函數。除了劃定合理的檢測區域,設置圖像金字塔間的尺度參數還可以做哪些工作提高檢測速率呢?
不適用OpenCV的話,大家有什麼更好的建議么
行人檢測我沒有深入研究過,大致地給點思路
- 整體層面:先運行下 profiler,定位程序大部分時間是在運行哪些函數,我經常使用的是 Very Sleepy
- CPU 並行優化,可以分三個線程,確保每個 CPU core 都是滿載
- 視頻捕捉和簡單預處理
- HOG
- SVM
- GPU 優化,HOG 有 GPU 加速版本 Object Detection
在讀研究生,新人一枚,曾經做過視頻中檢測行人的項目。張靜老師的回答更偏重於演算法優化,其實在工程項目中往往有工程化的思路。我在視頻中首先用高斯背景法進行建模,這個對於704*576的一幀視頻大約平均用27ms左右吧,然後對檢測出的運動團塊用面積,複雜度,位置,外接矩形長寬比等進行粗略的分類,可以得到人的大致範圍,這一步耗時很短。最後在這個範圍附近區域進行hog+svm,能有效減小處理圖像,速度就提高了很多。
如果使用opencv,最直接的就是上GPU。
計算量最大的部分是HOG的計算。opencv實現了original HOG,可以考慮下DPM里那個HOG。HOG的參數調整,比如number of bin, cell size,要不要插值,如何歸一化等等,也能減小點計算量,跟檢測效果平衡下。
HOG的multiscale比較費時。可以做個倍數的image pyramid,在每個level上計算hog,然後再對這個倍數的hog pyramid downscaling得到n個scale的multiscale hog。或者直接訓練多個不同尺度的classifier,用來逐個遍歷。SVM盡量linear。先做個膚色檢測,將可能的人臉區域標註出來
小生最近也遇到這樣的困惑,Detectmultiscale()遍歷一副480*640的圖片要花費一分多鐘,請問樓主這樣的速度正常嗎
推薦閱讀: