精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

什么是PRelu算子?PRelu算子調優經歷-先行篇

恩智浦MCU加油站 ? 來源:NXP ? 作者:NXP ? 2023-08-24 08:50 ? 次閱讀

最近小編收到一個客戶模型,其中使用了一個叫做PRelu的算子,想要運行在RT170上。本來小編是信心滿滿的答應客戶說:速度上放心,我們這主頻1GHz的CPU絕對沒問題,包您滿意。沒想到跑分結果出爐直接給了小編沉重一擊。

直接依賴TFLm推理引擎的默認實現,PRelu算子的運行時間竟然高達188ms。于是小編本著工程師本有的探索精神,決定迎難而上,徹底將它優化一下。

所謂知己知彼,百戰不殆,首先我們來看一下什么叫做PRelu算子。

PRelu,看著好像特別的高大上,我們將其拆分來看,將其分成P+Relu,是不是瞬間就覺得熟悉了。沒錯,他實際上就是我們常用的Relu算子的變種。其中,P,是Parametric的縮寫,因此,所謂PRelu就是帶參數的Relu,只不過,這里的參數實際上是可以被訓練的,而非一個固定值。那么PRelu到底長什么樣呢?小編馬上揭開它的神秘面紗:

88969390-4217-11ee-a2ef-92fbcf53809c.png

上圖就是PRelu的廬山真面目。i 表示不同的通道。alpha的個數是跟著通道走的,不過好消息是,各個通道之間參數是可以共享的,這樣看著清爽了不少。特殊的,如果我們配置H和W通道共享參數,那么參數alpha就變成了類似于bias的功能,逐通道共享一個參數,因此,其shape = (1, 1, c);

為了對客戶負責,外加能夠更加方便地進行模型測試,小編首先收利用Keras手動構建一個具有PRelu算子的小巧模型。正所謂小巧而又不失優雅,我們構建模型如下所示:

88bfb4d2-4217-11ee-a2ef-92fbcf53809c.png

這個小巧的模型本身具備了我們所常見的多個算子,例如Conv2D,MaxPool2D,FullyConnect等,因此作為PRelu算子的測試模型也不至于顯得過于寒酸。

接下來和大家聊聊小編的調試經歷:

第一步,就是要對TFLm的源碼進行分析,了解為何其運行緩慢。

PRelu算子實際上就是一個進階版本的Relu算子,根據其輸入值的正負分別進行計算,當輸入為正是,就等于本身;當輸入為負時,將結果乘以一個系數alpha。看似非常簡單的計算方式,為啥TFLm的參考實現能算的這么慢呢?口說無憑,show me the code:

if (input_value >= 0) { output_value = MultiplyByQuantizedMultiplier( input_value, params.output_multiplier_1, params.output_shift_1); } else { auto alpha_index = SubscriptToIndex(desc2, b, y, x, c); const int32_t alpha_value = params.alpha_offset + alpha_data[alpha_index]; output_value = MultiplyByQuantizedMultiplier( input_value * alpha_value, params.output_multiplier_2, params.output_shift_2); }

看到這里,恰似風平浪靜,的確是按照我們分析的那樣,按照輸入值的正負進行計算。但是...細心的讀友可能發現了問題:

1) 這里的alpha_data有個index,沒錯,這就是運行慢的第一個原因。剛才說過,PRelu中的alpha參數是和通道數相關的,也就是說每個通道都可以擁有自己的值,而且各通道之間還可以共享,因此并不能直接順序訪問,而是需要根據index進行查找。

2) 這里多了一個叫做MultiplyByQuantizedMultiplier的函數,為啥不直接計算?這是另一個原因。熟悉深度學習的伙伴們一定知道,MCU平臺常被稱作:資源受限平臺,這里的受限不僅體現在算力上,還有內存空間上,相較于MPU那種動輒幾個G的DDR的龐然大物,MCU上的內存資源也是捉襟見肘。

想要將我們訓練的模型部署運行在MCU上,第一步就是對模型進行量化操作,將浮點類型的模型轉換為int8類型的模型,這樣直接縮小到之前的1/4。同時由于量化后的模型采用int8表示,同時能夠借助于優化后的運行庫進行加速。

這樣一來,為了既想要使用int8模型帶來的遍歷,又保證模型精度,就需要對輸出結果進行反量化表示,已達到使用int8類型結果表達浮點數的效果。因此,就需要調用類似MultiplyByQuantizedMultiplier這樣的函數進行反量化處理。

基于以上兩點,我們也就發現了算法本身所存在的慢速隱患,接下來的優化操作也正是基于此展開。

下一篇會繼續介紹通過內存外加反量化函數的改造提升算法執行速度。

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

    關注

    146

    文章

    17019

    瀏覽量

    350373
  • NXP
    NXP
    +關注

    關注

    60

    文章

    1267

    瀏覽量

    183390
  • 恩智浦
    +關注

    關注

    14

    文章

    5830

    瀏覽量

    106746
  • 內存
    +關注

    關注

    8

    文章

    3004

    瀏覽量

    73900
  • 算子
    +關注

    關注

    0

    文章

    16

    瀏覽量

    7252

原文標題:PRelu算子調優經歷-先行篇

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

收藏 人收藏

    評論

    相關推薦

    PRelu算子調經歷-函數優化策略

    上一小編和大家分享了在運行客戶的一個模型時遇到了一個PRelu算子,在利用TFLm自帶的PRelu參考實現的代碼,其中PRelu竟然拋出了
    的頭像 發表于 08-24 08:50 ?878次閱讀
    <b class='flag-5'>PRelu</b><b class='flag-5'>算子</b><b class='flag-5'>調</b><b class='flag-5'>優</b><b class='flag-5'>經歷</b>-函數優化策略

    Labview 調用Halcon 算子gen_rectangle1異常?

    1.將halcon 算子封裝成VI其他算子都無異常,gen_rectangle1算子總是偶爾會出現異常,執行后無錯誤,然后生成的Region 是空的,不知道怎么回事程序自動運行的時候,嘗試
    發表于 09-17 15:26

    基于GFO算子的圖像增強算法如何去實現?

    基于GFO算子(廣義模糊算子)的圖像增強算法如何去實現?怎樣對圖像增強算法進行分析?
    發表于 06-04 06:24

    邊緣檢測的幾種微分算子

    一、邊緣檢測邊緣檢測的幾種微分算子:一階微分算子:Roberts、Sobel、Prewitt二階微分算子:Laplacian、Log/Marr非微分算子:Canny一階微分
    發表于 07-26 08:29

    卷積解算子族的乘積擾動

    卷積解算子族的乘積擾動:
    發表于 10-26 13:46 ?5次下載

    LOG算子在FPGA中的實現

    介紹了一種高斯拉普拉斯LOG算子在FPGA中的實現方案!并通過對一幅BMP圖像的處理!論證了在FPGA中實現的LOG算子的圖像增強效果
    發表于 05-16 17:12 ?50次下載
    LOG<b class='flag-5'>算子</b>在FPGA中的實現

    基于修正的直覺模糊集成算子

    已有的一些直覺模糊集成算子在處理一些特殊直覺模糊數時會出現反直覺現象。首先介紹了兩個直覺模糊集成算子和直覺模糊數的比較方法。接著,舉例說明了這些集成算子在某些情況下出現的反直覺現象。然后提出了基于£
    發表于 11-17 14:36 ?9次下載

    canny算子的語法原理分析

    Canny算子Canny邊緣檢測算子是JohnF.Canny于1986年開發出來的一個多級邊緣檢測算法。更為重要的是 Canny 創立了邊緣檢測計算理論解釋這項技術如何工作。Canny 算法包含許多可以調整的參數,它們將影響到算法的計算的時間與實效。
    發表于 12-18 17:55 ?8858次閱讀
    canny<b class='flag-5'>算子</b>的語法原理分析

    HALCON機器視覺算子的詳細資料理解

    所有算子是做什么的,用途,什么時候會用,為什么要用,怎么用一般halcon的語法是:前面是該算子的目的(作用),后續的是條件或來源等。
    發表于 10-09 08:00 ?20次下載

    Laplacian算子的FPGA實現方法

    拉普拉斯算子是一種重要的圖像增強算子,它是一種各向同性濾波器,即濾波器的響應與濾波器作用圖像的突變方向無關,而且實現簡單,被廣泛用于圖像銳化和高頻增強等算法中。在此,提出一種使用QuartusⅡ開發環境的Megafunctions功能模塊實現拉普拉斯
    的頭像 發表于 06-16 17:47 ?3225次閱讀
    Laplacian<b class='flag-5'>算子</b>的FPGA實現方法

    Sobel算子原理介紹與實現方法

    索貝爾算子(Sobel operator)主要用作邊緣檢測,在技術上,它是一離散性差分算子,用來運算圖像亮度函數的灰度之近似值。在圖像的任何一點使用此算子,將會產生對應的灰度矢量或是其法矢量Sobel 卷積因子為:
    的頭像 發表于 07-21 17:27 ?1.3w次閱讀

    自定義算子開發

    一個完整的自定義算子應用過程包括注冊算子算子實現、含自定義算子模型轉換和運行含自定義op模型四個階段。在大多數情況下,您的模型應該可以通過使用hb_mapper工具完成轉換并順利部署
    的頭像 發表于 04-07 16:11 ?2750次閱讀
    自定義<b class='flag-5'>算子</b>開發

    機器學習算法的5種基本算子

    機器學習算法的5種基本算子 機器學習是一種重要的人工智能技術,它是為了讓計算機能夠通過數據自主的學習和提升能力而發明的。機器學習算法是機器學習的核心,它是指讓計算機從數據中進行自主學習并且可以實現
    的頭像 發表于 08-17 16:11 ?1742次閱讀

    如何給TPU-MLIR添加新的算子

    如何給TPU-MLIR添加新的算子
    的頭像 發表于 08-18 11:29 ?667次閱讀
    如何給TPU-MLIR添加新的<b class='flag-5'>算子</b>

    圖像銳化的Sobel、Laplacian算子基礎知識介紹

    Sobel 算子是一種用于邊緣檢測的離散微分算子,它結合了高斯平滑和微分求導
    的頭像 發表于 09-13 09:52 ?1262次閱讀
    圖像銳化的Sobel、Laplacian<b class='flag-5'>算子</b>基礎知識介紹