人脸检测实战

简介: 人脸检测算法是在一幅图片或者视频序列中检测出来人脸的位置,给出人脸的具体坐标,一般是矩形坐标,它是人脸关键.、属性、编辑、风格化、识别等模块的基础。

人脸检测算法是在一幅图片或者视频序列中检测出来人脸的位置,给出人脸的具体坐标,一般是矩形坐标,它是人脸关键.、属性、编辑、风格化、识别等模块的基础。


学术界用来衡量人脸检测器性能的benchmark是[Wider_Face1(http://shuovana1213.me/Wider_Face/Wider_Face Results.html),该数据集主要明确了人脸检测器面对的一些挑战,包括scale、pose、occlusion、极端表情的人脸、(带装扮的人脸)以及过度曝光的人脸等。



进入DamoFD的项目主页,DamoFD的modelcard介绍了模型的背景,讲解了DamoFD的算法原理及其GitHub上的开源Repo,也进一步介绍了模型的使用方式和使用范围,包括训练和推理的代码范例、模型使用的目标场景,同时对模型的局限性以及可能性偏差都进行了介绍。


最后还给出了在Wider_Face验证集上的评估结果。同时,该Repo还提供了人脸相关模型,大家可以点击进行体验。


页面右上角提供了demo service的功能,可以上传自己的图片或者使用预先定义好的图片进行测试,即可以体验DamoFD的人脸检测效果。



启动Notebook实例,选择GPU环境,进入实战环节。



首先进行推理的实战。推理的代码包含三个部分:



第一部分是import相关的三个模块(从项目主页直接复制代码运行即可)。第一个模块是调用OpenCV包进行图片的读取和存储,另外还需要调ModelScope内置的两个模块pipeline和test。之后实际的推理过程中只需3行代码。


首先需要实例化人脸检测,pipeline输入有两个参数,分别是明确任务(即face detection)以及modelID(在FD项目主页左上角)。


输入imagePath(URL的image或者绝对路径的imagePath皆可),将imagePath 喂给dection pipeline,得到的result会返回图片中人脸的bondingbox和对应的score值。


接下来进行可视化环节。



可视化仅有6-7行代码。首先是ModelScope两个的module,即draw_face _detection_result和load_image,分别是根据检测方案的位置画检测框以及读取图片。


将读写的URL图片存储到本地,之后根据result结果可以画出带检测框的人脸图片。最后用matplot包进行plot,即可得到检测出的结果——检测框和对应的score值。score值是检测框的置信度,分数越高代表人脸的可能性越大。



下文将进入训练流程。



首先import:OS包主要用于拼接路径;tempfile负责生成临时的文件夹,用于存储训练好的模型;Msdataset函数主要用加载ModelScope上的数据集,ModelScope已提供了很多数据集,人脸检测最权威的数据集是Wider_Face,在主页内搜索数据集并复制其ID即可下载对应数据集。


trainer和build_trainer是ModelScope内置的两个标准化训练流程函数。


snapshot_download会下载对应模型的模型文件,可以在主页中查看。



其中DamoFD_lms.py里面介绍了DamoFD的结构以及训练的参数,可以将参数喂给trainer用于训练网络。模型文件参数是Pytorch_model.pt,是已经训练好的模型,inference阶段可以直接调用该模型。



训练的第一步流程为Msdataset,输入数据集ID,将namespace(在每个数据集的左上角)放到第一个参数的位置,可以自动加载数据集。


本次实战采用了Mini数据集,如果想要使用Wider_Face全集,去掉后缀的mini即可。下载好数据集后,会得到数据集的train_root和val_root,分别是训练集的图片和validation级的图片所在位置。


snapshot_download将DamoFD的模型文件下载到cache_path,得到绝对路径,同时tempfile负责生成文件夹,用于存储最后生成的模型。_cfg_modify_fn可以修改原先的config相关参数,比如将checkpoint的存储间隔设为1,log的print间隔设为10,评价的间隔设为1(每个GPU上的CPU数目,加快dataload的速度)。



实例化一个trainer,进行训练。


cfg_file是下载的DamoFD的模型文件加对应的配置文件,tmp_dir是生成的临时存放模型输出的文件夹,train_root和val_root是训练集和验证集的图片路径,total_epochs是定义好的训练的epoch的数量。


实例化build_trainer,输入两个参数,一个是trainer的pipeline,另一个是预先输入的configfile,执行trainer.train()即可开启训练。



下文将进入模型评估演示。需要使用一个名为easyface的外部GitHub Repo。

easyface围绕DamoFD提供了脚本,包括单图片推理、多图片推理以及评测模型训练和模型微调。本文将介绍图片推理和评测。



首先,仿照上图目录结构建测试集,也可以直接在ModelScope上下载。


因为使用了GitHub的Repo,需要起一个terminal进行clone。



上图为相关代码。其中最后一行import是评测相关用的函数,thresh_num和count_curve是计算voc_ap的超参,pr_curve用于画precision recurve,recurve之后会挨个读取image_directory中的每个image,实例化人脸检测的pipeline,将image输入之后返回result。如果绑定box,则随机初始化5个0作为pred_info。

后续是voc_ap的检测过程,最后打印出score。


如果想要测试自己训练好的模型,可以将模型路径传入ft_path参数,让face detection里的detector module直接load参数,即可进行测试。



复制代码,运行。


最终输出如上图所示。

相关文章
|
1月前
|
算法 计算机视觉 开发者
OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
188 0
|
12天前
|
机器学习/深度学习 人机交互 Python
基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】
基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】
基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】
|
12天前
|
机器学习/深度学习 人机交互 计算机视觉
基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
|
12天前
|
监控 安全 计算机视觉
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测
|
1月前
|
计算机视觉 开发者 Python
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
119 0
|
1月前
人脸检测源码facedetection
人脸检测源码facedetection
|
1月前
|
机器学习/深度学习 计算机视觉
人脸检测
人脸检测
118 2
|
1月前
|
算法 计算机视觉 开发者
OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
190 0
|
11月前
|
存储 算法 数据可视化
|
Ubuntu Linux 计算机视觉
计算机视觉-图像处理入门(二):初试人脸检测和Face图像处理
计算机视觉-图像处理入门(二):初试人脸检测和Face图像处理
163 0
计算机视觉-图像处理入门(二):初试人脸检测和Face图像处理