资讯详情

资讯详情

PaddleFormers 中的 yolov3_darknet53_venus:基于 YOLOv3-DarkNet53 的通用目标检测 PaddleHub 模块

人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载本篇文章围绕 PaddleFormersPaddleHub 模块仓库中的yolov3_darknet53_venus目标检测模块展开完整介绍其模型基本信息、安装方式、context/save_inference_model等 API 的调用方法与参数细节并结合仓库源码DarkNet 骨干网络、YOLOv3 Head、数据预处理与后处理深入剖析其实现原理。读完本文你将掌握如何安装该模块、如何通过 API 提取特征进行迁移学习Fine-tuning以及如何将模型导出为推理格式。一、模型基本信息yolov3_darknet53_venus是 PaddleHub 生态中的图像目标检测模块其核心信息整理如下来源modules/image/object_detection/yolov3_darknet53_venus/README.md模型名称yolov3_darknet53_venus类别图像 - 目标检测网络YOLOv3数据集百度自建数据集是否支持 Fine-tuning是模型大小501MB最新更新日期2021-02-26数据指标-模型介绍YOLOv3 是由 Joseph Redmon 和 Ali Farhadi 提出的单阶段one-stage检测器与达到同样精度的传统目标检测方法相比推断速度接近两倍。YOLOv3 将输入图像划分成网格并对每个格子预测 bounding box。其 loss 函数由三部分组成Location 误差预测框与真实框的位置坐标回归误差Confidence 误差预测框是否包含目标的置信度误差分类误差预测框中目标类别的分类误差。该 PaddleHub Module 是由800 tag、170w 图片、1000w 检测框训练的大规模通用检测模型在 8 个数据集上 MAP 平均提升 5.36%iou0.5 的准确率提升 4.53%。对比于其他通用检测模型使用该 Module 进行 finetune可以更快收敛达到较优效果。说明上述训练规模与精度提升数据均来自模块 README 的原始描述英文版 README_en.md 亦给出了对应说明。该模块属于 VENUS 系列视觉预训练模型与faster_rcnn_resnet50_fpn_venus同期发布可大幅提升图像分类和目标检测任务的 Fine-tune 效果见 docs/docs_ch/release.md。二、源码结构与模型架构在深入 API 之前先梳理该模块在仓库中的源码组成。模块目录位于modules/image/object_detection/yolov3_darknet53_venus/包含以下关键文件文件职责module.py模块入口定义YOLOv3DarkNet53Venus类实现context迁移学习接口darknet.pyDarkNet 骨干网络实现depth53yolo_head.pyYOLOv3 Head检测头与 MultiClassNMS 定义data_feed.py图像读取、缩放、归一化等数据预处理processor.py检测结果后处理与可视化画框、保存图片1. 模块入口与元信息module.py 通过moduleinfo装饰器声明模块元信息并定义类YOLOv3DarkNet53Venus继承hub.Modulemoduleinfo( nameyolov3_darknet53_venus, version1.0.0, typeCV/object_detection, summaryBaidus YOLOv3 model for object detection, with backbone DarkNet53, trained with Baidu self-built dataset., authorpaddlepaddle, author_emailpaddle-devbaidu.com) class YOLOv3DarkNet53Venus(hub.Module): def _initialize(self): self.default_pretrained_model_path os.path.join(self.directory, yolov3_darknet53_model)_initialize方法指定了默认预训练模型所在的目录yolov3_darknet53_model位于模块安装目录下context()加载预训练权重时即从该路径读取。2. DarkNet53 骨干网络darknet.py 实现了 DarkNet 骨干网络。关键实现细节depth_cfg {53: ([1, 2, 8, 8, 4], self.basicblock)}定义了 DarkNet53 的 5 个 stage 的残差块数量每个卷积层之后接 BatchNorm激活函数为leaky_relualpha0.1basicblock采用 1x1 卷积降维 3x3 卷积升维 残差相加elementwise_add的残差结构__call__返回 5 个 stage 的输出特征blocks列表供 YOLOv3 Head 使用多尺度检测。注意从源码看DarkNet.__init__的默认norm_typesync_bn而module.py的context()中显式传入norm_typebn与norm_decay0.即以普通 BatchNorm 构建网络。3. YOLOv3 Head 与多尺度检测yolo_head.py 定义了YOLOv3Head与MultiClassNMS使用 9 组 anchors[[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]]并通过anchor_masks[[6, 7, 8], [3, 4, 5], [0, 1, 2]]将 anchors 分配到 3 个检测尺度_get_outputs从骨干网络的最后 3 个 stage 特征开始逐级经过检测块detection block、上采样resize_nearest与 route 特征拼接形成 3 个尺度的输出每个输出通道数为mask_num * (5 class_num)其中5对应x, y, w, h, confidenceget_prediction调用fluid.layers.yolo_box解码边界框并通过fluid.layers.multiclass_nms做多类别 NMS参数为nms_threshold0.45、nms_top_k1000、keep_top_k100、score_threshold0.01、background_label-1、normalizedTrue。在 module.py 中检测头以YOLOv3Head(num_classes708)实例化即该通用检测模型支持 708 个类别的分类输出对应 800 tag 的标签体系模型输入图像尺寸为[3, 608, 608]。三、安装1. 环境依赖安装该模块前需要满足以下环境要求paddlepaddle 1.6.2paddlehub 1.6.0安装方法参见 如何安装 paddlehub2. 安装命令使用 PaddleHub 命令行安装该模块$ hub install yolov3_darknet53_venus如需指定版本安装$ hub install yolov3_darknet53_venus1.0.0如安装过程中遇到问题可参考零基础环境搭建文档零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装四、模型 API 预测1. context 接口提取特征用于迁移学习def context(trainableTrue, pretrainedTrue, get_predictionFalse)参数说明参数类型默认值说明trainableboolTrue参数是否可训练pretrainedboolTrue是否加载预训练模型get_predictionboolFalse是否执行预测返回值inputs (dict)模型的输入keys 包括image、im_size取值为image (Variable)图像变量im_size (Variable)图片的尺寸。outputs (dict)模型的输出当get_prediction为False时输出head_features、body_features用于迁移学习当get_prediction为True时输出bbox_out检测框结果。context_prog (Program)用于迁移学习的 Program。实现原理见 module.pycontext()内部构建独立的fluid.Program依次创建image形状[3, 608, 608]、DarkNet 骨干网络、im_size输入与 YOLOv3 Head然后通过HUB_yolov3_darknet53_venus前缀为所有变量重命名add_vars_prefix避免与用户程序命名冲突遍历 Program 中所有参数并设置param.trainable trainable若pretrainedTrue则从default_pretrained_model_path加载预训练权重按变量名逐个匹配load_vars否则执行随机初始化。2. object_detection 接口图像目标检测英文版文档 README_en.md 中补充描述了图像检测 API中文版 README 未列出该签名此处按英文版文档整理def object_detection(pathsNone, imagesNone, batch_size1, use_gpuFalse, score_thresh0.5, visualizationTrue, output_dirdetection_result)参数说明参数类型默认值说明pathslist[str]None图像文件路径列表imageslist[numpy.ndarray]None图像数据ndarray.shape 为 [H, W, C]BGR 格式batch_sizeint1批大小use_gpuboolFalse是否使用 GPU使用 GPU 前请先设置 CUDA_VISIBLE_DEVICES 环境变量score_threshfloat0.5置信度阈值visualizationboolTrue是否将结果保存为图片文件output_dirstrdetection_result结果图片的保存目录返回值res (list[dict])检测结果列表每个元素为 dictkey 为标签名value 为对应概率。其中data为检测结果列表每个元素包含confidence (float)结果的置信度label (str)标签left (int)检测框左上角 x 坐标top (int)检测框左上角 y 坐标right (int)检测框右下角 x 坐标bottom (int)检测框右下角 y 坐标。另外save_path (str, 可选)为结果保存路径。配套实现虽然当前仓库的 module.py 中主要实现了context()但数据读取、后处理与可视化的完整代码已存在于仓库中data_feed.py 中的reader()读取图像 → BGR 转 RGB → 等比缩放到短边 608target_size 608→ 按mean[0.485, 0.456, 0.406]、std[0.229, 0.224, 0.225]做归一化先除以 255 再减均值除标准差→ 转置为 CHW 顺序同时记录原始图像尺寸im_size用于检测框坐标还原processor.py 中的postprocess()解析 LOD 张量中的检测结果按score_thresh过滤低置信度框通过clip_bbox将坐标裁剪到图像范围内并调用draw_bounding_box_on_image在图上绘制红色边界框与label: confidence%文本后保存。3. save_inference_model 接口保存推理模型def save_inference_model(dirname, model_filenameNone, params_filenameNone, combinedTrue)参数说明参数默认值说明dirname-保存模型的目录名称model_filename__model__模型文件名称params_filename__params__参数文件名称仅当combined为 True 时生效combinedTrue是否将参数保存到统一的一个文件中该接口在 paddlehub/module/module.py 的Module基类中定义用于将模型导出为 Paddle Inference 格式当combinedTrue时模型结构与参数分别写入model_filename与params_filename两个文件当combinedFalse时参数按变量逐个保存为独立文件。五、更新历史1.0.0初始发布$ hub install yolov3_darknet53_venus1.0.0六、小结yolov3_darknet53_venus是一个基于 YOLOv3 DarkNet53 的大规模通用目标检测 PaddleHub 模块具有以下要点检测能力支持 708 个类别、608×608 输入通过 3 个尺度的 anchor 检测头 多类别 NMS 输出检测框迁移学习通过context(trainable, pretrained, get_prediction)接口可灵活提取 body/head 特征快速接入下游检测任务的 Fine-tuning且 VENUS 系列模型在 Fine-tune 场景下收敛更快、效果更优工程化内置完整的数据预处理缩放、归一化与后处理可视化画框、保存图片流水线支持save_inference_model导出 Paddle Inference 格式模型便于部署。如需进一步了解该模块的英文说明可查阅 README_en.md其他目标检测模块如faster_rcnn_resnet50_fpn_venus等位于 modules/image/object_detection/ 目录下可对照学习。赞分享人工智能大模型微调模型推理服务【免费下载链接】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 车辆检测实战基于 YOLOv3-DarkNet53 的 PaddleHub 模块使用与源码解析PaddleFormers 车辆检测实战基于 YOLOv3 DarkNet53 的 PaddleHub 模块使用与源码解析 本文围绕开源仓库 PaddleFo人工智能大模型微调模型推理服务基于 PaddleHub 的 YOLOv3-DarkNet53 行人检测模块使用与部署指南基于 PaddleHub 的 YOLOv3 DarkNet53 行人检测模块使用与部署指南 导读 本文面向希望在 PaddlePaddle 生态中快速落地行人检人工智能大模型微调模型推理服务PaddleFormers 中的 faster_rcnn_resnet50_fpn_venus基于 PaddleHub 的大规模通用目标检测模块实战指南PaddleFormers 中的 faster_rcnn_resnet50_fpn_venus基于 PaddleHub 的大规模通用目标检测模块实战指南 本指人工智能大模型微调模型推理服务上一篇英雄联盟客户端工具箱3分钟打造你的专属游戏助手下一篇终极指南FanControl免费开源风扇控制软件完整配置教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →