您的位置:首页 > 编程语言 > C语言/C++

RetinaFace学习记录:Python,C++

2019-06-05 18:29 1191 查看
版权声明:Tosonw https://blog.csdn.net/Tosonw/article/details/90900856

一、介绍

RetinaFace是一款实用的单级SOTA人脸检测模型,整个模型整合了:人脸检测、人脸对齐、像素级的人脸分析、3D密集通信回归。

虽然在未受控制的人脸检测方面取得了巨大进步,但野外准确有效的面部定位仍然是一个开放的挑战。这篇文章提出了一个强大的单阶段人脸检测器,名为RetinaFace,它利用联合监督和自我监督的多任务学习,在各种人脸尺度上执行像素方面的人脸定位。
具体来说,我们在以下五个方面做出了贡献:

  • (1)我们在WIDER FACE数据集上手动注释五个面部标志,并在这个额外的监督信号的帮助下观察硬面检测的重要改进。
  • (2)我们进一步增加了一个自监督网格解码器分支,用于与现有的受控分支并行地预测像素三维形状的面部信息。
  • (3)在WIDER FACE硬测试装置上,RetinaFace的性能优于现有技术平均预测(AP)1.1%(达到AP等于91.4%)。
  • (4)在IJB-C测试集上,RetinaFace使最先进的方法(ArcFace)能够改善他们在面部验证中的结果(FAR = 1e-6的TAR = 89.59%)。
  • (5)通过采用轻量级骨干网络,RetinaFace可以在单个CPU内核上实时运行,以实现VGA分辨率的显示。

论文地址:
https://arxiv.org/pdf/1905.00641.pdf
Github地址:(基于Python平台,MXNet框架)
https://github.com/deepinsight/insightface/tree/master/RetinaFace
数据:
https://pan.baidu.com/s/1Laby0EctfuJGgGMgRRgykA
http://shuoyang1213.me/WIDERFACE/WiderFace_Results.html

二、安装

1.安装MXNet并支持GPU。
2.如果您使用基于DCN的主干,请从Deformable-ConvNets安装Deformable Convolution V2运算符。
3.键入make以构建cxx工具。

三、测试(Python)

run

test.py
for testing.

问题1

我运行

test.py
时遇到错误:

from ..cython.bbox import bbox_overlaps_cython
ImportError: No module named bbox
# issue上指明要先‘$ make’
# 然而make之后仍然是这个错误。
## 我在调用cython之前使用:
#import pyximport
#pyximport.install()
## 又得到如下错误:
#raise CompileError, msg
#ImportError: Building module rcnn.cython.bbox failed: ["CompileError: command 'gcc' failed with exit status 1\n"]

# 我将‘bbox.cpython-36m-x86_64-linux-gnu.so’改名为`bbox.so`,得到了另一个错误:
ImportError: /home/toson/projects/insightface/RetinaFace/rcnn/cython/bbox.so: undefined symbol: _Py_FalseStruct

而在我查找上述问题时,我得到了指点:

看起来你用python3编译了lib,但是试图用python2运行它。

终于找到了解决办法:使用pyhton2来编译setup.py脚本。

$ cd rcnn/cython/
$ ~/anaconda2/bin/python setup.py build_ext --inplace

参阅:https://github.com/deepinsight/insightface/issues/395

运行结果

一次前向传播时间:约300ms。

四、C++示例代码

示例1:基于ncnn框架

GitHub:https://github.com/Charrin/RetinaFace-Cpp

示例2:基于Caffe框架

GitHub:https://github.com/cholihao/Retinaface-caffe

代码需要修改,修改好之后能够运行mnet(.prototxt)(.caffemodel)模型。
注:mnet模型文件为RetinaFace-MobileNet模型。

运行mnet结果

运行报错:

Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR

模型文件需要修改:
mnet.prototxt
文件中,提示错误的那层网络的
convolution_param
里,添加
engine: CAFFE

  • 1.CPU
    一次前向传播时间:318ms:。
    1000 times Forward() cost: 318107ms.
  • 2.GPU
    运行异常:
    Check failed: status == CUDNN_STATUS_SUCCESS (8 vs. 0) CUDNN_STATUS_EXECUTION_FAILED
运行R50结果

注:R50模型文件为RetinaFace-ResNet50模型。
运行异常:模型文件需要修改。

  • 1.CPU
    一次前向传播时间:1.8s:。
    10 times Forward() cost: 18140ms.
  • 2.GPU
    显存不够(RTX2060)。
    Check failed: error == cudaSuccess (2 vs. 0) out of memory
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: