Img2col 卷積加速算法
一、Img2col是什么?
Img2col 通過矩陣乘法實現(xiàn)卷積的加速運算的方法,該方法被廣泛應(yīng)用在CPU、GPU等通用計算芯片上。同時在一些特定域結(jié)構(gòu)(Domain Specific Architecture , DSA)上,比如華為的昇騰AI處理機中,使用了Img2col為需要進行卷積運算的矩陣進行了預(yù)處理。
二、CNN中的卷積運算
CNN(Convolutional Neural Network)網(wǎng)絡(luò)中,相對于FCNN(Fully Connected Neural Network)網(wǎng)絡(luò)引入了權(quán)重共享的概念。大大降低了神經(jīng)網(wǎng)絡(luò)運算過程中的參數(shù)量級。
以單通道輸入的第一層卷積層為例,卷積核大小為33。第一層卷積運算需要對輸入層的數(shù)據(jù)使用第一層卷積核(濾波器)進行卷積運算。輸入層的矩陣可以很大,每一次卷積運算都只會針對輸入層中一個33的區(qū)域(感受野)進行卷積運算。運算結(jié)束后通過移動卷積核位置(滑動步長)對下一個感受野進行卷積運算。每一次卷積運算會輸出一個數(shù)據(jù)。當卷積核掃描完整個矩陣,則輸出一個和輸入相同長寬的矩陣(數(shù)據(jù)矩陣需要對邊沿進行補零)。
可以發(fā)現(xiàn),這個過程中,每一次矩陣運算只能對一個感受野中的輸入數(shù)據(jù)進行運算,要運算完整個輸入矩陣,需要多次卷積運算(多線程)。根據(jù)體系結(jié)構(gòu)分析,整個輸入矩陣在內(nèi)存中保持的位置是連續(xù)的,如果緩存塊(Cache line)不夠大的話,一個感受野中的9個數(shù)據(jù)會被保持在不同的Cache line中,導(dǎo)致數(shù)據(jù)不連續(xù),會頻繁造成緩存缺失,導(dǎo)致產(chǎn)生較大的訪存開銷。這會嚴重拖慢處理器的運算速度。
三、Img2col對卷積運算加速
對于這個問題,已經(jīng)有一些解決方法,比如使用FFT對卷積運算進行加速,或者更簡單一點的方法是使用Img2col對輸入數(shù)據(jù)進行預(yù)處理。
將輸入矩陣的每一個感受野展開為一個9元素向量。如圖中的X1、X2感受野。將所有感受野拉成的向量拼接組合成一個新的矩陣XI2C。
同理將卷積核也拉成9元素向量。圖中該卷積核只有兩個矩陣,所以只有兩個9元素向量。將兩向量拼接得到矩陣WI2C。
將偏置b也拉成同樣的矩陣??赏ㄟ^如下圖的方式,實現(xiàn)用矩陣乘法實現(xiàn)卷積運算。對比同樣使用同樣的處理機進行運算。以每一行和列的運算為一個線程劃分。
(1)如果直接進行卷積運算,每一個線程需要讀取一個感受野中的數(shù)據(jù)、兩個卷積矩陣的數(shù)據(jù)和1個偏置數(shù)據(jù)b。這個過程中,感受野數(shù)據(jù)由于在內(nèi)存中不連續(xù),每一個線程都會造成緩存缺失,導(dǎo)致線程堵塞,性能變差。
(2)如果對Img2col對輸入矩陣進行預(yù)處理,則將卷積運算變?yōu)榱诵辛谐思拥木仃嚦?。以矩陣XI2C的每一行與矩陣W12C的每一列之間的向量內(nèi)積運算為一個線程。每個線程需要從內(nèi)存中取出XI2C的一行數(shù)據(jù)、矩陣WI2C的一列數(shù)據(jù)和矩陣bI2C的一列數(shù)據(jù)。這里的所有數(shù)據(jù)在內(nèi)存空間都是連續(xù)的。所以不會造成緩存缺失。所以運算速度加快。
還能進一步改進,偏置b矩陣和矩陣XI2C合并,省略了一次矩陣的加法運算。進一步提升運算速度。文章來源:http://www.zghlxwxcb.cn/news/detail-446815.html
圖片引用1:https://blog.csdn.net/weixin_42863507/article/details/106320968?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11.pc_relevant_aa&utm_relevant_index=15
圖片引用2:昇騰AI處理器 架構(gòu)與編程 第1章 基礎(chǔ)理論文章來源地址http://www.zghlxwxcb.cn/news/detail-446815.html
到了這里,關(guān)于昇騰AI處理機_學(xué)習(xí)筆記一:Img2col 卷積加速算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!