GithubHelp home page GithubHelp logo

kevinz-718 / tnn Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tencent/tnn

0.0 0.0 0.0 34.67 MB

TNN:由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。目前TNN已经在手Q、微视、P图等应用中落地,欢迎大家参与协同共建,促进TNN推理框架进一步完善。

License: Other

CMake 0.87% Shell 0.76% Objective-C 0.25% Objective-C++ 4.94% C++ 77.33% C 3.39% Batchfile 0.01% Assembly 3.28% Metal 2.92% Python 6.14% Dockerfile 0.01% Makefile 0.09%

tnn's Introduction

English Version

简介

TNN:由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。目前TNN已经在手Q、微视、P图等应用中落地,欢迎大家参与协同共建,促进TNN推理框架进一步完善。

效果示例

人脸检测(blazeface) 物体检测(yolov5s) 人脸配准(腾讯优图) 头发分割(腾讯光影)
blazeface iOS ✅ Android ✅
模型链接
yolov5s iOS ✅ Android ✅
模型链接
youtu_facealign iOS ✅ Android ✅
模型链接
hair_segmentation iOS ✅ Android ✅
模型链接

快速开始

使用 TNN 非常简单,如果你有一个已经训练好的模型, 那么一般而言通过以下三个步骤就能完成模型在目标平台上的部署。

  1. 第一步是把训练好的模型转换成TNN的模型,为此我们提供了丰富的工具来帮助你完成这一步,无论你使用的是 TensorFlow、PyTorch、或者 Caffe,都可以轻松完成转换。 详细的手把手教程可以参见这里如何转换模型

  2. 当你完成了模型的转换,第二步就是编译目标平台的 TNN 引擎了,你可以根据自己的目标平台的硬件支持情况,选择 CPU/ARM/OpenCL/Metal/NPU 等加速方案。 对于这些平台,TNN 都提供了一键编译的脚本,使用非常方便。详细步骤可以参考这里如何编译TNN

  3. 最后一步就是使用编译好的 TNN 引擎进行推理,你可以在自己的应用程序中嵌入对 TNN 的调用,这方面我们提供了丰富而详实的 demo 来帮助你完成。

技术方案

目前TNN已经在手Q、微视、P图等应用中落地,其具有的以下特性获得了广泛的好评。

  • 计算优化

    • 针对不同架构在硬件指令发射、吞吐、延迟、缓存带宽、缓存延迟、寄存器数量等特点,深度优化底层算子,极致利用硬件算力
    • 主流硬件平台(CPU: ARMv7, ARMv8, GPU: Mali, Adreno, Apple) 深度调优
    • CNN 核心卷积运算通过 Winograd,Tile-GEMM, Direct Conv 等多种算法实现,保证不同参数、计算尺度下高效计算
    • Op 融合:离线分析网络计算图,多个小 Op(计算量小、功能较简单)融合运算,减少反复内存读取、kernel 启动等开销
  • 低精度优化

    • 支持 INT8, FP16 低精度计算,减少模型大小、内存消耗,同时利用硬件低精度计算指令加速计算
    • 支持 INT8 Winograd 算法,(输入6bit), 在精度满足要求的情况下,进一步降低模型计算复杂度
    • 支持单模型多种精度混合计算,加速计算同时保证模型精度
  • 内存优化

    • 高效”内存池”实现:通过 DAG 网络计算图分析,实现无计算依赖的节点间复用内存,降低 90% 内存资源消耗
    • 跨模型内存复用:支持外部实时指定用于网络内存,实现“多个模型,单份内存”。
  • 主流模型实测性能:v0.1 2020.05.29

    • 麒麟970:

      model cpu time(单线程,ms) gpu time(ms) npu time(ms)
      Mobilenet_v1 88 12 4.9
      Mobilenet_v1_int8 55
      Mobilenet_v2 58 11 8.0
      Mobilenet_v2_int8 41
      squeezenet_v1.0 127 20 5.1
      squeezenet_v1.0_int8 82
    • 骁龙835:

      model cpu time(单线程,ms) gpu time(ms)
      Mobilenet_v1 94 16
      Mobilenet_v1_int8 62
      Mobilenet_v2 61 14
      Mobilenet_v2_int8 47
      squeezenet_v1.0 122 28
      squeezenet_v1.0_int8 93
    • 骁龙845:

      model cpu time(单线程,ms) gpu time(ms)
      Mobilenet_v1 60 10
      Mobilenet_v1_int8 37
      Mobilenet_v2 39 8
      Mobilenet_v2_int8 28
      squeezenet_v1.0 74 14
      squeezenet_v1.0_int8 56
  • TNN架构图:

  • 通过 ONNX 支持 TensorFlow, PyTorch, MXNet, Caffe 等多种训练框架,充分利用和融入不断完善的 ONNX 开源生态。当前支持 ONNX 算子55个,近期会完善到约80个,覆盖主流CNN网络

  • 支持主流安卓、iOS、Embedded Linux 操作系统,支持 ARM CPU, GPU 硬件平台(近期还会加入达芬奇 NPU 支持)

  • 模块化设计,将模型解析、计算图构建、优化、底层硬件适配、高性能 kernel 实现各部分抽象隔离,通过 Factory Mode 注册、构建设备,方便接入更多的底层硬件、加速方案。

  • Runtime 无任何第三方库依赖,CPU 动态库尺寸仅约 400KB,并提供基础图像变换操作,调用简单便捷。跨平台模型统一、调用接口统一,通过单个配置参数快速切换。

能力展示

使用手册

API文档

贡献者须知

Roadmap

致谢

TNN参考和借鉴了下列项目:

License

FAQ

加入我们

  • 欢迎大家参与,协同共建,打造业界最好的移动端推理框架。

  • 技术交流 QQ 群: 913940506 答案:TNN

  • QQ 群二维码:

tnn's People

Contributors

103yiran avatar 1627180283 avatar alohali avatar bbean avatar bignerdcoding avatar bluaxe avatar bug1989 avatar daquexian avatar darrenyao87 avatar devandong avatar fhahaha avatar gttiankai avatar guanmoyu avatar jestyf avatar lnmdlong avatar masterwan96 avatar neiltian-tencent avatar nihui avatar powerpwang avatar quinnrong94 avatar seanxcwang avatar shaundai-tencent avatar shenpenwang avatar ssthouse avatar stephehuang avatar tpoisonooo avatar xionghc avatar yl16417 avatar ysh329 avatar zchrissirhcz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.