日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

如何在TensorFlow Lite Micro中添加自定義操作符(2)

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2025-12-26 10:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上一篇中,小編給大家抽絲剝繭的介紹了在TFLm中實(shí)現(xiàn)一個(gè)算子所涉及的文件,以及每個(gè)文件的具體作用,包括:功能實(shí)現(xiàn),算子解析等。那么本篇就帶著大家一起看下注冊機(jī)制是怎么實(shí)現(xiàn)的?我們還是先以reshape算子進(jìn)行說明,如何將reshape算子注冊到解析器中,接下來介紹如果我們想自定義一個(gè)算子需要干些什么。

操作符注冊到解析器

1.1 在 MicroMutableOpResolver 中添加注冊方法

文件位置:`micro/micro_mutable_op_resolver.h`,在類定義中添加以下方法:

TfLiteStatusAddReshape() {
returnAddBuiltin(BuiltinOperator_RESHAPE,
          tflite::Register_RESHAPE(),ParseReshape);
}

注冊方法說明:

AddBuiltin 函數(shù):MicroMutableOpResolver 的核心方法,用于注冊內(nèi)置操作符

BuiltinOperator_RESHAPE:操作符的唯一標(biāo)識符,與 FlatBuffer schema 中的定義一致

Register_RESHAPE():返回操作符的注冊信息,包含執(zhí)行函數(shù)指針

ParseReshape:參數(shù)解析函數(shù)指針,用于從模型文件中解析參數(shù)

1.2 在全局解析器中注冊

文件位置:`micro/all_ops_resolver.cpp`,在 `AllOpsResolver` 構(gòu)造函數(shù)中添加:

AddReshape();

全局注冊說明:

`AllOpsResolver` 包含了所有標(biāo)準(zhǔn) TFLite 操作符

適用于需要完整操作符支持的應(yīng)用場景

會增加代碼大小,但提供最大的模型兼容性

添加新操作符的完整步驟

步驟 1:創(chuàng)建內(nèi)核實(shí)現(xiàn)文件

創(chuàng)建文件:`micro/kernels/your_op.cpp`

1. 包含必要的頭文件:

#include"tensorflow/lite/c/builtin_op_data.h"
 #include"tensorflow/lite/c/common.h"
 #include"tensorflow/lite/micro/kernels/kernel_util.h"
 // 其他必要的頭文件

2. 定義命名空間和常量:

namespacetflite {
 namespaceops {
 namespacemicro {
 namespaceyour_op {
 constexprintkInputTensor =0;
 constexprintkOutputTensor =0;
 // 其他常量定義

3. 實(shí)現(xiàn)核心函數(shù):

`Prepare` 函數(shù):驗(yàn)證參數(shù),計(jì)算輸出形狀

`Eval` 函數(shù):執(zhí)行實(shí)際計(jì)算

可選的 `Init` 函數(shù):如果需要持久化數(shù)據(jù)

4. 創(chuàng)建注冊函數(shù):

TfLiteRegistration_V1Register_YOUR_OP() {
  returntflite::RegisterOp(Init,Prepare,Eval);
 }

步驟2:注冊操作符

修改文件:`micro/micro_mutable_op_resolver.h`

在類定義中添加注冊方法:

TfLiteStatusAddYourOp() {
returnAddBuiltin(BuiltinOperator_YOUR_OP,
          tflite::Register_YOUR_OP(),ParseYourOp);
}

修改文件:`micro/all_ops_resolver.cpp`

在構(gòu)造函數(shù)中添加:

AddYourOp();
關(guān)鍵注意事項(xiàng)

內(nèi)存管理最佳實(shí)踐

1. 臨時(shí)張量管理:

// 正確的臨時(shí)張量使用方式
 TfLiteTensor* input = micro_context->AllocateTempInputTensor(node,0);
 // 使用張量...
 micro_context->DeallocateTempTfLiteTensor(input); // 必須釋放

2. 持久化內(nèi)存 vs 臨時(shí)內(nèi)存:

持久化內(nèi)存:用于存儲操作符參數(shù)、權(quán)重等需要長期保存的數(shù)據(jù)

臨時(shí)內(nèi)存:用于計(jì)算過程中的中間結(jié)果,使用后立即釋放

3. 內(nèi)存對齊:

微控制器對內(nèi)存對齊有嚴(yán)格要求

使用 `MicroArenaBufferAlignment()` 獲取正確的對齊值

錯(cuò)誤處理規(guī)范

1. 參數(shù)驗(yàn)證:

TF_LITE_ENSURE(context, condition);     // 條件檢查
 TF_LITE_ENSURE_EQ(context,actual, expected);// 相等性檢查
 TF_LITE_ENSURE_STATUS(status);        // 狀態(tài)碼檢查

2. 錯(cuò)誤報(bào)告:

TF_LITE_KERNEL_LOG(context,"Error message with details");

3. 狀態(tài)碼使用:

`kTfLiteOk`:操作成功

`kTfLiteError`:一般錯(cuò)誤

`kTfLiteDelegateError`:委托相關(guān)錯(cuò)誤

性能優(yōu)化策略

1. 避免重復(fù)計(jì)算:

在 Prepare 階段完成形狀計(jì)算

緩存經(jīng)常使用的計(jì)算結(jié)果

2. 內(nèi)存訪問優(yōu)化:

盡量使用連續(xù)內(nèi)存訪問模式

避免頻繁的小塊內(nèi)存分配

3. 原地操作:

當(dāng)可能時(shí),使用原地操作減少內(nèi)存拷貝

檢查輸入輸出是否可以共享內(nèi)存

4. 數(shù)據(jù)類型優(yōu)化:

支持量化數(shù)據(jù)類型(int8, uint8)

針對不同數(shù)據(jù)類型提供優(yōu)化實(shí)現(xiàn)

通過遵循以上流程,我們就可以是現(xiàn)在 TensorFlow Lite Micro中添加自定義操作符的操作了,并確保其在資源受限的微控制器環(huán)境中穩(wěn)定高效地運(yùn)行。

這樣一來,就可以不被TFLm的原生算子的約束,放開手腳運(yùn)行更好的模型。一起探討,讓我們更懂TFLm,更懂模型!?。?/p>

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

    關(guān)注

    49

    文章

    8890

    瀏覽量

    165882
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4422

    瀏覽量

    67871
  • 操作符
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    9312
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    336

    瀏覽量

    62398

原文標(biāo)題:TensorFlow Lite Micro玩法升級(二)

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Linux命令“!”操作符的用法

    Linux的'!'符號或操作符可以用作邏輯否定運(yùn)算,也可以用于在歷史記錄獲取命令并進(jìn)行修改或運(yùn)行以前執(zhí)行過的命令。
    發(fā)表于 07-05 10:07 ?2468次閱讀

    如何添加自定義單板

    在開發(fā)過程,用戶有時(shí)需要創(chuàng)建自定義板配置。本節(jié)將通過一個(gè)實(shí)例講解用戶如何創(chuàng)建屬于自己的machine,下面以g2l-test.conf為例進(jìn)行說明。
    的頭像 發(fā)表于 03-12 14:43 ?1553次閱讀

    何在TensorFlow Lite Micro添加自定義操作符(1)

    來支持各種神經(jīng)網(wǎng)絡(luò)層的計(jì)算。也就是說,我們不僅可以使用內(nèi)嵌的算子運(yùn)算,還可以自己注冊一個(gè)新的算子,更加的靈活。本期就將用兩期的文章以 `reshape.cpp` 為例,詳細(xì)說明如何在 TensorFlow Lite
    的頭像 發(fā)表于 12-26 10:34 ?5829次閱讀

    何在e203 SOC添加自定義外設(shè)

    何在E203 添加自定義的外設(shè),困擾已久,以下是一個(gè)從別處借鑒而來的方法: 1、設(shè)計(jì)好自定義外設(shè)的RTL后,在其中
    發(fā)表于 10-20 10:38

    何在android設(shè)備上安裝自定義rom

    完成后,請執(zhí)行相同的操作,但不要選擇自定義rom,而是選擇間隙。安裝間隙之前需要使用一些自定義rom,您可以從自定義rom的開發(fā)人員網(wǎng)頁上了解,如果他們沒有提及任何相關(guān)內(nèi)容,只需在
    的頭像 發(fā)表于 11-05 10:48 ?6332次閱讀

    C++之操作重載學(xué)習(xí)的總結(jié)(二)

    復(fù)數(shù)的概念可以通過自定義類實(shí)現(xiàn);復(fù)數(shù)的運(yùn)算操作可以通過操作符重載實(shí)現(xiàn);賦值操作符只能通過成員函數(shù)實(shí)現(xiàn);
    的頭像 發(fā)表于 12-24 16:26 ?1192次閱讀

    C++之操作符重載學(xué)習(xí)的總結(jié)

    操作符重載是c++的強(qiáng)大特性之一;操作符重載的本質(zhì)是通過函數(shù)擴(kuò)展操作符的功能;operator 關(guān)鍵字是實(shí)現(xiàn)操作符重載的關(guān)鍵。
    的頭像 發(fā)表于 12-24 16:36 ?1371次閱讀

    何在LabVIEW實(shí)現(xiàn)自定義控件

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在LabVIEW實(shí)現(xiàn)自定義控件。
    發(fā)表于 01-14 17:17 ?50次下載
    如<b class='flag-5'>何在</b>LabVIEW<b class='flag-5'>中</b>實(shí)現(xiàn)<b class='flag-5'>自定義</b>控件

    何在TensorFlow2里使用Keras API創(chuàng)建一個(gè)自定義CNN網(wǎng)絡(luò)?

    概述 本示例工程我們會在 TensorFlow2 下使用 Keras API 創(chuàng)建一個(gè)自定義 CNN 網(wǎng)絡(luò),在 Vitis-AI 1.3 環(huán)境下編譯成 Xilinx DPU 上運(yùn)行的模型文件,并在
    的頭像 發(fā)表于 04-15 11:36 ?2985次閱讀

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progr
    發(fā)表于 04-08 10:48 ?15次下載

    教程 2添加特征-自定義配置文件創(chuàng)建

    教程 2添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 03-15 19:39 ?0次下載
    教程 <b class='flag-5'>2</b>:<b class='flag-5'>添加</b>特征-<b class='flag-5'>自定義</b>配置文件創(chuàng)建

    自定義AXI-Lite接口的IP及源碼分析

    在 Vivado 自定義 AXI4-Lite 接口的 IP,實(shí)現(xiàn)一個(gè)簡單的 LED 控制功能,并將其掛載到 AXI Interconnect 總線互聯(lián)結(jié)構(gòu)上,通過 ZYNQ 主機(jī)控制,后面對 Xilinx 提供的整個(gè) AXI4
    發(fā)表于 06-25 16:31 ?5191次閱讀
    <b class='flag-5'>自定義</b>AXI-<b class='flag-5'>Lite</b>接口的IP及源碼分析

    教程 2添加特征-自定義配置文件創(chuàng)建

    教程 2添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 07-06 18:50 ?0次下載
    教程 <b class='flag-5'>2</b>:<b class='flag-5'>添加</b>特征-<b class='flag-5'>自定義</b>配置文件創(chuàng)建

    添加自定義屬性控制fridaserver啟動和停止

    添加自定義屬性控制fridaserver啟動和停止
    的頭像 發(fā)表于 08-09 10:08 ?3106次閱讀
    <b class='flag-5'>添加</b><b class='flag-5'>自定義</b>屬性控制fridaserver啟動和停止

    “+”操作符的使用技巧

    這篇寫個(gè)平時(shí)易被忽略的小知識點(diǎn),一元 + 操作符的使用技巧。
    的頭像 發(fā)表于 12-28 13:27 ?1613次閱讀
    肥乡县| 集贤县| 固原市| 诏安县| 台北市| 吉水县| 榆林市| 孟连| 称多县| 如东县| 五华县| 平湖市| 合川市| 公主岭市| 东莞市| 乌什县| 维西| 如皋市| 濮阳县| 如东县| 石渠县| 太原市| 诸暨市| 宁阳县| 禹州市| 云梦县| 建瓯市| 海兴县| 平南县| 榕江县| 上思县| 独山县| 普兰店市| 清镇市| 巍山| 驻马店市| 岑溪市| 绿春县| 贡嘎县| 平山县| 永仁县|