RetinaFace完整安装历程 windows10+CPU版本

文章目录

      • (一)安装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 腾讯微云
data目录
(3)按官网要求,下载R50模型,在~\insightface\RetinaFace新建文件夹model,把压缩包中的params和json文件放在model目录下;
RetinaFace-R50 [百度云链接]
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行的gpuid=0改为gpuid=-1

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

此后报错会变为下图
报错可以发现要求版本更新的提示没有了。

[成功测试结果]

cmd端
最后一行有写图片存为了detector_test,就在当前目录下
可喜可贺
终于运行成功了!可喜可贺!