人脸检测实战

简介: 人脸检测实战

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

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

复制代码,运行。

编辑切换为居中

最终输出如上图所示。

相关文章
|
2月前
|
人工智能 专有云 索引
Qwen3-Pro重磅发布!基于阿里云APG服务器的专属优化模型,性能翻倍
近日,阿里云专有云团队联合通义实验室推出针对阿里云APG服务器的专属优化模型Qwen3-Pro:对比Qwen3-VL-235B(开源版)模型效果持平、性能翻倍
260 0
|
安全 小程序 物联网
WLAN基础 无线局域网配置方法 旁挂三层组网隧道转发方式配置
WLAN基础 无线局域网配置方法 旁挂三层组网隧道转发方式配置
2021 0
WLAN基础 无线局域网配置方法 旁挂三层组网隧道转发方式配置
|
12月前
|
存储 NoSQL 定位技术
MongoDB索引知识
MongoDB索引是提升查询性能的关键工具,通过构建特殊的数据结构(如B树)优化数据访问路径。无索引时,查询需全集合扫描,时间复杂度为O(n);使用索引后可降至O(log n),实现毫秒级响应。MongoDB支持多种索引类型:单字段索引适用于高频单字段查询;复合索引基于最左前缀原则优化多条件过滤和排序;专业索引包括地理空间索引(支持LBS服务)、文本索引(全文搜索)和哈希索引(分片键优化)。合理选择和优化索引类型,可显著提升数据库性能。建议使用explain()分析查询计划,并定期清理冗余索引。
计算机组成原理(9)----硬布线控制器
计算机组成原理(9)----硬布线控制器
680 1
|
存储 开发框架 Ubuntu
dpdk课程学习之公开课基础知识整理(uio,dma,vfio,大内存页理解)
dpdk课程学习之公开课基础知识整理(uio,dma,vfio,大内存页理解)
622 0
WK
|
测试技术 开发者 Python
python模块化设计
Python的模块化设计支持开发者将代码拆分成独立模块,提升代码的可读性、可维护性和复用性。通过`.py`文件定义模块,并利用`import`语句导入所需功能,同时可通过包含`__init__.py`的目录创建包以组织多个模块。Python按特定顺序搜索模块,支持修改`sys.path`添加自定义路径。此外,支持相对与绝对导入方式,便于灵活使用模块资源。遵循良好的编程习惯有助于开发高质量的可复用模块,而虚拟环境与依赖管理工具则确保项目间的依赖隔离,进一步增强项目的稳定性和可扩展性。
WK
389 2
|
JavaScript 前端开发
HTML 表单和输入与按钮的联动方法汇总
在HTML中,通过JavaScript可以轻松实现表单与输入、按钮的互动。本文介绍了基本表单结构,并展示了如何用JS处理按钮点击、表单提交、动态禁用按钮、表单验证以及使用AJAX和jQuery简化代码等技巧,帮助你更好地控制和优化表单功能。
|
数据可视化 Linux 程序员
仅需几步就可快速实现SFTP的免密传输
在程序员的日常工作中,通过FTP/SFTP等工具在服务器之间进行文件的交互是一个基操技能,无论是编码开发过程中的跨系统传输文件,还是生产部署过程中的数据索取,熟练掌握这一技能,可以大大的提高开发效率。当然,现在也有很多终端模拟器提供了可视化的文件传输功能,比如XFTP、WINSCP、MobaXterm、Finalshell等等。
393 2
|
Python
modelscope通义千问的14b量化版出错 说没有版本 这个代码都是从页面上粘贴下来的 Int8 Int4都试过了一样的错误?
modelscope通义千问的14b量化版出错 说没有版本 这个代码都是从页面上粘贴下来的 Int8 Int4都试过了一样的错误?modelscope.hub.errors.NoValidRevisionError: The model: qwen/Qwen-14B-Chat-Int4 has no valid revision!
1133 1
|
关系型数据库 MySQL C#
Unable to connect to any of the specified MySQL hosts.
c#连接Mysql数据建立连接时提示:Unable to connect to any of the specified MySQL hosts. 出现此错误的原因是Server(数据库服务器IP地址填写错误) 当Server配置值是“(local)”或者是"(localhost)"时都会产生...
3551 0

热门文章

最新文章