今天在自己的电脑上编译MATLAB版本的faster-RCNN代码,将过程在这作一记录。

1.我的环境:Windows10 ,VS2013 , MATLAB2017a ,CUDA7.5

首先下载作者的源码:https://github.com/ShaoqingRen/faster_rcnn
[html] view plaincopy
  1. ### Preparation for Testing:
  2. 0.  Run `fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m` to download a compiled Caffe mex (for Windows only).
  3. 0.  Run `faster_rcnn_build.m`
  4. 0.  Run `startup.m`

上面是作者给出的运行方法,但是他的环境是vs2013+cuda6.5,直接下载他的caffe mex在后面的build中会出错。

这里我们需要自己编译caffe,在自己的环境下编译好caffe之后,将build里面的matcaffe拷到G:\faster_rcnn-master\external\caffe\matlab\caffe_faster_rcnn下。

2.接下来就执行2,3步了。

运行第二步的时候经常会出错,原因大多是编译器和cuda路径不对。

错误一般出在G:\faster_rcnn-master\functions\nms下面的nvmex.m文件中。

[html] view plaincopy
  1. if ispc % Windows
  2. Host_Compiler_Location = '-ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64"';
  3. CUDA_INC_Location = ['"' getenv('CUDA_PATH')  '\include"'];
  4. CUDA_SAMPLES_Location =['"' getenv('NVCUDASAMPLES7_5_ROOT')  '\common\inc"'];
  5. PIC_Option = '';
  6. if ( strcmp(computer('arch'),'win32') ==1)
  7. machine_str = ' --machine 32 ';
  8. CUDA_LIB_Location = ['"' getenv('CUDA_PATH')  '\lib\Win32"'];
  9. elseif  ( strcmp(computer('arch'),'win64') ==1)
  10. machine_str = ' --machine 64 ';
  11. CUDA_LIB_Location = ['"' getenv('CUDA_PATH')  '\lib\x64"'];
  12. end
  13. NVCC = 'nvcc';

这是Windows下的配置,主要是选择编译器、包含库、cuda库。NVCUDASAMPLES7_5_ROOT本来是....6_5_ROOT,需要改成7.5版本。这些路径可以在MATLAB里单步调试去看。

[html] view plaincopy
  1. nvcc --compile -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64" -o nms_gpu_mex.o  --machine 64  ...
[html] view plaincopy
  1. -I"E:\MATLAB2017a/extern/include " -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" ...
[html] view plaincopy
  1. -I"C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\inc" "functions/nms/nms_gpu_mex.cu"

我的路径是这样的。

运行build.m以后报错:

[html] view plaincopy
  1. Error using mex
  2. LIBCMT.lib(crt0dat.obj) : error LNK2005: _amsg_exit 已经在
  3. MSVCRT.lib(MSVCR120.dll) 中定义
  4. LIBCMT.lib(crt0dat.obj) : error LNK2005: _initterm_e 已经在
  5. MSVCRT.lib(MSVCR120.dll) 中定义
  6. LIBCMT.lib(winapisupp.obj) : error LNK2005: __crtCaptureCurrentContext
  7. 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  8. LIBCMT.lib(winapisupp.obj) : error LNK2005: __crtCapturePreviousContext
  9. 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  10. LIBCMT.lib(winapisupp.obj) : error LNK2005: __crtTerminateProcess 已经在
  11. MSVCRT.lib(MSVCR120.dll) 中定义
  12. LIBCMT.lib(winapisupp.obj) : error LNK2005: __crtUnhandledException 已经
  13. 在 MSVCRT.lib(MSVCR120.dll) 中定义
  14. LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)"
  15. (?terminate@@YAXXZ) 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  16. LIBCMT.lib(crt0init.obj) : error LNK2005: __xi_a 已经在
  17. MSVCRT.lib(cinitexe.obj) 中定义
  18. LIBCMT.lib(crt0init.obj) : error LNK2005: __xi_z 已经在
  19. MSVCRT.lib(cinitexe.obj) 中定义
  20. LIBCMT.lib(crt0init.obj) : error LNK2005: __xc_a 已经在
  21. MSVCRT.lib(cinitexe.obj) 中定义
  22. LIBCMT.lib(crt0init.obj) : error LNK2005: __xc_z 已经在
  23. MSVCRT.lib(cinitexe.obj) 中定义
  24. LIBCMT.lib(winxfltr.obj) : error LNK2005: __CppXcptFilter 已经在
  25. MSVCRT.lib(MSVCR120.dll) 中定义
  26. LIBCMT.lib(mlock.obj) : error LNK2005: _lock 已经在
  27. MSVCRT.lib(MSVCR120.dll) 中定义
  28. LIBCMT.lib(mlock.obj) : error LNK2005: _unlock 已经在
  29. MSVCRT.lib(MSVCR120.dll) 中定义
  30. 正在创建库 G:\faster_rcnn-master\bin\nms_gpu_mex.lib 和对象
  31. G:\faster_rcnn-master\bin\nms_gpu_mex.exp
  32. LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用
  33. /NODEFAULTLIB:library
  34. LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用
  35. /NODEFAULTLIB:library
  36. G:\faster_rcnn-master\bin\nms_gpu_mex.mexw64 : fatal error LNK1169: 找到
  37. 一个或多个多重定义的符号
  38. Error in nvmex (line 48)
  39. eval(mexCommandLine);
  40. Error in faster_rcnn_build (line 23)
  41. nvmex('functions/nms/nms_gpu_mex.cu', 'bin');


这个错误是lib库冲突了,解决办法是修改mex命令:

[html] view plaincopy
  1. mexCommandLine = ['mex ' '-outdir ' outDir ' ' filename '.o'   ' -L' CUDA_LIB_Location   ' -lcudart' ' LINKFLAGS="$LINKFLAGS /NODEFAULTLIB:LIBCMT.LIB"' ];

意思是忽略LIBCMT.lib库,然后继续编译就可以过了。

3.第三步执行startup.m,

[html] view plaincopy
  1. mex -outdir bin nms_gpu_mex.o -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64" -lcudart LINKFLAGS="$LINKFLAGS /NODEFAULTLIB:LIBCMT.LIB"
  2. Building with 'Microsoft Visual C++ 2013 Professional (C)'.
  3. MEX completed successfully.
  4. >> startup
  5. fast_rcnn startup done

至此,基本环境已经配置完成了。

4.运行demo

下载final model,这个最好直接取上面的作者主页下载,给出了百度云的地址。

[html] view plaincopy
  1. If the automatic "fetch_data" fails, you may manually download resouces from:
  2. Pre-complied caffe mex:
  3. Windows-based mex complied with VS2013 and Cuda6.5: OneDrive, DropBox, BaiduYun
  4. ImageNet-pretrained networks:
  5. Zeiler & Fergus (ZF) net OneDrive, DropBox, BaiduYun
  6. VGG-16 net OneDrive, DropBox, BaiduYun
  7. Final RPN+FastRCNN models: OneDrive, DropBox, BaiduYun

下载最后一个。

然后需要在工程根目录下面运行 experiments/script_faster_rcnn_demo,刚开始运行总是崩溃,修改模型以后就可以了:

[html] view plaincopy
  1. %model_dir                   = fullfile(pwd, 'output', 'faster_rcnn_final', 'faster_rcnn_VOC0712_vgg_16layers'); %% VGG-16
  2. model_dir                   = fullfile(pwd, 'output', 'faster_rcnn_final', 'faster_rcnn_VOC0712_ZF'); %% ZF

原因应该是显存不够造成MATLAB崩溃,ZF模型要小一点。如果这部分出错,可以在代码里检查一下你的模型路径和图片路径是否与真实的一致,然后运行就可以了。可以看到这个例子中作者给出了五张图的测试。

2017.04.10修改:faster_rcnn_VOC0712_vgg_16layers模型在我尝试的时候,将demo里的17行    
[html] view plaincopy
  1. <span style="font-size:14px;color:#ff0000;"> opts.test_scales            = 600;</span>

改为  = 300;之后居然神奇地跑通了。可见,之前MATLAB奔溃确实是因为显存不够导致的。

然后运行就可以看到如下结果了:

[html] view plaincopy
  1. fast_rcnn startup done
  2. GPU 1: free memory 1686414131
  3. Use GPU 1
  4. 001763.jpg (500x375): time 0.230s (resize+conv+proposal: 0.124s, nms+regionwise: 0.105s)
  5. 004545.jpg (500x375): time 0.736s (resize+conv+proposal: 0.604s, nms+regionwise: 0.132s)
  6. 000542.jpg (500x375): time 0.246s (resize+conv+proposal: 0.154s, nms+regionwise: 0.092s)
  7. 000456.jpg (500x375): time 0.222s (resize+conv+proposal: 0.088s, nms+regionwise: 0.134s)
  8. 001150.jpg (500x375): time 0.165s (resize+conv+proposal: 0.087s, nms+regionwise: 0.077s)
  9. mean time: 0.320s
  10. Cleared 0 solvers and 2 stand-alone nets

【caffe-MATLAB】自己编译faster-rcnn的MATLAB版本相关推荐

  1. Windows下Faster R-CNN 配置/Matlab版本编译

    配置环境: Windows10x64 Matlab2015Ra VS2013 Opencv2.4.11 CUDA7.5 GTX950M CUDA7.5安装 因为Cuda7.5做了很大的优化改进,而且对 ...

  2. 使用gpu(gtx1080) cudnn 5.1下编译faster rcnn

    GPU (CUDA 8.0,Cudnn5.1 ) Faster-rcnn 在caffe都弄好的情况下----(现在的版本faster-rcnn据说只支持cudnn 3版本的,所以在这之上要是想使用cu ...

  3. Widows下Faster R-CNN的MATALB配置(CPU)

    目录 1. 准备工作 2. VS2013编译Caffe 3. Faster R-CNN的MATLAB源码测试 说实话,费了很大的劲,在调试的过程中,遇到了很多的问题: 幸运的是,最终还是解决了问题: ...

  4. faster rcnn windows 下c++版本

    faster rcnn windows 下c++版本 参考了http://www.cnblogs.com/louyihang-loves-baiyan/p/5485955.html,和http://b ...

  5. faster rcnn可视化(修改demo.py保存网络中间结果)

    转载自:http://blog.csdn.net/u010668907/article/details/51439503 faster rcnn用Python版本https://github.com/ ...

  6. faster rcnn源码解读(六)之minibatch

    转载自:faster rcnn源码解读(六)之minibatch - 野孩子的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/u010668907/article/ ...

  7. faster rcnn源码解读(五)之layer(网络里的input-data)

    转载自:faster rcnn源码解读(五)之layer(网络里的input-data) - 野孩子的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/u010668 ...

  8. 里程碑式成果Faster RCNN复现难?我们试了一下 | 附完整代码

    作者 | 已退逼乎 来源 | 知乎 [导读]2019年以来,除各AI 大厂私有网络范围外,MaskRCNN,CascadeRCNN 成为了支撑很多业务得以开展的基础,而以 Faster RCNN 为基 ...

  9. caffe下matlab、python的配置和faster RCNN的运行

    因为自己的电脑没有安装linux环境,显卡也不支持CUDA,所以在实现faster RCNN的demo的过程中还是很麻烦的. 完善项目文件 下图是vs2013 打开的caffe解决方案的工程目录.由于 ...

  10. Faster R-CNN的安装及测试(Python版本和Matlab版本)

    rbg的Python版本 一.拉取源码 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 拉取完成后,在/h ...

最新文章

  1. 小猿圈Linux学习-Linux种搜索的命令
  2. NASA将天文数据转换为音频,来听听银河系的声音!
  3. Openstack在dashboard界面登录提示无效证书
  4. 南通一酒店搞了个“虎景房”,这睡得着?
  5. 区别ie8和ie9的方法
  6. mysql 定时同步数据_如何定时备份Mysql数据库数据?
  7. reactJS -- 9 组件的Refs(操作DOM的两种方法)
  8. spring分布式事务示例_Spring声明式事务示例
  9. 为什么现在的手机不像以前一样可以换电池?
  10. C语言中类型转换那些事儿
  11. Pentium的保护工作方式
  12. 【新东方的全套价值上亿英语资料】好不容易搞到的~
  13. 5G如何成为相关行业的创新引擎,提升服务和盈利水平
  14. HotKey学习总结
  15. linux断电并重启命令,Linux基本操作:关机 重启
  16. C#WinForm二维码编码解码器
  17. 关于前端的一些学习记录(1)
  18. 打印机有重影 校正对齐喷头
  19. 洛谷 T284709 怨念(resent)
  20. linux嵌入式开发板实训心得,嵌入式实训心得体会.docx

热门文章

  1. boost::process::shell相关的测试程序
  2. boost::geometry::sym_difference用法的测试程序
  3. GDCM:gdcm::File的测试程序
  4. DCMTK:DcmElement :: calcElementLength的测试程序
  5. OpenCV创建小部件Creating Widgets
  6. OpenCV使用Orbbec Astra 3D相机
  7. Qt Designer的UI文件格式
  8. QML识别模块identifiedmodules
  9. OpenGL shader uniform的实例
  10. C/C++ 中指针和引用的区别