简介
TNN:由腾讯优图实验室开源的高性能、轻量级神经网络推理框架。它还具有跨平台、高性能、模型压缩、代码裁剪等许多突出优点。在原有Rapidnet和NCNN框架的基础上,TNN框架进一步加强了对移动设备的支持和性能优化。同时,它借鉴了业界主流开源框架的高性能和良好扩展性特点,扩展了对X86和NV GPU的支持。在手机上,TNN已被手机QQ、微视和P图等众多应用使用。作为腾讯云AI的基础加速框架,TNN为众多业务的实现提供了加速支持。欢迎大家参与共建,促进TNN推理框架的进一步完善。
效果示例
中文OCR示例是chineseocr_lite项目的TNN实现。它轻量且支持斜、转、竖文本识别。
各示例的支持情况如下表所示。你可以点击✅找到每个示例的入口代码。
示例 | ARM | OpenCL | Metal | 华为NPU | 苹果NPU | X86 | CUDA |
---|---|---|---|---|---|---|---|
人脸检测(blazeface) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
目标检测(yolov5s) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
人脸对齐 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
头发分割 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
姿势估计 (来自腾讯光流) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
姿势估计(blazepose) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
中文OCR | ✅ | ✅ | ✅ | ✅ | ✅ | ||
阅读理解 | ✅ | ✅ |
快速开始
使用TNN非常简单。如果你有一个训练好的模型,可以通过以下三个步骤将模型部署到目标平台上。
-
将训练好的模型转换为TNN模型。我们提供了丰富的工具来帮助你完成这一步,无论你使用的是Tensorflow、Pytorch还是Caffe,都可以轻松完成转换。 详细的动手教程可以在这里找到 如何创建TNN模型。
-
当你完成模型转换后,第二步是编译目标平台的TNN引擎。你可以根据硬件支持在ARM/OpenCL/Metal/NPU/X86/CUDA等不同加速方案中选择。 对于这些平台,TNN提供了方便的一键编译脚本。详细步骤请参考如何编译TNN。
-
最后一步是使用编译好的TNN引擎进行推理。你可以在应用程序中调用TNN。我们提供了丰富的详细示例作为参考,帮助你完成。
技术解决方案
目前,TNN已经在各大业务中推出,其以下特点广受好评。
-
计算优化
- 后端算子经过优化,充分利用不同架构下的计算能力,包括指令发布、吞吐量、延迟、缓存带宽、缓存延迟、寄存器等。
- TNN在主流硬件平台(CPU:ARMv7,ARMv8,X86,GPU:Mali,Adreno,Apple,NV GPU,NPU)上的性能得到了极大调优和提升。
- 卷积函数通过Winograd、Tile-GEMM、直接卷积等多种算法实现,以确保在不同参数和尺寸下的效率。
- 操作融合:TNN可以对网络图进行离线分析,融合多个简单操作,减少重复的内存访问和内核启动成本等开销。
-
低精度计算加速
- TNN支持INT8/FP16模式,减少模型大小和内存消耗,并利用特定硬件的低精度指令加速计算。
- TNN支持INT8 WINOGRAD算法(输入6bit),在不牺牲精度的情况下进一步降低模型计算复杂度。
- TNN支持在一个模型中使用混合精度数据,加快模型计算速度,同时保持其精度。
-
内存优化
- 高效“内存池”实现:基于全网络DAG分析,实现了非依赖节点之间的内存复用,将内存成本减少90%。
- 跨模型内存减少:支持网络内存的外部实时设计,使多个模型可以共享互相的内存。
-
TNN在主流模型上的性能:基准数据
-
TNN架构图:
-
TNN通过ONNX支持TensorFlow、Pytorch、MxNet、Caffe和其他训练框架,利用ONNX开源社区的不断改进。 目前,TNN支持100多个ONNX操作符,涵盖了大多数主流的CNN、NLP操作符需求。
-
TNN运行在主流操作系统(Android、iOS、嵌入式Linux、Windows、Linux),并兼容ARM CPU,X86 GPU,NPU硬件平台。
-
TNN通过模块化设计构建,抽象并隔离了诸如模型分析、图构建、图优化、底层硬件适配及高性能内核等组件。 它使用“工厂模式”注册和构建设备,尽量减少支持更多硬件和加速方案的成本。
-
移动动态库的大小只有400KB左右,并提供基本的图像转换操作,轻量且方便。TNN在各个平台使用统一的模型和接口,只需配置一个参数便可轻松切换。
了解TNN能力
手册
API文档
贡献给TNN
路线图
致谢
TNN参考了以下项目:
许可证
常见问题
加入我们
-
欢迎大家参与,共同打造行业里最好的推理框架。
-
技术讨论QQ群:704900079 回答:TNN
-
扫码加入TNN讨论群: