项目需要使用MTCNN来检测、对齐、剪切出人脸,它是使用MXNet作为框架的,但是我自己的Ubuntu里各种框架乱成一团,不想再添乱就铁了心要在windows里配一个。无奈网上的资料不多,挣扎了几天之后决定留下这么一份文档。
首先我们使用的不是DMLC在github上发布的那一套MXNet,它那个的windows版2016年就不更新了,现在负责维护的地址是这个:
https://github.com/yajiedesign/mxnet/releases
这是一个日更的版本,非常新。巧的是MTCNN也是用新版的MXNet,所以16年版的就不好使了,得靠这个日更的,以下关于这一套产品统称为【日更版】。
新版的MXNet里有一些参数在vc12编译出的库里没有,所以推荐使用vc14版本,也就是VS2015。
在正式讲安装配置步骤之前,先推荐一个软件叫Dependency Walker,它的作用是理清楚库文件的依赖关系,有助于后面讲依赖库的版本情况:
这是软件的使用截图,注意红框部分,这里需要我们对文件名有一点敏感:
1、LIBopenBLAS 没什么特别的,日更版里面自带了。
2、CUDART64_80、CURAND64_80、CUBLAS64_80、CUFFT64_80、NVRTC64_80 这四个留意后面的数字,这一组文件可以在3rdparty\cudart里找到,如果版本号不一样,请自行更正,日更版应该自带。
3、cuDNN64_5 这是需要自己去下载的文件,从文件名可以知道我们需要一个64位的cudnn,版本号大概是5开头,根据上面的说法我们还需要一个和CUDA8.0配合的cudnn。
4、NVCUDA 这很明显是NVIDIA的CUDA,不过没带版本号先不管它。
5、VCOMP140 这个可以翻3rdparty\vc 里找到,版本号不对请自行修改
6、KERNEL32、USER32 这种大众脸应该不是什么特别的需求,不管它们
import过程中出现的 [WinError 126]基本都是因为这个原因。
————————————————————————接下来开始正式讲步骤————————————————————————————
1、下载并解压日更版地址里的vc14 base package
2、下载并解压日更版地址里的2017xxxx_mxnet_x64_vc14_gpu.7z 到上面base package的目录里,形成一个完成的结构
2、其中最重要的一个东西便是其他各种教程里说的需要make呀,compile呀的那个 build\libmxnet.dll,也就是上边dependency walker关注的这个文件,所以预编译版便是大佬帮我们事先编译好了这个dll。
3、[WinError 126]出现的原因在于import一个模块的时候,它的依赖库需要的依赖库也必须可以找到,不然就报错。
4、照上面所说装好cuda8.0,这个教程很多 也很好装。
5、准备好cudnn5系列 for cuda8.0
6、关注一下日更版里的文件,先运行根目录下的setupenv.cmd,这个文件是设置所有的相关环境变量的
建议点开之前先留意一下【用户变量】里的path,我在使用过程中出现字符过长被截断的问题,换句话说我之前的用户变量被破坏掉了一部分,所以请提前做好准备
7、命令行到python目录,执行
D:\MXNet\python> python setup.py install
8、最后进到 MXNet\3rdparty 里把cudnn的相关文件复制进去就好了,其他的依赖文件应该都在
9、可以进python尝试import mxnet了。
祝你成功