DPM檢測模型 VoC-release 5 linux 下編譯運行


(轉載請注明作者和出處 樓燚(yì)航的blog :http://www.cnblogs.com/louyihang-loves-baiyan/ 未經允許請勿用於商業用途)

DPM目前使非神經網絡方法里面較好的目標檢測程序,作者呢也是Fast RCNN的作者 Ross Girshick,真的是牛人,這個模型是在2010年被提出的DPM的全稱也就是Deformable Part Model,可變形部件模型。其主要思想是根據彈簧形變模型提出的,也就是一個目標物時分為主部分和子部件,分別叫做root和part,很多時候我們需要檢測的物體並不是單個模板下的,比如之前我用的opencv 下的svm來做檢測,還有adaboost下用haar來做檢測,他們的模型非常單一,是不能很好的適應復雜場景的檢測需求。
DPM模型在訓練的時候是分為主部件和子部件,在檢測的時候就有了root filter 和 part filter,兩者結合做檢測,part filter在root filter,類比的話,比如人的手和腳是可以明顯活動的,四肢非常靈活,顯然單一的模板來檢測人是不嚴密的,而其檢測過程可以歸納為一個主部件的得分以及他子部件的得分的和,並且需要減去子部件偏離的cost,作為其最終得分。他的一個概念模型可以看一下下圖

人臉模型示意圖

看一下我訓練的車臉模型,模型里用的是Hog特征,梯度方向直方圖,下面是特征模型的可視化結果:這里用的6個部件

車臉

網絡上說voc-release5的資料比較少,大部分還是用的DPM代碼的3.1或者4.1版本,最新的是voc-release5八本,ross在里面加入了star-cascade還有新的模型語法car-grammar,檢測的速度比直接的塊了不少。首先我說明一下如何編譯voc-release5的matlab工程

首先下載DPM的工程源碼,給出鏈接:
http://www.cs.berkeley.edu/~rbg/latent/

這里我覺得最好還是在linux下或者 os x下進行訓練,不要在windows下進行訓練,你最后得到的也是個mat的模型文件,不要徒增工作量,畢竟是matlab的源代碼也不能直接應用於工程,怎么方便怎么配置。

由於我的ubuntu上安裝的是matlab 2014a,根據readme的提示,需要先編譯,再運行demo。一般來說現在的ubuntu比較主流的是14.04 LTS,其自帶的gcc 版本比較高,我這里是4.8,但是Matlab最高支持到gcc4.7因此需要apt-get 安裝一下4.7的gcc,再調整一下編譯器的優先級選項,最后gcc -v 輸出一下當前默認的gcc版本好是多少

sudo apt-get install gcc-4.7 g++-4.7 g++-4.7-multilib gcc-4.7-multilib

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 100 

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50 

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 100 

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50

sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.7 100

sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.8 50

gcc -v

接下來gcc的報錯應該是沒有了,但是編譯還是會出錯
看到報錯,在compile.m中

mex error using 
Unknown MEX argument '-o'.

在compile.m中有幾處-o,列了兩處

eval([mexcmd ' gdetect/fconvsse.cc -o fconv']);
eval([mexcmd ' gdetect/fconv_var_dim_MT.cc -o fconv_var_dim']);

-o的參數可能是因為mex的版本導致的參數指令不兼容,因此將-o 改成-output就可以了

再次運行demo.m文件,即可看到DPM模型的檢測演示如下:
下面整個可視化模型是基於VOC2007訓練的,可以看到有3個方向的模型,第一個是車輛的左斜視圖,第二個是車輛的右斜視圖,第三個是正視圖,可以大致展現車的輪廓:

待檢測的圖像:

檢測的示意圖,其中紅框是最后的檢測位置,藍框是局部的部件:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM