最近看了下TNN的源碼,打算記錄一下源碼閱讀筆記。
git clone https://github.com/tencent/tnn
克隆下tnn,看下目錄結(jié)構(gòu):

image.png
- benchmark:模型的benchmark和層的benchmark
- cmake:底下就一個(gè)cmake 文件,不同的系統(tǒng)設(shè)置不同類(lèi)型的庫(kù)
- doc:相關(guān)文檔
- examples:包括android、ios、armlinux的例子,samples是封裝的tnn api的調(diào)用接口
- include:tnn暴露給用戶(hù)的api頭文件,即這個(gè)文件夾下的頭文件是用戶(hù)可以引用的
- model:一些基準(zhǔn)模型
- platforms:不同平臺(tái)的調(diào)用,包括android、ios、linux和mac
- scripts:不同平臺(tái)編譯腳本,包括aarch64、android、armhf_linux、ios等
- source:和上面的include共同構(gòu)成了主要的tnn源碼
- test:測(cè)試代碼,包含層的單元測(cè)試
- third_party:一些第三方工具,gflags用于參數(shù)解析、opencl用于加速計(jì)算、stb用于圖片load、save、resize等
- tools:模型量化工具、模型轉(zhuǎn)換工具等
- Dockerfile:用于構(gòu)建docker環(huán)境,可方便使用docker進(jìn)行模型轉(zhuǎn)換等操作
- CMakeLists.txt:CMake編譯文件
接下來(lái)要閱讀的代碼重點(diǎn)在include、source以及tools。
先看一眼source的文件夾目錄:

image.png
- core:圖和層的各種類(lèi)和接口
- device:各個(gè)加速平臺(tái)的算子計(jì)算,包括arm、metal和opencl
- interpreter:模型解析,包括TNN和NCNN模型
- layer:層的聲明與注冊(cè)
- memory_manager:內(nèi)存管理
- optimizer:優(yōu)化操作,包括一些層的合并,刪除等
- utils:一些輔助函數(shù)和工具,比如檢測(cè)框的工具,bf16的工具,字符串操作工具等