深度學習基礎 卷積 加速的卷積運算

2021-08-31 20:49:45 字數 2173 閱讀 7077

convolution在gpu上如何實現,文中介紹了三種方法

缺點:這種實現呢需要處理許多的corner case。

文中介紹cuda-convnet2是實現了該種方法,該種方法在不同取值的卷積引數空間效率不一,比如batch size > 128,效率很高,但是如果batch size < 64, 效率比較低。

優點:該種方法效率非常高

缺點:由於filter需要擴大到和input一樣大小,占用了大量記憶體,特別是cnn的前幾層filter 大小遠小於input大小。而且,當striding 引數》1, fft效率也不高。

此時需要將卷積核擴大成和feature map一樣的長寬尺寸,這在二者相差較大的時候也是很浪費的。另外,當stride大於1時,資料比較稀疏,採用fft效果也並不理想。

這是一種加速的2d卷積,matlab中有。 該種方法效率非常高,但是由於filter需要擴大到和input一樣大小,占用了大量記憶體,特別是cnn的前幾層filter 大小遠小於input大小。第二,當striding 引數》1, fft效率也不高。

對於大矩陣,filter2或conv2太慢了,而使用convfft有極大的提速(100 ^ 2和500^2的矩陣進行卷積時,加速為5-10倍。

signal length 1 second, impulse length 1 second, fs=44100, vectors (one-dimension). 

conv 103.8 s

filter 79.4 s

fftfilt 0.38 s

convfft 0.92 s

signal length 10 seconds, impulse length 1 second

fftfilt 1.28 s

convfft 14.61 s

**採用的是將卷積轉化為矩陣乘法的方法,利用nvidia的矩陣乘法的特點,做了一些改進。

具體來說就是,計算f(卷積核)對d(輸入的feature map)的卷積,並不是將d轉化後的二維矩陣直接存到視訊記憶體裡面,而是lazily materialing的方式。就是說,當需要用到這部分資料的時候,直接到d中索引對應的資料,並載入到視訊記憶體裡面進行計算,這樣就避免了占用額外視訊記憶體這一弊端。

因此該方法還需要乙個快速從d中索引資料的演算法。

對a x b = c, 分塊載入a和b從off-chip memory to on-chip caches, 同時計算c的一部分。這樣減少了資料傳輸帶來的延遲。對於擴大的input data,我們是在on-chip上轉換成擴大的input data,而不是在off-chip上轉換。

將卷積操作轉換為密集矩陣相乘。將input data組裝成大小為crs x npq的矩陣,這使得記憶體相對原始input data的大小擴大了之多rs(即kernel_size的平方)倍。

這種方法使用擴大臨時記憶體方法換取密集矩陣計算的便利。

卷積核越大,stride越小,視訊記憶體耗費越高。

參考資料:

下圖,更詳細地介紹nvidia的矩陣乘法。

最後,filter matrix乘以feature matrix的轉置,得到輸出矩陣cout x (h x w),就可以解釋為輸出的三維blob(cout x h x w)。

Vivado HLS加速卷積層運算

卷積神經網路 cnn 主要由卷積層 池化層 全連線層和啟用層等網路層順序連線而成。本文主要針對計算密集型的卷積層,利用vivado hls工具對其在fpga上的實現進行加速。乙個基本的卷積運算由6層for迴圈實現。如下面 所示,從外向裡的迴圈依次是k k大小的卷積核,輸出特徵圖的行列 tr,tc 輸...

深度學習 卷積理解

一.深度卷積神經網路學習筆記 一 假設輸入影象尺寸為w,卷積核尺寸為f,步幅 stride 為s 卷積核移動的步幅 padding使用p 用於填充輸入影象的邊界,一般填充0 那麼經過該卷積層後輸出的影象尺寸為 w f 2p s 1。2.它寫出為什麼會用padding?卷積核大小該如何確定?strid...

14 深度學習 卷積

補交作業 第十二次作業 垃圾郵件分類 第十三次作業 垃圾郵件分類2 這兩個作業電腦顯示卡炸了,返廠修了兩周,所以沒有完成,只能在手機上直播課,謝謝老師 第六次作業 邏輯回歸 這個作業我4月23日就已經弄好了,但是忘記交了,老師可以檢視一下這篇部落格的日期 1.簡述人工智慧 機器學習和深度學習三者的聯...