99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

什么是PRelu算子?PRelu算子調(diào)優(yōu)經(jīng)歷-先行篇

恩智浦MCU加油站 ? 來(lái)源:NXP ? 作者:NXP ? 2023-08-24 08:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近小編收到一個(gè)客戶(hù)模型,其中使用了一個(gè)叫做PRelu的算子,想要運(yùn)行在RT170上。本來(lái)小編是信心滿(mǎn)滿(mǎn)的答應(yīng)客戶(hù)說(shuō):速度上放心,我們這主頻1GHz的CPU絕對(duì)沒(méi)問(wèn)題,包您滿(mǎn)意。沒(méi)想到跑分結(jié)果出爐直接給了小編沉重一擊。

直接依賴(lài)TFLm推理引擎的默認(rèn)實(shí)現(xiàn),PRelu算子的運(yùn)行時(shí)間竟然高達(dá)188ms。于是小編本著工程師本有的探索精神,決定迎難而上,徹底將它優(yōu)化一下。

所謂知己知彼,百戰(zhàn)不殆,首先我們來(lái)看一下什么叫做PRelu算子。

PRelu,看著好像特別的高大上,我們將其拆分來(lái)看,將其分成P+Relu,是不是瞬間就覺(jué)得熟悉了。沒(méi)錯(cuò),他實(shí)際上就是我們常用的Relu算子的變種。其中,P,是Parametric的縮寫(xiě),因此,所謂PRelu就是帶參數(shù)的Relu,只不過(guò),這里的參數(shù)實(shí)際上是可以被訓(xùn)練的,而非一個(gè)固定值。那么PRelu到底長(zhǎng)什么樣呢?小編馬上揭開(kāi)它的神秘面紗:

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

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

為了對(duì)客戶(hù)負(fù)責(zé),外加能夠更加方便地進(jìn)行模型測(cè)試,小編首先收利用Keras手動(dòng)構(gòu)建一個(gè)具有PRelu算子的小巧模型。正所謂小巧而又不失優(yōu)雅,我們構(gòu)建模型如下所示:

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

這個(gè)小巧的模型本身具備了我們所常見(jiàn)的多個(gè)算子,例如Conv2D,MaxPool2D,F(xiàn)ullyConnect等,因此作為PRelu算子的測(cè)試模型也不至于顯得過(guò)于寒酸。

接下來(lái)和大家聊聊小編的調(diào)試經(jīng)歷:

第一步,就是要對(duì)TFLm的源碼進(jìn)行分析,了解為何其運(yùn)行緩慢。

PRelu算子實(shí)際上就是一個(gè)進(jìn)階版本的Relu算子,根據(jù)其輸入值的正負(fù)分別進(jìn)行計(jì)算,當(dāng)輸入為正是,就等于本身;當(dāng)輸入為負(fù)時(shí),將結(jié)果乘以一個(gè)系數(shù)alpha。看似非常簡(jiǎn)單的計(jì)算方式,為啥TFLm的參考實(shí)現(xiàn)能算的這么慢呢?口說(shuō)無(wú)憑,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); }

看到這里,恰似風(fēng)平浪靜,的確是按照我們分析的那樣,按照輸入值的正負(fù)進(jìn)行計(jì)算。但是...細(xì)心的讀友可能發(fā)現(xiàn)了問(wèn)題:

1) 這里的alpha_data有個(gè)index,沒(méi)錯(cuò),這就是運(yùn)行慢的第一個(gè)原因。剛才說(shuō)過(guò),PRelu中的alpha參數(shù)是和通道數(shù)相關(guān)的,也就是說(shuō)每個(gè)通道都可以擁有自己的值,而且各通道之間還可以共享,因此并不能直接順序訪問(wèn),而是需要根據(jù)index進(jìn)行查找。

2) 這里多了一個(gè)叫做MultiplyByQuantizedMultiplier的函數(shù),為啥不直接計(jì)算?這是另一個(gè)原因。熟悉深度學(xué)習(xí)的伙伴們一定知道,MCU平臺(tái)常被稱(chēng)作:資源受限平臺(tái),這里的受限不僅體現(xiàn)在算力上,還有內(nèi)存空間上,相較于MPU那種動(dòng)輒幾個(gè)G的DDR的龐然大物,MCU上的內(nèi)存資源也是捉襟見(jiàn)肘。

想要將我們訓(xùn)練的模型部署運(yùn)行在MCU上,第一步就是對(duì)模型進(jìn)行量化操作,將浮點(diǎn)類(lèi)型的模型轉(zhuǎn)換為int8類(lèi)型的模型,這樣直接縮小到之前的1/4。同時(shí)由于量化后的模型采用int8表示,同時(shí)能夠借助于優(yōu)化后的運(yùn)行庫(kù)進(jìn)行加速。

這樣一來(lái),為了既想要使用int8模型帶來(lái)的遍歷,又保證模型精度,就需要對(duì)輸出結(jié)果進(jìn)行反量化表示,已達(dá)到使用int8類(lèi)型結(jié)果表達(dá)浮點(diǎn)數(shù)的效果。因此,就需要調(diào)用類(lèi)似MultiplyByQuantizedMultiplier這樣的函數(shù)進(jìn)行反量化處理。

基于以上兩點(diǎn),我們也就發(fā)現(xiàn)了算法本身所存在的慢速隱患,接下來(lái)的優(yōu)化操作也正是基于此展開(kāi)。

下一篇會(huì)繼續(xù)介紹通過(guò)內(nèi)存外加反量化函數(shù)的改造提升算法執(zhí)行速度。

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

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367055
  • NXP
    NXP
    +關(guān)注

    關(guān)注

    61

    文章

    1348

    瀏覽量

    189407
  • 恩智浦
    +關(guān)注

    關(guān)注

    14

    文章

    5981

    瀏覽量

    116862
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3125

    瀏覽量

    75274
  • 算子
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    7348

原文標(biāo)題:PRelu算子調(diào)優(yōu)經(jīng)歷-先行篇

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    PRelu算子調(diào)優(yōu)經(jīng)歷-函數(shù)優(yōu)化策略

    上一小編和大家分享了在運(yùn)行客戶(hù)的一個(gè)模型時(shí)遇到了一個(gè)PRelu算子,在利用TFLm自帶的PRelu參考實(shí)現(xiàn)的代碼,其中PRelu竟然拋出了
    的頭像 發(fā)表于 08-24 08:50 ?1313次閱讀
    <b class='flag-5'>PRelu</b><b class='flag-5'>算子</b><b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b><b class='flag-5'>經(jīng)歷</b>-函數(shù)優(yōu)化策略

    Labview 調(diào)用Halcon 算子gen_rectangle1異常?

    1.將halcon 算子封裝成VI其他算子都無(wú)異常,gen_rectangle1算子總是偶爾會(huì)出現(xiàn)異常,執(zhí)行后無(wú)錯(cuò)誤,然后生成的Region 是空的,不知道怎么回事程序自動(dòng)運(yùn)行的時(shí)候,嘗試
    發(fā)表于 09-17 15:26

    基于GFO算子的圖像增強(qiáng)算法如何去實(shí)現(xiàn)?

    基于GFO算子(廣義模糊算子)的圖像增強(qiáng)算法如何去實(shí)現(xiàn)?怎樣對(duì)圖像增強(qiáng)算法進(jìn)行分析?
    發(fā)表于 06-04 06:24

    邊緣檢測(cè)的幾種微分算子

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

    卷積解算子族的乘積擾動(dòng)

    卷積解算子族的乘積擾動(dòng):
    發(fā)表于 10-26 13:46 ?5次下載

    LOG算子在FPGA中的實(shí)現(xiàn)

    介紹了一種高斯拉普拉斯LOG算子在FPGA中的實(shí)現(xiàn)方案!并通過(guò)對(duì)一幅BMP圖像的處理!論證了在FPGA中實(shí)現(xiàn)的LOG算子的圖像增強(qiáng)效果
    發(fā)表于 05-16 17:12 ?50次下載
    LOG<b class='flag-5'>算子</b>在FPGA中的實(shí)現(xiàn)

    基于修正的直覺(jué)模糊集成算子

    已有的一些直覺(jué)模糊集成算子在處理一些特殊直覺(jué)模糊數(shù)時(shí)會(huì)出現(xiàn)反直覺(jué)現(xiàn)象。首先介紹了兩個(gè)直覺(jué)模糊集成算子和直覺(jué)模糊數(shù)的比較方法。接著,舉例說(shuō)明了這些集成算子在某些情況下出現(xiàn)的反直覺(jué)現(xiàn)象。然后提出了基于£
    發(fā)表于 11-17 14:36 ?9次下載

    canny算子的語(yǔ)法原理分析

    Canny算子Canny邊緣檢測(cè)算子是JohnF.Canny于1986年開(kāi)發(fā)出來(lái)的一個(gè)多級(jí)邊緣檢測(cè)算法。更為重要的是 Canny 創(chuàng)立了邊緣檢測(cè)計(jì)算理論解釋這項(xiàng)技術(shù)如何工作。Canny 算法包含許多可以調(diào)整的參數(shù),它們將影響到算法的計(jì)算的時(shí)間與實(shí)效。
    發(fā)表于 12-18 17:55 ?9143次閱讀
    canny<b class='flag-5'>算子</b>的語(yǔ)法原理分析

    HALCON機(jī)器視覺(jué)算子的詳細(xì)資料理解

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

    Laplacian算子的FPGA實(shí)現(xiàn)方法

    拉普拉斯算子是一種重要的圖像增強(qiáng)算子,它是一種各向同性濾波器,即濾波器的響應(yīng)與濾波器作用圖像的突變方向無(wú)關(guān),而且實(shí)現(xiàn)簡(jiǎn)單,被廣泛用于圖像銳化和高頻增強(qiáng)等算法中。在此,提出一種使用QuartusⅡ開(kāi)發(fā)環(huán)境的Megafunctions功能模塊實(shí)現(xiàn)拉普拉斯
    的頭像 發(fā)表于 06-16 17:47 ?3590次閱讀
    Laplacian<b class='flag-5'>算子</b>的FPGA實(shí)現(xiàn)方法

    Sobel算子原理介紹與實(shí)現(xiàn)方法

    索貝爾算子(Sobel operator)主要用作邊緣檢測(cè),在技術(shù)上,它是一離散性差分算子,用來(lái)運(yùn)算圖像亮度函數(shù)的灰度之近似值。在圖像的任何一點(diǎn)使用此算子,將會(huì)產(chǎn)生對(duì)應(yīng)的灰度矢量或是其法矢量Sobel 卷積因子為:
    的頭像 發(fā)表于 07-21 17:27 ?1.4w次閱讀

    自定義算子開(kāi)發(fā)

    一個(gè)完整的自定義算子應(yīng)用過(guò)程包括注冊(cè)算子、算子實(shí)現(xiàn)、含自定義算子模型轉(zhuǎn)換和運(yùn)行含自定義op模型四個(gè)階段。在大多數(shù)情況下,您的模型應(yīng)該可以通過(guò)使用hb_mapper工具完成轉(zhuǎn)換并順利部署
    的頭像 發(fā)表于 04-07 16:11 ?3387次閱讀
    自定義<b class='flag-5'>算子</b>開(kāi)發(fā)

    機(jī)器學(xué)習(xí)算法的5種基本算子

    機(jī)器學(xué)習(xí)算法的5種基本算子 機(jī)器學(xué)習(xí)是一種重要的人工智能技術(shù),它是為了讓計(jì)算機(jī)能夠通過(guò)數(shù)據(jù)自主的學(xué)習(xí)和提升能力而發(fā)明的。機(jī)器學(xué)習(xí)算法是機(jī)器學(xué)習(xí)的核心,它是指讓計(jì)算機(jī)從數(shù)據(jù)中進(jìn)行自主學(xué)習(xí)并且可以實(shí)現(xiàn)
    的頭像 發(fā)表于 08-17 16:11 ?2262次閱讀

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

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

    圖像銳化的Sobel、Laplacian算子基礎(chǔ)知識(shí)介紹

    Sobel 算子是一種用于邊緣檢測(cè)的離散微分算子,它結(jié)合了高斯平滑和微分求導(dǎo)
    的頭像 發(fā)表于 09-13 09:52 ?2616次閱讀
    圖像銳化的Sobel、Laplacian<b class='flag-5'>算子</b>基礎(chǔ)知識(shí)介紹