1. 程式人生 > >在Windows下配置和訓練DPM(可變形部件模型)

在Windows下配置和訓練DPM(可變形部件模型)

剛開始接觸DPM,看了一些理論知識就迫不及待的想跑起來,就在網上看了一些前輩的部落格,從配置到訓練,感謝前人種樹!本文主要分成兩個部分:一是在windows下配置DPM,二是DPM在windows下的訓練,下面開始分步介紹。

我的開發環境是:win8(32)+Matlab2012a+vs2010

DPM原始碼版本:voc-release4.01

VOC開發包:voc2007_devkit_08_Jun

參考:http://blog.csdn.net/masibuaa/article/details/25221103

            http://blog.csdn.net/xunwukong/article/details/18841059

資料下載連結:http://host.robots.ox.ac.uk:8080/pascal/VOC/voc2007/index.html(此為更新版,網上大多貼的連結都打不開)

第一部分:在windows下配置DPM(也就是讓DPM原始碼在windows下執行起來)

步驟一:先在matlab中配置c++編譯器

在matlab命令行當中輸入 mex  -setup,然後回車提示你選擇,鍵入n,出現matlab支援的編譯器,根據提示選擇就ok了

鍵入你電腦的vs版本,比如我就是輸入15 ,然後對應好目錄就行了。

步驟二:配置檔案

這裡說下,推薦的第一篇部落格是直接在matlab命令視窗輸入compile編譯的, 通過報錯還一點點配置檔案。而第二篇是在此基礎上直接配置的,相對來說簡單粗暴,不過對於我們這菜鳥來說,還是慢慢配吧,正好熟悉一下。當然,我寫下來就是直接配啦,有興趣的同行可以去看原博。

1.dt.cc 中加入 #define int32_t  int


2.features.cc和resize.cc中加入

#define bzero(a, b) memset(a, 0, b) 

int round(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; else return (int)a; }

同時,resize.cc

alphainfo ofs[len]; 改成 alphainfo *ofs = new alphainfo[len];

並在同一個域中加入delete []ofs;這裡可以理解成加在該函式結尾


3.compile.m檔案中,結尾加上 mex -O fconv.cc,如下所示:

 

4.修改fconv.cpp檔案

第一行中void*process(void *thread_arg)  去掉process的指標符號,即可。

至此,檔案的配置基本上完成了,在matlab輸入compile 編譯如果不報錯,那就恭喜你啦,如果報錯對應著再修改。

然後continue,出現下圖就ok啦!


備註:還有一點需要注意的是,我配置完成之後編譯總是報錯如下:

然後以為是哪里哪里沒對,又配置一遍還是這樣。結果是因為matlab工作路徑原因,個人覺得比較重要的一步就是配置matlab工作路徑了。可以用命令pathtool來把路徑改成voc-release4.01的工作路徑就好了。

第二部分:DPM在windows下的訓練

這裡的訓練用的是VOC資料集也就是官方提供的資料集,等這個跑完之後,再用我們自己的資料模型來跑。

先去網站下載資料集和開發包VOCdevkit和兩個資料包(驗證和測試集),然後把測試集中的xml標註檔案拷貝到VOCdevkit\VOC2007\Annotations資料夾內,把測試集中的jpeg圖片拷貝到VOCdevkit\VOC2007\JPEGImages資料夾內,這樣整個資料集才完整,否則在訓練或測試的時候可能出現找不到需要讀取的標註檔案或圖片的錯誤。