最近看了下TNN的源码,打算记录一下源码阅读笔记。
git clone https://github.com/tencent/tnn
克隆下tnn,看下目录结构:
- benchmark:模型的benchmark和层的benchmark
- cmake:底下就一个cmake 文件,不同的系统设置不同类型的库
- doc:相关文档
- examples:包括android、ios、armlinux的例子,samples是封装的tnn api的调用接口
- include:tnn暴露给用户的api头文件,即这个文件夹下的头文件是用户可以引用的
- model:一些基准模型
- platforms:不同平台的调用,包括android、ios、linux和mac
- scripts:不同平台编译脚本,包括aarch64、android、armhf_linux、ios等
- source:和上面的include共同构成了主要的tnn源码
- test:测试代码,包含层的单元测试
- third_party:一些第三方工具,gflags用于参数解析、opencl用于加速计算、stb用于图片load、save、resize等
- tools:模型量化工具、模型转换工具等
- Dockerfile:用于构建docker环境,可方便使用docker进行模型转换等操作
- CMakeLists.txt:CMake编译文件
接下来要阅读的代码重点在include、source以及tools。
先看一眼source的文件夹目录:
- core:图和层的各种类和接口
- device:各个加速平台的算子计算,包括arm、metal和opencl
- interpreter:模型解析,包括TNN和NCNN模型
- layer:层的声明与注册
- memory_manager:内存管理
- optimizer:优化操作,包括一些层的合并,删除等
- utils:一些辅助函数和工具,比如检测框的工具,bf16的工具,字符串操作工具等