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

学术界用来衡量人脸检测器性能的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参数,即可进行测试。

复制代码,运行。

最终输出如上图所示。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐