百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

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

ztj100 2024-10-30 05:12 11 浏览 0 评论

机器之心报道

参与:Racoon X

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

项目简介

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

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

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

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

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

http://shuoyang1213.me/WIDERFACE/

效果展示

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

当阈值设置为 0.2 时,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。

让我们来看一下检测效果:

从上图可以看到,即使在室内灯光颜色、明暗差别较大的环境下,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 到本地测试一下吧!

相关推荐

Whoosh,纯python编写轻量级搜索工具

引言在许多应用程序中,搜索功能是至关重要的。Whoosh是一个纯Python编写的轻量级搜索引擎库,可以帮助我们快速构建搜索功能。无论是在网站、博客还是本地应用程序中,Whoosh都能提供高效的全文搜...

如何用Python实现二分搜索算法(python二分法查找代码)

如何用Python实现二分搜索算法二分搜索(BinarySearch)是一种高效的查找算法,适用于在有序数组中快速定位目标值。其核心思想是通过不断缩小搜索范围,每次将问题规模减半,时间复杂度为(O...

路径扫描 -- dirsearch(路径查找器怎么使用)

外表干净是尊重别人,内心干净是尊重自己,干净,在今天这个时代,应该是一种极高的赞美和珍贵。。。----网易云热评一、软件介绍Dirsearch是一种命令行工具,可以强制获取web服务器中的目录和文件...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。...

从零开始学习 Python!2《进阶知识》 Python进阶之路

欢迎来到Python学习的进阶篇章!如果你说已经掌握了基础语法,那么这篇就是你开启高手之路的大门。我们将一起探讨面向对象编程...

白帽黑客如何通过dirsearch脚本工具扫描和收集网站敏感文件

一、背景介绍...

Python之txt数据预定替换word预定义定位标记生成word报告(四)

续接Python之txt数据预定替换word预定义定位标记生成word报告(一)https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=748...

假期苦短,我用Python!这有个自动回复拜年信息的小程序

...

Python——字符串和正则表达式中的反斜杠('\')问题详解

在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下。在Python普通字符串中在Python中,我们用'\'来转义某些普通...

Python re模块:正则表达式综合指南

Python...

Python中re模块详解(rem python)

在《...

python之re模块(python re模块sub)

re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以帮助我们...

MySQL、PostgreSQL、SQL Server 数据库导入导出实操全解

在数字化时代,数据是关键资产,数据库的导入导出操作则是连接数据与应用场景的桥梁。以下是常见数据库导入导出的实用方法及代码,包含更多细节和特殊情况处理,助你应对各种实际场景。一、MySQL数据库...

Zabbix监控系统系列之六:监控 mysql

zabbix监控mysql1、监控规划在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是...

mysql系列之一文详解Navicat工具的使用(二)

本章内容是系列内容的第二部分,主要介绍Navicat工具的使用。若查看第一部分请见:...

取消回复欢迎 发表评论: