模型部署:C++libtorch实现全连接模型10分类和卷积模型ResNet18的四分类的模型部署推理

C++libtorch实现模型部署推理

模型

  • 全连接模型:公开mnist手写识别数字的十分类
  • 卷积模型:自行采集的鲜花四分类

部署

语言环境:C++

对比Python

python是解释性语言,效率很慢,安全性很低

系统开发一般是java、C/C++,python无法直接部署到系统上

pytorch部署

原生部署,不会丢失精度

环境

下载torch-c+±cpu-release版本,下载点击

注意:debug版本用于模型开发

opencv-c++版本,传送门:Releases - OpenCV

推荐安装带星号版本的windows版本

下载CLion,并配置环境,具体步骤可参考之前笔记传送门:安装CLion配置opencv和torch环境

模型打包

torch.jit进行打包

python 复制代码
traced_model = jit.trace(model, data)
traced_model.save("model.pt")

C++实现推理

全连接模型推理
c++ 复制代码
#include <opencv2/opencv.hpp>
#include <torch/torch.h>
#include <torch/script.h>
#include <vector>
#include <string>

int main() {
    cv::Mat image = cv::imread("img/0.jpg",cv::IMREAD_GRAYSCALE);
    torch::Tensor tensor_image = torch::from_blob(image.data,{1,image.rows*image.cols},torch::kByte).toType(torch::kFloat);
    tensor_image /= 255.;

//    std::cout<<tensor_image<<std::endl;

    auto model = torch::jit::load("model/mnist.pt");

    std::vector<torch::jit::IValue> inputs;
    inputs.push_back(tensor_image);

    auto rst = model.forward(inputs).toTensor();

    std::cout<< rst << std::endl;
    std::cout<< torch::argmax(rst,1) << std::endl;
}
卷积模型推理
c++ 复制代码
#include <torch/script.h> // 包含TorchScript头文件
#include <torch/torch.h>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <memory>

int main() {
    // 加载模型
    torch::jit::script::Module module;
    module = torch::jit::load("model/model.pt");

    // 读取并处理图像
    cv::Mat image = cv::imread("img/flower_1.jpg");

    // 根据模型输入大小调整
    cv::resize(image, image, cv::Size(224, 224));  
    // 将BGR转换为RGB
    cv::cvtColor(image, image, cv::COLOR_BGR2RGB); 

    // 转换图像为Tensor
    torch::Tensor img_tensor = torch::from_blob(
            image.data,
            {1, 3, image.rows, image.cols},
            torch::kByte
    );

    // 转换为浮点
    img_tensor = img_tensor.to(torch::kFloat); 
    // 归一化到[0, 1]
    img_tensor = img_tensor.div(255.0); 

    // 准备输入
    std::vector<torch::jit::IValue> inputs;
    inputs.push_back(img_tensor);

    // 执行模型推理
    at::Tensor output = module.forward(inputs).toTensor();

    // 输出结果
    std::cout << "Model output: " << output << '\n';

    return 0;
}

鲜花四分类模型输出四个结果如下,即为成功转换模型

相关推荐
具身新纪元3 分钟前
CVPR 2026|新缺陷不断上线,如何让工业视觉检测模型不忘旧账?
人工智能·深度学习·目标检测·机器学习·计算机视觉·目标跟踪·视觉检测
我不会插花弄玉4 分钟前
10.list【由浅入深-C++】
数据结构·c++·list
牛马也想出海14 分钟前
使用Playwright被检测为机器人的原因及反检测方案
开发语言·网络·人工智能·机器人·php
GrowthDiary00721 分钟前
Python 常用函数总结
开发语言·python
热心网友俣先生34 分钟前
2026年华数杯C 题 超详细解题思路
c语言·开发语言·人工智能
啄缘之间1 小时前
5.1 uvm‑component 的层级结构管理? new (name,parent) 参数
开发语言·笔记·学习·ic·uvm·sv
math_hongfan1 小时前
鸿蒙多模态AI交互高级:图文+语音+手势融合交互/多模态大模型端侧适配/跨模态检索高阶实战
人工智能·学习·华为·交互·语音识别·harmonyos·鸿蒙
旖旎夜光1 小时前
C++(类与对象)(下)
开发语言·c++·学习
盼小辉丶1 小时前
PyTorch计算机视觉(5)——生成对抗网络(Generative Adversarial Network,GAN)
pytorch·生成对抗网络·计算机视觉
张小凡vip1 小时前
Python爬虫实战:高效稳定的文件下载模块设计与实现
开发语言·爬虫·python