树莓派+实时linux,可在树莓派实时运行的人脸检测

基于CNN的快速人脸识别

深圳大学的于仕琪老师发布的人脸检测库:libfacedetectio 于昨日正式开源。

这是一个基于CNN的人脸检测的开源库,CNN模型权重信息已在C源文件中转换为stastic variales。也就是说我们需要的模型权重不再是某个特定格式的文件,而直接是.cpp。

面部识别源代码不依赖于任何其他库。因此在速度上还是精度上,都有巨大的优势,是目前已知开源库中最好用的一款。

9f463ad5f80dba46f87f305b95d81bcf.png

下面是于仕琪老师的原话:

我们自己用C++语言实现了CNN的前向操作,专门针对人脸检测而实现。代码量少,使用方便。现在您可以下载源代码,在Windows、Linux、ARM、Android等所有支持C++编译的环境中编译使用!

这个开源算法库有如下优点:

速度快:在树莓派上可以实时进行人脸检测;有采用AVX2(x64平台)和NEON(ARM平台)指令集进行优化。

简洁:只有一个接口函数,把代码放到你的项目中,然后直接调用接口函数则可。

独立:不依赖Caffe、OpenBLAS、OpenCV等任何算法库。

兼容:可以在几乎所有平台上使用,只要有C++编译器则可。

小:代码仅1500行;INT8模型仅800KB!

另注意,项目License改用3-clause BSD License,注意不要违规哦!

看看有多快速

因为这个库使用了SIMD指令,我们在编译的时候可以选择开启从而提升人脸识别的速度:

SIMD instructions are used to speedup the detection. You can enable AVX2 if you use Intel CPU or NEON for ARM.

在桌面平台下,人脸检测识别的速度最高可以达到1500+fps,最小可以检测脸的大小为12x12,日常足够我们去使用了。

CNN-based Face Detection on Windows

Method

Time

FPS

Time

FPS

X64

X64

X64

X64

Single-thread

Single-thread

Multi-thread

Multi-thread

OpenCV Haar+AdaBoost (640×480)

12.33ms

81.1

cnn (CPU, 640×480)

64.21ms

15.57

15.59ms

64.16

cnn (CPU, 320×240)

15.23ms

65.68

3.99ms

250.40

cnn (CPU, 160×120)

3.47ms

288.08

0.95ms

1052.20

cnn (CPU, 128×96)

2.35ms

425.95

0.64ms

1562.10

OpenCV Haar+AdaBoost runs with minimal face size 48×48

Face detection only, and no landmark detection included.

Minimal face size ~12×12

Intel(R) Core(TM) i7-7700 CPU @ 3.6GHz.

另外一个比较厉害的是,这个库在树莓派上也可以跑到非常快的速度,树莓派相比大家都很清楚,200多块钱的一个小型处理器,树莓派PI3B+的处理芯片为 Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz,而在这块芯片上以320x240的分辨率可以跑到23fps,可以说是实时了,当然稍微降低精度的话速度可以提升更快。

CNN-based Face Detection on ARM Linux (Raspberry Pi 3 B+)

Method

Time

FPS

Time

FPS

Single-thread

Single-thread

Multi-thread

Multi-thread

cnn (CPU, 640×480)

512.04ms

1.95

174.89ms

5.72

cnn (CPU, 320×240)

123.47ms

8.10

42.13ms

23.74

cnn (CPU, 160×120)

27.42ms

36.47

9.75ms

102.58

cnn (CPU, 128×96)

17.78ms

56.24

6.12ms

163.50

Face detection only, and no landmark detection included.

Minimal face size ~12×12

Raspberry Pi 3 B+, Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz

为什么这么快

整个项目都是用C++编写的,包括所有的前向网络和前向操作,没有使用任何的神经网络库,类似于ncnn,将所有的卷积操作都通过多线程的方式进行了优化,并且本身算法设计的模型也提前进行了优化(本身就是小模型)。另外还支持量化模型,也就是int8精度的模型,这样的话网络可以在精度略微下降一点的情况下实现速度的大幅提升。

如何运行,目前为止如果我们直接使用项目地址中的CmakeLists在Linux下编译会报错,我们需要在提供的Cmakelist文件中添加这一句set(CMAKE_CXX_FLAGS "-mavx -mfma")。就可以编译通过了。

编译后执行./demo即可:

prototype@prototype-X299-UD4-Pro:~/$ ./demo kate.png

1 faces detected.

face_rect=[189, 89, 142, 142], neighbors=99, angle=0

c7dc477356a03cbfea17a40c09a07209.png

项目地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值