TNN编译及使用
要使用 CMake 和 TNN 库基于 C++ 实现神经网络模型的推理预测,你需要按照以下步骤进行操作:
- 准备环境
确保已安装 CMake 和 C++ 编译器。并从 TNN 的 GitHub 仓库下载源代码(https://github.com/Tencent/TNN)。
- 编译 TNN
在 TNN 根目录下创建一个新目录,例如 build,然后进入该目录并运行以下命令:
mkdir build
cd build
cmake ..
make -j4
这将在 build 目录下生成 TNN 库文件。
过程如下:




- 创建你的项目
创建一个新的 C++ 项目,例如 TNNInference。在该项目中创建一个名为 CMakeLists.txt 的文件,用于配置 CMake。以下是一个示例:
cmake_minimum_required(VERSION 3.10)
project(TNNInference)
set(CMAKE_CXX_STANDARD 11)
# 添加 TNN 头文件和库文件路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/path/to/TNN/include)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/path/to/TNN/lib)
add_executable(TNNInference main.cpp)
# 链接 TNN 库
target_link_libraries(TNNInference TNN)
- 编写 C++ 代码
在 main.cpp 中编写 C++ 代码,使用 TNN 进行模型推理。以下是一个简单的示例:
#include <iostream>
#include "tnn/core/common.h"
#include "tnn/core/tnn.h"
int main() {
// 创建 TNN 实例
std::shared_ptr<TNN_NS::TNN> tnn = std::make_shared<TNN_NS::TNN>();
// 配置模型文件路径
TNN_NS::ModelConfig model_config;
model_config.params.push_back("path/to/your/model.proto");
model_config.params.push_back("path/to/your/model.bin");
// 初始化 TNN
TNN_NS::Status status = tnn->Init(model_config);
if (status != TNN_NS::TNN_OK) {
std::cerr << "TNN init failed: " << status.description() << std::endl;
return -1;
}
// 创建输入和输出 Blob
TNN_NS::Blob input_blob, output_blob;
// 进行模型推理
status = tnn->Forward(&input_blob, &output_blob);
if (status != TNN_NS::TNN_OK) {
std::cerr << "TNN forward failed: " << status.description() << std::endl;
return -1;
}
// 获取并处理输出结果
// ...
return 0;
}
请注意,你需要根据你的模型和数据修改代码,例如设置输入 Blob 的形状、填充输入数据等。
- 编译和运行项目
在项目根目录下创建一个新目录,例如 build,然后进入该目录并运行以下命令:
mkdir build
cd build
cmake ..
make
./TNNInference
这将编译并运行你的项目,使用 TNN 库进行模型推理。
以上步骤将帮助你使用 CMake 和 TNN 库基于 C++ 实现神经网络模型的推理预测。
TNN编译及使用的更多相关文章
- TNN iOS非图像模型入门
注:本文同步发布于微信公众号:stringwu的互联网杂谈TNN iOS 非图像模型入门指南 1 背景 TNN是腾讯优图实验室开源的高性能.轻量级神经网络推理框架TNN,github上也有比较详细的例 ...
- TODO:macOS编译PHP7.1
TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...
- Centos6.5下编译安装mysql 5.6
一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...
- CENTOS 6.5 平台离线编译安装 PHP5.6.6
一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...
- CENTOS 6.5 平台离线编译安装 Mysql5.6.22
一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...
- Android注解使用之注解编译android-apt如何切换到annotationProcessor
前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...
- Hawk 6. 编译和扩展开发
Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- 在Windows上编译和调试CoreCLR
生成CoreCLR - Windows篇 本文的唯一目的就是让你运行Hello World 运行环境 Window 7+ Visual studio 2015 确保C++ 工具已经被安装,默认是不安装 ...
- 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~
这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...
随机推荐
- 别再售卖 5块钱 的 Win10 激活码了,后果很严重
为了推广Windows 10系统(以下简称Win10),微软过去几年中一直给免费升级,Win7免费洗白的策略现在都还管用. 微软的大方也让很多人忘了Win10系统是要收费的,而且价格不便宜,国内的话, ...
- esp8266+mqtt+继电器 (platformio)
esp8266+mqtt+继电器 使用mqtt 控制led灯 项目地址 https://gitee.com/zhudachangs/esp8266-mqtt-relay #include <Ar ...
- 2023年10月,红米(小米)note 8 pro 优化记
看了红米的note 13 pro和note 12 turbo的参数和价格后,我决定下单买个note8 pro的手机壳,确实有新手机的感觉了. 我note8 pro手机参数如下 MIUI 12.0.5 ...
- Taro首个支持鸿蒙的 UI 库,同时还兼容 React Native、小程序、H5
Taro 4.0 已经推出一段时间了,4.0 版本主要是支持了鸿蒙端的开发以及 Vite 编译工具的支持.duxapp 在这段时间也跟随 Taro 的脚步,实现的对鸿蒙端的支持,并且也将之前的 dux ...
- 【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...
- MySQL注入之Fuzz测试&Bypass WAF小结
目录 BurpSuite Fuzz测试 内联注释 绕过union[]select联合查询 绕过敏感函数 绕过from[]information_schema查表 报错注入示例 常规绕过思路总结 空格绕 ...
- (Redis基础教程之九) 如何在Redis中使用Sorted Sets
介绍 Redis是一个开源的内存中键值数据存储.在Redis的,排序集合类似于一个数据类型集在这两者都是串的非重复的组.不同之处在于,已排序集中的每个成员都与一个分数相关联,从而可以从最小分数到最大分 ...
- Spring常见面试问题
Spring 1. Spring工作机制及为什么要用? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.Spring既是一个AOP框架,也是一IOC容器. SpringFra ...
- 静态分析工具及使用总结(二)CheckStyle
这里主要介绍三种开源的工具,PMD.CheckStyle和FindBugs,着重是在Ant里的调用,据说商业软件JTest也是著名的代码分析工具,哈哈,要花钱的没有用过. Checkstyle (ht ...
- golang之copier
今天我们要介绍的copier库就能处理不同类型之间的赋值.除此之外,copier还能: 调用同名方法为字段赋值: 以源对象字段为参数调用目标对象的方法,从而为目标对象赋值(当然也可以做其它的任何事情) ...