ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleHub PyramidBox-Lite-Mobile-Mask 口罩检测模块:安装、API 预测与端侧部署实战

PaddleHub PyramidBox-Lite-Mobile-Mask 口罩检测模块:安装、API 预测与端侧部署实战 人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载本篇技术指南围绕 PaddleHub 中的pyramidbox_lite_mobile_mask轻量级人脸口罩检测模块展开覆盖模型安装、命令行与 Python API 预测、PaddleHub Serving 在线服务化、Gradio Web 交互以及 Paddle Lite 端侧部署的完整链路。读者阅读完本文后将掌握如何在 CPU/GPU 环境下一键加载该模型完成人脸检测 是否佩戴口罩的二分类识别并能将结果以图片可视化、HTTP 服务或移动端推理等形式落地到实际业务中。一、模型基本信息与适用场景pyramidbox_lite_mobile_mask是 PaddleHub 中面向移动端优化的轻量级人脸检测模块用于检测图片中的人脸并判断是否佩戴口罩。其核心信息如下表项目内容模型名称pyramidbox_lite_mobile_mask类别图像 - 人脸检测网络PyramidBox数据集WIDER FACE 数据集 百度自采人脸数据集是否支持 Fine-tuning否模型大小1.2MB最新更新日期2021-02-26数据指标-从模型名称与结构看该模块采用两级级联的检测思路底层底座模型为pyramidbox_lite_mobile纯人脸检测上层由PyramidBoxLiteMobileMask类对检测到的每张人脸区域做是否佩戴口罩的二分类判断标签为NO MASK/MASK。PyramidBox 是百度发表于 ECCV 2018 的经典人脸检测算法PyramidBox-Lite 以其为基础、以 FaceBoxes 为主干网络进行轻量化改造对光照变化、口罩遮挡、表情变化、尺度变化等常见干扰具有较强鲁棒性该模块专为移动端与边缘算力受限设备优化模型体积仅约 1.2MB。模块实现位于仓库 modules/image/face_detection/pyramidbox_lite_mobile_mask/module.py类装饰器moduleinfo声明的版本为 1.5.0。需注意该模块不支持 Fine-tuning定位是开箱即用的推理模型。二、安装与环境依赖1、环境依赖paddlepaddle 1.6.2paddlehub 1.6.0PaddleHub 的安装方式可参考 安装说明2、安装模块通过命令行直接安装$ hub install pyramidbox_lite_mobile_mask如需指定版本安装例如安装带 Gradio APP 支持的 1.5.0$ hub install pyramidbox_lite_mobile_mask1.5.0若安装过程中遇到环境问题可参考平台相关的零基础安装指南Windows | Linux | MacOS。从源码结构看模块目录下包含 module.py模型封装与 API、data_feed.py数据预处理与多尺度融合、processor.py后处理与可视化、label_list.txt类别标签内容为NO MASK与MASK以及 test.py单元测试安装时这些文件随模块一并加载。三、模型 API 预测1、命令行预测使用hub run命令可快速验证模型效果$ hub run pyramidbox_lite_mobile_mask --input_path /PATH/TO/IMAGE该命令由module.py中的run_cmd方法承载命令行支持以下可配置参数均与 Python API 参数一一对应参数默认值说明--input_path必填输入图片路径--use_gpuFalse是否使用 GPU 推理ast.literal_eval解析--output_dirdetection_result可视化结果保存目录--visualizationFalse是否保存可视化结果图片--shrink0.5送入网络前图片缩放到原图的shrink倍--confs_threshold0.6检测置信度阈值更多命令行用法可参考 PaddleHub 命令行指令。2、Python 预测代码示例在 Python 中加载模块并完成推理import paddlehub as hub import cv2 mask_detector hub.Module(namepyramidbox_lite_mobile_mask) result mask_detector.face_detection(images[cv2.imread(/PATH/TO/IMAGE)]) # or # result mask_detector.face_detection(paths[/PATH/TO/IMAGE])images与paths两种输入方式二选一前者直接传入[H, W, C]形状、BGR 色彩空间的numpy.ndarray列表后者传入图片文件路径列表。仓库自带的单元测试 test.py 展示了完整的调用与断言方式其中test_face_detection1/2/3分别验证paths输入、images输入与可视化输出test_face_detection4验证 GPU 推理路径test_face_detection5断言传入不存在的文件路径会抛出AssertionErrortest_face_detection6断言错误的数据类型会抛出AttributeErrortest_save_inference_model验证模型导出后同时生成face_detector.pdmodel/face_detector.pdiparams底座人脸检测模型与model.pdmodel/model.pdiparams口罩分类模型两组文件印证了级联两阶段的模型结构。3、API 详解__init__(face_detector_moduleNone)模块构造函数用于指定底座人脸检测模型。参数face_detector_moduleclass—— 人脸检测模型类默认为pyramidbox_lite_mobile。从 module.py 源码可见默认情况下内部通过hub.Module(namepyramidbox_lite_mobile)加载底座模型构造时会根据环境变量CUDA_VISIBLE_DEVICES是否配置有效的 GPU 编号分别创建 CPU predictor 或 GPU predictorGPU 内存池初始大小 1000MB。face_detection(imagesNone, pathsNone, batch_size1, use_gpuFalse, visualizationFalse, output_dirdetection_result, use_multi_scaleFalse, shrink0.5, confs_threshold0.6)识别输入图片中的所有⼈脸并判断是否佩戴口罩。参数说明参数类型/默认值说明imageslist[numpy.ndarray]图片数据ndarray.shape 为 [H, W, C]BGR 格式pathslist[str]图片路径列表batch_sizeint默认 1batch 大小use_gpubool默认 False是否使用 GPUvisualizationbool默认 False是否将识别结果保存为图片文件output_dirstr默认 detection_result可视化图片的保存路径use_multi_scalebool默认 False是否开启多尺度人脸检测开启后能更好地检测输入图像中不同尺寸的人脸但会显著增加计算量、降低预测速度shrinkfloat默认 0.5图片缩放比例值越大对小尺寸人脸检测效果越好计算成本越高反之对大尺寸人脸效果更好confs_thresholdfloat默认 0.6置信度阈值NOTEpaths和images两个参数选择其一提供数据。返回结果返回reslist[dict]列表中每个元素对应一张输入图片结构如下pathstr原输入图片的路径datalist检测结果列表每个元素为 dict字段包括labelstr识别标签为NO MASK或MASKconfidencefloat识别置信度left/topint边界框左上角 x / y 坐标right/bottomint边界框右下角 x / y 坐标。底层处理流程依据 module.py 与 data_feed.py 源码face_detection内部先通过reader生成器对每张图片执行人脸检测前置步骤调用底座模型pyramidbox_lite_mobile.face_detection得到人脸框若开启use_multi_scale则分别在multi_scales [0.3, 0.6, 0.9]三个尺度下检测再经bbox_vote加权投票 NMSIOU 阈值 0.3融合各尺度结果对每个人脸框调用process_image做裁剪与预处理按人脸关键点区域crop到 128×128像素除以 256.0按均值[0.5, 0.5, 0.5]做颜色归一化最终得到[N, 3, 128, 128]的输入张量按batch_size分批送入口罩分类网络CPU 或 GPU predictor推理后处理postprocessprocessor.py对每个检测框取np.argmax得到标签与置信度并组装成上述返回结构若visualizationTrue则调用draw_bounding_box_on_image绘制边界框——MASK用绿色框、NO MASK用红色框并在框上方标注标签与置信度百分比保存到output_dir。set_face_detector_module(face_detector_module)设置口罩检测模型中使用的人脸检测底座模型。参数face_detector_moduleclass—— 人脸检测模型类。get_face_detector_module()获取当前口罩检测模型使用的人脸检测底座模型。返回当前使用的人脸检测模型类。save_inference_model(dirname)将模型保存为 Paddle Inference 格式到指定路径供离线部署使用。参数dirnamestr—— 模型保存路径。该方法来自 PaddleHub 基类见 paddlehub/module/module.py支持通过model_filename/params_filename/combined等参数控制导出文件命名与是否合并参数当模块存在子模块时会递归导出子模块include_sub_modulesTrue这也解释了为何该模块导出后同时出现底座检测模型与口罩分类模型两套文件。四、服务化部署PaddleHub Serving 可将该模块一键部署为在线口罩检测 HTTP 服务适用于把推理能力以标准 REST API 形式开放给上层业务系统。第一步启动 PaddleHub Serving$ hub serving start -m pyramidbox_lite_mobile_mask启动完成后即得到一个口罩检测服务化 API默认端口号为 8866该默认值由 paddlehub/commands/serving.py 中的--port参数定义也可通过-p指定其他端口。NOTE如使用 GPU 预测需要在启动服务前设置CUDA_VISIBLE_DEVICES环境变量否则无需设置。第二步发送预测请求服务端配置好后以下代码即可发送预测请求并获取结果import requests import json import cv2 import base64 def cv2_to_base64(image): data cv2.imencode(.jpg, image)[1] return base64.b64encode(data.tostring()).decode(utf8) # 发送HTTP请求 data {images:[cv2_to_base64(cv2.imread(/PATH/TO/IMAGE))]} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/pyramidbox_lite_mobile_mask r requests.post(urlurl, headersheaders, datajson.dumps(data)) # 打印预测结果 print(r.json()[results])服务端侧的处理入口是模块中的serving_method以serving装饰收到请求后先通过base64_to_cv2解码图片再调用face_detection完成推理。服务路由与 Gradio 转发逻辑可在 paddlehub/serving/app_compat.py 中查看。Gradio APP 支持从 PaddleHub 2.3.1 开始可通过浏览器直接访问该模块的 Gradio APPhttp://127.0.0.1:8866/gradio/pyramidbox_lite_mobile_mask。其实现对应模块内的create_gradio_app方法module.py提供一个图片上传输入配合shrink滑块范围 0.0~1.0默认 0.5与confs_threshold滑块范围 0.0~1.0默认 0.6两个交互控件点击即可可视化查看带检测框与标签的推理结果。服务端收到/gradio/module_name请求后会自动创建并代理到独立的 Gradio 进程详见 app_compat.py 中的create_gradio_app与路由实现。五、Paddle Lite 端侧部署该模块面向移动端优化可通过 Paddle Lite 部署到手机等端侧硬件。整体流程分为三步第一步导出预测模型import paddlehub as hub pyramidbox_lite_mobile_mask hub.Module(namepyramidbox_lite_mobile_mask) # 将模型保存在 test_program 文件夹之中 pyramidbox_lite_mobile_mask.save_inference_model(dirnametest_program)第二步模型转换从 PaddleHub 下载到的是 Paddle Inference 预测模型需使用 Paddle Lite 提供的模型优化工具 OPT 进行格式转换转换后才能部署到端侧硬件。OPT 工具的具体使用方法请参考 Paddle Lite 官方文档中的模型优化工具章节。第三步Paddle Lite 部署转换完成后参考 Paddle Lite 仓库中lite/demo/cxx目录下的口罩检测 C 部署示例即可在移动端完成人脸口罩检测的推理集成。六、更新历史版本更新内容1.0.0初始发布1.3.1移除 fluid api适配新版 PaddlePaddle1.4.0修复无法导出模型的问题1.5.0添加 Gradio APP 的支持当前仓库内模块声明版本即为 1.5.0见 module.py 中moduleinfo的version1.5.0。如需回退或固定版本可通过hub install pyramidbox_lite_mobile_mask1.5.0方式安装指定版本。小结本文以仓库文档 modules/image/face_detection/pyramidbox_lite_mobile_mask/README.md 为主体结合该模块的源码实现完整梳理了pyramidbox_lite_mobile_mask从安装、命令行与 Python API 推理、结果可视化、HTTP 服务化部署到 Paddle Lite 端侧部署的实战链路。该模块以约 1.2MB 的轻量体积覆盖人脸检测 口罩识别一体化能力配合 PaddleHub Serving 与 Gradio 可快速搭建可交互的在线口罩检测服务适合闸机、门禁、公共区域监控等对算力与部署灵活性有要求的场景。赞分享人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐PaddleHub YOLOv3-ResNet50-vd COCO2017 目标检测模块安装、API 预测与服务化部署实战PaddleHub YOLOv3 ResNet50 vd COCO2017 目标检测模块安装、API 预测与服务化部署实战 本文以 PaddleFormers人工智能大模型微调模型推理服务PaddleFormers 人脸检测模型库实战指南PyramidBox-Lite 与超轻量人脸检测的安装、预测与服务化部署PaddleFormers 人脸检测模型库实战指南PyramidBox Lite 与超轻量人脸检测的安装、预测与服务化部署 导读 本文聚焦 PaddleFor人工智能大模型微调模型推理服务PaddleHub resnet18_vd_imagenet 图像分类模块实战安装、预测 API 与 Serving 服务部署PaddleHub resnet18_vd_imagenet 图像分类模块实战安装、预测 API 与 Serving 服务部署 本指南以 PaddleForm人工智能大模型微调模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表