人脸检测实战

本文涉及的产品
视觉智能开放平台,图像通用资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频通用资源包5000点
简介: 人脸检测算法是在一幅图片或者视频序列中检测出来人脸的位置,给出人脸的具体坐标,一般是矩形坐标,它是人脸关键.、属性、编辑、风格化、识别等模块的基础。

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


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



复制代码,运行。


最终输出如上图所示。

相关文章
|
人工智能 Linux API
LangChain开发环境准备-AI大模型私有部署的技术指南
今天开始小智将开启系列AI应用开发课程,主要基于LangChain框架基于实战项目手把手教大家如何将AI这一新时代的基础设施应用到自己开发应用中来。欢迎大家持续关注
999 0
|
机器学习/深度学习 存储 人工智能
阿里云机器学习PAI全新推出特征平台 (Feature Store),助力AI建模场景特征数据高效利用
机器学习平台 PAI 推出特征平台(PAI-FeatureStore),在所有需要特征的AI建模场景,用户可通过 Feature Store 轻松地共享和重用特征数据,减少资源和时间成本、提升工作效率。
|
运维 负载均衡 网络协议
从底层技术来看,GSLB 究竟难在哪儿
本文作者吕宏利来自硅谷的SRE,有着多年的国内外大型互联网公司运维开发经验,专注于分布式系统设计、监控、容量规划,数据中心技术以及生产环境的最佳实践。在本文中他将他将向读者介绍什么是GSLB,以及实现细节和维护方法。
8780 0
|
数据安全/隐私保护
阿里云商标注册流程
很多用户有注册商标的需求,又不知道怎么注册商标。特别是他们想在阿里云注册商标,其实注册商标很简单。商标类型,又分为:文字商标,图形商标,文字图形组合商标。无论你在阿里云是要买域名,买服务器,还是干嘛,首先你都需要注册阿里云账号的。
|
机器学习/深度学习 安全 TensorFlow
OpenCV的发展历史
【7月更文挑战第27天】OpenCV的发展历史。
437 3
|
消息中间件 缓存 监控
小记 | 一周上线百万级高并发系统
本文是鱼皮在腾讯实习期间,从零开始一周紧急上线百万高并发系统的相关经验、思路及感悟,分享给大家。花 5 分钟阅读本文,你将收获:1. 加深对实际工作环境、工作状态的了解2. 学习高并发系...
823 0
|
JSON 自然语言处理 物联网
大语言模型数据增强与模型蒸馏解决方案
本方案以通义千问2(Qwen2)大语言模型为基础,为您介绍大语言模型数据增强和蒸馏解决方案的完整开发流程。
|
存储 计算机视觉
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
1048 3
|
Kubernetes 关系型数据库 网络架构
ray集群部署vllm的折磨
概括如下: 在构建一个兼容多种LLM推理框架的平台时,开发者选择了Ray分布式框架,以解决资源管理和适配问题。然而,在尝试集成vllm时遇到挑战,因为vllm内部自管理Ray集群,与原有设计冲突。经过一系列尝试,包括调整资源分配、修改vllm源码和利用Ray部署的`placement_group_bundles`特性,最终实现了兼容,但依赖于非官方支持的解决方案。在面对vllm新版本和Ray部署的`reconfigure`方法问题时,又需权衡和调整实现方式。尽管面临困难,开发者认为使用Ray作为统一底层仍具有潜力。
|
Python
modelscope通义千问的14b量化版出错 说没有版本 这个代码都是从页面上粘贴下来的 Int8 Int4都试过了一样的错误?
modelscope通义千问的14b量化版出错 说没有版本 这个代码都是从页面上粘贴下来的 Int8 Int4都试过了一样的错误?modelscope.hub.errors.NoValidRevisionError: The model: qwen/Qwen-14B-Chat-Int4 has no valid revision!
914 1

热门文章

最新文章