源码下载地址:http://mmcheng.net/code-data/
点击图中框框那个位置下载就可以了,下载下来的文件是BingObjectnessCVPR14。作者设置了解压密码:mmcheng.net。
文件解压后:
作者没有在项目文件中放数据集,你可以单独去下载一个数据集,作者也在主页中放了下载链接。
接下来,打开项目文件(用VS2013打开解决方案,提示升级VC++编译器和库,直接点击确定就好):
1、配置LibLinear
① 在解决方案页,右键LibLinear,选为启动项目;
② 在linear.cpp文件中,修改print_string_stdout函数为:extern “C” static void print_string_stdout(const char *s)
③ 代码生成
④生成静态库
ctrl+F5之后在相应目录下生成LibLinear.lib静态库。
看到上面显示的那个静态库的输出位置了吗?因为一会儿要引用这个库,所以最好确定一下你的静态库生成在了哪里。比如我的就是在这里,和截图中显示的位置是一致的。
2、配置Objectness
① 在解决方案页,右键Objectness,选为启动项目;
② 打开Debug属性,链接器->附加库目录,添加LibLinear.lib的目录;(注意:链接库依赖项 要设为是(yes))
③ 配置opencv
我的建议是专门为opencv建立一个属性表,这样就不用每次都配置了,只需要在项目中添加之前配置好的属性表就可以了。不过为了这次方法的完整性,我决定还是把opencv的配置方法再写一遍。
为debug新建属性表:
右键Debug|x64->添加新项目属性表,新建一个opencv_debug.props文件(建议保存在很好找的位置,便于很多项目添加它)。
打开opencv_debug.props,VC++目录->包含目录的修改如下:
VC++目录->库目录的修改如下:
链接器->输入->附加依赖项:
为了粘贴方便,就是这些:(注意改成你的opencv版本)
opencv_ml2412d.lib
opencv_calib3d2412d.lib
opencv_contrib2412d.lib
opencv_core2412d.lib
opencv_features2d2412d.lib
opencv_flann2412d.lib
opencv_gpu2412d.lib
opencv_highgui2412d.lib
opencv_imgproc2412d.lib
opencv_legacy2412d.lib
opencv_objdetect2412d.lib
opencv_ts2412d.lib
opencv_video2412d.lib
opencv_nonfree2412d.lib
opencv_ocl2412d.lib
opencv_photo2412d.lib
opencv_stitching2412d.lib
opencv_superres2412d.lib
opencv_videostab2412d.lib
为release新建属性表:
右键Release|x64->添加新项目属性表,新建一个opencv_release.props文件(建议保存在很好找的位置,便于很多项目添加它)。
VC++目录->包含目录以及VC++目录->库目录与debug中的一致,不再赘述。
链接器->输入->附加依赖项:Debug版本就用d结尾的库,Release版本就用不带d结尾的库。
④ 代码生成
⑤ 框出的Main.cpp这句代码原本是注释掉的,我们让它执行,这样就能最终看到算法在图中的展示效果。
⑥ 在release模式下,右键Objectness,重新生成。
⑦ 在release模式下,ctrl+F5执行程序。出现下图就是运行成功啦~
运行结果说明:
在VOC2007文件夹下多了下面这两个文件夹:
Local->ResIlu下存放的是依据该算法在每张测试图像中生成的proposal:
Results文件夹下存放的是中间结果,包括:
BBoxesB2W8MAXBGR:存放每张测试图像中生成的所有window的得分以及位置。
Filter.png:第一级训练模型的参数w归一化到1-255之后可视化的结果。
.idx:激活的尺度索引
.wS1:第一级SVM训练学习到的参数w,(是一个8×8的矩阵)。
.wS2:第二级SVM训练学习到参数结果vi和ti,(是一个NUM_SZ×2的矩阵)。
.xN:送入第一级SVM的所有负样本特征矩阵(负样本数目*64)
.xP:送入第一级SVM的所有正样本特征矩阵(正样本数目*64)