ONNX Tiny YOLOv3 实战指南:实时目标检测模型的推理、预处理与后处理全解析 人工智能大模型计算机视觉NLP模型评测【免费下载链接】modelsA collection of pre-trained, state-of-the-art models in the ONNX format项目地址https://gitcode.com/gh_mirrors/model/models点击查看免费下载导读本文基于当前仓库中已通过精度验证的 Tiny YOLOv3 ONNX 模型位于 validated/vision/object_detection_segmentation/tiny-yolov3展开讲解。Tiny YOLOv3 是经典 YOLOv3 的轻量化版本可在保持实时检测能力的同时检测 COCO 的 80 个目标类别模型仅约 34 MB非常适合资源受限的边缘部署场景。读完本文你将掌握该模型的输入输出协议、letterbox 预处理与 NMS 后处理的完整实现并能直接基于 模型文件 编写可运行的推理代码。模型概览Tiny YOLOv3 是什么Tiny YOLOv3 是一个用于实时目标检测的卷积神经网络可以检测 80 个不同的目标类别即 COCO 数据集类别。它是 YOLOv3 的缩小版本在保持检测速度优势的同时大幅减小了模型体积与计算量属于速度快、精度够用的轻量检测器。在本仓库中它与 完整版 YOLOv3约 237 MB形成互补完整版精度更高Tiny 版更适合对模型体积与推理延迟敏感的场景。该模型由 Keras 版本的 YOLOv3 实现qqwweee/keras-yolo3经 keras2onnx 转换器导出权重源自 pjreddie.com 提供的yolov3-tiny.weights预训练权重。模型文件与元数据文件下载模型下载带示例测试数据下载ONNX 版本Opset 版本精度Tiny YOLOv334 MB33 MB1.611mAP of 0.331仓库中实际存放的文件为tiny-yolov3-11.onnx纯 ONNX 模型文件约 34 MBtiny-yolov3-11.tar.gz附带示例测试数据的打包版本约 33 MB便于快速用推理引擎自带的工具做一次冒烟验证。Manifest 中的注册信息从仓库的 ONNX_HUB_MANIFEST.json 可以看到该模型的完整注册元数据可据此核对模型的 I/O 协议与文件哈希模型名Tiny YOLOv3模型路径validated/vision/object_detection_segmentation/tiny-yolov3/model/tiny-yolov3-11.onnxONNX 版本1.6Opset 版本11模型 SHA-256f715cc2d...模型大小35511756字节带数据包 SHA-256acdf6c64...大小34058193字节标签vision、object detection segmentation、tiny-yolov3。提示在下载或分发模型时可以使用 manifest 中记录的 SHA-256 校验文件完整性避免模型文件在传输过程中损坏。输入输出协议模型输入该模型接收两个输入字段名、形状与类型均可在 manifest 的io_ports中确认输入名形状类型含义input_1(N, 3, H, W)推理时固定为(1, 3, 416, 416)tensor(float)经过 letterbox 与归一化后的 NCHW 图像张量image_shape(1, 2)tensor(float)原始图像的尺寸[image.size[1], image.size[0]]即[高, 宽]其中input_1为 resize 后的图像image_shape保存原始图像尺寸供后处理把检测框坐标映射回原图坐标系使用。注意image_shape的数值必须与预处理时输入的原始图像一致否则映射结果会出错。模型输出模型共有 3 个输出ONNX 图内节点名分别为yolonms_layer_1、yolonms_layer_1:1、yolonms_layer_1:2输出形状类型含义boxes(1, n_candidates, 4)tensor(float)所有候选 anchor box 的坐标xywh 或 x1y1x2y2 由导出实现决定scores(1, 80, n_candidates)tensor(float)每个候选框在每个类别共 80 类上的得分indices(nbox, 3)tensor(int32)从 boxes 张量中选中的索引每行格式为(batch_index, class_index, box_index)从源码结构看NMS非极大值抑制逻辑已被打包进模型内部因此推理端拿到的是经过筛选后的索引与对应框/分数无需再自行实现完整 NMS只需按indices取出最终结果即可。预处理letterbox 缩放与归一化图像需要被加载并归一化到[0, 1]区间变换尽量在预处理阶段完成。核心是保持宽高比的 letterbox 缩放源自 keras-yolo3 的yolo3.utils.letterbox_image先按比例缩放短边到 416再用灰色128,128,128填充剩余区域避免直接拉伸破坏目标形状。import numpy as np from PIL import Image # 该函数源自 yolo3.utils.letterbox_image def letterbox_image(image, size): resize image with unchanged aspect ratio using padding iw, ih image.size w, h size scale min(w/iw, h/ih) nw int(iw*scale) nh int(ih*scale) image image.resize((nw, nh), Image.BICUBIC) new_image Image.new(RGB, size, (128, 128, 128)) new_image.paste(image, ((w-nw)//2, (h-nh)//2)) return new_image def preprocess(img): model_image_size (416, 416) boxed_image letterbox_image(img, tuple(reversed(model_image_size))) image_data np.array(boxed_image, dtypefloat32) image_data / 255. image_data np.transpose(image_data, [2, 0, 1]) # HWC - CHW image_data np.expand_dims(image_data, 0) # 增加 batch 维度 return image_data image Image.open(img_path) # input image_data preprocess(image) image_size np.array([image.size[1], image.size[0]], dtypenp.float32).reshape(1, 2)要点说明letterbox_image以min(w/iw, h/ih)计算缩放比例保证图像不变形归一化直接除以 255将像素从[0, 255]缩放到[0, 1]np.transpose(..., [2, 0, 1])将 HWC 布局转为模型要求的 NCHW 布局image_shape使用image.size[1]高与image.size[0]宽构造与模型约定[image.size[1], image.size[0]]一致注意文档中该模型使用float32构造image_size与 manifest 中image_shape的tensor(float)类型完全匹配完整版 YOLOv3 的 README 中该处为int32两者不可混用需以各自模型的 I/O 类型为准。推理将预处理结果送入模型在获得image_data与image_size之后即可用 ONNX Runtime 完成推理以下为整合示例模型输入名以 manifest 中记录的input_1、image_shape为准import onnxruntime as ort sess ort.InferenceSession( validated/vision/object_detection_segmentation/tiny-yolov3/model/tiny-yolov3-11.onnx ) boxes, scores, indices sess.run( None, { input_1: image_data, # (1, 3, 416, 416) float32 image_shape: image_size, # (1, 2) float32 }, )返回的boxes、scores、indices分别对应模型输出的三个张量候选框坐标、逐类别得分、NMS 后的选中索引。后处理按索引取回最终检测结果模型内部已完成 NMS 与索引筛选后处理只需按照indices从boxes与scores中取出对应的框、得分与类别out_boxes, out_scores, out_classes [], [], [] for idx_ in indices[0]: out_classes.append(idx_[1]) out_scores.append(scores[tuple(idx_)]) idx_1 (idx_[0], idx_[2]) out_boxes.append(boxes[idx_1])out_boxes最终检测框坐标列表out_scores对应置信度得分列表out_classes对应类别索引列表共 80 类类别顺序与 COCO 类别列表一致例如 0 对应 person。得到out_boxes后可结合image_size原始图像的高、宽将 416×416 坐标系下的框坐标映射回原图用于绘制检测框或计算目标位置。验证精度与数据集权重来源pjreddie.com 发布的yolov3-tiny.weights预训练权重精度指标COCO box mAP在 IoU 0.5:0.95 区间取平均在 2017 COCO val 数据集上计算实测精度mAP 为 0.331与原始 Tiny YOLOv3 在 Darknet 官方仓库公布的结果一致。作为对照仓库中 完整版 YOLOv3 的同一指标为 0.553——这正是Tiny版本以精度换取体积与速度的直观体现实际部署时可根据精度与资源预算在两者间取舍。出处、转换来源与许可证论文Joseph Redmon、Ali Farhadi 提出的 YOLOv3: An Incremental Improvement转换来源模型由 keras-yolo3 仓库中的 Keras 模型经 keras2onnx 转换器导出为 ONNX 格式许可证MIT License与本仓库的 LICENSE 保持一致可放心用于学习与二次开发。小结Tiny YOLOv3 ONNX 模型的完整使用链路可以概括为letterbox 缩放 → 归一化到[0,1]→ 转 NCHW 并加 batch 维 → 连同原始图像尺寸送入模型 → 按indices索引取出boxes/scores/classes→ 映射回原图坐标。由于 NMS 已内置于模型中推理端代码非常精简配合仓库中同目录的 模型文件 与 manifest 元数据即可快速落地一个 80 类实时目标检测应用。赞分享人工智能大模型计算机视觉NLP模型评测【免费下载链接】modelsA collection of pre-trained, state-of-the-art models in the ONNX format项目地址https://gitcode.com/gh_mirrors/model/models点击查看免费下载相关推荐Heroku .NET Core Buildpack性能优化减少构建时间和slug大小的5个秘诀Heroku .NET Core Buildpack性能优化减少构建时间和slug大小的5个秘诀 Heroku .NET Core Buildpack是部署.人工智能大模型计算机视觉NLP模型评测基于 ONNX 的 SSD 单阶段目标检测模型实战指南推理、预处理与 INT8 量化基于 ONNX 的 SSD 单阶段目标检测模型实战指南推理、预处理与 INT8 量化 本指南以 models 仓库中 validated/vision/obj人工智能大模型计算机视觉NLP模型评测Mask R-CNN 实例分割 ONNX 模型实战模型变体、预处理、推理后处理与 INT8 量化全解析Mask R CNN 实例分割 ONNX 模型实战模型变体、预处理、推理后处理与 INT8 量化全解析 本指南以 ONNX Model Zoo 中经过验证的人工智能大模型计算机视觉NLP模型评测上一篇RTSP-Player-For-Unity-WebGL 项目教程下一篇tmux-powerline调试技巧大全快速解决状态栏显示问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考