
RKNN 是Rockchip npu 平臺(tái)使用的模型類型,以.rknn后綴結(jié)尾的模型文件。Rockchip 提供了完整了模型轉(zhuǎn)換 Python 工具,方便用戶將自主研發(fā)的算法模型轉(zhuǎn)換成 RKNN 模型,同時(shí) Rockchip 也提供了C/C++和Python API 接口。
計(jì)算機(jī)上使用 RKNN-Toolkit2 完成模型轉(zhuǎn)換,并通過 RKNPU2 部署到 Rockchip 開發(fā)板上。
rockchip的npu sdk分為兩個(gè)部分,PC端使用的是rknn-toolkit2,可以在PC端進(jìn)行模型轉(zhuǎn)換,推理以及性能評(píng)估。具體來說是把主流的模型如Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等轉(zhuǎn)換為RKNN模型,并可以在PC端使用這個(gè)RKNN模型進(jìn)行推理仿真,計(jì)算時(shí)間和內(nèi)存開銷。板端還有一部分,就是rknn runtime環(huán)境,包含一組C API庫以及與NPU進(jìn)行通信的驅(qū)動(dòng)模塊,可執(zhí)行程序等。
RKNN軟件棧可以幫助用戶快速將AI模型部署到瑞芯微芯片上。整體框架如下:
1. RKNN-Toolkit2是一款軟件開發(fā)套件,供用戶在PC和瑞芯微NPU平臺(tái)上進(jìn)行模型轉(zhuǎn)換、推理和性能評(píng)估。
2. RKNN-Toolkit-Lite2為瑞芯微NPU平臺(tái)提供Python編程接口,幫助用戶部署RKNN模型,加速AI應(yīng)用落地。
3. RKNN Runtime為Rockchip NPU平臺(tái)提供C/C++編程接口,幫助用戶部署RKNN模型,加速AI應(yīng)用的落地。
4. RKNPU內(nèi)核驅(qū)動(dòng)負(fù)責(zé)與NPU硬件交互。它已經(jīng)開源,可以在Rockchip內(nèi)核代碼中找到。
§
n 使用RKNN
§
RKNN-Toolkit2 是為用戶提供在 PC 平臺(tái)上進(jìn)行模型轉(zhuǎn)換、推理和性能評(píng)估的開發(fā)套件,用戶通過該工具提供的 Python 接口可以便捷地完成以下功能:
1. 模型轉(zhuǎn)換:支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型轉(zhuǎn)為 RKNN 模型,并支持 RKNN 模型導(dǎo)入導(dǎo)出,RKNN 模型能夠在 Rockchip NPU 平臺(tái)上加載使用。
2. 量 化 功 能 :支 持 將 浮 點(diǎn) 模 型 量 化 為 定 點(diǎn) 模 型 , 目 前 支 持 的 量 化 方 法 為 非 對(duì) 稱 量 化(asymmetric_quantized-8),并支持混合量化功能。
3. 模型推理:能夠在 PC 上模擬 NPU 運(yùn)行 RKNN 模型并獲取推理結(jié)果;或?qū)?RKNN 模型分發(fā)到指定的 NPU 設(shè)備上進(jìn)行推理并獲取推理結(jié)果。
4. 性能和內(nèi)存評(píng)估:將 RKNN 模型分發(fā)到指定 NPU 設(shè)備上運(yùn)行,以評(píng)估模型在實(shí)際設(shè)備上運(yùn)行時(shí)的性能和內(nèi)存占用情況。
5. 量化精度分析:該功能將給出模型量化前后每一層推理結(jié)果與浮點(diǎn)模型推理結(jié)果的余弦距離,以便于分析量化誤差是如何出現(xiàn)的,為提高量化模型的精度提供思路。
6. 模型加密功能:使用指定的加密等級(jí)將 RKNN 模型整體加密。因?yàn)?RKNN 模型的加密是在 NPU 驅(qū)動(dòng)中完成的,使用加密模型時(shí),與普通 RKNN 模型一樣加載即可,NPU 驅(qū)動(dòng)會(huì)自動(dòng)對(duì)其進(jìn)行解密。
rknpu2
RKNN SDK 為帶有RKNPU的芯片平臺(tái)提供編程接口,能夠幫助用戶部署使用RKNN-Toolkit2導(dǎo)出的RKNN模型,加速AI應(yīng)用的落地。
環(huán)境安裝
系統(tǒng):Ubuntu20.04 LTS x64
內(nèi)存:16GB
Python:3.8.10
目標(biāo)平臺(tái):RK356X/RK3568
YOLOv8:一種精 確&靈活的視覺 AI 方案
2023年1月,ultralytics公司推出了最 新的 YOLO 系列模型——YOLOv8。對(duì)于這次發(fā)布的產(chǎn)品,ultralytics官方稱其為"一種前沿的(cutting-edge)、最 先進(jìn)的(state-of-the-art )視覺模型”。除了性能提升,YOLOv8還能勝任多種視覺技術(shù)(分類、檢測、分割、姿態(tài)估計(jì)和跟蹤)。官方描述YOLOv8支持全方位的視覺AI任務(wù)(a full range of vision AI tasks),以此夸耀其在視覺AI領(lǐng)域無所不能。
精 確 & 靈活
YOLOv8官方開源了五種不同參數(shù)規(guī)模的預(yù)訓(xùn)練模型:YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l和YOLOv8x。與參數(shù)量相當(dāng)?shù)腨OLOv5 模型相比,YOLOv8在COCO數(shù)據(jù)集上的準(zhǔn)確率實(shí)現(xiàn)了較大的提升。其中YOLOv8n和YOLOv8s的準(zhǔn)確率提高了 5% 以上,這得益于YOLOv8在網(wǎng)絡(luò)結(jié)構(gòu)、訓(xùn)練方法、無錨技術(shù)和損失函數(shù)等方面的改進(jìn)。相比之下參數(shù)量和推理時(shí)間的犧牲就微不足道了。
YOLOv8的靈活性則體現(xiàn)在以下三個(gè)方面:
1. 由于 YOLOv8 在準(zhǔn)確率方面的提升,其在達(dá)到與 YOLOv5 相同精 確程度的情況下可以使用更輕量化的模型。
2. YOLOv8 項(xiàng)目對(duì) python 命令行的支持使得模型的訓(xùn)練、推理和導(dǎo)出更加便利。
3. YOLOv8 對(duì)跟蹤算法的支持、以及其在 fastSAM 中的應(yīng)用,使其在工程中具備多樣化的使用方法。
邊端視覺方案的潛在選擇
目標(biāo)檢測與跟蹤算法的融合是邊端不可或缺的視覺能力,這在機(jī)器人視覺導(dǎo)航、自動(dòng)駕駛、軍事制導(dǎo)等領(lǐng)域有著廣泛應(yīng)用。此外,邊端的復(fù)雜環(huán)境對(duì)視覺泛化能力提出了很高的要求。YOLOv8 在這兩點(diǎn)上提供了支持:
1. YOLOv8 項(xiàng)目已實(shí)現(xiàn) BoT-SORT 和 ByteTrack 跟蹤算法的融合
2. FastSAM 使用 YOLOv8 分割網(wǎng)絡(luò)的主干進(jìn)行圖像數(shù)據(jù)的特征提取和掩碼生成,這提供了一種使用 YOLOv8 實(shí)現(xiàn)視覺泛化能力的方案。
將模型留在邊端
要實(shí)現(xiàn) YOLOv8 模型在機(jī)器人等邊端產(chǎn)品上運(yùn)行的目的,我們需要了解模型部署的相關(guān)知識(shí)。
a. 模型部署
Deploying a model refers to placing a machine-learning model into an environment where it can do the job it was created to do.
將機(jī)器學(xué)習(xí)模型安置在恰當(dāng)“工作崗位”上的過程叫作模型部署。模型部署除了將模型的能力植入到“需要它的地方”之外,往往還伴隨著對(duì)模型的優(yōu)化,比如算子融合與重排,權(quán)重量化、知識(shí)蒸餾等。
模型的設(shè)計(jì)和訓(xùn)練往往比較復(fù)雜,這一過程依賴于靈活的模型開發(fā)框架PyTorch,TensorFlow等;模型的使用則追求在特定場合下實(shí)現(xiàn)模型的“瘦身”及其加速推理,這需要專用推理框架TensorRT、ONNX Runtime等的支持。從這個(gè)角度理解,模型部署過程也可以看做模型從開發(fā)框架到特定推理框架的移植過程。
b. 從開發(fā)框架到推理框架
模型開發(fā)框架和推理框架的多樣性便利了模型的設(shè)計(jì)和使用,但卻給模型轉(zhuǎn)換帶來的挑戰(zhàn)。為了簡化模型部署流程,Facebook 和 微軟在 2017 年共同發(fā)布了一種深度學(xué)習(xí)模型的中間表示形式:ONNX。這樣一來,眾多的模型訓(xùn)練框架和推理框架只需與 ONNX 建立聯(lián)系,即可實(shí)現(xiàn)模型格式的相互轉(zhuǎn)換。ONNX 表示形式的出現(xiàn)使模型部署逐漸形成了 “模型開發(fā)框架 -> 模型中間表示 -> 模型推理框架” 的范式。
那么怎樣將開發(fā)框架下的模型移植到推理框架下呢?一個(gè)容易的想法就是對(duì)一個(gè)模型進(jìn)行逐層解析,并使用推理框架支持的工具重新實(shí)現(xiàn)該模型的推理過程。但事實(shí)上,考慮到模型轉(zhuǎn)換的通用性,目前主流的模型轉(zhuǎn)換過程都是通過“追蹤法”實(shí)現(xiàn)的:給定一組輸入,運(yùn)行模型并記錄這組數(shù)據(jù)在模型當(dāng)中經(jīng)歷的計(jì)算過程,將此計(jì)算過程保存下來作為轉(zhuǎn)換之后的模型 [1]。
在模型轉(zhuǎn)換過程中輸入的數(shù)據(jù)除了被用來追蹤模型的運(yùn)算過程外,有時(shí)還會(huì)被用來優(yōu)化模型轉(zhuǎn)換中的量化參數(shù)。在 ONNX 到 RKNN 的轉(zhuǎn)換過程中,模型會(huì)根據(jù)輸入數(shù)據(jù)的分布情況,尋找合適的量化參數(shù)。
RKNN 框架支持模型在 NPU 上的推理
RKNN是 Rockchip NPU 平臺(tái)使用的一種推理框架,它為深度學(xué)習(xí)模型在 NPU 上的推理提供了便利。為了支持不同框架下訓(xùn)練的模型在使用RKNN 框架推理,RKNN 官方發(fā)布了 rknn-toolkit 開發(fā)套件。該工具提供了一系列 Python API 用于支持模型轉(zhuǎn)換、模型量化、模型推理以及模型的狀態(tài)檢測等功能。rknn-toolkit 的安裝和使用可以參考官方給出的文檔 [2]。
典型的 RKNN 模型部署過程一般需要經(jīng)歷以下四步:
RKNN 模型配置 --> 模型加載 --> RKNN 模型構(gòu)建 --> RKNN 模型導(dǎo)出
·
RKNN 模型配置用于設(shè)置模型轉(zhuǎn)換參數(shù),包括輸入數(shù)據(jù)均值,量化類型,量化算法以及模型部署平臺(tái)等。
模型加載 是指將轉(zhuǎn)換前的模型加載到程序中,目前 RKNN 支持 ONNX、PyTorch、TensorFlow、Caffe 等模型的加載轉(zhuǎn)換。值得一提的是,模型加載是整個(gè)轉(zhuǎn)換過程中的關(guān)鍵步驟,這一步允許工程人員自行指定模型加載的輸出層和輸出層名稱,這決定了原始模型哪些部分參與了模型轉(zhuǎn)換過程。
RKNN 模型構(gòu)建 用于指定模型是否進(jìn)行量化、并指定用于量化校正的數(shù)據(jù)集。
RKNN 模型導(dǎo)出 用于保存轉(zhuǎn)換后的模型。
RK3576/RK3588 NPU
作為瑞芯微8nm高性能AIOT平臺(tái),RK3576/RK3588 NPU性能可謂十分強(qiáng)大,6TOPS設(shè)計(jì)能夠?qū)崿F(xiàn)高效的神經(jīng)網(wǎng)絡(luò)推理計(jì)算。這使得RK3576/RK3588在圖像識(shí)別、語音識(shí)別、自然語言處理等人工智能領(lǐng)域有著極高的性能表現(xiàn)。
RK3576/RK3588 的NPU還支持多種學(xué)習(xí)框架,包括TensorFlow,Pytorch、Caffe、MXNet等在人工智能開發(fā)中流行的深度學(xué)習(xí)框架,能夠?yàn)殚_發(fā)者提供豐富的工具和庫,使他們能夠方便地進(jìn)行模型訓(xùn)練和推理,可輕松應(yīng)對(duì)各種大數(shù)據(jù)運(yùn)算場景。
計(jì)算機(jī)視覺(Computer Vision):NPU可用于圖像識(shí)別、目標(biāo)檢測、人臉識(shí)別等任務(wù)。在安防監(jiān)控、自動(dòng)駕駛、醫(yī)療影像分析等領(lǐng)域中有著廣泛的應(yīng)用。
公眾號(hào) 掃碼咨詢
![]() | 上海市閔行區(qū)中春路4999號(hào)莘莊商務(wù)樓1326室 |
![]() | service@covond.com |
![]() | m.jxetj.com |
![]() | 交換機(jī):18017588179(孫經(jīng)理) 無人機(jī):13311882358(孫總) |