Convolution的變形 -- Convolution篓跛、 InnerProduct、MatMul坦刀、BLAS(GEMM愧沟、GEMV) 之間的關(guān)聯(lián)

1 前言

MNN 模型模型轉(zhuǎn)換結(jié)束后進行 optimizeNet 的第一項即為 turnInnerProduct2Convolution蔬咬,拋開各種復(fù)雜的優(yōu)化考慮,單是 減少了概念的維護 一點就已經(jīng)很讓人心動了沐寺。

日常開發(fā)中林艘,可能大家都感到過 Inner Procuct、MatMul混坞、BLAS狐援、Concolution 等操作存在那么些相似性,但究竟哪里相似究孕,哪里不同咕村,或許沒有去仔細地分析過。一方面因為多維操作的分析想象的確比較燒腦蚊俺;另一方面沒有需求啊懈涛,推理用就好了,模型用就好了泳猬,跑崩了官方提issue啊批钠,找前向框架開發(fā)解決啊得封!

這不失為一個不錯的思路埋心。然而,拋開某些緊急場景下我們要自己實現(xiàn)一些模型操作轉(zhuǎn)換設(shè)計忙上,又或要實現(xiàn)一些模型操作優(yōu)化…… 作為一個AI時代的新青年拷呆,難道我們不該有一些“AI工程師的好奇心”,培養(yǎng)下 “AI工程師的自我修養(yǎng)” 嘛疫粥!

追根究底 是件很有趣的事情茬斧, 同事 也是 作為積累 在很多緊急的關(guān)鍵時刻能 “救命”的東西。那么馬上開始梗逮,讓我們一起來看看 類似卷積的相關(guān)操作的相互變換 吧项秉。

2 變換

2.1 回憶 - 卷積的關(guān)鍵參數(shù)

我們先來回憶一下卷積的相關(guān)參數(shù)

2.1.1 輸入Input

輸入

input_width : 輸入寬,如圖設(shè)為10
input_height : 輸入高慷彤,如圖設(shè)為10
input_channel : 輸入維度娄蔼,如圖設(shè)為3
input_padX : 水平方向加邊 - 本文不討論,設(shè)為0
input_padY : 垂直方向加邊 - 本文不討論底哗,設(shè)為0
input_padMode : 加邊模式 - 本文不討論
input_group_number : 輸入分組 - 暫不討論岁诉,設(shè)為 1

2.1.2 卷積核Kernal

卷積核

kernal_width : 卷積核寬,如圖設(shè)為3
kernel_height : 卷積核高跋选,如圖設(shè)為3
kernal_dilateX : 水平方向膨脹 - 本文不討論涕癣,設(shè)為1
kernal_dilateY : 垂直方向膨脹 - 本文不討論,設(shè)為1
kernal_number = input_channel * output_channel野建,舉例的計算結(jié)果為 3 x 4 = 12
(output_channel 的說明在 2.1.5 部分)

2.1.3 偏置Bias

偏置

bias_number = output_channel属划,舉例的計算結(jié)果為 4
(output_channel 的說明在 2.1.5 部分)

2.1.4 其他配置(步長Stride)

strideX : 水平方向步長 - 本文不討論,設(shè)為1
strideY : 垂直方向步長 - 本文不討論候生,設(shè)為1

2.1.5 輸出Output

輸出

output_width : (input_width + input_padX * 2 - ((kernal_width - 1) * kernal_dilateX + 1)) / strideX + 1同眯,按上面的設(shè)置計算,為8
output_height : (input_height + input_padY * 2 - ((kernal_height - 1) * kernal_dilateY + 1)) / strideY + 1唯鸭,按上面的設(shè)置計算须蜗,為8
output_channel : 輸出維度,如圖設(shè)為4

2.1.6 卷積操作示例

按照上面示例的配置目溉,我們得到一份卷積運算明肮,如下圖:

簡單的卷積運算

2.2 Convolution的基礎(chǔ)參數(shù)變換

我們首先關(guān)注如下5個配置的修改變化:

input_channel 輸入維度(或輸入特征)數(shù)量
output_channel 輸出維度(或輸出特征)數(shù)量
kernal_width 卷積核寬度
kernel_height 卷積核高度
group 卷積分組數(shù)量

卷積基本變換 - 網(wǎng)頁中點擊圖片,選擇[查看原圖]缭付,可查看高清原圖

應(yīng)該蠻直觀的吧柿估,相信大家稍微不熟悉的應(yīng)該只有分組卷積 (Group Convolution) 了吧。

金哥和你一起學(xué)模型壓縮——結(jié)構(gòu)篇(1)

這篇文章中對分組卷積略有介紹陷猫,可以適當(dāng)參考秫舌。
(姚神記得給我支付寶打廣告費~!)

2.3 Convolution <--> Inner Product

讓我們漸入佳境绣檬,看看Convolution與Inner Product的轉(zhuǎn)換關(guān)系足陨。

Convolution <--> Inner Product - 網(wǎng)頁中點擊圖片,選擇[查看原圖]娇未,可查看高清原圖

Convolution 使用 1x1 的 kernal墨缘,再將輸入 size 變?yōu)?1x1 就退化成了 Inner Product!

有些神奇對不對零抬,更精彩的還在后面~

2.4 Convolution(Inner Product)<-> MatMul

Inner Product 退化為一個矩陣乘法很簡單镊讼,Inner Product 可以看做是一個特殊的 Convolution,所以 MatMul 也可以看做一個特殊的 Convolution平夜。

Convolution(Inner Product)<-> MatMul - 網(wǎng)頁中點擊圖片狠毯,選擇[查看原圖],可查看高清原圖

但細心的小伙伴會發(fā)現(xiàn)我們舉例的 MatMul 的左矩陣是 1 x 3 的褥芒,如果換證一個 2 x 3 的正常矩陣嚼松?……貌似轉(zhuǎn)換就不太順利了……
別急,我們先來了解下 BLAS锰扶。

2.5 BLAS

BLASBasic Linear Algebra Subprograms献酗,即 基礎(chǔ)線性代數(shù)子程序。
我們比較常見的 GEMM坷牛,即廣義矩陣乘法就是 BLAS 的一種高級形式罕偎。

BLAS - 網(wǎng)頁中點擊圖片,選擇[查看原圖]京闰,可查看高清原圖

會到我們 2.4節(jié) 遺留的問題颜及,有沒有發(fā)現(xiàn) 11號GEMM 變換 MatMul 很容易呢甩苛?
馬上來看看 BLAS & Convolution 的相互變換

2.6 Convolution(InnerProduct) <-> BLAS

我們以退化為 Inner ProductConvolution 為例來描述 Convolution & BLAS 之間的關(guān)聯(lián)

Convolution(InnerProduct) <-> BLAS - 網(wǎng)頁中點擊圖片,選擇[查看原圖]俏站,可查看高清原圖

GEMM 可以看做一個 每組kernal都完全相同 的分組卷積讯蒲!
所以轉(zhuǎn)模型的時候想將一個 GEMM 轉(zhuǎn)化為 Convolution 的話,是要 犧牲一些存儲空間 咯肄扎。

我們可以理解為分組卷積的變種

2.7 總結(jié)

把我們 2.1 ~ 2.6 描述的變換整合到一張圖

卷積變換 - 網(wǎng)頁中點擊圖片墨林,選擇[查看原圖],可查看高清原圖

還是有點復(fù)雜的犯祠,不過針對 有不同操作轉(zhuǎn)換硬需求 的小伙伴旭等,相信這張圖能為整理思路節(jié)約不少的時間!

3 后記

然而衡载,Convolution 的變換場景還不止如此搔耕,比如當(dāng) Group ConvolutionInput Channel、Output Channel痰娱、Group Number 相等時度迂,就變成了一個 DepthWise Convolution !

DepthWise Convolution

有機會我們再慢慢研究討論咯~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猜揪,一起剝皮案震驚了整個濱河市惭墓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌而姐,老刑警劉巖腊凶,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拴念,居然都是意外死亡钧萍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門政鼠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來风瘦,“玉大人,你說我怎么就攤上這事公般⊥蛏Γ” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵官帘,是天一觀的道長瞬雹。 經(jīng)常有香客問我,道長刽虹,這世上最難降的妖魔是什么酗捌? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上胖缤,老公的妹妹穿的比我還像新娘尚镰。我一直安慰自己,他們只是感情好哪廓,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布狗唉。 她就那樣靜靜地躺著,像睡著了一般撩独。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上账月,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天综膀,我揣著相機與錄音,去河邊找鬼局齿。 笑死剧劝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抓歼。 我是一名探鬼主播讥此,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谣妻!你這毒婦竟也來了萄喳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蹋半,失蹤者是張志新(化名)和其女友劉穎他巨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體减江,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡染突,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辈灼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片份企。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巡莹,靈堂內(nèi)的尸體忽然破棺而出司志,到底是詐尸還是另有隱情,我是刑警寧澤降宅,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布俐芯,位于F島的核電站,受9級特大地震影響钉鸯,放射性物質(zhì)發(fā)生泄漏吧史。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一活喊、第九天 我趴在偏房一處隱蔽的房頂上張望解虱。 院中可真熱鬧捐腿,春花似錦帅容、人聲如沸涌穆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斜筐。三九已至冰啃,卻和暖如春邓夕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阎毅。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工焚刚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扇调。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓矿咕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狼钮。 傳聞我的和親對象是個殘疾皇子碳柱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容