Windows下編譯運行DPM(Discriminatively trained deformable part models)

DPM:https://people.eecs.berkeley.edu/~rbg/latent/index.html 我下載的是voc-release5版本,建議不要用4或者3的DPM模型,如果應用Opencv2.4.x的檢測代碼,速度慢的驚奇,而且opencv2.4.x也不能應用DPM5的模型。Opencv3裏面應用的是DPM5的模型voc-release5原版並不支持在Windows系統中編譯運行,但只需進行以下幾項代碼修改即可完美解決。
1. 修改features目錄下的features.cc文件:在所有#include下面添加最後一行代碼(因爲Windows系統上缺少這樣的定義);

#include <math.h>
#include "mex.h"

#define bzero(a, b) memset(a, 0, b) //ADD KK

修改features目錄下的resize.cc文件:同樣添加上面一行代碼

#include <string.h>
#include "mex.h"

#define bzero(a, b) memset(a, 0, b) //ADD KK

定位於第41行: alphainfo ofs[len]; 修改爲

alphainfo *ofs = new alphainfo[len];

並在第85行左右,添加代碼:

   alphacopy(s, d, ofs, k);
    }
  }
 free(ofs); //add kk
}

3. 修改fv_cache目錄下的fv_compile.m文件:將第13~15行代碼註釋掉(即允許在Windows系統上編譯);
4. 修改gdetect目錄下的bounded_dt.cc文件:在所有#include下面添加下面兩行代碼(同樣是因爲Windows系統上缺少這樣的定義);

#define int32_t int
#define INFINITY 1e8

5. 修改gdetect目錄下的dt.cc文件:在所有#include下面添加下面一行代碼(同樣是因爲Windows系統上缺少這樣的定義);

#define int32_t int

6. 修改star-cascade目錄下的cascade.cc文件:在所有#include下面添加下面一行代碼(同樣是因爲Windows系統上缺少這樣的定義);

#define INFINITY 1e8

7. 修改star-cascade目錄下的cascade_compile.m文件:將第13~15行代碼註釋掉(即允許在Windows系統上編譯);
8. 修改star-cascade目錄下的timer.h文件:刪掉第6行代碼#include

#include <time.h>
#include <windows.h>
int gettimeofday(struct timeval *tp, void *tzp)
{
    time_t clock;
    struct tm tm;
    SYSTEMTIME wtm;
    GetLocalTime(&wtm);
    tm.tm_year     = wtm.wYear - 1900;
    tm.tm_mon     = wtm.wMonth - 1;
    tm.tm_mday     = wtm.wDay;
    tm.tm_hour     = wtm.wHour;
    tm.tm_min     = wtm.wMinute;
    tm.tm_sec     = wtm.wSecond;
    tm. tm_isdst    = -1;
    clock = mktime(&tm);
    tp->tv_sec = clock;
    tp->tv_usec = wtm.wMilliseconds * 1000;
    return (0);
}

9. 修改compile.m文件:將第13~15行代碼註釋掉(即允許在Windows系統上編譯),再註釋掉第64行並取消註釋第68行(即選擇編譯fconv_var_dim.cc而不是fconvsse.cc),再註釋掉第72行並取消註釋第74行(即選擇編譯fconv_var_dim.cc而不是fconv_var_dim_MT.cc),再將所有的-o改爲-output;

按上述步驟修改完之後,在Matlab中運行demo.m即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章