1 RKNN介紹
1.1 簡介
?? Rockchip板載AI芯片,內(nèi)置高能效NPU,擁有強勁算力,支持多種AI框架和AI應用開發(fā)SDK,易于開發(fā),擁有面向AI應用的豐富接口,便于擴展,適用于語音喚醒、語音識別、人臉識別等功能應用場景。
?? RKNN 是 Rockchip npu 平臺使用的模型類型,以.rknn后綴結尾的模型文件。Rockchip提供RKNN-Toolkit開發(fā)套件進行模型轉換、推理運行和性能評估。
用戶通過提供的 python 接口可以便捷地完成以下功能:
1)模型轉換:支持 Caffe、Tensorflow、TensorFlow Lite、ONNX、Darknet 模型,支持RKNN 模型導入導出,后續(xù)能夠在硬件平臺上加載使用。
2)模型推理:能夠在 PC 上模擬運行模型并獲取推理結果,也可以在指定硬件平臺RK3399Pro Linux上運行模型并獲取推理結果。
3)性能評估:能夠在 PC 上模擬運行并獲取模型總耗時及每一層的耗時信息,也可以通過聯(lián)機調試的方式在指定硬件平臺 RK3399Pro Linux上運行模型,并獲取模型在硬件上運行時的總時間和每一層的耗時信息。
?? RKNN Tookit僅支持Linux系統(tǒng),可在PC上使用。此外, Rockchip 也提供了c/c++和python的API 接口。
1.2 RKNN-Toolkit
?? RKNN-Toolkit是為用戶提供在 PC、 Rockchip NPU 平臺上進行模型轉換、推理和性能評估的開發(fā)套件,用戶通過該工具提供的 Python 接口可以便捷地完成以下功能:
1、模型轉換
?? 支持Caffe、Tensorflow、TensorFlow Lite、ONNX、Darknet、Pytorch、MXNet 模型轉成 RKNN 模型,支持 RKNN 模型導入導出,后續(xù)能夠在 Rockchip NPU 平臺上加 載使用。從1.2.0版本開始支持多輸入模型。從1.3.0版本開始支持 Pytorch 和 MXNet。
2、量化功能
?? 支持將浮點模型轉成量化模型, 目前支持的量化方法有非對稱量化( asymmetric_quantized-u8 ) , 動態(tài)定點量化 ( dynamic_fixed_point-8 和 dynamic_fixed_point-16)。從1.0.0版本開始, RKNN-Toolkit 開始支持混合量化功能。
3、模型推理
?? 能夠在 PC 上模擬 Rockchip NPU 運行 RKNN 模型并獲取推理結果;也可以將 RKNN 模型分發(fā)到指定的 NPU 設備上進行推理。
4、性能評估
?? 能夠在 PC 上模擬 Rockchip NPU 運行 RKNN 模型,并評估模型性能(包括總 耗時和每一層的耗時);也可以將 RKNN 模型分發(fā)到指定 NPU 設備上運行,以評估模型 在實際設備上運行時的性能。
5、內(nèi)存評估
?? 評估模型運行時對系統(tǒng)和 NPU 內(nèi)存的消耗情況。使用該功能時,必須將 RKNN 模型分發(fā)到 NPU 設備中運行,并調用相關接口獲取內(nèi)存使用信息。從0.9.9版本開始支持該功能。
6、模型預編譯
?? 通過預編譯技術生成的 RKNN 模型可以減少在硬件平臺上的加載時間。對 于部分模型,還可以減少模型尺寸。但是預編譯后的 RKNN 模型只能在 NPU 設備上運行。 目前只有 x86_64 Ubuntu 平臺支持直接從原始模型生成預編譯 RKNN 模型。 RKNN-Toolkit 從0.9.5版本開始支持模型預編譯功能,并在1.0.0版本中對預編譯方法進行了升級,升級 后的預編譯模型無法與舊驅動兼容。從1.4.0版本開始,也可以通過 NPU 設備將普通 RKNN 模型轉成預編譯 RKNN 模型。
7、模型分段
?? 該功能用于多模型同時運行的場景下,可以將單個模型分成多段在 NPU 上執(zhí) 行,借此來調節(jié)多個模型占用 NPU 的執(zhí)行時間,避免因為一個模型占用太多執(zhí)行時間, 1而使其他模型得不到及時執(zhí)行。RKNN-Toolkit 從1.2.0版本開始支持該功能。該功能必須 在帶有 Rockchip NPU 的硬件上使用,且 NPU 驅動版本要大于0.9.8。
8、自定義算子功能
?? 如果模型含有 RKNN-Toolkit 不支持的算子(operator),那么在模型轉 換階段就會失敗。這時候可以使用自定義算子功能來添加不支持的算子,從而使模型能正 常轉換和運行。RKNN-Toolkit 從1.2.0版本開始支持該功能。自定義算子的使用和開發(fā)請參考《Rockchip_Developer_Guide_RKNN_Toolkit_Custom_OP_CN》文檔。
9、量化精度分析功能
?? 該功能將給出模型量化前后每一層推理結果的歐氏距離或余弦距離, 以分析量化誤差是如何出現(xiàn)的,為提高量化模型的精度提供思路。該功能從1.3.0版本開 始支持。1.4.0版本增加逐層量化精度分析子功能,將每一層運行時的輸入指定為正確的 浮點值,以排除逐層誤差積累,能夠更準確的反映每一層自身受量化的影響。
10、可視化功能
?? 該功能以圖形界面的形式呈現(xiàn) RKNN-Toolkit 的各項功能,簡化用戶操作步 驟。用戶可以通過填寫表單、點擊功能按鈕的形式完成模型的轉換和推理等功能,而不需 要再去手動編寫腳本。有關可視化功能的具體使用方法請參考《Rockchip_User_Guide_RKNN_Toolkit_Visualization_CN》文檔。1.3.0版本開始支持該功 能。1.4.0版本完善了對多輸入模型的支持,并且支持 RK1806, RV1109, RV1126 等新的 Rockchip NPU 設備。
11、模型優(yōu)化等級功能
?? RKNN-Toolkit 在模型轉換過程中會對模型進行優(yōu)化,默認的優(yōu)化選項 可能會對模型精度產(chǎn)生一些影響。通過設置優(yōu)化等級,可以關閉部分或全部優(yōu)化選項。有 關優(yōu)化等級的具體使用方法請參考 config 接口中optimization_level參數(shù)的說明。該功能從 1.3.0版本開始支持。
1.3 環(huán)境依賴
1、系統(tǒng)支持
Ubuntu 16.04 x64(以上)、Window 7 x64(以上)、Mac OS X 10.13.5 x64 (以上)、 Debian 9.8 (x64)以上;
2、Python版本
3.5/3.6/3.7;
3、Python依賴
'numpy == 1.16.3'
'scipy == 1.3.0'
'Pillow == 5.3.0'
'h5py == 2.8.0'
'lmdb == 0.93'
'networkx == 1.11'
'flatbuffers == 1.10',
'protobuf == 3.6.1'
'onnx == 1.4.1'
'onnx-tf == 1.2.1'
'flask == 1.0.2'
'tensorflow == 1.11.0' or 'tensorflow-gpu'
'dill == 0.2.8.2'
'ruamel.yaml == 0.15.81'
'psutils == 5.6.2'
'ply == 3.11'
'requests == 3.11'
'pytorch == 1.2.0'
'mxnet == 1.5.0'
1.Windows 只提供Python3.6的安裝包。
2.MacOS 提供Python3.6和Python3.7的安裝包。
3.ARM64 平臺(安裝 Debian 9 或 10 操作系統(tǒng))提供Python3.5(Debain 9)和Python3.7(Debian10)的安裝包。
4.除 MacOS 平臺外,其他平臺的 scipy 依賴為>=1.1.0。
2 NPU開發(fā)簡介
2.1 NPU特性
- 支持 8bit/16bit 運算,運算性能高達 3.0TOPS。
- 相較于 GPU 作為 AI 運算單元的大型芯片方案,功耗不到 GPU 所需要的 1%。
- 可直接加載 Caffe / Mxnet / TensorFlow 模型。
- 提供 AI 開發(fā)工具:支持模型快速轉換、支持開發(fā)板端側轉換 API、支持 TensorFlow / TF Lite / Caffe / ONNX / Darknet 等模型 。
2.2 開發(fā)流程
?? NPU開發(fā)完整的流程如下圖所示:
1、模型訓練
??在模型訓練階段,用戶根據(jù)需求和實際情況選擇合適的框架(如Caffe、TensorFlow等)進行訓練得到符合需求的模型。也可直接使用已經(jīng)訓練好的模型。
2、模型轉換
??此階段為通過RKNN Toolkit把模型訓練中得到的模型轉換為NPU可用的模型。
3、程序開發(fā)
??最后階段為基于RKNN API或RKNN Tookit的Python API開發(fā)程序實現(xiàn)業(yè)務邏輯。
2.3 NPU驅動說明
?? NPU的驅動在$SDK/external/rknpu/drivers/目錄下或者https://github.com/rockchip-linux/rknpu/tree/master/drivers
其中的編譯、安裝規(guī)則參考$SDK/buildroot/package/rockchip/rknpu/rknpu.mk
主要目錄包括:
drivers/
├── common
├── linux-aarch64 // RK1808 full driver
├── linux-aarch64-mini // RK1808 mini driver
├── linux-armhf // RK1806 full driver
├── linux-armhf-mini // RK1806 mini driver
├── linux-armhf-puma // RV1109/RV1126 full driver
├── linux-armhf-puma-mini // RV1109/RV1126 mini driver
├── npu_ko // NPU內(nèi)核驅動KO
在更新驅動時,需要同時更新用戶態(tài)驅動及內(nèi)核驅動,不然會產(chǎn)生類似錯誤:
[ 1] HAL user version 6.4.6.5.351518
[ 2] HAL kernel version 6.4.6.5.351518
另外,npu ko與內(nèi)核配置強相關,有可能會加載不成功,運行程序時,會產(chǎn)生類似錯誤:
[ 1] Failed to open device: No such file or directory, Try again...
[ 2] Failed to open device: No such file or directory, Try again...
有時需要手動更新NPU驅動,只要將相關的驅動拷貝到對應的目錄就可以,具體方式見手動更新NPU驅動。
3 RKNN SDK
?? RKNN SDK為帶有RKNPU的芯片平臺提供C語言編程接口,用于用戶部署RKNN模型。
?? 在使用 RKNN SDK 之前,用戶首先需要使用 RKNN-Toolkit 工具將用戶的模型轉換為RKNN模型,成功轉換生成RKNN 模型之后,用戶可以先通過RKNN-Toolkit 連接RK1808 等開發(fā)板進行聯(lián)機調試,確保模型的精度性能符合要求。得到RKNN 模型文件之后,用戶可以選擇使用 C 或Python 接口在RK1808 等平臺開發(fā)應用。
詳情見Rockchip_User_Guide_RKNN_API_V1.7.3_CN.pdf
4 Rock-X SDK 快捷AI組件庫
?? Rock-X SDK是基于RK3399Pro/RK1808的一組快捷AI組件庫,初始版本包括:人臉檢測、人臉識別、活體檢測、人臉屬性分析、人臉特征點、人頭檢測、人體骨骼關鍵點、手指關鍵點、人車物檢測等功能,開發(fā)者僅需要幾條API調用即可在嵌入式產(chǎn)品中離線地使用這些功能,而無需關心AI模型的部署細節(jié),極大加速了產(chǎn)品的原型驗證和開發(fā)部署。文章來源:http://www.zghlxwxcb.cn/news/detail-707490.html
?? Rock-X組件庫根據(jù)用戶的需求仍會不斷擴充,并將支持基于計算棒的調用。文章來源地址http://www.zghlxwxcb.cn/news/detail-707490.html
到了這里,關于RKNN模型部署(1)—— 相關介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!