女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MaixPy 如何調用K210上的KPU為AI 加速?常用調用方式講解

40°研究院 ? 來源: 40°研究院 ? 作者: 40°研究院 ? 2022-12-22 17:26 ? 次閱讀

一、模型使用和硬件加速原理#

前面我們知道了模型是一組數據結構以及很多參數, 最終以一個文件比如 kmodel 格式的文件的形式存在。
而這個模型要能在 MaixPy 的程序里面被使用, 首先需要程序能夠理解 kmodel 這個文件的格式, 并且支持模型里面的算法,這樣才能按照模型的描述將輸入經過一些裂計算過程后得到輸出。

所以,重點就是支持模型里面的算法,稱 算子, 理論上,我們可以用軟件去實現這些算子, 就可以成功運行模型了, 而執行軟件的物理器件是 CPU神經網絡模型的計算量很大,加上我們輸入的是圖片,圖片本身的數據量就挺龐大, 就算是 K210 400MHz 的主頻, 也無法滿足流暢的推算模型。

所以, 要么升級 CPU,但是成本太高, 要么做一個專用的硬件, 讓這個硬件專門去特定的算法,因為不像 CPU 一樣要做通用計算, 所以速度會非常快,在電腦上, 我們通常使用專用的圖像加速卡即 GPU 來加速圖形計算, 在 K210 上,這個專門的硬件叫做 KPU (Kendryte Proccess Unit),第一個單詞是公司名, 其實和其它芯片的 NPU (神經網絡處理單元 Neural-network Processing Unit) 做的事情是一樣的。

在 MaixPy 里面,已經集成了推導模型的代碼,同時使用了 KPU 進行計算加速,使用時無需編寫很多代碼,只需要調用幾個函數即可快速運行模型

二、關于 KPU#

雖然 KPU 是能夠加速模型運算了, 但是由于成本、時間、功耗、體積、發熱、應用領域定位等各種因素,它的能力并不能像專業領域的強力 NPU 一樣,包含了每一種算子,它只能處理一部分。

KPU 實現了 卷積、批歸一化、激活、池化 這 4 種基礎操作的硬件加速, 但是它們不能分開單獨使用,是一體的加速模塊。

所以, 在 KPU 上面推理模型, 以下要求(如果不需要訓練和設計模型,暫時不需要仔細了解):

內存限制

K210 有 6MB 通用 RAM 和 2MB KPU 專用 RAM。模型的輸入和輸出特征圖存儲在 2MB KPU RAM 中。權重和其他參數存儲在 6MB 通用 RAM 中。

哪些算子可以被 KPU 完全加速?

下面的約束需要全部滿足。

特征圖尺寸:輸入特征圖小于等于 320x240 (寬x高) 同時輸出特征圖大于等于 4x4 (寬x高),通道數在 1 到 1024。

Same 對稱 paddings (TensorFlow 在 stride=2 同時尺寸為偶數時使用非對稱 paddings)。

普通 Conv2D 和 DepthwiseConv2D,卷積核為 1x1 或 3x3,stride 為 1 或 2。

最大池化 MaxPool (2x2 或 4x4) 和 平均池化 AveragePool (2x2 或 4x4)。

任意逐元素激活函數 (ReLU, ReLU6, LeakyRelu, Sigmoid...), KPU 不支持 PReLU。

哪些算子可以被 KPU 部分加速?

非對稱 paddings 或 valid paddings 卷積, nncase 會在其前后添加必要的 Pad 和 Crop(可理解為 邊框 與 裁切)。

普通 Conv2D 和 DepthwiseConv2D,卷積核為 1x1 或 3x3,但 stride 不是 1 或 2。 nncase 會把它分解為 KPUConv2D 和一個 StridedSlice (可能還需要 Pad)。

MatMul 算子, nncase 會把它替換為一個 Pad(到 4x4)+ KPUConv2D(1x1 卷積和) + Crop(到 1x1)。

TransposeConv2D 算子, nncase 會把它替換為一個 SpaceToBatch + KPUConv2D + BatchToSpace。

以上說明來自這里

三、模型轉換#

前面說到, 模型其實就是一組數據結構和參數數據,不同的軟件只能識別特定格式的模型, KPU 只認.kmodel格式的模型, 一般用電腦訓練的模型則不是, 比如 tensorflow 是 .h5 格式或者 .tflite 格式, 要給 KPU 使用, 必須經過變成 kmodel 格式, 可以使用 nncase 這個工具來達到模型轉換的目的
如果你需要轉換模型, 具體使用方法請自行查看這個倉庫里面的介紹

四、kmodel V3 模型 和 V4 模型#

由于代碼更新, 在過程中產生了兩個大版本, V3 和 V4, 其中 V3 模型是指用 nncase v0.1.0 RC5 轉換出來的模型; V4模型指用 nncase v0.2.0 轉換出來的模型

兩者有一定的不同,所以現在兩者共存, V3 代碼量更少,占用內存小,效率也高,但是支持的算子少; V4 支持的算子更多,但是都是軟件實現的,沒有硬件加速,內存使用更多,所以各有所長。 MaixPy 的固件也可以選擇是否支持 V4。

五、MaixPy 中使用模型 kmodel#

加載 SD 卡 (TF 卡)中的模型

將模型放到 SD 卡, 然后加載

   import KPU as kpu
   m = kpu.load("/sd/test.kmodel")

Copy

加載 Flash 中的模型

將模型下載到 Flash, 然后加載

   import KPU as kpu
   model_addr_in_flash = 0x300000
   m = kpu.load(model_addr_in_flash)

Copy

此處的 model_addr_in_flash 為模型在 Flash 中的偏移地址,模型可以通過 kflash.py 或者 kflash_gui 燒錄到 Flash 對應的地址中

準備輸入

一般情況下,我們會使用圖像作為輸入:

直接使用攝像頭采集的數據作為輸入:

   img = sensor.snapshot()

Copy

這里 img 就可以直接作為輸入, 這里需要 注意: snapshot() 函數采集到圖片后,會將圖片數據放到兩個地方
(1) RGB565 內存塊, 圖像以 RGB565 的形式存放在一塊內存中,方便圖像處理的函數使用,注意在內存中的排序是 [像素1 RGB, 像素2 RGB...]
(2) RGB888 內存塊, 圖像以 R8G8B8 的形式存放在另一塊內存中,注意在內存中的排序是 [所有像素 R, 所有像素 G, 所有像素 B], 我們也稱之為 AI 內存

其中,實際上作為 KPU 輸入的數據是 RGB888 區域, 這個在前面的文檔 MaixPy 圖像及常用操作 章節中有仔細講解過

從文件讀取,或者將修改過的攝像頭圖像作為輸入:

直接從攝像頭采集的圖像會自動填充 RGB888 區域,但是我們使用圖像處理函數比如 image.resize() 時,只會修改 RGB565,沒有修改 RGB888,因為同時修改兩處內存需要耗費大量時間,而 KPU 的輸入又是 RGB888 內存塊, 所以在需要進行 KPU 運算時, 需要同步(刷新)一下 RGB888 內存塊, 使用 img.pix_to_ai() 來進行同步,否則先前的修改將不會在 KPU 上生效。
比如:

   img = image.Image("/sd/test.jpg")   # 從 sd 卡讀取 test.jpg 作為輸入
   img.pix_to_ai()                    # 同步 `RGB888` 內存塊

Copy

   img = sensor.snapshot()      # 獲取攝像頭采集的數據
   img = img.resize(240, 240)   # 使用圖像處理函數處理原圖像
   img.pix_to_ai()              # 同步 `RGB888` 內存塊

Copy

前向運行模型

前向運行模型,也就是按照 輸入到輸出 的方向走一遍模型計算, 通過輸入得出輸出的值:

   feature_map = kpu.forward(m, img)

Copy

這里得到了 feature_map, 是一個特征圖, 比如我們前面將的 小球 和 玩具 的分類,輸出特征圖是兩個節點, 每個節點表示了是對應物體的概率,我們將特征圖轉換為 list 對象:

   p_list = feature_map[:]
   print(p_list)

Copy

就可以得到類似 [0.9, 0.1] 這樣的置信度結果了

六、KPU使用過程中的常見問題#

6.1. KPU能夠加載多大的模型?#

C 語言代碼運行模型:
當 K210 運行 C 代碼時,能夠加載 < 6MB 左右的模型, 具體要看 C 代碼的內容。
MaixPy 運行模型:
* 當運行 MaixPy (minimum版本) 時,能夠加載 4MB 左右的模型。 如果不使用攝像頭和 LCD, 最大可以加載 5MB 左右的模型(因為攝像頭和 LCD 的緩沖區占用了很多內存,但實際應用也沒多大意義了)
* 當運行 MaixPy (完整版) 時,能夠加載 2MB 左右的模型
* 另外也支持實時從 Flash 加載模型, 理論上只要單層使用內存不超過 2MB, 整體模型可以無限大,只不過要犧牲一點運算速度。 使用方法看這里。 如果對原理和實現感興趣,可以看這里

6.2. 報錯"memory overflow"怎么辦?#

出現這個問題,根據前面講到過的 系統內存管理 可知,一般有兩個可能性:

報錯的地方跟系統堆無關系, 可能是 GC 內存不夠導致,可以適當增加 GC 的總內存大小

由于模型過大引起的??梢砸来螄L試如下解決方案:

更換 MaixPy mini 版本固件

進行模型剪枝優化

使用 kpu.load_flash 接口運行時實時加載模型,只是執行效率降低一點

如果內存不足,且 kpu.load_flash 性能無法滿足, 那么你可能需要使用 C SDK 進行開發。

6.3. 報錯"load error,only support kmodel v3/v4"怎么辦?#

出現這個問題可以嘗試如下解決方案:

如果為加載 Flash 中的模型,請確保 flash offset 填寫正確,并保證和 MaixPy 固件的地址沒有沖突(模型在 Flash 中的地址太靠前,然后往 Flash 燒錄入固件時, 固件大小超過了模型所在的起始地址, 導致模型被破壞)

如果是采用 nncase 0.2.0 進行轉換的 kmodel V4,請嘗試采用 nncase 0.1.0 進行轉換,從而生成 kmodel V3

6.4. 我想實現不同模型的選擇加載(例如按下按鈕運行目標分類,再次按下按鈕則運行目標檢測),應該怎么寫程序?#

因為內部 RAM 有限,所以當需要切換不同模型進行 kpu.load(address) 前,請先執行 kpu.deinit(k210model) 釋放之前模型占用的內存,然后再加載新的模型。 也就是分時復用內存

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • AI
    AI
    +關注

    關注

    87

    文章

    34197

    瀏覽量

    275353
  • RISC-V
    +關注

    關注

    46

    文章

    2480

    瀏覽量

    48264
  • NPU
    NPU
    +關注

    關注

    2

    文章

    319

    瀏覽量

    19507
  • Micropython
    +關注

    關注

    0

    文章

    68

    瀏覽量

    5141
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    立創·梁山派開發板-21年電賽F題-送藥小車-K210KPU數字識別訓練

    210自帶 KPU(通用的神經網絡處理器),非常適合用來作數字識別。要采集的數據集圖像尺寸 224*224(這是目前最常用的網絡數據大小),為了讓結果更準確,所以要訓練的數據集要盡可
    的頭像 發表于 07-31 10:29 ?1554次閱讀
    立創·梁山派開發板-21年電賽F題-送藥小車-<b class='flag-5'>K210</b>的<b class='flag-5'>KPU</b>數字識別訓練

    《DNK210使用指南 -CanMV版 V1.0》第二章 Kendryte K210簡介

    強勁的性能,并且還擁有豐富的硬件資源,這些硬件資源大大地擴展了Kendryte K210兩顆RISC-V 64位CPU的應用場景。在機器視覺、機器聽覺與機器學習算法的應用場景下,KPU、APU和FFT
    發表于 08-30 17:34

    請教大神如何生成k210適用的各種固件?

    為什么不建議用maixpy生成k210適用的各種固件?如何生成k210適用的各種固件?有哪些步驟?
    發表于 07-06 07:24

    什么是k210K210如何快速上手?

    什么是k210?K210如何快速上手?
    發表于 10-13 06:45

    請問K210maixpy固件下復位需要多長時間?

    請問K210maixpy固件下復位需要多長時間?
    發表于 02-16 07:53

    串口中斷函數也需要調用k210底層的嗎?

    關于Uart問題,K210代碼不僅有rt-thread的驅動,還有它本身的驅動,像uart的中斷,應該是用rt-thread的,而uart的初始化,又需要調用k210的sdk下的串口配置,是這樣的么,串口中斷函數也需要
    發表于 03-07 14:42

    移植Kendryte K210官方的SDK到nuttx系統的問題求解

    目前我們實驗室這邊在做的項目,需要k210的fft、kpu等功能跑在nuttx,但是找了很多地方都沒有可以參考的,自己移植過程中遇到問題太多了
    發表于 09-14 06:16

    關于k210使用C開發的問題

    1.我把轉換好的kmodel用k_flash_gui下載到指定的地址,但是我去讀那個地址卻讀不到任何東西。這個該怎么解決?有沒有相關手冊?2.調用kpu時,
    發表于 09-14 06:55

    請問K210可以將驅動LCD由并口8bit DVP方式轉為SPI方式嗎?

    video DMA方式能加快SPI圖像的傳輸?3>.這樣操作后會對K210本身的AI模型識別功能產生影響嗎?謝謝!請發一下K210的規格書,寄存器手冊和編程手冊
    發表于 09-15 06:43

    關于K210 KPU用途及FPU算力疑問

    最近有一款產品需要做低功耗,做了一些選型后發現了K210,有幾個疑問希望大佬解答一下。1.KPU能不能做一些通用計算,用來做固定的公式數據計算,比如我有10萬點整形數據,需要求平均,做累加,做乘積
    發表于 09-15 07:12

    [測試貼]K210maixpy固件下,復位需要多長時間?

    maixpy固件的k210電后會init,并串口log一些信息,以這個log開始的時間來當做maixpyk210復位時間比較合理)。首先
    發表于 12-20 19:09 ?9次下載
    [測試貼]<b class='flag-5'>K210</b>在<b class='flag-5'>maixpy</b>固件下,復位需要多長時間?

    K210 AI Accelerator適用于計算機視覺應用

      您可以在Crowd Supply 頁面找到 K210 AI 加速器、Coral USB 加速器和英特爾神經計算棒 2 之間的對比表。很明顯,K2
    的頭像 發表于 06-02 09:19 ?2616次閱讀
    <b class='flag-5'>K210</b> <b class='flag-5'>AI</b> Accelerator適用于計算機視覺應用

    K210 AI加速器適用于計算機視覺應用的緊湊型樹莓派HAT

      XaLogics 采用 K210 SoC 的 AI 加速器配備雙核 RISC-V AI 處理器,其功耗低于其競爭對手 Coral USB 加速
    的頭像 發表于 11-22 15:28 ?1741次閱讀

    K210快速開發、低成本的MicroPython 解釋器MaixPy介紹

    MaixPy 是將 Micropython 移植到 K210(一款 64 位雙核帶硬件 FPU、卷積加速器、FFT、Sha256 的 RISC-V CPU ) 的一個項目; MaixPy
    的頭像 發表于 12-22 17:19 ?3877次閱讀

    【01Studio x 嘉楠科技】CanMV K210 AI開發板全網首發,千套開發板限時優惠!

    CanMV開源項目由 嘉楠科技(Canaan)官方創建和維護。該項目借鑒了OpenMV和MaixPy,是將MicroPython移植到嘉楠科技邊緣計算AI芯片K210(一款64位雙核帶硬件FPU
    的頭像 發表于 10-12 15:25 ?4011次閱讀
    【01Studio x 嘉楠科技】CanMV <b class='flag-5'>K210</b> <b class='flag-5'>AI</b>開發板全網首發,千套開發板限時優惠!