C++ 实现ONNX语义分割(TopFormer)

TopFormer ONNX 实现
本文介绍如何使用ONNX和C++实现TopFormer语义分割模型。通过详细步骤展示模型加载、图像预处理、推理及结果可视化的过程。适用于希望了解模型部署流程的读者。

TopFormer是一个比较高效的语义分割模型,
TopFormer ONNX主页上可以找到python的实现。

用一个小猫的图片测试一下
在这里插入图片描述
瑕疵是有一些,不过它的特点是非常快,视频语义分割能达到实时(本地CPU)。
TopFormer模型的输出Size是64x64,这个是resize后的效果。

用cpp实现看看效果。
cpp版的onnxruntime安装这里就不说了,参考链接
还需要安装cpp版的opencv,我选的是4.5,安装参考

然后你的CmakeLists.txt里面要link这两样

target_link_libraries(${PROJECT_NAME}
        ${OpenCV_LIBS}
        ${ONNXRUNTIME_LIB}
        )

来一波include

#include <iostream>
#include <fstream>
#include <array>
#include <string>

#include <opencv4/opencv2/core/mat.hpp>
#include <opencv4/opencv2/imgcodecs.hpp>
#include <opencv4/opencv2/imgproc.hpp>
#include <core/session/experimental_onnxruntime_cxx_api.h>

using namespace std;
using namespace cv;

onnx模型直接用github下下来的就好,
定义几个onnxruntime变量

const string modelFile = "TopFormer-S_512x512_2x8_160k.onnx";
Ort::Env env;
Ort::SessionOptions sessionOptions;
Ort::Session session(nullptr);

try{
   
   
     session = Ort::Session(env, modelFile.data(), sessionOptions);
} catch(Ort::Exception& e) {
   
   
     cout << e.what() << endl;
     return 1;
}

TopFormer的输入Size是1x3x512x512,输出Size是1x150x64x64,
所以先定义下形状。

constexpr int64_t numChannels = 3;  //constexpr修饰,表示编译期就可以得到常量值去优化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值