最近看了下TNN的源碼褂策,打算記錄一下源碼閱讀筆記喉磁。
git clone https://github.com/tencent/tnn
克隆下tnn碱茁,看下目錄結(jié)構(gòu):
image.png
- benchmark:模型的benchmark和層的benchmark
- cmake:底下就一個cmake 文件锁孟,不同的系統(tǒng)設(shè)置不同類型的庫
- doc:相關(guān)文檔
- examples:包括android彬祖、ios茁瘦、armlinux的例子,samples是封裝的tnn api的調(diào)用接口
- include:tnn暴露給用戶的api頭文件储笑,即這個文件夾下的頭文件是用戶可以引用的
- model:一些基準(zhǔn)模型
- platforms:不同平臺的調(diào)用甜熔,包括android、ios南蓬、linux和mac
- scripts:不同平臺編譯腳本纺非,包括aarch64、android赘方、armhf_linux烧颖、ios等
- source:和上面的include共同構(gòu)成了主要的tnn源碼
- test:測試代碼,包含層的單元測試
- third_party:一些第三方工具窄陡,gflags用于參數(shù)解析炕淮、opencl用于加速計算、stb用于圖片load跳夭、save涂圆、resize等
- tools:模型量化工具、模型轉(zhuǎn)換工具等
- Dockerfile:用于構(gòu)建docker環(huán)境币叹,可方便使用docker進(jìn)行模型轉(zhuǎn)換等操作
- CMakeLists.txt:CMake編譯文件
接下來要閱讀的代碼重點在include润歉、source以及tools。
先看一眼source的文件夾目錄:
image.png
- core:圖和層的各種類和接口
- device:各個加速平臺的算子計算颈抚,包括arm踩衩、metal和opencl
- interpreter:模型解析,包括TNN和NCNN模型
- layer:層的聲明與注冊
- memory_manager:內(nèi)存管理
- optimizer:優(yōu)化操作贩汉,包括一些層的合并驱富,刪除等
- utils:一些輔助函數(shù)和工具,比如檢測框的工具匹舞,bf16的工具褐鸥,字符串操作工具等