这款7M人脸识别模型几乎可以识别世界上最大自拍中的所有人像!项目介绍之前机器之心报了一个跨平台的人脸识别项目,在CPU上可以轻松跑1000FPS。本次介绍的项目也是一个轻量级的人脸识别项目。不同的是,该项目在保持少量参数的情况下识别准确率高很多,而且只需要OpenCV和PyTorch即可运行。DBFace是一种轻量级的实时人脸识别方法,识别速度更快,准确率更高。下图展示了各种人脸检测方法在WiderFace数据集上的测试结果。可以看出,DBFace模型不仅尺寸最小,而且在Easy、medium和Hard三个测试任务中都取得了最高的识别准确率。项目地址:https://github.com/dlunion/DBFaceWiderFace是一个人脸检测benchmark基准数据集,包含32203张图片,393703张人脸各方面。数据集的范围从简单到难度各异的困难任务。下图显示了修改后的数据集中的一些样本。可见,要准确识别图片中所有的人脸,还是很有挑战性的。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()分别对应静态图像识别和相机识别。静态图像识别代码为:defimage_demo():dbface=DBFace()dbface.eval()ifHAS_CUDA:dbface.cuda()dbface.load("model/dbface.pth")detect_image(dbface,"datas/selfie.jpg")以上代码会读取训练好的模型,识别图像datas/selfie.jpg,并将结果保存到detect_result/selfie.draw.jpg。来看看识别效果:从上图可以看出,即使是在室内灯光颜色和明暗差异较大的环境下,DBFace也几乎认出了图片中的所有人物,甚至是图中的那个人中间画出彩虹而戴着头盔的人指着闪烁的光球也将无法逃脱它的“魔掌”。当然,由于这里设置的检测阈值较低,所以会出现一些误分类现象。图中部分人的手和右上角的光球被误识别为人脸。这种现象可以通过适当调整阈值来消除。调用电脑摄像头检测的代码为:defcamera_demo():dbface=DBFace()dbface.eval()ifHAS_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()whileok:objs=detect(dbface,frame)forobjinobjs:common.drawbbox(frame,obj)简历2。imshow("demoDBFace",frame)key=cv2.waitKey(1)&0xFFifkey==ord('q'):breakok,frame=cap.read()运行上面的代码会生成一个640x480的GUI界面,在camera中调用实时执行人脸检测。感兴趣的小伙伴们赶紧gitclone这个项目在本地测试一下吧!
