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修饰,表示编译期就可以得到常量值去优化
TopFormer ONNX 实现

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

被折叠的 条评论
为什么被折叠?



