91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

操作符注冊到解析器

1.1 在 MicroMutableOpResolver 中添加注冊方法

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

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

注冊方法說明:

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

BuiltinOperator_RESHAPE:操作符的唯一標識符,與 FlatBuffer schema 中的定義一致

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

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

1.2 在全局解析器中注冊

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

AddReshape();

全局注冊說明:

`AllOpsResolver` 包含了所有標準 TFLite 操作符

適用于需要完整操作符支持的應用場景

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

添加新操作符的完整步驟

步驟 1:創(chuàng)建內(nèi)核實現(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. 實現(xiàn)核心函數(shù):

`Prepare` 函數(shù):驗證參數(shù),計算輸出形狀

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

可選的 `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`

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

AddYourOp();
關鍵注意事項

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

1. 臨時張量管理:

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

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

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

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

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

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

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

錯誤處理規(guī)范

1. 參數(shù)驗證:

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

2. 錯誤報告:

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

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

`kTfLiteOk`:操作成功

`kTfLiteError`:一般錯誤

`kTfLiteDelegateError`:委托相關錯誤

性能優(yōu)化策略

1. 避免重復計算:

在 Prepare 階段完成形狀計算

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

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

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

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

3. 原地操作:

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

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

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

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

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

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

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

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

    關注

    48

    文章

    8368

    瀏覽量

    164501
  • 函數(shù)
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67492
  • 操作符
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9268
  • tensorflow
    +關注

    關注

    13

    文章

    334

    瀏覽量

    62159

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    如何添加自定義單板

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

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

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

    何在e203 SOC添加自定義外設

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

    何在android設備上安裝自定義rom

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

    C++之操作重載學習的總結(二)

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

    C++之操作符重載學習的總結

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

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

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

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

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

    自定義視圖組件教程案例

    自定義組件 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,實現(xiàn)一個簡單的 LED 控制功能,并將其掛載到 AXI Interconnect 總線互聯(lián)結構上,通過 ZYNQ 主機控制,后面對 Xilinx 提供的整個 AXI4
    發(fā)表于 06-25 16:31 ?5046次閱讀
    <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 ?2916次閱讀
    <b class='flag-5'>添加</b><b class='flag-5'>自定義</b>屬性控制fridaserver啟動和停止

    “+”操作符的使用技巧

    這篇寫個平時易被忽略的小知識點,一元 + 操作符的使用技巧。
    的頭像 發(fā)表于 12-28 13:27 ?1478次閱讀