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

栏目: IT技术 · 发布时间: 5年前

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

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

项目简介

之前机器之心报道过一个跨平台人脸识别项目,在 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 对这张世界最大的自拍照识别效果如下图所示:

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

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

项目实测

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

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

def image_demo():
    dbface = DBFace()
    dbface.eval()

    if HAS_CUDA:
        dbface.cuda()

    dbface.load("model/dbface.pth")
    detect_image(dbface, "datas/selfie.jpg")

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

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

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

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

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

def camera_demo():
    dbface = DBFace()
    dbface.eval()

    if HAS_CUDA:
        dbface.cuda()

    dbface.load("model/dbface.pth")
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
    ok, frame = cap.read()

    while ok:
        objs = detect(dbface, frame)

        for obj in objs:
            common.drawbbox(frame, obj)

        cv2.imshow("demo DBFace", frame)
        key = cv2.waitKey(1) & 0xFF
        if key == ord('q'):
            break

        ok, frame = cap.read()

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Hacking Growth

Hacking Growth

Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00

The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具