十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

PaddleHub 实战:使用 yolov3_darknet53_coco2017 模块完成 COCO2017 目标检测与在线服务部署

PaddleHub 实战:使用 yolov3_darknet53_coco2017 模块完成 COCO2017 目标检测与在线服务部署 人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载导读本文围绕 PaddleFormers 仓库中modules/image/object_detection/yolov3_darknet53_coco2017这一 PaddleHub 预训练模型模块展开系统讲解基于 YOLOv3DarkNet53 骨干网络COCO2017 数据集训练的目标检测能力的安装、命令行预测、Python API 调用以及 PaddleHub Serving 在线服务化部署全流程。读完本文你将掌握该模块的全部公开 API 与参数含义理解其背后的图像预处理、推理与后处理源码实现并能够将检测能力快速集成到自己的应用中。一、模型基本信息1.1 模块速览模型名称yolov3_darknet53_coco2017类别图像 - 目标检测网络YOLOv3数据集COCO2017是否支持 Fine-tuning否模型大小239MB最新更新日期2021-02-26数据指标-该模块属于图像目标检测Object Detection任务给定一张图像或视频帧计算机需要找出其中所有目标的位置即边界框 bounding box并给出每个目标的具体类别。从仓库目录 modules/image/object_detection/README.md 可以看到目标检测的难点在于图像被编码成数字后机器很难直接理解其中人车等高层语义概念更难定位目标出现的区域这正是 YOLOv3 这类检测模型要解决的问题。1.2 模型介绍YOLOv3 是由 Joseph Redmon 和 Ali Farhadi 提出的单阶段one-stage检测器。与达到同样精度的传统目标检测方法相比其推断速度接近两倍。YOLOv3 将输入图像划分成网格并对每个格子预测 bounding box其损失函数由三部分组成Location 误差定位误差、Confidence 误差置信度误差和分类误差。本 PaddleHub Module 使用 COCO2017 数据集预训练目前仅支持预测不支持 Fine-tuning。模块的元信息定义在 module.py 中moduleinfo装饰器声明了模块名、版本1.2.0、类型CV/object_detection等信息。1.3 可检测的 80 个目标类别模型基于 COCO2017 的 80 个类别进行检测类别清单保存在 label_file.txt 中涵盖 person、bicycle、car、truck、traffic light、bird、cat、dog、horse、backpack、sports ball、bottle、wine glass、chair、tv、laptop、cell phone、book、clock、toothbrush 等日常场景目标。加载类别名的实现位于 processor.py即逐行读取该文件并去除行尾空白。二、安装与环境准备2.1 环境依赖paddlepaddle 1.6.2paddlehub 1.6.0PaddleHub 的完整安装说明可参考 安装文档。2.2 安装模块$ hub install yolov3_darknet53_coco2017如需安装指定历史版本例如移除 fluid API 后的 1.2.0 版本可使用$ hub install yolov3_darknet53_coco20171.2.0如安装时遇到问题可参考零基础环境安装指引Windows 快速开始 | Linux 快速开始 | MacOS 快速开始。三、模型 API 预测3.1 命令行预测安装完成后可以直接通过命令行方式调用目标检测$ hub run yolov3_darknet53_coco2017 --input_path /PATH/TO/IMAGE命令行方式被实现为模块的run_cmd方法见 module.py除--input_path外还支持以下参数参数类型默认值说明--input_pathstr必填待检测图片路径--batch_sizeint1batch 大小--use_gpuboolFalse是否使用 GPU 预测--output_dirstrdetection_result结果图片保存目录--visualizationboolFalse是否将结果保存为图片--score_threshfloat0.5检测置信度阈值这些参数的具体定义见 module.py。更多 PaddleHub 命令行用法请参考 PaddleHub 命令行指令。3.2 预测代码示例import paddlehub as hub import cv2 object_detector hub.Module(nameyolov3_darknet53_coco2017) result object_detector.object_detection(images[cv2.imread(/PATH/TO/IMAGE)]) # or # result object_detector.object_detection(paths[/PATH/TO/IMAGE])paths与images二选一提供数据前者传入图片文件路径列表后者直接传入 numpy 数组BGR 格式列表。3.3 预测 API 详解def object_detection(pathsNone, imagesNone, batch_size1, use_gpuFalse, output_dirdetection_result, score_thresh0.5, visualizationTrue)预测 API检测输入图片中的所有目标的位置。参数说明paths(list[str])图片的路径列表images(list[numpy.ndarray])图片数据ndarray.shape 为 [H, W, C]BGR 格式batch_size(int)batch 的大小use_gpu(bool)是否使用 GPU 预测。使用 GPU 前必须设置CUDA_VISIBLE_DEVICES环境变量否则会抛出RuntimeError见 module.pyoutput_dir(str)结果图片的保存路径默认detection_resultscore_thresh(float)识别置信度阈值低于该阈值的检测框会被过滤visualization(bool)是否将识别结果保存为图片文件。返回值res(list[dict])识别结果列表每个元素为 dict字段如下data(list)检测结果每个元素为 dictconfidence(float)识别的置信度label(str)标签类别名left(int)边界框左上角 x 坐标top(int)边界框左上角 y 坐标right(int)边界框右下角 x 坐标bottom(int)边界框右下角 y 坐标save_path(str, optional)识别结果的保存路径仅当visualizationTrue时存在3.4 模型导出 APIdef save_inference_model(dirname)将模型保存到指定路径便于在其他推理框架中加载使用。参数dirname为模型保存路径。测试用例 test.py 验证了该接口会生成model.pdmodel与model.pdiparams两个文件。四、源码级原理从输入图片到检测结果为了让读者对模块的调用链路有更深理解下面结合仓库源码梳理一次完整的前向推理流程。4.1 数据预处理reader 生成器模块的数据读取与预处理实现在 data_feed.py 的reader生成器中对每张输入图片依次执行读取与形状记录通过cv2.imread读取或直接使用传入的 ndarray记录原始im_shape并构造im_size [H, W]供后处理使用通道转换将 BGR 转换为 RGBcv2.COLOR_BGR2RGB等比缩放将图片短边/长边统一缩放到target_size 608YOLOv3 的标准输入尺寸通过im_scale_x / im_scale_y保持长宽比归一化先除以 255.0再减去均值mean [0.485, 0.456, 0.406]并除以标准差std [0.229, 0.224, 0.225]ImageNet 统计量维度置换通过两次swapaxes将 HWC 调整为模型要求的 CHW 布局最终yield [im, im_size]交给推理器。4.2 推理执行Predictor 与前向在 module.py 的_set_config中模块基于 Paddle Inference 的Config分别构建 CPU 与 GPU 两个 predictorGPU 显存池初始 500MB。object_detection方法将 reader 生成器包装成paddle.batch批读取器逐 batch 将image与im_size两个输入拷贝进输入句柄input_handle.copy_from_cpu后调用predictor.run()完成前向。4.3 后处理置信度过滤与可视化模型原始输出经过 processor.py 的postprocess函数处理通过data_out.lod()解析 batch 中每张图片对应的检测结果切片每行检测结果格式为 6 个元素category_id, confidence, xmin, ymin, xmax, ymax若confidence score_thresh则丢弃实现置信度过滤用label_names[category_id]将类别 id 映射为类别名并用clip_bbox将边界框坐标裁剪回原始图像尺寸范围内若visualizationTrue调用draw_bounding_box_on_image在图上绘制红色边界框并在框上方绘制白色底纹的label: confidence%文本最后保存到output_dir。仓库自带的单元测试 test.py 覆盖了paths、images、visualizationFalse三种调用方式断言检测到cat且置信度 0.5并验证了非法路径抛出AssertionError、非法 images 类型抛出AttributeError可作为自行验证模块可用性的参考。五、服务部署PaddleHub ServingPaddleHub Serving 可以将该模块部署为一个目标检测的在线服务方便以 HTTP 接口方式对外提供预测能力。5.1 第一步启动 PaddleHub Serving运行启动命令$ hub serving start -m yolov3_darknet53_coco2017这样就完成了一个目标检测服务化 API 的部署默认端口号为 8866。NOTE如使用 GPU 预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则无需设置。从仓库的 Serving 命令实现paddlehub/commands/serving.py可以看到hub serving start还支持-p/--port指定端口、-i/--gpu指定 GPU 设备、--use_multiprocess开启多进程模式Windows 不支持会自动回退单进程见 serving.py以及-c/--config传入 JSON 配置文件。服务启动时会将模块信息PID、模块名、启动时间写入配置目录下的serving_port.json文件hub serving stop -p port即据此优雅停止服务。5.2 第二步发送预测请求配置好服务端后以下代码即可发送预测请求并获取结果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/yolov3_darknet53_coco2017 r requests.post(urlurl, headersheaders, datajson.dumps(data)) # 打印预测结果 print(r.json()[results])服务端对应的处理入口是模块上的serving装饰方法serving_method见 module.py它接收 base64 编码的图片字符串列表通过 processor.py 中的base64_to_cv2解码还原为 numpy 图像数组再调用object_detection完成检测并返回结构化结果。六、更新历史1.0.0初始发布1.1.1修复 numpy 数据读取问题1.2.0移除 fluid API安装命令hub install yolov3_darknet53_coco20171.2.0七、小结yolov3_darknet53_coco2017是 PaddleHub 中一个开箱即用的单阶段目标检测模块基于 YOLOv3 与 DarkNet53 骨干网络在 COCO2017 上训练支持 80 类目标的检测。通过hub install、hub run命令即可快速体验通过hub.Module的object_detectionAPI 可无缝集成到 Python 项目中save_inference_model支持模型导出通过hub serving start可将检测能力封装为默认 8866 端口的 HTTP 服务。其数据预处理、前向推理与后处理逻辑在 data_feed.py、module.py 与 processor.py 中均有清晰实现读者可结合源码进一步定制自己的检测流水线。赞分享人工智能大模型微调模型推理服务【免费下载链接】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人工智能大模型微调模型推理服务使用 PaddleHub 的 yolov3_darknet53_coco2017 模块进行目标检测安装、预测 API 与 Serving 部署全指南使用 PaddleHub 的 yolov3_darknet53_coco2017 模块进行目标检测安装、预测 API 与 Serving 部署全指南 本指南以人工智能大模型微调模型推理服务PaddleHub 目标检测实战YOLOv3 系列预训练模型COCO2017 / 行人 / 车辆从预测到服务化部署PaddleHub 目标检测实战YOLOv3 系列预训练模型COCO2017 / 行人 / 车辆从预测到服务化部署 本篇技术指南以 modules/ima人工智能大模型微调模型推理服务上一篇Bilibili-Evolved快捷键配置优化指南从冲突排查到个性化定制下一篇Koalageddon5步解锁全平台游戏DLC的完整实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表