模型仅有7M:轻量级高精度人脸识别方法DBFace

新闻 人脸识别
DBFace 是一个轻量级的实时人脸识别方法,其有着更快的识别速度与更高的精度。下图展示了多种人脸检测方法在 WiderFace 数据集上的测试效果。

 这个仅 7M 大小的人脸识别模型几乎识别出了世界最大自拍照中的所有人像!

[[321809]]

项目简介

之前机器之心报道过一个跨平台人脸识别项目,在 CPU 上就能轻松跑出 1000FPS。这次介绍的项目也是一个轻量级人脸识别项目。不同的是,该项目在保持较小参数量的前提下,识别精度要高很多,并且只需要 OpenCV 和 PyTorch 就能运行。

DBFace 是一个轻量级的实时人脸识别方法,其有着更快的识别速度与更高的精度。下图展示了多种人脸检测方法在 WiderFace 数据集上的测试效果。可以看到不仅 DBFace 模型的大小最小,其在 Easy、medium、Hard 三个测试任务中均取得了最高的识别精度。

模型仅有7M:轻量级高精度人脸识别方法DBFace

项目地址:https://github.com/dlunion/DBFace

WiderFace 是一个关于人脸检测的基准跑分数据集,其中包含 32,203 张图片以及在各方面剧烈的 393,703 张人脸,数据集具有从简单到困难等不同难度的任务。下图是改数据集中一些样本的展示,可以看到,要想准确地识别出图中所有人脸还是很有挑战的。DBFace 在该数据集的不同任务上分别取得 0.925、0.920、0.847 的准确率,实属不易。

模型仅有7M:轻量级高精度人脸识别方法DBFace

有关 WiderFace 的详细介绍请读者移步其官网:

http://shuoyang1213.me/WIDERFACE/

效果展示

下图展示了不同人脸识别方法在 WiderFace 数据集上的 P-R 曲线。P-R 曲线可以较直观地展示二分类器的 Precision 和 Recall。当需要对不同算法进行比较时,若某个二分类器的 P-R 曲线被另一个二分类器的 P-R 曲线完全包住,即表明后者的性能优于前者。从图中可以看到,DBFace 包围的面积在三个任务中均相对较大。

模型仅有7M:轻量级高精度人脸识别方法DBFace

当阈值设置为 0.2 时,DBFace 对这张世界最大的自拍照识别效果如下图所示:

可以看到,DBFace 的识别准确率非常高,图中很多人脸甚至放大后单凭肉眼也很难分辨,DBFace 却仍然能够识别出来,并且模型大小仅 7M,完全能够在边缘设备上实时运行。于是,机器之心也上手测试了一番。

项目实测

项目作者提供的代码示例中包含对静态图片的识别,同时也有一个调用电脑摄像头的 GUI。值得注意的是,该项目并不需要太多依赖项,只要有 PyTorch、Numpy 和 OpenCV 即可运行。由于以上依赖环境都是非常常用的扩展库,网上有大量相应安装教程,这里就略过其安装步骤。

在 main.py 中,image_demo() 与 camera_demo() 分别对应静态图片识别与调用摄像头进行识别。静态图片识别代码为:

  1. def image_demo(): 
  2.  
  3.     dbface = DBFace() 
  4.  
  5.     dbface.eval() 
  6.  
  7.     if HAS_CUDA: 
  8.  
  9.         dbface.cuda() 
  10.  
  11.     dbface.load("model/dbface.pth"
  12.  
  13.     detect_image(dbface, "datas/selfie.jpg"

以上代码将会读取训练后的模型,对图片 datas/selfie.jpg 进行识别,并将结果保存到 detect_result/selfie.draw.jpg。

让我们来看一下识别效果:

模型仅有7M:轻量级高精度人脸识别方法DBFace

从上图可以看到,即使在室内灯光颜色、明暗差别较大的环境下,DBFace 也识别出了图中几乎所有的人,甚至是中间那个一边画彩虹,一边指向闪耀灯球戴头盔的人也难逃其「魔掌」。当然,由于这里设置的检测阈值较低,存在一些误分类的现象。图中一些人的手和右上角的灯球就被误识别为了人脸。适当调高阈值即可消除此现象。

调用电脑摄像头检测的代码为:

  1. def camera_demo(): 
  2.  
  3.     dbface = DBFace() 
  4.  
  5.     dbface.eval() 
  6.  
  7.     if HAS_CUDA: 
  8.  
  9.         dbface.cuda() 
  10.  
  11.     dbface.load("model/dbface.pth"
  12.  
  13.     cap = cv2.VideoCapture(0
  14.  
  15.     cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640
  16.  
  17.     cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480
  18.  
  19.     ok, frame = cap.read() 
  20.  
  21.     while ok: 
  22.  
  23.         objs = detect(dbface, frame) 
  24.  
  25.         for obj in objs: 
  26.  
  27.             common.drawbbox(frame, obj) 
  28.  
  29.         cv2.imshow("demo DBFace", frame) 
  30.  
  31.         key = cv2.waitKey(1) & 0xFF 
  32.  
  33.         if key == ord('q'): 
  34.  
  35.             break 
  36.  
  37.         ok, frame = cap.read() 

运行以上代码将会生成一个 640x480 的 GUI 界面,调用摄像头实时进行人脸检测。

感兴趣的小伙伴赶快将本项目 git clone 到本地测试一下吧!

 

 

责任编辑:张燕妮 来源: 机器之心
相关推荐

2021-08-13 10:01:19

人脸识别人工智能数据

2019-10-18 14:57:05

人脸识别AI人工智能

2020-11-02 11:24:52

算法人脸识别技术

2024-01-08 13:38:00

AI模型

2014-10-09 10:42:48

iOS手势识别

2017-03-20 08:58:02

Python人脸识别AI

2021-05-10 11:08:00

人工智能人脸识别

2009-07-17 14:38:51

轻量级Swing组件

2009-07-14 18:05:28

轻量级Swing组件

2022-08-16 15:20:12

微服务IT运维

2021-09-02 17:51:12

微软Windows 7Windows

2021-03-09 09:20:09

人脸识别人工智能智能手机

2009-09-11 08:26:49

Linux系统CRUX 2.6Linux

2023-08-09 08:01:38

场景Redis接口

2022-10-20 09:33:35

2024-01-03 07:42:49

分割模型高性能

2019-10-14 15:13:24

AI 数据人工智能

2016-10-14 16:35:39

2013-11-21 09:58:53

天翼开发平台天翼

2020-07-16 10:40:48

VRAR机器学习
点赞
收藏

51CTO技术栈公众号