有个外国人也实现了这个东西,逻辑比较清楚,看不懂我的文章的话,移步http://personal.ie.cuhk.edu.hk/~xy012/others/install_cudaconvnet.html
写在前面
前一阵子百度有个ICOME比赛,任务一火眼金睛主要内容就是对图像有人没人进行分类,师兄说CNN不错,于是用了Alex Krizhevsky的project,HomePage为https://code.google.com/p/cuda-convnet/
不过文章的Code使用了Python+CUDA框架,在Linux下编译运行,我看作者在回复中说windows下也可以使用,就忍不住用VS编译了一下,一天搞定。
编译环境
- Windows 7 x64
- Visual Studio 2012
- CUDA 5.5
- Python 2.7 x64
- Pthread-win32
- Intel(R) C++ Studio XE 2013 Update 4
环境搭建
VS、CUDA、Intel编辑器直接安装即可,略过。Python2.7安装之后需要按照https://code.google.com/p/cuda-convnet/wiki/Compiling要求,安装对应库,略过。其中Numpy对应x64下载地址为:http://www.lfd.uci.edu/~gohlke/pythonlibs/Pthread下载之后另行下载x64的库,地址:https://code.google.com/p/libusb-winusb-wip/downloads/detail?name=pthread-win32_x64.zip&can=2&q=
下载之后将文件放入pthread的Pre-built.2\lib文件夹下面。记得在Windows中设置对应路径。
%INTEL_DEV_REDIST%redist\intel64\compiler;%INTEL_DEV_REDIST%redist\ia32\compiler;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\libnvvp;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\ia32\compiler;c:\python27;
这些都注意加入路径。
建立工程文件
工程文件下载地址:
流水记录一下改了哪些
- 建立CUDA5.5 project,删除kernel.cu(不知道为什么我的不能建立空CUDA project),
- 合并了include和src文件夹。将头文件和源文件分别放入两个分类器中。建立dummyinclude文件夹,新建cutil_inline.h,
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">Dummy Includes for cutil_inline.h Wei LI <kuantkid <at> gmail <dot> com> */ #include <helper_cuda.h> #define cutilCheckMsg(a) getLastCudaError(a) #define cutGetMaxGflopsDeviceId() gpuGetMaxGflopsDeviceId() #define MIN(a,b) (a) < (b) ? (a) : (b)</blockquote>
- 添加x64编译器并设当前为Release x64模式。
- 选中全部.cu源文件,右键-属性-常规-项类型,改为CUDA C/C++。
- 然后项目属性-CUDA C/C++-Common-Target Machine Platform改为64-bit,Device-Code Generation改为自己显卡的计算能力。这时在.cu文件右键-属性-CUDA C/C++对应项也应该是64-bit和对应的计算能力了。
- 下面截图说明改属性页:(文字太多
)
接下来就是修改文件中的内容了,Linux中include可以任意使用<>,VS在当前目录必须使用双引号"",这个就靠你们自己改了。也可以使用上面链接中文件。
编译生成了pyconvnet.pyd文件。还没完,依赖的dll还没有加入。使用depends软件可以看到pyconvnet.pyd存在两个黄叹号,即没有找到的依赖。找到mkl_core.dll,mkl_intel_thread.dll,pthreadVC2_x64.dll放入Release文件夹中就OK了。
cmd进入Release目录,输入python进入python命令行,输入import pyconvnet没有报错那就完成90%了。
进入cuda-convnet-read-only,将pyconvnet.pyd放入。进入cuda-convnet-read-only\bin目录,新建windows文件夹,将mkl_core.dll,mkl_intel_thread.dll,pthreadVC2_x64.dll拷入文件夹中,加入系统环境变量。
万事俱备,依照https://code.google.com/p/cuda-convnet/wiki/TrainingNet,我们输入命令
python convnet.py --data-path=I:\\cifar-10-py-colmajor --save-path=./tmp --test-range=6 --train-range=1-5 --layer-def=./example-layers/layers-19pct.cfg --layer-params=./example-layers/layer-params-19pct.cfg --data-provider=cifar --test-freq=13
哈哈,出结果啦~~如图:
后记
这篇博客是写在落选入复赛后,我们团队只看见了http://2013.icome.org.cn/这个网站,没关注http://openresearch.baidu.com/,在第二个网站中说明了比赛要求也不知道,哎:任务一测试时候只能使用CPU,任务二不能用Matlab,我们团队都踩线了。通知我们延期两天任务一测试改成CPU版本再提交也可以,没有弄完。任务一在本地测试正确率99%,IDL给我们测试正确率为97.5%;任务二本地正确率为61%。引用学长在十一假期的话说,别管结果,咱至少努力过。深以为然,引以为鉴。