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 ...
随机推荐
- 麻将计分器微信小程序的开发
如何开发微信小程序 前言 因为最近沉迷和朋友们一起下班去打麻将,他们推荐了一个计分的小程序,就不需要每局都转账或者用扑克牌记录了,但是这个小程序不仅打开有广告,各个页面都植入了广告,用起来十分不适. ...
- Java高并发关于synchronized的8锁讲解
先了解一个概念:synchronized 锁的是这个方法所在的资源类,就是这个对象,也就是同一时间段不可能有两个线程同时进到这个资源类,同一时间段,只允许有一个线程访问资源类里面的其中一个synchr ...
- 选择程序设计(python)
文章目录 1.基本概念 2.程序基本结构 3.实例 3.1 判断一个人年龄属于未成年人还是成年人 3.2判断是否是闰年 1.基本概念 Python选择程序设计是通过一条或多条语句的执行结果(True或 ...
- img标签src引用网络图片,响应403的解决方法
在html页面加入<meta name="referrer" content="no-referrer">标签,就可以解决页面加载网络图片的问题, ...
- 4G模组AT指令 | MQTT应用指南!
今天,老师傅讲的是关于4G模组AT指令之MQTT应用,以4G模组Air780E为例: 一.MQTT 协议简介 1.1 MQTT 概述 MQTT 是一种轻量级的消息传输协议,旨在在物联网(IoT)应用中 ...
- 干货分享:通用加解密函数(crypto),Air780E篇
一.加解密概述 加解密算法是保证数据安全的基础技术,无论是在数据传输.存储,还是用户身份验证中,都起着至关重要的作用.随着互联网的发展和信息安全威胁的增加,了解并掌握常用的加解密算法已经成为开发者和安 ...
- 做AI运动小程序有哪些解决方案,如何进行选型?
引言:随着深度学习技术的发展进步,已经不再依赖强大的GPU算力,便可实现AI推理了,让AI技术渗透到了电脑.手机.智能设备等各类设备.体育.健身行业也不例外,阿里体育等IT大厂,推出的乐动力.天天跳绳 ...
- git 阻止在某个分支上面提交commit
比如在开发中不希望master分支被commit做提交,那么我们可以这样做 找到 .git/hook/文件夹 然后在里面复制一个 pre-commit出来 cd .git/hooks/ cp pre- ...
- Java Cache系列之Cache概述和Simple Cache
前记:最近公司在做的项目完全基于Cache(Gemfire)构建了一个类数据库的系统,自己做的一个小项目里用过Guava的Cache,以前做过的项目中使用过EHCache,既然和Cache那么有缘,那 ...
- Redis之内存占用分析工具RDR
GitHub:https://github.com/xueqiu/rdr 场景:最近Redis爆满, 但是不清楚具体哪些键占用的空间较多, 是否有设置过期时间等情况 1.下载软件 windows:ht ...