rainfly123 / mobilefacenet-ncnn-1

Face Recognition Project on mobile phone, using ncnn to deploy it.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mobilefacenet-ncnn

1. 模型的制作与训练

本项目使用insightface的mobilefacenet网络进行人脸检测与识别。首先我们要做的就是模型的训练,然后再把训练好的模型转化为ncnn的模型,方法请看https://github.com/liguiyuan/mobilefacenet-ncnn/tree/master/deploy,最后输出mobilefacenet.parammobilefacenet.bin这两个文件,这就是我们部署所需的两个文件。

2. 编译ncnn

这个步骤可以参考官方的教程:https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-linux-x86

根据自己所需部署的环境(linux-x86,Android)进行选择编译方法,其实大同小异。编译成功之后在ncnn/build/install/ 就会生成include, lib 文件夹,里面包含自己所需的头文件和ncnn 库文件。

3. 验证模型

在本项目的examples这里提供了一个ncnn最小化模型部署的例子,里面包含人脸检测和人脸相似度对比。

使用方法:

$ cd examples/arcface/
$ make		# 编译程序
$ ./main	# 运行程序

4. 性能分析

我们可以通过ncnn的benchmark工具进行分析,可以在pc或Android设备进行分析。分析方法:https://github.com/Tencent/ncnn/tree/master/benchmark

在安卓设备华为P9 Kirin 950 (4x2.3GHz A72+4x1.8GHz A53)上自己性能表现如下:

HWEVA:/data/local/tmp $ ./benchncnn 8 4 0                                      
loop_count = 8
num_threads = 4
powersave = 0
gpu_device = -1
          squeezenet  min =   34.52  max =   45.66  avg =   36.50
     squeezenet-int8  min =   32.57  max =   45.46  avg =   34.81
           mobilenet  min =   42.87  max =   67.39  avg =   53.37
      mobilenet-int8  min =   40.73  max =   41.25  avg =   40.95
        mobilenet_v2  min =   44.68  max =   45.42  avg =   44.94
          shufflenet  min =   19.58  max =   43.51  avg =   27.65
             mnasnet  min =   32.29  max =   40.78  avg =   33.51
     proxylessnasnet  min =   44.43  max =   44.75  avg =   44.56
           googlenet  min =  110.20  max =  161.82  avg =  124.23
      googlenet-int8  min =   93.00  max =   95.14  avg =   93.86
            resnet18  min =  143.92  max =  145.31  avg =  144.34
       resnet18-int8  min =   84.11  max =  118.15  avg =   88.80
             alexnet  min =  301.81  max =  327.68  avg =  305.20
               vgg16  min =  578.48  max =  626.68  avg =  604.68
            resnet50  min =  614.11  max =  663.31  avg =  621.09
       resnet50-int8  min =  193.42  max =  194.41  avg =  193.89
      squeezenet-ssd  min =  102.94  max =  103.96  avg =  103.40
 squeezenet-ssd-int8  min =  106.35  max =  110.12  avg =  107.56
       mobilenet-ssd  min =   95.07  max =   96.55  avg =   95.52
  mobilenet-ssd-int8  min =   83.72  max =   84.12  avg =   83.90
      mobilenet-yolo  min =  264.28  max =  270.89  avg =  266.10
    mobilenet-yolov3  min =  243.05  max =  252.33  avg =  245.20
       mobilefacenet  min =   17.05  max =   31.43  avg =   22.16

5.手机端人脸检测识别

安卓端的代码是在官网提供的mtcnn人脸检测的工程上进行修改,使用华为P9 Kirin 950,在多人脸检测上平均时间 在90~110ms 之间,第一次检测的时间比较长(可能第一次要加载到内存吧?),人脸检测效果还不错吧。

Min Max Avg
多人脸检测 90.65ms 212.35ms 106.73ms
最大人脸检测 31ms 194ms 69ms
人脸识别 135ms 278ms 159ms

编译好的apk 文件在tools文件夹,可以在自己是手机上进行测试。

About

Face Recognition Project on mobile phone, using ncnn to deploy it.


Languages

Language:C++ 88.2%Language:Java 10.2%Language:C 0.6%Language:Python 0.5%Language:CMake 0.4%