1. 程式人生 > >GhostNet: 使用簡單的線性變換生成特徵圖,超越MobileNetV3的輕量級網路 | CVPR 2020

GhostNet: 使用簡單的線性變換生成特徵圖,超越MobileNetV3的輕量級網路 | CVPR 2020

為了減少神經網路的計算消耗,論文提出Ghost模組來構建高效的網路結果。該模組將原始的卷積層分成兩部分,先使用更少的卷積核來生成少量內在特徵圖,然後通過簡單的線性變化操作來進一步高效地生成ghost特徵圖。從實驗來看,對比其它模型,GhostNet的壓縮效果最好,且準確率保持也很不錯,論文思想十分值得參考與學習

來源:曉飛的演算法工程筆記 公眾號

論文: GhostNet: More Features from Cheap Operations

  • 論文地址:https://arxiv.org/abs/1911.11907

Introduction


  目前,神經網路的研究趨向於移動裝置上的應用,一些研究著重於模型的壓縮方法,比如剪枝,量化,知識蒸餾等,另外一些則著重於高效的網路設計,比如MobileNet,ShuffleNet等

  訓練好的網路一般都有豐富甚至冗餘的特徵圖資訊來保證對輸入的理解,如圖1 ResNet-50的特徵圖,相似的特徵圖類似於對方的ghost。冗餘的特徵是網路的關鍵特性,論文認為與其避免冗餘特徵,不如以一種cost-efficient的方式接受,獲得很不錯的效能提升,論文主要有兩個貢獻:

  • 提出能用更少引數提取更多特徵的Ghost模組,首先使用輸出很少的原始卷積操作(非卷積層操作)進行輸出,再對輸出使用一系列簡單的線性操作來生成更多的特徵。這樣,不用改變其輸出的特徵圖,Ghost模組的整體的引數量和計算量就已經降低了
  • 基於Ghost模組提出GhostNet,將原始的卷積層替換為Ghost模組

Approach


Ghost Module for More Features

  對於輸入資料$X\in \mathbb{R}^{c\times h\times w}$,卷積層操作如公式1,$Y\in \mathbb{R}{h{'}\times w^{'}\times n}$為輸出的n維特徵圖,$f\in \mathbb{R}^{c\times k\times k\times n}$為該層的卷積核,可得該層的計算量為$n\cdot h^{'}\cdot w^{'}\cdot c\cdot k\cdot k$,這個數值通常成千上萬,因為$n$和$c$一般都很大。公式1的引數量與輸入和輸出的特徵圖數息息相關,而從圖1可以看出中間特徵圖存在大量冗餘,且存在相似的特徵(Ghost),所以完全沒必要佔用大量計算量來計算這些Ghost

  假設原輸出的特徵為某些內在特徵進行簡單的變換得到Ghost,通常這些內在特徵數量都很少,並且能通過原始卷積操作公式2獲得,$Y^{'}\in \mathbb{R}{h{'}\times w^{'}\times m}$為原始卷積輸出,$f^{'}\in \mathbb{R}^{c\times k\times k\times m}$為使用的卷積核,$m\le n$,bias直接簡化了

  為了獲得原來的$n$維特徵,對$Y{'}$的內在特徵分別使用一系列簡單線性操作來產生$s$維ghost特徵,$\Phi_{i,j}$為生成$y_i{'}$的$j$-th ghost特徵圖的線性變換函式,最後的$\Phi_{i,s}$為儲存內在特徵的identity mapping,整體計算如圖2b

  • Difference from Existing Methods

  與目前主流的卷積操作對比,Ghost模組有以下不同點:

  1. 對比Mobilenet、Squeezenet和Shufflenet中大量使用$1\times 1$ pointwise卷積,Ghost模組的原始卷積可以自定義卷積核數量
  2. 目前大多數方法都是先做pointwise卷積降維,再用depthwise卷積進行特徵提取,而Ghost則是先做原始卷積,再用簡單的線性變換來獲取更多特徵
  3. 目前的方法中處理每個特徵圖大都使用depthwise卷積或shift操作,而Ghost模組使用線性變換,可以有很大的多樣性
  4. Ghost模組同時使用identity mapping來保持原有特徵
  • Analysis on Complexities

  假設Ghost模組包含1個identity mapping和$m\cdot (s-1)=\frac{n}{s} \cdot (s-1)$個線性操作,每個線性操作的核大小為$d\times d$

  理論的加速比如公式4,而理論的壓縮比如公式5,讓$d\times d$與$k\times k$相似且$s\ll c$

Building Efficient CNNs

  • Ghost Bottlenecks

  Ghost Bottleneck(G-bneck)與residual block類似,主要由兩個Ghost模組堆疊二次,第一個模組用於增加特徵維度,增大的比例稱為expansion ration,而第二個模組則用於減少特徵維度,使其與shortcut一致。G-bneck包含stride=1和stride=2版本,對於stride=2,shortcut路徑使用下采樣層,並在Ghost模組中間插入stride=2的depthwise卷積。為了加速,Ghost模組的原始卷積均採用pointwise卷積

  • GhostNet

  基於Ghost bottleneck,GhostNet的結構如圖7所示,將MobileNetV3的bottleneck block替換成Ghost bottleneck,部分Ghost模組加入了SE模組

  • Width Multiplier

  儘管表7的結構已經很高效,但有些場景需要對模型進行調整,可以簡單地使用$\alpha$對每層的維度進行擴縮,$\alpha$稱為width multiplier,模型大小與計算量大約為$\alpha^2$倍

Experiments


Efficiency of Ghost Module

  • Toy Experiments

  論文對圖1的ghost pair進行了不同核大小的線性變化測試,將左圖作為輸出右圖作為輸入訓練depthwise卷積,然後使用訓練的結果對左圖進行變換,計算其變換後與右圖的MSE。可以看到,不同的核大小下差值都很小,說明線性變換是有效的,而且核大小的影響不大,所以用核固定為d的depthwise卷積來進行公式3計算

  • CIFAR-10

  將VGG的卷積層替換成Ghost模組進行超引數測試,表3的$s=2$,表4的$d=3$

  可以看到使用Ghost模組不僅比其它壓縮方法更能降低模型的體量,也最能保持模型準確率

  對Ghost模組產生的特徵進行了視覺化,儘管從內在特徵線性變換而來,但還是有明顯的差異,說明線性變換足夠靈活

  • Large Models on ImageNet

  在大型網路上使用Ghost模組,壓縮效果和準確率依然很不錯

GhostNet on Visual Benchmarks

  • ImageNet Classification

  使用$k=1$, $s=2$, $d=3$的GhostNet,結果如表7,不同的模型大小使用不同的$\alpha$值進行調整,整體而言,GhostNet最輕量且準確率最高

  • Object Detection

  在one-stage和two-stage檢測演算法上,GhostNet能降低大部分計算量,而mAP與其它主幹網路差不多

CONCLUSION


  為了減少神經網路的計算消耗,論文提出Ghost模組來構建高效的網路結果。該模組將原始的卷積層分成兩部分,先使用更少的卷積核來生成少量內在特徵圖,然後通過簡單的線性變化操作來進一步高效地生成ghost特徵圖。從實驗來看,對比其它模型,GhostNet的壓縮效果最好,且準確率保持也很不錯,論文思想十分值得參考與學習



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】

相關推薦

GhostNet: 使用簡單線性變換生成特徵超越MobileNetV3輕量級網路 | CVPR 2020

為了減少神經網路的計算消耗,論文提出Ghost模組來構建高效的網路結果。該模組將原始的卷積層分成兩部分,先使用更少的卷積核來生成少量內在特徵圖,然後通過簡單的線性變化操作來進一步高效地生成ghost特徵圖。從實驗來看,對比其它模型,GhostNet的壓縮效果最好,且準確率保持也很不錯,論文思想十分值得參考與

canvas生成水印並且分享

microsoft 並且 clas etc 對象 text cor draw clear var canvas, context; var img,//圖片對象 imgIsLoaded,//圖片是否加載完成; imgX = 0,

Java 學習筆記之jfreechart 生成折線

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C#生成指定畫素大小

using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using

c#圖片生成保持最高清的圖片

1.生成縮圖的主要程式碼 /// <summary> /// 圖片顯示成縮圖 /// </summary>

一個簡單的PHP生成函式

PHP上傳圖片、生成縮圖是比較常用到的功能,一般我們會把這些功能寫一個類,方便我們呼叫。今天發現了一個比較簡單些的PHP生成縮圖函式的程式碼,不敢獨享,特此與大家分享。自己使用時候認真看一下,程式碼中都有註釋的。 function img_create_small($big_img, $width, $h

Java 學習筆記之jfreechart 生成折線 ...

package com.yyh.jfreechart; import java.awt.Color; import java.awt.Font; import java.io.File; import java.io.FileOutputStream; import ja

【Nginx】面試官竟然問我Nginx如何生成還好我看了這篇文章!!

## 寫在前面 > 今天想寫一篇使用Nginx如何生成縮圖的文章,想了半天題目也沒想好,這個題目還是一名讀者幫我起的。起因就是這位讀者最近出去面試,面試官正好問了一個Nginx如何生成縮圖的問題。還別說,就是這麼巧呀!!就衝這標題,也要寫一篇乾貨滿滿的技術好文!! > > 關於Nginx的

美工沒時間給簡單讓我們自己寫哭啊! 所以具體研究了一下shape的使用保存下

其它 結束 get alt 屬性 width drawable 樣式 ref 在drawable文件夾中創建一個shape的資源文件,其中shape有四個屬性(rectangle、oval、line、ring) 這四個屬性是用來定義圖形的形狀對應(矩形、橢圓、線、圓環) 除

JavaScript實現簡單圖片滾動 --9張告訴你C羅欲哭無淚

charset () element edit fas 簡單圖 pad jpg sni 源代碼下載:http://download.csdn.net/detail/u011043843/7510425 昨晚德國和葡萄牙的焦點之戰你看了嗎?北京時間淩晨的比賽

記一次非常無語的生成柱狀jsecshop。

width ecs fun ner text nbsp real mov span 如題,無語且非常郁悶。 要求是根據查詢出來的數據動態生成柱狀圖。但是ecshop的查詢ajax回調都是已經封裝好了的。根本就不能改。 無奈之下只好百度了一個畫柱狀圖的代碼,每隔2秒

分類和邏輯回歸(Classification and logistic regression)廣義線性模型(Generalized Linear Models) 生成學習算法(Generative Learning algorithms)

line learning nbsp ear 回歸 logs http zdb del 分類和邏輯回歸(Classification and logistic regression) http://www.cnblogs.com/czdbest/p/5768467.html

JavaScript數據可視化編程學習(一)Flotr2包含簡單柱狀折線散點

基礎 沒有 cat 勝利 而是 5.4 最好的 表數據 聯系 一、基礎柱狀圖 二、基礎的折線圖 三、基礎的餅圖 四、基礎的散點圖 一、基礎柱狀圖 如果你還沒有想好你的數據用什麽類型的圖表來展示你的數據,你應該首先考慮是否可以做成柱狀圖。柱狀圖可以表示數據的

POJ 1384 Intervals (線性差分約束根據不等式建然後跑spfa)

seve bottom accepted iostream spf style urn comm scribe 傳送門: http://acm.hdu.edu.cn/showproblem.php?pid=1384 Intervals Time Limit: 1000

ICO標在線生成php生成ICO標在線制作源碼

需要 在線生成 dimens jpg add spa vars 實現 strip 我們做web系統的時候,每個瀏覽器的tab這裏都會有一個圖標,這個圖標叫favicon圖標,favicon.ico文件放在系統的根目錄 如果程序員沒有ICO制作工具,那麽要如何生成圖標呢?可

numpy轉置及軸對換transpose函式簡單例子理解 axis 01 交換視覺化 numpy轉置及軸對換transpose函式簡單例子理解

原 numpy轉置及軸對換transpose函式簡單例子理解 2018年02月01日 22:03:20 末流大學倒三爛 閱讀數:162

使用plantuml生成uml類分析golang專案原始碼,

1、安裝java graphviz需要在java環境執行 2、下載plantuml外掛 下載地址:https://nchc.dl.sourceforge.net/project/plantuml/plantuml.jar 3、安裝graphviz 下載地址:https://graphviz.g

解決U-net上取樣過程後結合下采樣資訊時特徵大小不匹配問題

在U-net下采樣後時,通過polling層,可能會出現這種情況,37*37feature maps 壓縮成18*18大小,但在上取樣過程中,利用 nn.ConvTranspose2d()通常變為36*36大小的feature maps,不同大小的feature maps在進行concat時會報

利用powerdesigner反向資料庫結構生成ER

注意:powerDesign jdk版本必須要32位的 截止到2017年8月10日,PowerDesigner貌似都沒有提供對windows系統64位JDK的支援,所以JDK的版本必須是32位的 首先配置好JDK的環境變數,然後在Tools->General Option

如何利用Chrom瀏覽器實現滾動截不用下載外掛超級簡單

相信很多開發者在開發手機端專案的時候,會在瀏覽器按照不同機型開啟檢視效果,可是截圖只能擷取可視區的圖片,我想截全屏網頁內容怎麼辦呢?我看很多百度出來的都是說下載安裝外掛什麼的,覺得很麻煩,跟我來,簡單實現,方法如下: 第一步: 開啟開發者工具 ctrl+shif