跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

YOLOv8 模型 LibTorch C++ 部署与调用示例

将训练好的 YOLOv8 模型通过 LibTorch 集成到 C++ 项目中的完整流程。首先使用 Python 导出 TorchScript 格式模型,然后在 C++ 端利用 LibTorch 加载模型并进行图像预处理和推理。文章提供了详细的代码示例,包括预处理函数、主程序逻辑及 CMake 编译配置,并讨论了内存优化、量化及错误处理等工程实践要点,适用于工业质检、自动驾驶等高性能场景的模型部署。

怪力乱神发布于 2026/3/24更新于 2026/7/2371 浏览

YOLOv8 模型 LibTorch C++ 部署与调用示例

在工业质检产线高速运转的场景中,每秒需要处理上百帧图像以检测微小缺陷;在自动驾驶车辆的感知系统里,目标检测模块必须在毫秒级时间内完成推理并保证稳定运行。这些对性能和可靠性的严苛要求,使得 Python 环境下的深度学习模型难以直接胜任——GIL 锁限制并发、解释器开销拖慢响应、复杂的依赖环境增加部署风险。

正是在这样的背景下,将训练好的 YOLOv8 模型通过 LibTorch 集成到 C++ 项目中,成为从原型验证迈向工程落地的关键一步。这套技术组合不仅保留了 YOLO 系列'一次前向传播完成检测'的高效特性,还借助 C++ 原生执行的优势,实现了低延迟、高吞吐的生产级部署能力。

Ultralytics 于 2023 年发布的 YOLOv8,在继承前代速度优势的基础上进一步优化了网络结构设计。它采用无锚框(anchor-free)机制,直接预测目标中心点与宽高偏移,简化了后处理流程;其主干网络基于 CSPDarknet 改进,并融合 PANet 特征金字塔增强多尺度融合能力。更重要的是,YOLOv8 支持统一架构下的多种视觉任务——无论是目标检测、实例分割还是姿态估计,都可以使用相似的部署方式,极大降低了工程适配成本。

而 LibTorch 作为 PyTorch 官方提供的 C++ 前端接口,则是打通训练与部署鸿沟的核心工具。它允许我们将 Python 中导出的 TorchScript 模型(.pt 文件)在完全脱离 Python 解释器的环境中加载和运行。整个过程不再受 GIL 限制,内存占用更低,启动更快,特别适合嵌入式设备或边缘计算平台的应用需求。

要实现这一链路,首先需在 Python 端完成模型导出:

from ultralytics import YOLO
# 加载预训练模型
model = YOLO("yolov8n.pt")
# 导出为 TorchScript 格式
model.export(format="torchscript", imgsz=640, optimize=True)

这段代码会生成一个名为 best.torchscript 的序列化模型文件。其中 optimize=True 会启用算子融合等移动设备优化策略。值得注意的是,PyTorch 版本应不低于 1.10,否则可能因兼容性问题导致导出失败。建议在训练和推理两端保持相同的 PyTorch 版本(推荐 2.0+),避免因图结构差异引发运行时错误。

进入 C++ 侧后,关键在于如何正确加载模型并处理输入输出张量。以下是一个典型的推理流程实现:

#include <torch/script.h>
#include <opencv2/opencv.hpp>
#include <iostream>

torch::Tensor preprocess(cv::Mat& image) {
    cv::Mat resized, float_img;
    cv::resize(image, resized, cv::Size(640, 640));
    resized.convertTo(float_img, CV_32F, 1.0 / 255.0);
    cv::(float_img, float_img, cv::COLOR_BGR2RGB);
     tensor = torch::(float_img.data, {, , , }, torch::kFloat);
    tensor = tensor.({, , , }); 
     tensor.();
}

{
    std::shared_ptr<torch::jit::script::Module> ;
     {
         = torch::jit::();
        ->(); 
    }  ( c10::Error& e) {
        std::cerr <<  << e.() << std::endl;
         ;
    }
    cv::Mat img = cv::();
     (img.()) {
        std::cerr <<  << std::endl;
         ;
    }
     input_tensor = (img);
    std::vector<torch::jit::IValue> inputs;
    inputs.(input_tensor);
    at::Tensor output;
     {
         output_tuple = ->forward(inputs).();
        output = output_tuple->()[].();
    }  ( std::exception& e) {
        std::cerr <<  << e.() << std::endl;
         ;
    }
    std::cout <<  << output.() << std::endl;
    
     ;
}
cvtColor
auto
from_blob
1
640
640
3
permute
0
3
1
2
// HWC → NCHW
return
clone
int main()
module
try
module
load
"yolov8n.torchscript"
module
eval
// 启用推理模式
catch
const
"模型加载失败:"
msg
return
-1
imread
"path/to/bus.jpg"
if
empty
"图像读取失败!"
return
-1
auto
preprocess
push_back
try
auto
module
toTuple
elements
0
toTensor
catch
const
"推理异常:"
what
return
-1
"输出维度:"
sizes
// 输出通常为 [1, num_detections, 84],其中 84 = 4(box) + 1(conf) + 80(class scores)
return
0

这个示例展示了从图像读取、预处理、模型加载到推理执行的完整链条。有几个细节值得特别注意:一是输入预处理必须严格对齐训练时的操作,包括 resize 方式、归一化系数(1/255)、色彩空间转换(BGR→RGB)等;二是张量布局需由 OpenCV 默认的 HWC 转换为 PyTorch 所需的 NCHW;三是务必调用 module->eval() 关闭 dropout 和 batch norm 的训练行为。

编译环节则依赖 CMake 构建系统来链接 LibTorch 和 OpenCV 库:

cmake_minimum_required(VERSION 3.13)
project(yolov8_inference)
find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)
add_executable(yolov8_demo main.cpp)
target_link_libraries(yolov8_demo "${TORCH_LIBRARIES}" ${OpenCV_LIBS})
set_property(TARGET yolov8_demo PROPERTY CXX_STANDARD 14)
if (TORCH_CUDA_FOUND)
    target_compile_definitions(yolov8_demo PRIVATE USE_CUDA)
endif()

实际部署时可通过如下命令完成构建:

mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH="/path/to/libtorch" ..
make -j8

这里的 -DCMAKE_PREFIX_PATH 指向下载解压后的 LibTorch 目录,可从 PyTorch 官网 获取对应 CPU 或 CUDA 版本。

在一个典型的边缘视觉系统中,这套方案常被用于构建全 C++ 化的推理流水线:

[摄像头] ↓ (原始图像流)
[图像采集模块 — C++ OpenCV] ↓ (cv::Mat 数据)
[预处理模块 — resize/normalize/HWC2CHW] ↓ (torch::Tensor)
[LibTorch 推理引擎 — 加载.yolov8n.torchscript] ↓ (原始输出 Tensor)
[后处理模块 — NMS/阈值过滤/标签映射] ↓ (最终检测框列表)
[应用层 — 显示/报警/控制信号输出]

该架构已在 IPC 摄像头、工控机、NVIDIA Jetson 等设备上广泛应用。为了进一步提升性能,实践中可采取多项优化措施:

  • 内存复用:缓存输入/输出张量对象,避免频繁分配释放;
  • 禁用梯度:使用 torch::NoGradGuard no_grad 防止不必要的计算图构建;
  • 异步处理:采用双缓冲队列分离图像采集与推理线程,GPU 环境下还可利用 CUDA Stream 实现流水线并行;
  • 模型量化:在导出时启用 int8 量化以压缩模型体积并加速推理:
    python model.export(format="torchscript", int8=True, data="coco8.yaml")
    
  • 图优化:在 C++ 端调用 torch::jit::optimize_for_inference() 对计算图进行剪枝与融合。

此外,良好的错误处理机制也不容忽视。所有模型加载与推理调用都应包裹在 try-catch 块中,并记录详细日志以便故障排查。对于需要长期运行的工业系统,甚至可以设计看门狗进程监控推理服务健康状态。

事实上,这套'Python 训练 + C++ 部署'的模式已经成为现代 AI 工程的标准范式。它既保留了 Python 生态丰富的开发便利性,又充分发挥了 C++ 在性能与稳定性方面的优势。尤其对于已有大量 C++ 代码基础的传统行业系统(如制造业 MES、交通信号控制等),将 YOLOv8 这类先进模型以动态库形式嵌入现有架构,远比重构整套 Python 服务更为现实和高效。

当我们在智能音箱上看到实时人形追踪,在 AGV 小车上实现障碍物避让,在无人机巡检中完成电力设备识别——背后往往都有类似的部署逻辑在支撑。这种高度集成的设计思路,正引领着智能感知系统向更可靠、更高效的方向持续演进。

目录

  1. YOLOv8 模型 LibTorch C++ 部署与调用示例
  2. 加载预训练模型
  3. 导出为 TorchScript 格式
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • DeepSeek-R1-Distill-Llama-70B 蒸馏模型推理能力与技术分析
  • 10 个 GitHub 热门开源项目:AI Agent、Rust 架构与开发者工具
  • 基于 Dify 平台在 Flexus 云服务器上部署 AI Agent 实战
  • 用 OpenClaw + 飞书 Agent 打造 AI 自主模拟炒股系统:从零到实盘全记录
  • 强化学习基础:动态规划算法原理与实现
  • 知网 AIGC 检测算法 2026 升级:新规则解读与应对策略
  • AI 视频风格转换教程:Stable Diffusion 结合 TemporalKit 实现动漫风
  • C++ 入门:发展史、第一个程序、命名空间与输入输出
  • Java String 类常用方法详解
  • DeepSeek 各版本演进历程与优缺点深度解析
  • C++11 左值与右值引用详解:移动语义与返回值优化实战
  • Llama 3-8B-Instruct 在昇腾 NPU 上的 SGLang 性能实测
  • AIGC 设计:内容生成与场景落地的核心方法
  • Kubernetes 与开发语言:.NET Core 和 Java 的云原生实践
  • Windows 本地部署 Ollama + OpenClaw 实战指南
  • OpenClaw 搭建飞书 AI 办公机器人(含本地 Ollama 接入与 Skills)
  • 从零开始学习 Web 安全与白帽黑客入门指南
  • Python 实现股票 Tick 级实时行情抓取
  • 基于 URI Scheme 从 Web 页面启动本地 C++ 应用程序的实现方案
  • ComfyUI 安装指南:配置 Python 环境与共享 WebUI 模型库

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online