chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MaixPy 如何調(diào)用K210上的KPU為AI 加速?常用調(diào)用方式講解

40°研究院 ? 來(lái)源: 40°研究院 ? 作者: 40°研究院 ? 2022-12-22 17:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

所以,重點(diǎn)就是支持模型里面的算法,稱 算子, 理論上,我們可以用軟件去實(shí)現(xiàn)這些算子, 就可以成功運(yùn)行模型了, 而執(zhí)行軟件的物理器件是 CPU , 神經(jīng)網(wǎng)絡(luò)模型的計(jì)算量很大,加上我們輸入的是圖片,圖片本身的數(shù)據(jù)量就挺龐大, 就算是 K210 400MHz 的主頻, 也無(wú)法滿足流暢的推算模型。

所以, 要么升級(jí) CPU,但是成本太高, 要么做一個(gè)專用的硬件, 讓這個(gè)硬件專門去特定的算法,因?yàn)椴幌?CPU 一樣要做通用計(jì)算, 所以速度會(huì)非???,在電腦上, 我們通常使用專用的圖像加速卡即 GPU 來(lái)加速圖形計(jì)算, 在 K210 上,這個(gè)專門的硬件叫做 KPU (Kendryte Proccess Unit),第一個(gè)單詞是公司名, 其實(shí)和其它芯片的 NPU (神經(jīng)網(wǎng)絡(luò)處理單元 Neural-network Processing Unit) 做的事情是一樣的。

在 MaixPy 里面,已經(jīng)集成了推導(dǎo)模型的代碼,同時(shí)使用了 KPU 進(jìn)行計(jì)算加速,使用時(shí)無(wú)需編寫很多代碼,只需要調(diào)用幾個(gè)函數(shù)即可快速運(yùn)行模型

二、關(guān)于 KPU#

雖然 KPU 是能夠加速模型運(yùn)算了, 但是由于成本、時(shí)間、功耗、體積、發(fā)熱、應(yīng)用領(lǐng)域定位等各種因素,它的能力并不能像專業(yè)領(lǐng)域的強(qiáng)力 NPU 一樣,包含了每一種算子,它只能處理一部分。

KPU 實(shí)現(xiàn)了 卷積、批歸一化、激活、池化 這 4 種基礎(chǔ)操作的硬件加速, 但是它們不能分開單獨(dú)使用,是一體的加速模塊。

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

內(nèi)存限制

K210 有 6MB 通用 RAM 和 2MB KPU 專用 RAM。模型的輸入和輸出特征圖存儲(chǔ)在 2MB KPU RAM 中。權(quán)重和其他參數(shù)存儲(chǔ)在 6MB 通用 RAM 中。

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

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

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

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

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

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

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

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

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

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

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

TransposeConv2D 算子, nncase 會(huì)把它替換為一個(gè) SpaceToBatch + KPUConv2D + BatchToSpace。

以上說明來(lái)自這里

三、模型轉(zhuǎn)換#

前面說到, 模型其實(shí)就是一組數(shù)據(jù)結(jié)構(gòu)和參數(shù)數(shù)據(jù),不同的軟件只能識(shí)別特定格式的模型, KPU 只認(rèn).kmodel格式的模型, 一般用電腦訓(xùn)練的模型則不是, 比如 tensorflow 是 .h5 格式或者 .tflite 格式, 要給 KPU 使用, 必須經(jīng)過變成 kmodel 格式, 可以使用 nncase 這個(gè)工具來(lái)達(dá)到模型轉(zhuǎn)換的目的
如果你需要轉(zhuǎn)換模型, 具體使用方法請(qǐng)自行查看這個(gè)倉(cāng)庫(kù)里面的介紹

四、kmodel V3 模型 和 V4 模型#

由于代碼更新, 在過程中產(chǎn)生了兩個(gè)大版本, V3 和 V4, 其中 V3 模型是指用 nncase v0.1.0 RC5 轉(zhuǎn)換出來(lái)的模型; V4模型指用 nncase v0.2.0 轉(zhuǎn)換出來(lái)的模型

兩者有一定的不同,所以現(xiàn)在兩者共存, V3 代碼量更少,占用內(nèi)存小,效率也高,但是支持的算子少; V4 支持的算子更多,但是都是軟件實(shí)現(xiàn)的,沒有硬件加速,內(nèi)存使用更多,所以各有所長(zhǎng)。 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 對(duì)應(yīng)的地址中

準(zhǔn)備輸入

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

直接使用攝像頭采集的數(shù)據(jù)作為輸入:

   img = sensor.snapshot()

Copy

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

其中,實(shí)際上作為 KPU 輸入的數(shù)據(jù)是 RGB888 區(qū)域, 這個(gè)在前面的文檔 MaixPy 圖像及常用操作 章節(jié)中有仔細(xì)講解過

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

直接從攝像頭采集的圖像會(huì)自動(dòng)填充 RGB888 區(qū)域,但是我們使用圖像處理函數(shù)比如 image.resize() 時(shí),只會(huì)修改 RGB565,沒有修改 RGB888,因?yàn)橥瑫r(shí)修改兩處內(nèi)存需要耗費(fèi)大量時(shí)間,而 KPU 的輸入又是 RGB888 內(nèi)存塊, 所以在需要進(jìn)行 KPU 運(yùn)算時(shí), 需要同步(刷新)一下 RGB888 內(nèi)存塊, 使用 img.pix_to_ai() 來(lái)進(jìn)行同步,否則先前的修改將不會(huì)在 KPU 上生效。
比如:

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

Copy

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

Copy

前向運(yùn)行模型

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

   feature_map = kpu.forward(m, img)

Copy

這里得到了 feature_map, 是一個(gè)特征圖, 比如我們前面將的 小球 和 玩具 的分類,輸出特征圖是兩個(gè)節(jié)點(diǎn), 每個(gè)節(jié)點(diǎn)表示了是對(duì)應(yīng)物體的概率,我們將特征圖轉(zhuǎn)換為 list 對(duì)象:

   p_list = feature_map[:]
   print(p_list)

Copy

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

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

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

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

6.2. 報(bào)錯(cuò)"memory overflow"怎么辦?#

出現(xiàn)這個(gè)問題,根據(jù)前面講到過的 系統(tǒng)內(nèi)存管理 可知,一般有兩個(gè)可能性:

報(bào)錯(cuò)的地方跟系統(tǒng)堆無(wú)關(guān)系, 可能是 GC 內(nèi)存不夠?qū)е?,可以適當(dāng)增加 GC 的總內(nèi)存大小

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

更換 MaixPy mini 版本固件

進(jìn)行模型剪枝優(yōu)化

使用 kpu.load_flash 接口運(yùn)行時(shí)實(shí)時(shí)加載模型,只是執(zhí)行效率降低一點(diǎn)

如果內(nèi)存不足,且 kpu.load_flash 性能無(wú)法滿足, 那么你可能需要使用 C SDK 進(jìn)行開發(fā)。

6.3. 報(bào)錯(cuò)"load error,only support kmodel v3/v4"怎么辦?#

出現(xiàn)這個(gè)問題可以嘗試如下解決方案:

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

如果是采用 nncase 0.2.0 進(jìn)行轉(zhuǎn)換的 kmodel V4,請(qǐng)嘗試采用 nncase 0.1.0 進(jìn)行轉(zhuǎn)換,從而生成 kmodel V3

6.4. 我想實(shí)現(xiàn)不同模型的選擇加載(例如按下按鈕運(yùn)行目標(biāo)分類,再次按下按鈕則運(yùn)行目標(biāo)檢測(cè)),應(yīng)該怎么寫程序?#

因?yàn)閮?nèi)部 RAM 有限,所以當(dāng)需要切換不同模型進(jìn)行 kpu.load(address) 前,請(qǐng)先執(zhí)行 kpu.deinit(k210model) 釋放之前模型占用的內(nèi)存,然后再加載新的模型。 也就是分時(shí)復(fù)用內(nèi)存

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    88

    文章

    37057

    瀏覽量

    290255
  • RISC-V
    +關(guān)注

    關(guān)注

    47

    文章

    2698

    瀏覽量

    50900
  • NPU
    NPU
    +關(guān)注

    關(guān)注

    2

    文章

    340

    瀏覽量

    20533
  • Micropython
    +關(guān)注

    關(guān)注

    0

    文章

    69

    瀏覽量

    5586
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    立創(chuàng)·梁山派開發(fā)板-21年電賽F題-送藥小車-K210KPU數(shù)字識(shí)別訓(xùn)練

    210自帶 KPU(通用的神經(jīng)網(wǎng)絡(luò)處理器),非常適合用來(lái)作數(shù)字識(shí)別。要采集的數(shù)據(jù)集圖像尺寸 224*224(這是目前最常用的網(wǎng)絡(luò)數(shù)據(jù)大?。瑸榱俗尳Y(jié)果更準(zhǔn)確,所以要訓(xùn)練的數(shù)據(jù)集要盡可
    的頭像 發(fā)表于 07-31 10:29 ?1933次閱讀
    立創(chuàng)·梁山派開發(fā)板-21年電賽F題-送藥小車-<b class='flag-5'>K210</b>的<b class='flag-5'>KPU</b>數(shù)字識(shí)別訓(xùn)練

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

    強(qiáng)勁的性能,并且還擁有豐富的硬件資源,這些硬件資源大大地?cái)U(kuò)展了Kendryte K210兩顆RISC-V 64位CPU的應(yīng)用場(chǎng)景。在機(jī)器視覺、機(jī)器聽覺與機(jī)器學(xué)習(xí)算法的應(yīng)用場(chǎng)景下,KPU、APU和FFT
    發(fā)表于 08-30 17:34

    請(qǐng)教大神如何生成k210適用的各種固件?

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

    什么是k210?K210如何快速上手?

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

    請(qǐng)問K210maixpy固件下復(fù)位需要多長(zhǎng)時(shí)間?

    請(qǐng)問K210maixpy固件下復(fù)位需要多長(zhǎng)時(shí)間?
    發(fā)表于 02-16 07:53

    串口中斷函數(shù)也需要調(diào)用k210底層的嗎?

    關(guān)于Uart問題,K210代碼不僅有rt-thread的驅(qū)動(dòng),還有它本身的驅(qū)動(dòng),像uart的中斷,應(yīng)該是用rt-thread的,而uart的初始化,又需要調(diào)用k210的sdk下的串口配置,是這樣的么,串口中斷函數(shù)也需要
    發(fā)表于 03-07 14:42

    移植Kendryte K210官方的SDK到nuttx系統(tǒng)的問題求解

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

    關(guān)于k210使用C開發(fā)的問題

    1.我把轉(zhuǎn)換好的kmodel用k_flash_gui下載到指定的地址,但是我去讀那個(gè)地址卻讀不到任何東西。這個(gè)該怎么解決?有沒有相關(guān)手冊(cè)?2.調(diào)用kpu時(shí),
    發(fā)表于 09-14 06:55

    請(qǐng)問K210可以將驅(qū)動(dòng)LCD由并口8bit DVP方式轉(zhuǎn)為SPI方式嗎?

    video DMA方式能加快SPI圖像的傳輸?3>.這樣操作后會(huì)對(duì)K210本身的AI模型識(shí)別功能產(chǎn)生影響嗎?謝謝!請(qǐng)發(fā)一下K210的規(guī)格書,寄存器手冊(cè)和編程手冊(cè)
    發(fā)表于 09-15 06:43

    關(guān)于K210 KPU用途及FPU算力疑問

    最近有一款產(chǎn)品需要做低功耗,做了一些選型后發(fā)現(xiàn)了K210,有幾個(gè)疑問希望大佬解答一下。1.KPU能不能做一些通用計(jì)算,用來(lái)做固定的公式數(shù)據(jù)計(jì)算,比如我有10萬(wàn)點(diǎn)整形數(shù)據(jù),需要求平均,做累加,做乘積
    發(fā)表于 09-15 07:12

    [測(cè)試貼]K210maixpy固件下,復(fù)位需要多長(zhǎng)時(shí)間?

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

    K210 AI Accelerator適用于計(jì)算機(jī)視覺應(yīng)用

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

    K210 AI加速器適用于計(jì)算機(jī)視覺應(yīng)用的緊湊型樹莓派HAT

      XaLogics 采用 K210 SoC 的 AI 加速器配備雙核 RISC-V AI 處理器,其功耗低于其競(jìng)爭(zhēng)對(duì)手 Coral USB 加速
    的頭像 發(fā)表于 11-22 15:28 ?2091次閱讀

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

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

    【01Studio x 嘉楠科技】CanMV K210 AI開發(fā)板全網(wǎng)首發(fā),千套開發(fā)板限時(shí)優(yōu)惠!

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