开工,各地该如何做好防疫工作?人工智能技术正在为抗击新冠肺炎疫情提供必要助力。2019年新冠肺炎疫情的爆发,给人们的出行带来了巨大的变化——自1月24日武汉宣布封城以来,各省市相继启动重大突发公共卫生事件一级响应,控制人口移动。许多城市强制要求在乘坐公共交通工具前戴口罩并测量体温。2月10日返工日前,上海、北京等重点城市也相继出台新规:不戴口罩人员进出机场、轨道交通、长途汽车站等公共场所将被劝阻、医疗卫生机构、商场超市。正确佩戴口罩出门是为了防止疫情扩散,得到了人们的广泛支持。但这也带来了诸多挑战——高密度的人流让基层调查人员面临人手不足和接触疑似患者的风险。只有适应新情况的人工智能技术才能减轻他们的工作压力。2月13日,百度飞桨宣布开源业界首个口罩人脸检测分类模型。基于该模型,在检测公共场景中大量人脸的同时,可以将戴口罩和不戴口罩的人脸进行标记,快速识别出各种场景中不注意病毒防护,甚至有口罩的人侥幸心理。公共场所的安全隐患。同时,将建设更多防疫公益类应用。灾难面前,这家科技公司用行动响应了民政部部长陈月良的号召:“一个有益的公益软件,比捐10亿元还管用!”业界首个开源口罩人脸检测分类模型口罩人脸检测分类模型由两个功能单元组成,分别完成口罩人脸的检测和口罩人脸的分类。经测试,口罩人脸检测部分准确率达到98%,口罩人脸分类部分准确率达到96.5%,同样处于行业领先水平。同时实现了模型的极致轻量化,可以在大部分端边云设备上实现实时处理(海思3559芯片仅需17ms)。百度也会不断更新这个模型,不断提升效果。百度方面表示,如此高的准确率是大量数据训练的结果。新模型使用超过100,000张图片的训练数据,确保样本量充足且有效。另一方面,人脸检测模型基于百度自研的冠军算法。整个研发过程基于百度开源飞桨深度学习平台,实现高效便捷的模型开发、训练和部署。我们可以先看看口罩人脸检测分类模型的效果,其中绿色的boundingbox是戴口罩的人脸,红色的boundingbox是没有戴口罩的人脸。百度团队也提供了在线demo页面,我们可以在这里上传图片和测试模型效果:在线demo地址:https://www.paddlepaddle.org.cn/hub/scene/maskdetect预训练模型,部署如果我们马上有需求和数据的话,使用深度学习框架从头开始训练也是一个不错的选择。但毫无疑问,成本是比较高的。同时,百度开放了百度通过预训练模型训练的口罩人脸检测分类模型,可以极大的帮助开发者节省资源,提高效率。百度飞桨通过预训练模型管理工具PaddleHub开源了口罩人脸检测分类预训练模型。开发者只要具备基本的Python编程能力,就可以快速搭建本地或服务的服务调用模型。如果您有一定的手机APP开发能力,也可以快速将模型部署到移动端。预训练模型介绍:https://www.paddlepaddle.org.cn/hubdetail?name=pyramidbox_lite_server_mask&en_category=ObjectDetection预训练模型示例代码:https://aistudio.baidu.com/aistudio/projectDetail/267322顶层算法和datahere在一个解决方案中,用于识别人脸的模型是基于百度在2018年国际计算机视觉顶级会议ECCV2018上的论文PyramidBox开发的。基于自主研发的飞桨开源深度学习平台进行训练,小模型如paddle-slim优化技术使得算法能够在一些计算能力有限的设备上高效运行。算法代码地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/face_detection口罩人脸检测分类模型,可用于公共场所高密度人流环境,适用于戴口罩者和那些不戴口罩的人快速识别和标记人脸。基于这个预训练好的模型,开发者只需要少量的代码,就可以快速完成自己场景模型的开发。该模型可广泛应用于海关、火车站、公园小区入口等不同类型的区域。它还提供服务器和移动版本,方便开发者集成到不同类型的硬件平台,以满足不同场景的需求。非常适用于重点区域的部署和管控,以及对不戴口罩人员的及时预警。如果面具人脸检测分类模型得到广泛应用,检测结果的统计数据也可以为更深入的研究提供依据。百度表示,测试结果可以在疫情分析、智慧城市、智慧社区等场景发挥更大作用。这段时间,多家科技公司相继推出了体温检测、人脸识别等AI算法。百度提出的方法是第一个开源的口罩人脸检测分类模型。从飞桨深度学习技术平台,到高效精准的人脸检测识别算法,再到硬件部署方案等,百度提出的方法可以与其他工具实现完整高效的整体协同。如何在实践中使用整个预训练模型只需要安装PaddlePaddle和PaddleHub,只需要懂基本的Python就可以运行。下面短视频是我们测试戴口罩人脸检测模型:上面是最简单的局部推理,只要五行代码,我们就可以在自己的电脑上进行戴口罩人脸检测。为了演示效果,我们将每个图像设置为停留2秒。其实我们在使用CPU的时候,检测基本上是实时的,推理速度是非常快的。下面是调用预训练模型的核心代码,其中我们在当前文件夹放了一张测试图片:importpaddlehubashub#加载模型,本例为服务端模型pyramidbox_lite_server_mask#手机模型参数可以换成pyramidbox_lite_mobile_maskmodule=hub.Module(name="pyramidbox_lite_server_mask")#设置输入数据input_dict={"image":["test.jpg"]}fordatainmodule.face_detection(data=input_dict):print(data)百度提供了maskface的示例代码检测和分类,通过Notebook文件,我们可以更形象地了解使用模型的完整过程:地址:https://aistudio.baidu.com/aistudio/projectDetail/267322更重要的是,作为一个完整的开源作品,在除了本地推理,这还需要考虑如何将模型部署到服务器或移动设备上。如果能够快速部署到各个平台,那么就真的意味着它可以作为“战疫”的基础工具了。目前,百度提供了两种预训练模型,分别是服务端口罩人脸检测分类模型“pyramidbox_lite_server_mask”和移动端口罩人脸检测分类模型“pyramidbox_lite_mobile_mask”,两者都可以满足各种下游任务。1.一步部署服务器。有了PaddleHub,服务端的部署也非常简单。在服务端使用命令行启动mask人脸检测分类模型即可:hubservingstart-mpyramidbox_lite_server_mask-p8866可以,在服务端完全没有问题。与手动配置各种参数或调用各种框架相比,PaddleHub部署服务器确实简单易用。只要在server端部署完成,在client端调用就不会有太大问题。下面百度一下调用服务器进行推理的例子:制作一个待预测图片列表,发送推理请求,返回并保存推理结果。#coding:utf8importrequestsimportjsonimportbase64importos#指定要检测的图片,生成列表[("image",img_1),("image",img_2),...]file_list=["test.jpg"]files=[("image",(open(item,"rb")))foriteminfile_list]#指定检测方式为pyramidbox_lite_server_mask,发送post请求url="http://127.0.0.1:8866/predict/image/pyramidbox_lite_server_mask"r=requests.post(url=url,files=files)results=eval(r.json()["results"])#将检测生成的图像保存到输出文件夹,打印模型输出结果ifnotos.path.exists(“输出”):操作系统。mkdir("output")foriteminresults:withopen(os.path.join("output",item["path"]),"wb")asfp:fp.write(base64.b64decode(item["base64"].split(',')[-1]))item.pop("base64")print(json.dumps(results,indent=4,ensure_ascii=False))相信只要有一定的Python基础,localprediction并且部署到服务器端没有问题。PaddleHub已经为我们做了各种处理。2.部署到移动端PaddleLite是Paddle的端侧推理引擎,专为移动端模型推理部署而设计。如果我们需要将口罩人脸检测和分类模型嵌入到手机等移动设备中,像PaddleLite这样的设备端推理引擎可以为我们节省很多工作。在移动端部署口罩人脸检测分类模型只需三步:①下载预测库,PaddleLite会提供编译好的预测库;②优化模型,使用model_optimize_tool工具实现模型优化;③通过预测API实现调用。PaddleLite介绍:https://github.com/PaddlePaddle/Paddle-Lite/其中,比较重要的是移动API调用方式。具体实现可以参考下面给出的PaddleLite示例地址。//读取图像cv::Matimg=imread(img_path,cv::IMREAD_COLOR);//加载人脸检测或口罩佩戴判别模型MobileConfigconfig;config.set_model_dir(model_dir);PaddlePredictor*predictor=CreatePaddlePredictor
