国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享

這篇具有很好參考價(jià)值的文章主要介紹了MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1 寫(xiě)在前面

2 模型分析

3 遇到問(wèn)題

4 探索實(shí)驗(yàn)一

4.1 第一部分

4.2 第二部分

Error 1

Error 2

4.3 實(shí)驗(yàn)結(jié)果

①參數(shù)量與計(jì)算量

②模型大小

③推理時(shí)延

5 探索實(shí)驗(yàn)二

5.1 LR Branch

5.2 HR Branch

5.2.1 初步分析

5.2.2 第一部分 enc2x

5.2.3 第二部分 enc4x

5.2.4 第三部分 hr4x

5.2.5 第四部分 hr2x

5.2.6 第五部分

5.3 f_branch

6 總結(jié)與思考


1 寫(xiě)在前面

在前面兩篇文章《對(duì)MODNet 主干網(wǎng)絡(luò) MobileNetV2的剪枝探索》《對(duì) MODNet 其他模塊的剪枝探索》中,筆者已成功對(duì) MobileNet V2 進(jìn)行剪枝并嵌入至 MODNet,其余部分也采用鍵值對(duì)賦值的方式成功完成了替換,得到了 MODNet 剪枝版本一代,我們簡(jiǎn)稱為“V1”。V1代在推理測(cè)試中發(fā)現(xiàn):模型大小、參數(shù)量的確減小了一半,但推理時(shí)延從 240ms --> 192ms 盡管降低了20%,但下降力度還不夠大,既然來(lái)到了模型壓縮領(lǐng)域,那我們就應(yīng)當(dāng)盡可能“壓榨”深度模型!

再一次觀察 MODNet 剪枝前、后的變化情況,可以發(fā)現(xiàn):FLOPs在剪枝后僅減小了原來(lái)的 1/5

考慮到相對(duì)參數(shù)量,計(jì)算復(fù)雜度 FLOPs 對(duì)推理速度的影響更大,因此,接下來(lái)對(duì) MODNet 中 FLOPs 占比較高的層進(jìn)行剪枝。

2 模型分析

從目前情況來(lái)看,下面兩部分的 FLOPs 占比較高:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

3 遇到問(wèn)題

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

分析問(wèn)題:網(wǎng)絡(luò)需要的輸入通道為16,但目前只獲得了8個(gè)通道;

于是,通過(guò)調(diào)試,確定了權(quán)重矩陣的位置,進(jìn)行修改:32 --> 16.

但這里一直存在著一個(gè)疑問(wèn):input 是如何來(lái)的???

按照往常的想法,上一層的輸出作為下一層的輸入,但這里由于正好是兩個(gè)模塊的交界點(diǎn),因此無(wú)法滿足這樣的條件。所以,接下來(lái)需要找到 input 來(lái)源。(這也正是后續(xù)剪枝的基礎(chǔ))


通過(guò) debug 可知,index57 的 input 源自 enc2x,如下:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

接下來(lái),尋找 enc2x 的來(lái)源。

MODNet 定義處,通過(guò) LR Branch 得到:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

來(lái)到 LR Branch 定義處,發(fā)現(xiàn)是源自 backbone 的forward:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

debug 得 enc2x shape [1,16,256,256],正是 backbone 中 feature1 的輸出:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

那么,在對(duì) backbone 剪枝過(guò)后,feature1 的 output 變?yōu)?[1,8,256,256],故 enc2x 的輸入也就變?yōu)榱嗽?tensor。

也就是說(shuō),對(duì) backbone 的某些 channel 裁剪后,hr branch 中的 channel 也就必須調(diào)整!

辯證法的一大特性就是聯(lián)系!

既然如此,如何調(diào)整?

方式包括直接修改權(quán)重 channel、裁剪 output channel。但由于這里 input 在 backbone 裁剪后已經(jīng)確定,因此直接修改權(quán)重的 channel,也就有了先前將 enc_channels 中的16---->8。

目前關(guān)于 input 的源頭已確定,也就明確了對(duì) backbone 的剪枝會(huì)決定 hr branch 中的輸入!

因此,對(duì) hr branch 中網(wǎng)絡(luò)層的剪枝也就分為 input 以及weight:

(1)針對(duì) input 部分

方法:直接裁剪 backbone 中對(duì)應(yīng)的部分

存在的問(wèn)題:需要顧及其內(nèi)部的倍數(shù)關(guān)系,以及 channel 為8的倍數(shù)(倒置殘差塊)

(2)針對(duì) weight 部分

方法:直接修改enc_channels

存在的問(wèn)題:考慮output與下一層輸入的匹配情況

4 探索實(shí)驗(yàn)一

?開(kāi)展思路:修改結(jié)構(gòu)----->匹配結(jié)構(gòu)----->模型剪枝----->參數(shù)嵌入------>模型推理

4.1 第一部分

關(guān)系:lr_branch input channel <------ Linear <-------- backbone.feature.18 (1280)

方法:按照剪枝的稀疏情況直接修改網(wǎng)絡(luò),滿足網(wǎng)絡(luò)層與層之間相互匹配的同時(shí),降低FLOPs。然后,利用 NNI 對(duì)子模塊中的相關(guān)層進(jìn)行剪枝。


首先,將 backbone last layer 1280 --> 640,但遇到了一個(gè)問(wèn)題:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

先前也遇到過(guò),為了滿足上下網(wǎng)絡(luò)層的關(guān)系匹配,又恢復(fù)到了1280。

由于相關(guān)層 FLOPs 較高,因此直接修改關(guān)聯(lián)層 channels 為640。


MODNet 模型剪枝前、后的情況為:

參數(shù)量:3.36 M --> 1.87 M;

計(jì)算量:15315.94 M --> 14502.68 M

我們發(fā)現(xiàn):params 大幅下降,但 FLOPs 變化不大!

4.2 第二部分

由于對(duì) input 不能直接裁剪,因此對(duì) weight output channel 進(jìn)行裁剪。

在觀察 hr branch 時(shí),聯(lián)想到了先前 MobileNet V2 部分的 interverted_residual:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

在原先結(jié)構(gòu)中是遞增狀態(tài),因此這里遵循先前的規(guī)則,調(diào)換位置。

Error 1

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

由于先前已經(jīng)明確了hr branch每一層的input,因此定位到相應(yīng)部修改即可。

wrapper:24 --> 16

結(jié)果是計(jì)算量?jī)H僅只是有了輕微的減少趨勢(shì):

參數(shù)量?:1.88?M;

計(jì)算量:14480.74?M


觀察 hr branch 的 weight output channel,與預(yù)定義的 channels 有關(guān):

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

方法:直接修改channels:32 --> 24


Error 2

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

修改:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

計(jì)算量相比先前的輕微減少有了明顯的改進(jìn),目前達(dá)到了?8976.64 M,減小了一半:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

至此,我們將該模型作為 MODNet 剪枝版本二代,簡(jiǎn)稱V2。

4.3 實(shí)驗(yàn)結(jié)果

整體改動(dòng)情況:

  • backbone中的last channel、wrapper、interverted_residual;
  • MODNet hr_channels;
  • HR Branch中的conv_hr4x;
①參數(shù)量與計(jì)算量

情況一:原模型

情況二:對(duì) backbone 剪枝后的模型;

情況三:修改 backbone 最后一層 channel 以及 hr branch 中的 weight channel后的模型;

情況一 情況二 情況三
參數(shù)量 6.45 M 3.36 M 1.76 M
計(jì)算量 18117.07 M 15315.94 M 8976.64 M
②模型大小
模型 模型大小
原模型 25641 K
V1 13256 K
V2 7213 K
③推理時(shí)延
序號(hào) 原模型 V1 V2
1 0.85 0.67 0.54
2 0.88 0.67 0.56
3 0.84 0.65 0.54

5 探索實(shí)驗(yàn)二

由于 backbone 通道的剪枝會(huì)決定 HR branch,因此調(diào)整思路,先將 backbone 中的倒置殘差塊恢復(fù)到原先的情況。

5.1 LR Branch

backbone 部分修剪 last channel 1280 --> 640。

se_block、conv_lr16x,其余排除。

config 加入 Linear,將 se_block 以及 lrx 作為整體,與 backbone 剪枝。

變化如下:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

讀取 pth,并修改結(jié)構(gòu),驗(yàn)證是否可以成功加載:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

加載失敗,原因是涉及到了 Conv 中的 BN 層,如下:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

解決方案:修改 IBNorm 定義即可。

于是,成功加載,且完成 lr_branch 的模擬推理,如下:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

接下來(lái),將 lr_branch 的參數(shù)嵌入到 MODNet,但在打印鍵時(shí)發(fā)現(xiàn)缺少了 running mean,盡管與inference 無(wú)關(guān),但與 retrain 有關(guān)。換句話說(shuō),雖然可以成功嵌入,但對(duì)后續(xù)重訓(xùn)練精度的恢復(fù)有影響!

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

再次打印 lr_branch 參數(shù),發(fā)現(xiàn)該鍵是存在的,但由于 model.named_parameters() 并沒(méi)有獲取到,因此這里采用 model.state_dict() 的方式重新嵌入。打印方式如下:

for name, params in model.state_dict().items():   
    print(name)

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

總共有751個(gè)鍵值對(duì),注意 backbone 和 lr 中的 backbone,參數(shù)一致:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

5.2 HR Branch

5.2.1 初步分析

將 HR Branch 劃分為 5 個(gè)部分:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

分析:3、4、5 部分 channel 有著明顯的上、下層銜接關(guān)系;

而1、2部分從channel上看不出聯(lián)系;

因此,接下來(lái)將對(duì)該 model 的5個(gè)部分分別處理,進(jìn)而合并成 new branch。

5.2.2 第一部分 enc2x

利用 sequential 連接,剪枝:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

無(wú)法絕對(duì)匹配,剪枝失敗,源代碼定義如下:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

所以無(wú)法合并,考慮分層剪枝,但又存在兩個(gè)問(wèn)題

  • 無(wú)法對(duì)權(quán)重的input channel修改(16、35)
  • 下一層的input channel(35)無(wú)法匹配

解決方案:手動(dòng)剪枝

明確目標(biāo):

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

?開(kāi)展思路:

  1. 獲取第57層,先使用 0.25 稀疏度剪枝,然后執(zhí)行剪枝腳本將 input channel16 --> 8,參數(shù)保存,注意參數(shù)名 MODNet 內(nèi)一致

  2. 獲取58層同上,操作同上;

  3. 利用 sequential 連接 tohr 與 conv;

  4. 按照結(jié)構(gòu)內(nèi)的參數(shù)名,將 tohr 與 conv 參數(shù)連接,形成一個(gè) ordereddict 格式;

  5. 將參數(shù)嵌入結(jié)構(gòu),形成第一個(gè)part;

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

剪枝后的參數(shù)名雖然和結(jié)構(gòu)中相差了 hr,且一一對(duì)應(yīng),但填入結(jié)構(gòu)仍然出現(xiàn)了參數(shù)初始化的情況。如下:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

strict=false:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

因此,這里采用鍵值替換進(jìn)行修改。(結(jié)構(gòu)不變,修改參數(shù)中的鍵名)

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

但這樣的鍵名不利于下面的合并。

于是,筆者重新構(gòu)建字典,修改鍵名,代碼如下:

tohr_enc2x_ckpt = OrderedDict(
    [(k.replace(k, 'hr_branch.tohr_enc2x.' + k), v) for k, v in tohr_enc2x.state_dict().items()])

后來(lái)想想,這一參數(shù)(填入結(jié)構(gòu)并修改參數(shù)名)和剪枝過(guò)后的是一致的,驗(yàn)證代碼與結(jié)果如下:

for key in pruned_tohr_enc2x.keys():
    if tohr_enc2x_ckpt[key].equal(pruned_tohr_enc2x[key]):
        print("Match")

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

因此,這一操作意義不大。因?yàn)槌跣氖菫榱伺c參數(shù)嵌入時(shí)命名一致,但實(shí)際上因?yàn)檫@一操作導(dǎo)致的中間過(guò)程較為繁瑣。此外,剪枝過(guò)后的 pruned_tohr_enc2x 已經(jīng)達(dá)到了目標(biāo)狀態(tài),即shape:[24,8,1,1]

所以,第一部分兩個(gè) layer 沒(méi)有連接的必要!

5.2.3 第二部分 enc4x

調(diào)整思路:NNI 剪枝 + 自定義通道剪枝 + 鍵名替換 + 參數(shù)嵌入

剪枝前:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

剪枝后:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

因此,這一部分成功嵌入!

5.2.4 第三部分 hr4x

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

首先,channel 83 并不合理,與模型定義時(shí)產(chǎn)生了沖突,因此先前僅僅是為了滿足模型結(jié)構(gòu)做的微調(diào)。通過(guò)剪枝,除了layer 1 的weight channel,其他都可以實(shí)現(xiàn)。


如何將 weight 從(24,16,1,1)的尺寸裁剪為(24,8,1,1)???????

?開(kāi)展思路:

  1. 獲取該層的參數(shù),打印shape測(cè)試;

  2. 計(jì)算每一個(gè)輸入通道的權(quán)重和,并排序;

  3. 將較小的8個(gè)通道去除;

  4. 創(chuàng)建去除后的tensor,進(jìn)行參數(shù)替換;

于是,LeNet 它又來(lái)了!筆者很喜歡在 LeNet 上做一些測(cè)試。??

核心思想:編號(hào) --> 排序 --> 去除通道 --> 重新編號(hào)?--> 參數(shù)替換

注意事項(xiàng):①bias由 output channel 決定;②網(wǎng)絡(luò)層類型為 OrderedDict()

測(cè)試:將輸入 weight 由[6,3,3,3] -----> [4,3,3,3]

局限性:缺少稀疏度分析 + 單一層剪枝


針對(duì) hr_branch 的第一個(gè) layer channel(16---->8)成功剪枝!

針對(duì)第三部分?channel 99 ------->83,成功剪枝:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

然后修改鍵名,與 MODNet 匹配,嵌入成功。

5.2.5 第四部分 hr2x

剪枝前:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

剪枝后:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

因此,這一部分成功嵌入!

5.2.6 第五部分

剪枝前:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

剪枝后:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

同樣,這一部分成功嵌入!

5.3 f_branch

剪枝前:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

剪枝后:

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

同時(shí),也完成了模型嵌入,但遇到了下列問(wèn)題:

??問(wèn)題一:保存的 hr branch 參數(shù) bias 都為0、1,影響到了再訓(xùn)練的精度;

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch


??問(wèn)題二:剪枝腳本僅僅針對(duì) Conv 的 weight 以及 bias,尚未對(duì)包含于 Conv 塊中的 BN 層進(jìn)行處理,有待改進(jìn)。

MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享,MODNet-Compression探索之旅,深度學(xué)習(xí),計(jì)算機(jī)視覺(jué),剪枝,神經(jīng)網(wǎng)絡(luò),pytorch

修改:針對(duì)input channel,BN層不被影響,因此直接添加如 dict 即可。


??問(wèn)題三:剪枝腳本執(zhí)行后返回的網(wǎng)絡(luò)層的名字沒(méi)有和原先的匹配,這里有待處理。

修改:按照MODNet中的layer name修改,利用鍵值進(jìn)行替換

OrderedDict([(k.replace(k, 'hr_branch.tohr_enc2x.' + k), v) for k, v in model.state_dict().items()])

6 總結(jié)與思考

通過(guò)再一次分析 MODNet 網(wǎng)絡(luò)結(jié)構(gòu),筆者發(fā)現(xiàn) V1 代的剪枝版本在計(jì)算量上處理得不夠好,于是,本文從計(jì)算量的角度分析,對(duì) MODNet 網(wǎng)絡(luò)結(jié)構(gòu)中計(jì)算量占比較大的部分重新進(jìn)行剪枝處理,并進(jìn)行參數(shù)替換。實(shí)驗(yàn)結(jié)果表明,剪枝后的模型相比原模型降低了一半的計(jì)算量,推理時(shí)延也有了明顯的改進(jìn),然而,模型精度并不好!

因此,關(guān)于模型剪枝后retrain精度較低的問(wèn)題,筆者做了下列思考??????:

(1)從剪枝本身考慮

  1. 相同情況下,大 sparse 導(dǎo)致更多的特征提取層無(wú)法提取到必要的特征,破壞了核心結(jié)構(gòu);

  2. 固定整體剪枝比例存在漏洞,導(dǎo)致有些模塊去除了重要程度較高的通道;

  3. 缺少 BN 層中的 running mean 、var ,影響了再訓(xùn)練時(shí)的精度恢復(fù);

解決方案:

①采用 少量剪枝---->微調(diào)---->少量剪枝------微調(diào) 的策略;

②不再采用固定整體比例剪枝,而是對(duì)特定的模塊具體問(wèn)題具體分析

(2)從再訓(xùn)練考慮文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-814261.html

  1. 由于參數(shù)的初始化以及算法的隨機(jī)性,導(dǎo)致單一的訓(xùn)練無(wú)法得到較理想的效果?
  2. 如何準(zhǔn)確設(shè)置超參?訓(xùn)練得到原模型的超參組合與剪枝后重訓(xùn)練的超參一樣嗎?
  3. 關(guān)于 learning rate,剪枝后,模型減小,參數(shù)減少,尋找最優(yōu)解時(shí)的步長(zhǎng)應(yīng)當(dāng)減小。反之,可能錯(cuò)過(guò)最優(yōu)解。
  4. 是否可以設(shè)置動(dòng)態(tài)參數(shù)?隨著 epoch 的增加而變化?

到了這里,關(guān)于MODNet 剪枝再思考: 優(yōu)化計(jì)算量的實(shí)驗(yàn)歷程分享的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁(yè)問(wèn)題

    重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁(yè)問(wèn)題

    # 問(wèn)題描述 ? ? ?用戶線上查詢其上網(wǎng)流量詳單數(shù)據(jù)加載慢,且有時(shí)候數(shù)據(jù)沒(méi)有響應(yīng)全~ ? ? ?1、經(jīng)排除是調(diào)用第三方數(shù)據(jù)量達(dá)10w條響應(yīng)會(huì)超時(shí),數(shù)據(jù)沒(méi)正常返回 ? ? ?2、現(xiàn)有線上緩存分頁(yè)也是加載慢數(shù)據(jù)不能正常展示 ? ? ?3、第三方接口返回類似報(bào)文jsonj: ? ? ? ? ? 4、我

    2024年02月09日
    瀏覽(31)
  • 【算法證明 三】計(jì)算順序統(tǒng)計(jì)量的復(fù)雜度

    【算法證明 三】計(jì)算順序統(tǒng)計(jì)量的復(fù)雜度

    計(jì)算順序統(tǒng)計(jì)量,在 c++ 標(biāo)準(zhǔn)庫(kù)中對(duì)應(yīng)有一個(gè)函數(shù): nth_element 。其作用是求解一個(gè)數(shù)組中第 k 大的數(shù)字。常見(jiàn)的算法是基于 partition 的分治算法。不難證明這種算法的最壞復(fù)雜度是 Θ ( n 2 ) Theta(n^2) Θ ( n 2 ) 。但是其期望復(fù)雜度是 Θ ( n ) Theta(n) Θ ( n ) 。 另外,存在一種最壞復(fù)

    2024年02月07日
    瀏覽(16)
  • 備考分享丨云計(jì)算HCIE實(shí)驗(yàn)考試需要注意什么

    備考分享丨云計(jì)算HCIE實(shí)驗(yàn)考試需要注意什么

    去年九月底我在朋友的推薦下報(bào)考了譽(yù)天的云計(jì)算方向,在此期間我非常感謝田sir、苗苗老師和凡凡老師,每次我遇見(jiàn)問(wèn)題找他們都能給我完完全全的解決,給我這個(gè)非科班出身的學(xué)員很大的鼓勵(lì)與幫助。 我是經(jīng)濟(jì)學(xué)專業(yè),畢業(yè)之后沒(méi)有考研,找工作也不合我的心,于是在家

    2024年04月14日
    瀏覽(24)
  • 【搜索】DFS剪枝與優(yōu)化

    算法提高課筆記 剪枝 是什么意思呢? 我們知道,不管是內(nèi)部搜索還是外部搜索,都可以形成一棵搜索樹(shù),如果將搜索樹(shù)全部遍歷一遍,效率會(huì)很低,但如果我們能在搜索的過(guò)程中,提前預(yù)知,判斷某一些不可能是正確答案的情況,就可以不用遍歷其下的子樹(shù),從而提高我們

    2024年02月14日
    瀏覽(25)
  • 模型優(yōu)化之模型剪枝

    模型優(yōu)化之模型剪枝

    一、概述 模型剪枝按照結(jié)構(gòu)劃分,主要包括結(jié)構(gòu)化剪枝和非結(jié)構(gòu)化剪枝: (1)結(jié)構(gòu)化剪枝:剪掉神經(jīng)元節(jié)點(diǎn)之間的不重要的連接。相當(dāng)于把權(quán)重矩陣中的單個(gè)權(quán)重值設(shè)置為0。 (2)非結(jié)構(gòu)化剪枝:把權(quán)重矩陣中某個(gè)神經(jīng)元節(jié)點(diǎn)去掉,則和神經(jīng)元相連接的突觸也要全部去除。

    2024年02月14日
    瀏覽(13)
  • 我的ESP-01S開(kāi)發(fā)歷程與經(jīng)驗(yàn)分享

    我的ESP-01S開(kāi)發(fā)歷程與經(jīng)驗(yàn)分享

    一、總體說(shuō)明 本人是個(gè)外行,沒(méi)事搞一下單片機(jī)純屬業(yè)余愛(ài)好而已。學(xué)習(xí)歷程為51——Arduino——NodeMcu_ESP-8266——STM32。做過(guò)幾樣?xùn)|西,倒是覺(jué)得很有趣,也便有了繼續(xù)學(xué)習(xí)下去的動(dòng)力。ESP系列是入門級(jí)和業(yè)余愛(ài)好者開(kāi)發(fā)物聯(lián)網(wǎng)的不二之選。ESP-01S小開(kāi)發(fā)板對(duì)于做簡(jiǎn)單的物聯(lián)網(wǎng)

    2023年04月27日
    瀏覽(30)
  • FPGA(verilog)頻率計(jì)實(shí)驗(yàn)——學(xué)習(xí)歷程①

    FPGA(verilog)頻率計(jì)實(shí)驗(yàn)——學(xué)習(xí)歷程①

    ????????本文利用verilog語(yǔ)言完成頻率計(jì)實(shí)驗(yàn),由于是第一次發(fā)文,文章格式以及描述語(yǔ)言請(qǐng)諒解,內(nèi)容僅供參考,煩請(qǐng)各路大神指正。 數(shù)碼管動(dòng)態(tài)顯示模塊 分頻模塊 頻率測(cè)試模塊 頂層調(diào)用模塊 module seg_led( ?? ?input clk, ?? ?input rst_n, ?? ?input [19:0] ?? ??? ?data,//6個(gè)數(shù)

    2024年02月06日
    瀏覽(25)
  • 高性能計(jì)算實(shí)驗(yàn)——矩陣乘法基于MPI的并行實(shí)現(xiàn)及優(yōu)化

    高性能計(jì)算實(shí)驗(yàn)——矩陣乘法基于MPI的并行實(shí)現(xiàn)及優(yōu)化

    熟練掌握MPI編程方法,并將通用矩陣乘法轉(zhuǎn)為MPI并行實(shí)現(xiàn),進(jìn)一步加深MPI的使用與理解。 進(jìn)一步熟悉MPI矩陣乘法的實(shí)現(xiàn),學(xué)習(xí)MPI點(diǎn)對(duì)點(diǎn)通信與集合通信的異同點(diǎn)和各自的優(yōu)缺點(diǎn),學(xué)會(huì)比較二者的性能以及各自使用的情形。 學(xué)習(xí)如何將自己編寫(xiě)的代碼改造為標(biāo)準(zhǔn)庫(kù)函數(shù),供其

    2024年02月03日
    瀏覽(31)
  • 實(shí)用的面試經(jīng)驗(yàn)分享:程序員們談?wù)撍麄兊拿嬖嚉v程

    實(shí)用的面試經(jīng)驗(yàn)分享:程序員們談?wù)撍麄兊拿嬖嚉v程

    ???? 博主貓頭虎 帶您 Go to New World.??? ?? 博客首頁(yè)——貓頭虎的博客?? ??《面試題大全專欄》 文章圖文并茂??生動(dòng)形象??簡(jiǎn)單易學(xué)!歡迎大家來(lái)踩踩~?? ?? 《IDEA開(kāi)發(fā)秘籍專欄》學(xué)會(huì)IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎(chǔ)入門篇)》學(xué)會(huì)Golang語(yǔ)言

    2024年02月11日
    瀏覽(31)
  • Acwing166 數(shù)獨(dú)題解 - DFS剪枝優(yōu)化

    166. 數(shù)獨(dú) - AcWing題庫(kù) 數(shù)獨(dú) 是一種傳統(tǒng)益智游戲,你需要把一個(gè) 9×9 的數(shù)獨(dú)補(bǔ)充完整,使得數(shù)獨(dú)中每行、每列、每個(gè) 3×3 的九宮格內(nèi)數(shù)字 1~9 均恰好出現(xiàn)一次。 請(qǐng)編寫(xiě)一個(gè)程序填寫(xiě)數(shù)獨(dú)。 搜索+剪枝(優(yōu)化搜索順序、位運(yùn)算) 優(yōu)化搜索順序:很明顯,我們肯定是從當(dāng)前能填合法數(shù)字

    2024年03月10日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包