资讯动态

Candle YOLOv8 实战指南:用 Rust 完成目标检测与姿态估计

发布时间:2026/10/2 2:00:11 来源:尧图企业网站定制
人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载本指南围绕 candle 仓库中的 candle-yolo-v8 示例系统讲解如何在 Rust 生态中运行 YOLOv8 模型完成目标检测Object Detection与姿态估计Pose Estimation两大任务涵盖运行命令、命令行参数、模型变体选择、图像预处理与 NMS 后处理并深入剖析其基于 Candle 框架的模块化实现。阅读本文后你将能够在本仓库环境中一键跑通 YOLOv8 推理并理解检测框、类别置信度与人体 17 关键点是如何从一张输入图片一步步产生的。示例概览Ultralytics YOLOv8 的 Rust 移植candle-yolo-v8 是 Ultralytics YOLOv8 在 Rust 语言下的移植实现其代码参考了 tinygrad 版本的 yolov8.py 以及 Ultralytics 官方 issue #189 中描述的模型架构。该示例在 Candle 生态中支持两个核心任务目标检测detect在图像中定位物体并输出类别与置信度类别体系为 COCO 的 80 类定义于 candle-examples/src/coco_classes.rs例如 person、bicycle、dog、car、motorbike 等姿态估计pose在检测到的人体框内进一步回归 17 个人体关键点鼻、双眼、双耳、双肩、双肘、双腕、双髋、双膝、双踝及其可见性从而画出骨架连线。值得一提的是该模型还可以通过 WebAssembly 完全在浏览器内运行详见 candle-wasm-examples/yolo若使用自定义图片图片数据全程不出设备具备良好的隐私性。快速开始目标检测在仓库根目录下执行以下命令即可对示例图片 bike.jpg 运行目标检测cargo run --example yolo-v8 --release -- candle-examples/examples/yolo-v8/assets/bike.jpg程序运行后会打印检测到的每个目标格式为类别名: Bbox { xmin, ymin, xmax, ymax, confidence, ... }其中xmin/ymin/xmax/ymax是相对输入图像坐标的边界框confidence是置信度在原始图片上绘制红色检测框与类别标签并生成标注结果文件bike.pp.jpg与输入文件同目录、扩展名替换为pp.jpg。原始输入图与目标检测标注结果的对比从源码看标注绘制逻辑位于 main.rs 的 report_detect 函数检测框用红色空心矩形image::Rgb([255, 0, 0])绘制类别名称与置信度如person 95%以深红色底条加白色文字的形式渲染文字使用内置的 roboto-mono-stripped.ttf 字体。快速开始姿态估计把--task切换为pose即可在同一张图片上运行姿态估计cargo run --example yolo-v8 --release -- \ candle-examples/examples/yolo-v8/assets/bike.jpg --task pose姿态估计的结果图红色人体检测框 绿色关键点 黄色骨架连线如下姿态估计的内部逻辑在 main.rs 的 report_pose 函数 中程序会为每个人体框输出 17 个KeyPoint { x, y, mask }其中mask表示关键点的置信度可见性只有当mask 0.6时才会绘制该点及其相连的骨架线段关键点连线关系由KP_CONNECTIONS常量定义共 16 条如鼻-左眼、左肩-左肘、左髋-左膝等。命令行参数详解示例基于clap实现命令行解析完整定义见 main.rs 的 Args 结构体。除位置参数images可传多张图片逐张处理外全部参数如下参数类型默认值说明--whichn/s/m/l/xs模型变体按字母序模型规模与精度递增--taskdetect/posedetect运行目标检测或姿态估计--model路径无自动下载使用本地 safetensors 权重文件跳过联网下载--confidence-threshold浮点数0.25置信度阈值低于该值的预测框被丢弃--nms-threshold浮点数0.45非极大值抑制NMS的 IoU 阈值用于去除重叠框--legend-size整数14标注文字字号0表示不绘制类别文字--cpu布尔开关false强制使用 CPU 推理--tracing布尔开关false启用 tracing生成trace-timestamp.json供 Chrome 性能分析--confidence-threshold与--nms-threshold直接决定输出质量阈值过高会漏检过低会出现大量重叠的冗余框NMS 阈值越大保留的重叠框越多。这两个参数会透传到后处理阶段详见下文后处理一节。模型变体与权重获取五种规模的 YOLOv8 变体YOLOv8 通过depth网络深度、width通道宽度、ratio深层通道缩放三组倍数区分规模对应实现见 model.rs 的 Multiples 结构体变体depthwidthratio说明n(nano)0.330.252.0最小、最快s(small)0.330.502.0默认选择m(medium)0.670.751.5中等l(large)1.001.001.0大模型x(xlarge)1.001.251.0最大、精度最高这些倍数会决定骨干网络各阶段的卷积通道数如第一层输出64 * width通道、SPPF 层输出512 * width * ratio通道以及 C2f 模块中 Bottleneck 的重复次数如3 * depth个从源码结构可以清晰看到width/depth/ratio对网络容量的直接缩放关系。权重文件与本地加载默认情况下程序会通过 candle-examples/src/hub.rs 封装的 Hugging Face Hub 客户端从lmz/candle-yolo-v8模型仓库自动下载对应权重文件命名规则为yolov8{size}{task}.safetensors见 main.rs 的 Args::model 方法目标检测yolov8n.safetensors、yolov8s.safetensors、yolov8m.safetensors、yolov8l.safetensors、yolov8x.safetensors姿态估计yolov8n-pose.safetensors、yolov8s-pose.safetensors等文件名带-pose后缀。已下载的文件会缓存在本地 Hub 缓存目录中再次运行不会重复下载。若希望完全离线运行可预先下载权重后使用--model指定本地文件例如cargo run --example yolo-v8 --release -- \ candle-examples/examples/yolo-v8/assets/bike.jpg \ --which n --model /path/to/yolov8n.safetensors权重通过VarBuilder::from_mmaped_safetensors以内存映射方式加载为 F32 精度张量见 main.rs 的 run 函数。从输入图片到预测结果前向推理全流程图像预处理run 函数 展示了完整的预处理管线等比缩放至 640以最长边 640 像素为基准缩放短边宽大于高时宽固定 640、高按比例反之亦然32 像素对齐短边向下取整到 32 的倍数w / 32 * 32以满足 YOLOv8 特征图下采样倍数8/16/32的要求CatmullRom 插值重采样使用image::imageops::FilterType::CatmullRom获得更平滑的缩放结果通道重排与归一化RGB 数据转换为(C, H, W)布局并乘以1/255归一化到[0, 1]增加 batch 维度后送入模型前向得到预测张量。模型架构DarkNet 骨干 FPN 颈部 检测/姿态头模型实现完全以 Candle 张量算子构建全部代码位于 model.rs主要模块如下ConvBlock卷积无偏置 批归一化 SiLU 激活批归一化在加载时通过absorb_bn吸收进卷积权重推理时更省算子Bottleneck两个 3×3 ConvBlock 的堆叠输入输出通道相同时启用残差连接C2fYOLOv8 的核心特征提取模块将输入按通道一分为二一半直通、一半串联多个 Bottleneck最后合并过 1×1 卷积Sppf空间金字塔池化快速版对特征图做三连 5×5 最大池化与原始特征拼接后过卷积用于扩大感受野DarkNet 骨干由上述模块按b1→b5逐级下采样输出三个不同尺度的特征P3/P4/P5对应 stride 8/16/32YoloV8NeckFPN先上采样upsample_nearest2d自顶向下融合高层语义再自底向上经过n3/n5两个 stride 2 卷积输出三个尺度的特征图head_1/head_2/head_3DetectionHead / PoseHead在三个尺度上并行进行分类与回归。检测头通过make_anchorsstride 分别为 8/16/32、grid_cell_offset 0.5生成锚点网格用dist2bbox将 DFLDistribution Focal Loss头预测的距离分布解码为中心点与宽高再乘以 stride 还原到输入坐标姿态头额外回归 17 个关键点的(x, y, mask)其中坐标解码公式为(2 * offset - 0.5 anchor) * stride可见性经过 sigmoid 归一化到[0, 1]。三个尺度的检测与关键点预测结果会在最后一个维度上拼接Tensor::cat(..., D::Minus1)与 anchors、strides 一并输出。后处理置信度过滤、NMS 与结果标注置信度过滤检测任务中每个预测框输出维度为4 num_classes前 4 维为 DFL 解码后的框坐标之后为各类别得分程序取类别得分最大值作为该框置信度仅保留超过--confidence-threshold的框并记录对应的类别索引姿态任务则直接取pred[4]作为框置信度同时读取17 * 3维的关键点数据x/y/mask交错存储见 report_pose。非极大值抑制NMS过滤后的候选框会交给 Candle 提供的通用后处理模块处理实现在 candle-transformers/src/object_detection.rsBboxD通用边界框结构xmin/ymin/xmax/ymax/confidenceD可携带附加数据检测任务携带空向量姿态任务携带VecKeyPointiou计算两框的交并比non_maximum_suppression按类别分组先按置信度降序排序再贪心地保留与已保留框 IoU 不超过阈值的框实现标准 NMS。检测任务按 80 个类别分组分别执行 NMSnms_threshold默认为0.45姿态任务则把所有人体验测框视为一组执行 NMS。该模块还提供了基于 arxiv 1704.04503 的soft_non_maximum_suppression软抑制实现按 IoU 衰减置信度而非直接丢弃不过本示例默认使用硬 NMS。坐标还原与标注绘制由于推理在缩放后的图像上进行绘制前需要将归一化坐标乘以缩放比例还原回原始图像尺寸w_ratio 初始宽 / 推理宽。随后分别以红色空心矩形绘制检测框、绿色实心圆绘制关键点、黄色线段绘制骨架最终保存为*.pp.jpg输出文件。运行设备与构建选项程序通过 candle-examples/src/lib.rs 的 device 函数 自动选择设备显式传入--cpu时强制 CPU否则依次探测 CUDA--features cuda构建、Metal--features metal构建均不可用时回退到 CPU。也可以在 candle-examples/Cargo.toml 中启用mkl或accelerate特性获得 CPU 上的数学库加速。首次运行前请确保使用 release 模式构建以获得完整性能# CPU 推理 cargo run --example yolo-v8 --release -- --cpu candle-examples/examples/yolo-v8/assets/bike.jpg # CUDA GPU 推理需本机具备 CUDA 环境 cargo run --example yolo-v8 --release --features cuda -- \ candle-examples/examples/yolo-v8/assets/bike.jpg # Apple Metal GPU 推理 cargo run --example yolo-v8 --release --features metal -- \ candle-examples/examples/yolo-v8/assets/bike.jpg延伸浏览器内推理除本地命令行运行外本仓库还提供 candle-wasm-examples/yolo 的 WebAssembly 移植包含yoloWorker.js与配套 HTML 页面。将示例编译为 WASM 后模型可全部在浏览器端运行用户上传的自定义图片不会离开本地设备适合隐私敏感或零部署的场景这也与示例 README 中强调的模型完全在浏览器内、自定义图片永不离开设备的设计目标一致。小结candle-yolo-v8 示例以约 700 行的 Rust 代码完整复刻了 YOLOv8 的检测与姿态估计能力从Multiples缩放模型规模、自动下载 Hub 权重到 DarkNet/C2f/SPPF/DFL 的模块化实现再到置信度过滤、NMS 与关键点连线的完整后处理管线每一步都可在 main.rs 与 model.rs 中对应验证。无论你是想快速跑通一个开箱即用的检测 Demo还是希望学习如何在 Candle 中自行搭建 YOLO 系检测模型这个示例都是理想的参考起点。赞分享人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载相关推荐全设备 Favicon 实现指南基于 Front-End-Checklist 的 HTML 图标规范与实践全设备 Favicon 实现指南基于 Front End Checklist 的 HTML 图标规范与实践 本指南以 Front End Checklist人工智能大模型机器学习深度学习本地部署模型推理服务YOLOv8-ONNXRuntime-Rust 实战指南用 Rust 一行命令跑通分类、检测、分割与姿态估计YOLOv8 ONNXRuntime Rust 实战指南用 Rust 一行命令跑通分类、检测、分割与姿态估计 导读 本指南基于当前仓库中的 examples/人工智能深度学习计算机视觉React Native Elements v4 迁移指南从 react-native-elements 到 rneui/themed 的完整升级实践React Native Elements v4 迁移指南从 react native elements 到 rneui/themed 的完整升级实践 ReAI AgentAgent 框架RAG后端上一篇open-pencil/vue 无头组件体系解析从 CanvasRoot 到属性面板的 Vue SDK 组件全景下一篇从 autorest/adal 迁移到 azidentityMicrosoft Entra ID 认证的 Go 现代化实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑