環境
vs2013 + opencv3.2 + MMCheng倉庫中SalBenchmark-master的RC
SalBenchmark的github連結
說明
嘗試使用opencv3.0來跑RC,PR曲線不是下降的可以看出opencv3.0配2015年的RC是有問題的(也可能是我手殘哪裡點錯了)。是以換opencv3.2來配置RC。不過建議拿opencv2.x進行嘗試,或許會比opencv3.2的效果好。汗,13年的代碼下不到了。建議使用cv2.4嘗試看。
步驟
倉庫裡的readme,寫的蠻清楚的了。這裡介紹整體步驟。
-
編譯release版的opencv3.2,在vs中打開cmake生成的項目。将項目屬性改成release。這裡參考opencv編譯
tips: a. vs中對項目右鍵屬性,改的是這個項目的屬性;而屬性管理器是所有項目的共有屬性(x64 release這次用到的是)。 b. 建議用vs打開項目前,先用文本編輯器修改
C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0裡的
Microsoft.Cpp.x64.user.props(x64 release和debug),删除裡面以前配置的資訊,免得編譯的時候沖突。
這邊不需要另外編譯contrib部分,選擇install而不是all build
- 對 SalBenchmark編譯
- 打開SalBenchmark-master\Code\Demo.sln,切換成x64 release。
- 移除除了cmlib和GetRC以外的項目(懶,不想改其他的配置。或者按照之前修改x64.user.props的步驟,之後打開項目)
- 将opencv3.2頭檔案的路徑添加項目的cmlib的屬性中(cmlib包括檔案夾路徑等操作),生成SalBenchmark-master\Code\Lib\CmLib.lib。這邊Cmlib的工作結束了,作者在GetRC的GetRC.vcxproj寫好了Cmlib.lib的相對路徑。
- 從項目中移除cmlib。将opencv3.2的頭檔案,庫檔案路徑和庫檔案名字加入GetRC的屬性。
- 修改GetRC.cpp的輸入代碼(這部分本來是由一個統一接口進來的)
int main(int argc,char *argv[])
{
/*CV_Assert(argc == 3);
CStr imgW = argv[1], salDir = argv[2];*/
char* b[] = { "", "J:/extra/MSRA1000/image/noise1/*.jpg", "J:/extra/MSRA1000/RCsaliency/noise1/" };// imgdir, saldir
CStr imgW = b[], salDir = b[];// replace argv with b
// 後面一緻
}
小結
按倉庫的readme, opencv和cmlib的全是在release下編譯的。MSRA1000的RC方法的PR-auc是0.9x(不精确到後兩位了~),曲線和論文中看到還算吻合。建議使用2.x版本的opencv嘗試下。
PS
對opencv3.0的惡意
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcBzaqJGaoJTW1Z0RhZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM0QTOykTN4ADOwkDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
左 opencv3.2+salbench的RC————————–右 opencv3.0+salbench的RC
cmlib編譯
a.打開SalBenchmark/Code/CmLibCmLib.vcxproj或者另外一個倉庫CmCode/CmCode.sln;
b.保持編譯環境一緻,我是都64位,用vs生成.lib,也就是靜态連結庫;
c.在SalBenchmark庫目錄引入.lib