文章目录
- (一)安装MXNet
- 1.推荐安装方法
- 2.从github下载MXNet
- 3.anaconda安装 mxnet包
- [查询MXNet版本和路径]
- [遇到问题]
- (1)无法定位程序输入点OPENSSL_sk_new_reserve于动态链接库\anaconda\Library\bin\libssl-1_1-x64.dll上
- (2)命令行输入 python 弹出 microsoft store
- (二)安装retinaface
- [遇到问题]
- (1)ModuleNotFoundError: No module named 'rcnn.cython.bbox'
- (2)ModuleNotFoundError: No module named 'Cython'
- (3)大多数问题的解决方案
- 3)Compile with USE_CUDA=1 to enable GPU usage
- 4)ValueError: Buffer dtype mismatch, expected 'int_t' but got 'long long'
- (4)AttributeError: 'NoneType' object has no attribute 'shape'
- (5)warning提示mxnet版本更新
- [成功测试结果]
(一)安装MXNet
首先安装MXNet。此后的运行错误表明,mxnet版本要在1.3以上
1.推荐安装方法
1.在pypi.org上找到mxnet包;
2.选择对应python的版本;
3.按照官网提示,使用pip安装。
安装普通的cpu版本,打开cmd输入:(前提是把pip加入环境变量)
1 | > pip install mxnet |
2.从github下载MXNet
github链接:incubator-mxnet
下载完成后,在cmd用python编译
(如果使用anaconda,需在anaconda prompt而不是cmd安装)
1 2 | > cd python (切换到mxnet里的python文件夹) > python setup.py install |
3.anaconda安装 mxnet包
(1)打开Anaconda Navigator,在environmnet中搜索mxnet,查找范围设定为all;选中mxnet包,点击Apply下载
(2)也可以使用方法1(有博主反应pip安装坑太多,conda install mxnet更好)
[查询MXNet版本和路径]
安装好以后可以检查一下,mxnet版本要在1.3以上。
1 2 3 4 | > python >>> import mxnet >>> mxnet.__version__ >>> mxnet.__path__ |
如果不是1.3以上,手动指定版本安装:(不用先删后装,原来的版本会自动删掉的)
1 | >pip install mxnet==1.3.1 |
[遇到问题]
(1)无法定位程序输入点OPENSSL_sk_new_reserve于动态链接库\anaconda\Library\bin\libssl-1_1-x64.dll上
解决:比较 \anaconda\Library\bin\libssl-1_1-x64.dll 和 \anaconda\DLLs\libssl-1_1-x64.dll 两个文件的日期,用日期早的(先前的)替换日期晚的(新的)。如果遇到文件已打开无法复制成功,可以重启anaconda。
(2)命令行输入 python 弹出 microsoft store
将用户环境变量中的 %USERPROFILE%\AppData\Local\Microsoft\WindowsApps 删除或移到python之后。重新启动cmd,在新的环境变量下运行。
(二)安装retinaface
(1)下载整个insightface。github链接
(2)按官网要求,下载标记、WideFace图片库并整理目录;
annotations (face bounding boxes & five facial landmarks)百度云链接
WIDER Face Training Images 腾讯微云
WIDER Face Validation Images 腾讯微云
WIDER Face Testing Images 腾讯微云
(3)按官网要求,下载R50模型,在~\insightface\RetinaFace新建文件夹model,把压缩包中的params和json文件放在model目录下;
RetinaFace-R50 [百度云链接]
(4)测试安装是否成功:
在cmd下运行:
1 2 | > cd ~\insightface\RetinaFace > python test.py |
来吧,开始面对一连串的报错吧~~
[遇到问题]
(1)ModuleNotFoundError: No module named ‘rcnn.cython.bbox’
————————————————
以下解决方案的参考原文链接
参阅:https://github.com/deepinsight/insightface/issues/395
问题原因: make的时候编译使用的python版本,和最后run test.py的python版本不一致。(可以查看makefile文件,即一目了然。)
两种解决办法:
1.使用我们运行用的版本的pyhton来编译setup.py脚本。
(比如我用的python2,就要用python2去编译,命令如下:)
1 2 | $ cd rcnn/cython/ $ ~/anaconda2/bin/python setup.py build_ext --inplace |
2.也不用再去编译,直接使用编译的那个版本的python来运行test.py。
————————————————
(2)ModuleNotFoundError: No module named ‘Cython’
解决:在cmd中输入
1 | >> pip install cython |
安装cython包。
(3)大多数问题的解决方案
————————————————
RetinaFace在win10+CPU版mxnet+python36下配置运行
这篇文章解决了大多数问题。
文内主要操作:
1)更改rcnn/Cython/setup.py
由linux环境改至windows环境的变化,导致该文件需要更改
- 找到如下try-except块,大概在65行
1 2 3 4 | try: numpy_include = np.get_include() except AttributeError: numpy_include = np.get_numpy_include() |
- 在此块之前添加以下代码块。
(这里的try…except…是百度的网上的帖子,必须加上,否则会出现Unable to find vcvarsall.bat错误)
1 2 3 4 5 6 7 8 | try: from setuptools import setup from setuptools import Extension except ImportError: from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext import numpy as np |
- 大概在130行,找到ext_modules
- 把所有的
extra_compile_args={'gcc': ["-Wno-cpp", "-Wno-unused-function"]} 替换为extra_compile_args=["/openmp"] ,注意括号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ext_modules = [ Extension( "bbox", ["bbox.pyx"], extra_compile_args=["/openmp"], include_dirs=[numpy_include] ), Extension( "anchors", ["anchors.pyx"], extra_compile_args=["/openmp"], include_dirs=[numpy_include] ), Extension( "cpu_nms", ["cpu_nms.pyx"], extra_compile_args=["/openmp"], include_dirs = [numpy_include] ), ] |
- 文件最后,将
cmdclass={'build_ext': custom_build_ext} 改为cmdclass={'build_ext': build_ext}
1 2 3 4 5 6 7 | setup( name='frcnn_cython', ext_modules=ext_modules, # inject our custom trigger # cmdclass={'build_ext': custom_build_ext}, cmdclass={'build_ext': build_ext}, ) |
2)重新编译setup.py
1 2 | > cd RetinaFace\rcnn\cython > python setup.py build_ext --inplace |
可以发现在~\RetinaFace\rcnn\cython里生成了.c和.pyd文件
3)Compile with USE_CUDA=1 to enable GPU usage
更改GPU运行为CPU运行
将test.py中14行的
4)ValueError: Buffer dtype mismatch, expected ‘int_t’ but got ‘long long’
更改cpu_nms.pyx:
~\RetinaFace\rcnn\cython\cpu_nms.pyx 里25行
1 | cdef np.ndarray[np.int_t, ndim=1] order = scores.argsort()[::-1] |
更改为
1 | cdef np.ndarray[np.int_t, ndim=1] order = scores.argsort()[::-1].astype(np.int32) |
5)重新编译setup.py
同第2步,python setup.py build_ext --inplace
————————————————
此后再运行test.py,你有可能可以成功了(但我还没有)
(4)AttributeError: ‘NoneType’ object has no attribute ‘shape’
查阅资料得知,这是因为图片地址不正确,导致没有找到图片,object.shape是空值。
定位到报错的19行:
1 2 | 18 img = cv2.imread('t1.jpg') 19 print(img.shape) |
所以是 t1.jpg 没有找到了。那么这张图在哪里呢…
终于找到,是在 ~\insightface\sample-images 中有两张图t1、t2,把它们复制到 ~\insightface\RetinaFace 目录下就可以了
(5)warning提示mxnet版本更新
[10:56:15] Warning: loading symbol saved by MXNet version 10300 with lower version of MXNet v10100. May cause undefined behavior. Please update MXNet if you encounter any issue
所以最好给MXNet升级,起码要1.3.1
但是在anaconda3中,mxnet的最新版本只到1.2.1(吐血
采用如下方法安装mxnet 1.3.1版本:
1 | >pip install mxnet==1.3.1 |
安装时需要numpy 1.14.6,但我的版本是1.15.0,会报一串长长的红字错误。把numpy的版本降级为1.14.6:
1 | >pip install numpy==1.14.6 |
此后报错会变为下图
可以发现要求版本更新的提示没有了。
[成功测试结果]
最后一行有写图片存为了detector_test,就在当前目录下
终于运行成功了!可喜可贺!