TWI840715B - 基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體 - Google Patents
基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體 Download PDFInfo
- Publication number
- TWI840715B TWI840715B TW110140625A TW110140625A TWI840715B TW I840715 B TWI840715 B TW I840715B TW 110140625 A TW110140625 A TW 110140625A TW 110140625 A TW110140625 A TW 110140625A TW I840715 B TWI840715 B TW I840715B
- Authority
- TW
- Taiwan
- Prior art keywords
- data
- output data
- output
- filter
- operator
- Prior art date
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 24
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 10
- 230000015654 memory Effects 0.000 claims abstract description 124
- 239000000872 buffer Substances 0.000 claims abstract description 14
- 238000013527 convolutional neural network Methods 0.000 claims description 24
- 230000003068 static effect Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 48
- 238000000034 method Methods 0.000 description 9
- 238000010801 machine learning Methods 0.000 description 6
- 101001121408 Homo sapiens L-amino-acid oxidase Proteins 0.000 description 3
- 102100026388 L-amino-acid oxidase Human genes 0.000 description 3
- 101000827703 Homo sapiens Polyphosphoinositide phosphatase Proteins 0.000 description 2
- 102100023591 Polyphosphoinositide phosphatase Human genes 0.000 description 2
- 101100012902 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) FIG2 gene Proteins 0.000 description 2
- 101100233916 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) KAR5 gene Proteins 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 210000004958 brain cell Anatomy 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Landscapes
- Complex Calculations (AREA)
- Debugging And Monitoring (AREA)
- Magnetic Resonance Imaging Apparatus (AREA)
- Measuring Pulse, Heart Rate, Blood Pressure Or Blood Flow (AREA)
- Measurement And Recording Of Electrical Phenomena And Electrical Characteristics Of The Living Body (AREA)
- Image Analysis (AREA)
Abstract
一種基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體。自記憶體讀取輸入資料。對輸入資料中的第一部分資料進行第一運算,以取得第一輸出資料。暫存第一輸出資料於第一暫存區。當所暫存的第一輸出資料大於第一預定資料量時,對第一輸出資料進行第二運算,以取得第二輸出資料。暫存第二輸出資料於第二暫存區。對第二輸出資料進行第三運算所得出的第三輸出資料輸出至記憶體。對第一輸出資料進行第二運算時,持續對輸入資料進行第一運算。藉此,可減少記憶體的存取次數。
Description
本發明是有關於一種機器學習(Machine Learning,ML)技術,且特別是有關於一種基於卷積神經網路(Conventional Neural Network,CNN)的運算電路、資料處理方法及電腦可讀取儲存媒體。
機器學習是人工智慧(Artificial Intelligence,AI)中的一個重要主題,並可分析訓練樣本以自中獲得規律,從而透過規律對未知資料預測。而經學習後所建構出的機器學習模型即是用以對待評估資料推論。
機器學習的演算法有很多種。例如,神經網路可透過模擬人類腦細胞的運作來進行決策。其中,卷積神經網路在影像及語音辨識方面提供較佳的結果,並逐漸成為廣泛應用及主力研發的機
器學習架構之一。
值得注意的是,在卷積神經網路架構的卷積層中,處理元件對輸入資料滑動卷積核(kernel)或過濾器(filter)並執行特定運算。處理元件需要反覆地自記憶體讀取輸入資料及權重值並輸出運算結果至記憶體。甚至,若不同卷積層採用不同大小的卷積核或不同卷積運算,則將大幅提升記憶體的存取次數。例如,MobileNet模型結合卷積運算及深度可分離卷積(Depthwise Separable Convolution)運算。因此,這些運算都需要分別對記憶體存取。
有鑑於此,本發明實施例提供一種基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體,融合多個卷積層,並據以減少記憶體的存取次數。
本發明實施例的基於卷積神經網路的資料處理方法包括(但不僅限於)下列步驟:自記憶體讀取輸入資料。對輸入資料中的第一部分資料進行第一運算,以取得第一輸出資料。第一運算設有第一過濾器,第一輸出資料的大小相關於第一運算的第一過濾器的大小及第一部分資料的大小。暫存第一輸出資料於第一暫存區。當第一暫存區所暫存的第一輸出資料大於第一預定資料量時,對第一輸出資料進行第二運算,以取得第二輸出資料。第二運算設有第二過濾器,第二輸出資料的大小相關於第二運算的第二過濾器大小。暫存第二輸出資料於第二暫存器。對第二輸出資料進行第三
運算所得出的第三輸出資料輸出至記憶體。對第一輸出資料進行第二運算時,持續對輸入資料進行第一運算。
本發明實施例的基於卷積神經網路的運算電路包括(但不僅限於)記憶體及處理元件。記憶體用以儲存輸入資料。處理元件耦接記憶體,並包括第一、第二及第三運算器、第一暫存記憶體及第二暫存記憶體。第一運算器用以對輸入資料中的第一部分資料進行第一運算以取得第一輸出資料,並暫存第一輸出資料至處理元件的第一暫存記憶體。第一輸出資料的大小相關於第一運算的第一過濾器大小及第一部分資料的大小。第二運算器用以當第一暫存記憶體所暫存的第一輸出資料符合第二運算所需的大小時,對第二輸入資料進行第二運算,以取得第二輸出資料,並暫存第二輸出資料至處理元件的第三記憶體。第二運算設有第二過濾器,且第二輸出資料的大小相關於第二運算的第二過濾器的大小。第三運算器用以將對第二輸出資料進行第三運算所得出的第三輸出資料輸出至記憶體。第二運算器進行第二運算時,第一運算器持續進行第一運算。
本發明實施例的電腦可讀取儲存媒體用於儲存程式碼,且處理器載入程式碼以執行前述基於卷積神經網路的資料處理方法。
基於上述,依據本發明實施例的基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體,暫存輸出資料於處理元件中的記憶體,並依據下一個運算器(即,下一運算層)的啟動
條件觸發其運算。藉此,下一運算層不用等到上一運算層對所有輸入資料運算後即可提前觸發運算。此外,本發明實施例可減少自記憶體中存取輸入資料的次數。
為讓本發明的上述特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式作詳細說明如下。
100:運算電路
110:記憶體
120:處理元件
131:特徵暫存記憶體
151:第一暫存記憶體
171:第二暫存記憶體
132:第一先入先出單元
172:第二先入先出單元
133:第一權重緩衝器
153:第二權重緩衝器
173:第三權重緩衝器
135:第一運算器
155:第二運算器
175:第三運算器
S210~S290、S111~S113、S1501~S1560:步驟
F:輸入資料
H、Hfi1、Hkd、Hf1o、Ha1o、Ha2o、Ha1i、Ha2i、Ha3o、Hs1o:高
W、Wfi1、Wkd、Wf1o、Wa1o、Wa2o、Wa1i、Wa2i、Wa3o、Wa4o、Wa5o、Wtfo1、Wtfo2、Ws1o、Wso21、Wso22、Wso3、Wto1:寬
C、Cfi1、Cf1o、Ca1o、Ca2o、Ca1i、Ca2i、Ca3o、Ctfo、Cs1o、Cso2、Cto1:通道數
Ffi1、Ffi2、Ffi3、Ffi4、Ffi6:第一部分資料
Kn、Fd、Fp:過濾器
Ffo1、Ffo2、Ffo3、Ffo4、Ftfo:第一輸出資料
SA1i、SA2i:脈動陣列輸入
SA1o、SA2o、SA3o、SA4o、SA5o、SA6o、SA7o、SA8o:脈動陣列輸出
601、703、903、141:已完成輸出
602、704、904、142:當前處理輸出
D1、D2:方向
701、901:已完成輸入
702、902:當前處理輸入
i4:高位置
j4:寬位置
n4:通道位置
I(,,,)、A(,,,):值
Fdn4(,,):權重
Fsi1:第二部份資料
Fso1、Fso2、Fso3、Ftso:第二輸出資料
Fti:第三部份資料
Fto:第三輸出資料
圖1是依據本發明一實施例的基於卷積神經網路的運算電路的元件方塊圖。
圖2是依據本發明一實施例的基於卷積神經網路的資料處理方法的流程圖。
圖3是依據本發明一實施例的輸入資料的示意圖。
圖4是依據本發明一實施例的第一運算的示意圖。
圖5A及圖5B是依據本發明一實施例的脈動陣列輸入及輸出的示意圖。
圖6A~圖6C是依據本發明一實施例的脈動陣列輸出的示意圖。
圖7A是依據本發明一實施例說明讀取輸入資料的示意圖。
圖7B是依據本發明一實施例的第一輸出資料的示意圖。
圖7C是依據本發明一實施例說明讀取輸入資料的示意圖。
圖7D是依據本發明一實施例的第一輸出資料的示意圖。
圖7E是依據本發明一實施例說明讀取輸入資料的示意圖。
圖7F是依據本發明一實施例的第一輸出資料的示意圖。
圖8是依據本發明一實施例說明讀取輸入資料的示意圖。
圖9A是依據本發明一實施例說明第二運算的觸發條件的示意圖。
圖9B是依據本發明一實施例的暫存的第一輸出資料的示意圖。
圖10A是依據本發明一實施例的第二運算的示意圖。
圖10B~圖10D是依據本發明一實施例的第二輸出資料的示意圖。
圖11是依據本發明一實施例的基於卷積神經網路的資料處理方法的流程圖。
圖12A是依據本發明一實施例的暫存的第一輸出資料的示意圖。
圖12B是依據本發明一實施例的暫存的第二輸出資料的示意圖。
圖13A是依據本發明一實施例的第三運算的示意圖。
圖13B是依據本發明一實施例的第三輸出資料的示意圖。
圖14A~圖14C是依據本發明一實施例的脈動陣列輸出的示意圖。
圖15是依據本發明一實施例的MobileNet架構的資料處理方法的流程圖。
圖1是依據本發明一實施例的基於卷積神經網路的運算電路100的元件方塊圖。請參照圖1,運算電路100包括(但不僅限於)記憶體110及一個或更多個處理元件(Processing Element,PE)120。
記憶體110可以是動態隨機存取記憶體(Dynamic Random Access Memory,DRAM)、快閃記憶體(Flash Memory)、寄存器(Register)、組合邏輯電路(Combinational Circuit)或上述元件的組合。
處理元件120耦接記憶體110。處理元件120包括(但不僅限於)特徵暫存憶體131、先入先出(First Input First Output,FIFO)單元132、第一權重暫存記憶體133、第一運算器135、第一暫存記憶體151、第二權重暫存記憶體153、第二運算器155、第二暫存記憶體171、第二先入先出單元172、第三權重暫存記憶體173及第三運算器175。
在一實施例中,特徵暫存憶體131、先入先出單元132、第一權重暫存記憶體133、第一運算器135對應於一層卷積層/運算層。此外,第一運算器135設有第一運算所用的第一過濾器。
在一實施例中,特徵暫存記憶體131用以儲存來自記憶體110的輸入資料中的部分或全部,第一先入先出單元132用以依據先入先出規則輸入且/或輸出特徵暫存記憶體131中的資料,
第一權重暫存記憶體133用以儲存來自記憶體110的權重(形成第一卷積核/過濾器),且第一運算器135用以進行第一運算。在一實施例中,第一運算是卷積運算,並待後續實施例詳述。在另一實施例中,第一運算也可能是深度可分離卷積運算或其他類型的卷積運算。
在一實施例中,第一暫存記憶體151、第二權重暫存記憶體153、第二運算器155對應於一層卷積層/運算層。此外,第二運算器155設有第二運算所用的第二過濾器。
在一實施例中,第一暫存記憶體151用以儲存來自第一運算器135所輸出的輸入資料中的部分或全部,第二權重暫存記憶體153用以儲存來自記憶體110的權重(形成第二卷積核/過濾器),且第二運算器155用以進行第二運算。在一實施例中,第二運算是逐深度(depthwise)卷積運算,並待後續實施例詳述。在另一實施例中,第二運算也可能是卷積運算或其他類型的卷積運算。
在一實施例中,第二暫存記憶體171、第二先入先出單元172、第三權重暫存記憶體173及第三運算器175對應於一層卷積層/運算層。此外,第三運算器175設有第三運算所用的第三過濾器。
在一實施例中,第二暫存記憶體171用以儲存來自第二運算器155所輸出的輸入資料中的部分或全部,第二先入先出單元172用以依據先入先出規則輸入且/或輸出第二暫存記憶體171中的資料,第三權重暫存記憶體173用以儲存來自記憶體110的
權重(形成第三卷積核/過濾器),且第三運算器175用以進行第三運算。在一實施例中,第三運算是逐點(pointwise)卷積運算,並待後續實施例詳述。在另一實施例中,第三運算也可能是卷積運算或其他類型的卷積運算。
在一實施例中,前述特徵暫存記憶體131、第一暫存記憶體、第二暫存記憶體、第一權重暫存記憶體133、第二權重暫存記憶體153及第三權重暫存記憶體173可以是靜態隨機存取記憶體(Static Random Access Memory,SRAM)、快閃記憶體、寄存器、各類型緩衝器或上述元件的組合。
在一實施例中,運算電路100中的部分或全部元件可形成神經網路處理元件(Network Processing Unit,NPU)、片上系統(System on Chip,SoC)或積體電路(Integrated Circuit,IC)。
在一實施例中,第一運算器135在單位時間內具有第一最大運算量,第二運算器155在相同單位時間內具有第二最大運算量,且第三運算器175在相同單位時間內具有第三最大運算量。第一最大運算量大於第二最大運算量,且第一最大運算量大於第三最大運算量。
下文中,將搭配運算電路100中的各項裝置、元件及模組說明本發明實施例所述之方法。本方法的各個流程可依照實施情形而隨之調整,且並不僅限於此。
圖2是依據本發明一實施例的基於卷積神經網路的資料處理方法的流程圖。請參照圖2,處理元件120自記憶體110讀取
輸入資料(步驟S210)。具體而言,輸入資料可以是影像中部份或全部畫素的資料(例如,色階、亮度、或灰階度)。或者,輸入資料也可以是相關於語音、文字、圖案或其他態樣所形成的資料集合。
讀取輸入資料的方法有很多種。在一實施例中,處理元件120讀取全部的輸入資料,並作為第一部分資料。在另一實施例中,處理元件120依據第一運算所需的資料量或特徵暫存記憶體131的容量每次讀取輸入資料中的一部分,並作為第一部分資料。
圖3是依據本發明一實施例的輸入資料F的示意圖。請參照圖3,假設輸入資料F的大小為(高H,寬W,通道數C),且處理元件120所讀取的第一部分資料Ffi1的大小為(高Hfi1,寬Wfi1,通道數C)。高Hfi1可小於或等於高H,且寬Wfi1可小於或等於寬W。
須說明的是,輸入資料可能儲存在記憶體110中的特定區塊或位置,但本發明實施例不加以限制輸入資料中的各元素在記憶體110中的儲存位置。
特徵暫存記憶體131儲存來自記憶體110的輸入資料中的部分或全部。即,特徵暫存記憶體131儲存第一部分資料。第一運算器135對輸入資料中的第一部分資料進行第一運算,以取得第一輸出資料(步驟S230)。具體而言,第一運算是將第一部分資料與對應權重進行第一運算(例如,卷積運算)。第一輸出資料的大小相關於第一運算的第一過濾器大小及第一部分資料的大小。
例如,圖4是依據本發明一實施例的第一運算的示意圖。
請參照圖4,第一運算以卷積運算為例。第一部分資料Ffi1(大小為高Hfi1,寬Wfi1,通道數Cfi1)與第一過濾器Kn(大小為高Hkd,寬Wkd)。若高Hfi1大於或等於高Hkd且寬Wfi1大於或等於寬Wkd,則第一運算器135可觸發第一運算。而第一運算的結果(即,第一輸出資料Ffo1)的高Hf1o為高Hfi1-Hkd+1,寬Wf1o為寬Wfi1-Wkd+1,且通道數Cf1o相同於通道數Cfi1。
又例如,若第一部分資料Ffi1的大小(高,寬,通道數)為(3,32,16),且第一過濾器Kn的大小(高,寬)為(3,3),則第一輸出資料Ffo1的大小(高,寬,通道數)為(1,30,16)。
在一實施例中,第一運算器135採用脈動陣列(systolic array)結構。第一運算器135將第一部分資料區分成多個第一脈動陣列輸入,並分別對這些第一脈動陣列輸入進行第一運算,以取得多個第一脈動陣列輸出。各第一脈動陣列輸出的大小將受限於脈動陣列的大小。例如,第一脈動陣列輸出的元素量小於或等於脈動陣列的容量。此外,基於相同第一部分資料的這些第一脈動陣列輸出組成第一輸出資料。
例如,圖5A及圖5B是依據本發明一實施例的脈動陣列輸入及輸出的示意圖。請參照圖5A及圖5B,假設脈動陣列的大小為(數量Msa×數量Nsa)。脈動陣列輸出SA1o的高Ha1o為1,其寬Wa1o可為數量Msa,且其通道數Ca1o可為數量Nsa。因此,第一運算器135將第一部分資料區分成脈動陣列輸入SA1i(其大小為高Ha1i,寬Wa1i,通道數Ca1i)及脈動陣列輸入SA2i(其大小為高Ha2i,
寬Wa2i,通道數Ca2i)。這兩個脈動陣列輸入SA1i,SA2i分別與過濾器Kn的各通道的權重進行卷積運算,並據以得出脈動陣列輸出SA1o,SA2o。而脈動陣列輸出SA2o的高Ha2o為1,其寬Wa2o可小於或等於數量Msa,且其通道數Ca2o可小於或等於數量Nsa。
又例如,第一部分資料的大小(高,寬,通道數)為(3,32,16),脈動陣列的大小為16×16,且過濾器Kn的大小為3×3。脈動陣列輸出SA1o的高Ha1o為1,其寬Wa1o可為16,且其通道數Ca1o可為16。此外,脈動陣列輸入SA1i的高Ha1i為3,其寬Wa1i為18,且其通道數Ca1i為16。另一方面,第一運算器135自第一部分資料區分出脈動陣列輸入SA1i之後,可得出脈動陣列輸入SA2i。脈動陣列輸入SA2i的高Ha2i為3,其寬Wa2i為16,且其通道數Ca2i為16。此外,脈動陣列輸出SA2o的高Ha2o為1,其寬Wa2o為14(即,寬Wa2i-過濾器Kn的寬+1),且其通道數Ca2o為16。
I(i1,j1,n1)代表所讀取的輸入資料在位置(高位置i1,寬位置j1,通道位置n1)的值。而第一先入先出單元132由右至左且由上至下依序輸入那些資料至第一運算器135。
Fdn(i2,j2,n2)代表所讀取的第n過濾器在位置(高位置i2,寬位置j2,通道位置n2)的值。
A(i3,j3,n3)代表脈動陣列輸出在位置(高位置i3,寬位置j3,通道位置n3)的值,且其數學表示式為:A(i3,j3,n3)=I(i3,j3,0)×Fdn3(0,0,0)+I(i3,j3,1)×Fdn3(0,0,1)+…+I(i3,j3,15)×Fdn3(0,0,15)+I(i3,j3+1,0)×Fdn3(0,1,0)+I(i3,j3+1,1)×Fdn3(0,1,1)+…+I(i3,j3+1,15)×Fdn3(0,1,15)+I(i3,j3+2,0)×Fdn3(0,2,0)+I(i3,j3+2,1)×Fdn3(0,2,1)+…+I(i3,j3+2,15)×Fdn3(0,2,15)+I(i3+1,j3,0)×Fdn3(1,0,0)+I(i3+1,j3,1)×Fdn3(1,0,1)+…+I(i3+1,j3,15)×Fdn3(1,0,15)+I(i3+1,j3+1,0)×Fdn3(1,1,0)+I(i3+1,j3+1,1)×Fdn3(1,1,1)+…+I(i3+1,j3+1,15)×Fdn3(1,1,15)+I(i3+1,j3+2,0)×Fdn3(1,2,0)+I(i3+1,j3+2,1)×Fdn3(1,2,1)+…+I(i3+1,j3+2,15)×Fdn3(1,2,15)+I(i3+2,j3,0)×Fdn3(2,0,0)+I(i3+2,j3,1)×Fdn3(2,0,1)+…+I(i3+2,j3,15)×Fdn3(2,0,15)
+I(i3+2,j3+1,0)×Fdn3(2,1,0)+I(i3+2,j3+1,1)×Fdn3(2,1,1)+…+I(i3+2,j3+1,15)×Fdn3(2,1,15)+I(i3+2,j3+2,0)×Fdn3(2,2,0)+I(i3+2,j3+2,1)×Fdn3(2,2,1)+…+I(i3+2,j3+2,15)×Fdn3(2,2,15)...(1)。
圖6A是依據本發明一實施例的脈動陣列輸出SA3o的示意圖。請參照圖6A,脈動陣列輸出SA3o的高Ha3o為1,其寬Wa3o為16,且其通道數Ca3o為16。而在數學表示式(1)中,代表高的i30,代表寬的j30~15且代表過濾器輸出通道的n30~15。
圖6B是依據本發明一實施例的脈動陣列輸出SA4o的示意圖。請參照圖6B,脈動陣列輸出SA4o的高Ha3o為1,其寬Wa4o為14,且其通道數Ca3o為16。而在數學表示式(1)中,代表高的i30,代表寬的j316~29且代表過濾器輸出通道的n30~15。此外,已完成輸出601為圖6A的脈動陣列輸出SA3o,且當前處理輸出602為脈動陣列輸出SA4o。
依此類推,圖6C是依據本發明一實施例的脈動陣列輸出SA4o的示意圖。請參照圖6C,脈動陣列輸出SA5o的高Ha3o為1,其寬Wa5o為14,且其通道數Ca3o為16。而在數學表示式(1)中,代表高的i34,代表寬的j316~29且代表過濾器輸出通道的n30~15。此外,當前處理輸出602為脈動陣列輸出SA5o。這些脈動陣列輸出SA3o~SA5o可形成一筆或更多筆第一輸出資料。
在一實施例中,第一運算為卷積運算,且第一運算器135對記憶體110所儲存的輸入資料往第一滑動方向讀取第一部分資
料。第一運算器135將輸入資料區分成多個區段,並以平行於輸入資料的高的第一滑動方向接續讀取下一區段,並據以作為第一部分資料。
例如,圖7A是依據本發明一實施例說明讀取輸入資料Ffi1,Ffi2的示意圖。請參照圖7A,若已完成第一部分資料Ffi1的第一運算,則第一運算器135將這第一部分資料Ffi1視為已完成輸入701,並進一步往方向D1(例如,圖面下方)讀取輸入資料F中的下一區段的第一部分資料Ffi2並作為當前處理輸入702。
圖7B是依據本發明一實施例的第一輸出資料Ffo1,Ffo2的示意圖。請參照圖7B,第一輸出資料Ffo1是對圖7A的第一部分資料Ffi1進行卷積運算的輸出並作為已完成輸出703。此外,第一輸出資料Ffo2是對圖7A的第一部分資料Ffi2進行卷積運算的輸出並作為當前處理輸出704。第一輸出資料Ffo2也是依據圖7A的方向D1排列在第一輸出資料Ffo1的下方。
圖7C是依據本發明一實施例說明讀取輸入資料Ffi3的示意圖。請參照圖7C,若已完成輸入701已到達輸入資料F底部,則第一運算器135往方向D2(例如,圖面右方)並由上至下(對應於圖7A的方向D1)讀取輸入資料F中的下一區段的第一部分資料Ffi3並作為當前處理輸入702。
圖7D是依據本發明一實施例的第一輸出資料Ffo3的示意圖。請參照圖7D,第一輸出資料Ffo3是對圖7C的第一部分資料Ffi3進行卷積運算的輸出並作為當前處理輸出704。相似地,當前
處理輸出704排列在已完成輸出703的右方。
圖7E是依據本發明一實施例說明讀取輸入資料Ffi4的示意圖。請參照圖7E,作為當前處理輸入702的第一部分資料Ffi4為輸入資料中的最後一個區段。
圖7F是依據本發明一實施例的第一輸出資料Ffo4的示意圖。請參照圖7F,第一輸出資料Ffo4是對圖7E的第一部分資料Ffi4進行卷積運算的輸出並作為當前處理輸出704。相似地,當前處理輸出704排列在已完成輸出703的下方,並據以完成對輸入資料F的卷積運算。
在另一實施例中,第一運算器135對記憶體110所儲存的輸入資料往(不同於第一滑動方向的)第二滑動方向讀取第一部分資料。相似地,第一運算器135將輸入資料區分成多個區段,並以平行於輸入資料的寬的第二滑動方向接續讀取下一區段,並據以作為第一部分資料。
例如,圖8是依據本發明一實施例說明讀取輸入資料的示意圖。請參照圖8,若已完成第一部分資料Ffi1的第一運算,則第一運算器135將這第一部分資料Ffi1視為已完成輸入701,並進一步往方向D2(例如,圖面右方)讀取輸入資料F中的下一區段的第一部分資料Ffi6並作為當前處理輸入702。相似地,若往方向D2已讀取到同行的最後一區段,則第一運算器135會讀取第一部分資料Ffi1下方的區段。此外,第一部分資料Ffi1及其他第一部分資料(圖未示)的排列可參照前述說明,於此不再贅述。
請參照圖2,第一運算器135暫存一個或更多個第一輸出資料至第一暫存記憶體151的第一暫存區(步驟S250)。具體而言,不同於現有技術將第一輸出資料輸出至記憶體110,本發明實施例的第一輸出資料輸出至第二運算器155的暫存第一暫存記憶體151,從而降低記憶體110的存取次數。
而第一暫存記憶體151(或第一暫存區)所暫存的第一輸出資料大於第一預定資料量時,第二運算器155對第一輸出資料進行第二運算,以取得第二輸出資料(步驟S270)。具體而言,現有多卷積層的架構中,下一個卷積層需要等到上一個卷積層對其所有輸入資料運算並輸出至主記憶體之後,才會自主記憶體讀取上一個卷積層所輸出的輸入資料。不同於現有技術,除了暫存至記憶體110以外的儲存媒體(例如,第一暫存記憶體151或第二暫存記憶體171),本發明實施例更在每當滿足下一個卷積層所需的輸入資料的大小(即,第一預定資料量)的情況下,即可觸發下一個卷積層的卷積運算。同時,若上一個卷積層對所有輸入資料的運算尚未完成,這兩個卷積層的運算可一併同時進行。換句而言,第二運算器155對第一輸出資料進行第二運算時,第一運算器135持續對輸入資料進行第一運算。
值得注意的是,第二運算所輸入的第二部份資料包括第一暫存記憶體151所暫存的第一輸出資料,且第二輸出資料的大小相關於第二運算的第二過濾器大小。假設第二運算是逐深度(depthwise)卷積運算。逐深度卷積運算的各過濾器分別僅對應於第
二部分資料中的一個通道的資料。即,逐深度卷積運算的任一過濾器僅對一個通道的資料卷積運算。因此,逐深度卷積運算的過濾器的數量通常等於第二部份資料的通道數。然而,卷積運算的各過濾器是對所有通道的資料進行卷積運算。此外,只要暫存的那些第一輸出資料的高增加至過濾器的高且第一輸出資料的寬增加至過濾器的寬,過濾器即可與這些暫存的第一輸出資料(作為第二部份資料)進行逐深度卷積運算。
在一實施例中,假設逐深度卷積運算所用的各過濾器的高為Hkd,且其過濾器的寬(width)為Wkd。每一區段的第一輸出資料的高為Hf1o,且第一輸出資料的寬為Wf1o。當第一暫存記憶體151或第一暫存區所暫存的第一輸出資料大於Wkd×Hkd時,第二運算器155可進行第二運算。當第一暫存記憶體151或第一暫存區所暫存的第一輸出資料大於第一預定資料量時,第一暫存記憶體151或第一暫存區所暫存的第一輸出資料所組成的高為MH×Hf1o且所組成的寬為MW×Wf1o。MH及MW為倍數且為正整數,MH×Hf1o未小於Hkd,且MW×Wf1o未小於Wkd。換句而言,在所暫存的第一輸出資料的高MH×Hf1o小於過濾器的高Hkd且所暫存的第一輸出資料的寬MW×Wf1o小於過濾器的寬Wkd的情況下,第二運算器155會繼續等待下一筆第一輸出資料或脈動陣列輸出,直到至所暫存的第一輸出資料的高MH×Hf1o大於或等於過濾器的高Hkd且所暫存的第一輸出資料的寬MW×Wf1o大於或等於過濾器的寬Wkd。
舉例而言,圖9A是依據本發明一實施例說明第二運算的
觸發條件的示意圖,且圖9B是依據本發明一實施例的暫存的第一輸出資料的示意圖。請參照圖9A,輸入資料中的已完成輸入901對應於第一輸出資料的已完成輸出903。若當前處理輸入902對應的當前處理輸出904與已完成輸出903的大小符合第二運算所需的大小,則可觸發第二運算。
請參照圖9B,假設圖9A的已完成輸出903與當前處理輸出904形成暫存的第一輸出資料Ftfo。第一運算器135所用脈動陣列的大小為16×16,其中脈動陣列輸出的寬Wtfo1可為16或寬Wtfo2可為14。假設逐深度卷積運算所用的各過濾器的高為3,且其過濾器的寬為3。寬Wtfo1,Wtfo2皆已大於3。若第五筆脈動陣列輸出暫存於第一暫存記憶體151,則第一筆至第五筆脈動陣列輸出的大小(高,寬,通道數)為(1,16,16)或(1,14,16),即通道數Ctfo為16)輸出所形成的大小已滿足3×3的大小。即,高度為1的脈動陣列輸出堆疊三層,使堆疊後的高度為3。此時,這些脈動陣列輸出可作為第二部份資料,並可供第二運算使用。
須說明的是,圖9A及圖9B是只要堆疊的層數等於過濾器的高即觸發第二運算。然而,在其他實施例中,也可能是堆疊層數大於過濾器的高。
針對逐深度卷積運算,圖10A是依據本發明一實施例的第二運算的示意圖。請參照圖10A,假設第二部份資料Fsi1的大小(高,寬,通道數)為(5,30,16),且逐深度卷積運算所用過濾器Fd的大小3×3。I(i4,j4,n4)代表第二部份資料在位置(高位置i4,寬位置j4,
通道位置n4)的值。Fdn4(i5,j5,n5)代表所讀取的第n4過濾器在位置(高位置i5,寬位置j5)的值。A(i4,j4,n4)代表第二輸出資料或脈動陣列輸出在位置(高位置i4,寬位置j4,通道位置n4)的值,且其數學表示式為:A(i4,j4,n4)=I(i4,j4,n4)×Fdn4(0,0)+I(i4,j4+1,n4)×Fdn4(0,1)+I(i4,j4+2,n4)×Fdn4(0,2)+I(i4+1,j4,n4)×Fdn4(1,0)+I(i4+1,j4+1,n4)×Fdn4(1,1)+I(i4+1,j4+2,n4)×Fdn4(1,2)+I(i4+2,j4,n)×Fdn4(2,0)+I(i4+2,j4+1,n4)×Fdn4(2,1)+I(i4+2,j4+2,n4)×Fdn4(2,2)...(2)。
圖10B是依據本發明一實施例的第二輸出資料Fso1的示意圖。請參照圖10B,假設當前處理的第二輸出資料Fso1的大小(高Hso1,寬Wso1,通道數Cso1)為(1,28,16)。其中,第二輸出資料Fso1中的各值為:A(0,0,n4)=I(0,0,n4)×Fdn4(0,0)+I(0,1,n4)×Fdn4(0,1)+I(0,2,n4)×Fdn4(0,2)+I(1,0,n4)×Fdn4(1,0)+I(1,1,n4)×Fdn4(1,1)+I(1,2,n4)×Fdn4(1,2)+I(2,0,n)×Fdn4(2,0)+I(2,1,n4)×Fdn4(2,1)+I(2,2,n4)×Fdn4(2,2)...(3)
A(0,1,n4)=I(0,1,n4)×Fdn4(0,0)+I(0,2,n4)×Fdn4(0,1)+I(0,3,n4)×Fdn4(0,2)+I(1,1,n4)×Fdn4(1,0)+I(1,2,n4)×Fdn4(1,1)+
I(1,3,n4)×Fdn4(1,2)+I(2,1,n)×Fdn4(2,0)+I(2,2,n4)×Fdn4(2,1)+I(2,3,n4)×Fdn4(2,2)...(4)
A(0,27,n4)=I(0,27,n4)×Fdn4(0,0)+I(0,28,n4)×Fdn4(0,1)+I(0,29,n4)×Fdn4(0,2)+I(1,27,n4)×Fdn4(1,0)+I(1,28,n4)×Fdn4(1,1)+I(1,29,n4)×Fdn4(1,2)+I(2,27,n)×Fdn4(2,0)+I(2,28,n4)×Fdn4(2,1)+I(2,29,n4)×Fdn4(2,2)...(5)其餘依此類推,於此不再贅述。
圖10C是依據本發明一實施例的第二輸出資料Fso2的示意圖。請參照圖10C,已完成輸出101為圖10B的第二輸出資料Fso1。第二輸出資料Fso2為當前處理輸出102,且其大小可相同於圖10B的第二輸出資料Fso1。其中,第二輸出資料Fso2中的各值為:A(1,0,n4)=I(1,0,n4)×Fdn4(0,0)+I(1,1,n4)×Fdn4(0,1)+I(1,2,n4)×Fdn4(0,2)+I(2,0,n4)×Fdn4(1,0)+I(2,1,n4)×Fdn4(1,1)+I(2,2,n4)×Fdn4(1,2)+I(3,0,n)×Fdn4(2,0)+I(3,1,n4)×Fdn4(2,1)+I(3,2,n4)×Fdn4(2,2)...(6)
A(1,1,n4)=I(1,1,n4)×Fdn4(0,0)+I(1,2,n4)×Fdn4(0,1)+I(1,3,n4)×Fdn4(0,2)
+I(2,1,n4)×Fdn4(1,0)+I(2,2,n4)×Fdn4(1,1)+I(2,3,n4)×Fdn4(1,2)+I(3,1,n)×Fdn4(2,0)+I(3,2,n4)×Fdn4(2,1)+I(3,3,n4)×Fdn4(2,2)...(7)
A(1,27,n4)=I(1,27,n4)×Fdn4(0,0)+I(1,28,n4)×Fdn4(0,1)+I(1,29,n4)×Fdn4(0,2)+I(2,27,n4)×Fdn4(1,0)+I(2,28,n4)×Fdn4(1,1)+I(2,29,n4)×Fdn4(1,2)+I(3,27,n)×Fdn4(2,0)+I(3,28,n4)×Fdn4(2,1)+I(3,29,n4)×Fdn4(2,2)...(8)其餘依此類推,於此不再贅述。
圖10D是依據本發明一實施例的第二輸出資料Fso3的示意圖。請參照圖10C,第二輸出資料Fso3為當前處理輸出102,且其大小可相同於圖10B的第二輸出資料Fso1。其中,第二輸出資料Fso3中的各值為:A(2,0,n4)=I(2,0,n4)×Fdn4(0,0)+I(2,1,n4)×Fdn4(0,1)+I(2,2,n4)×Fdn4(0,2)+I(3,0,n4)×Fdn4(1,0)+I(3,1,n4)×Fdn4(1,1)+I(3,2,n4)×Fdn4(1,2)+I(4,0,n)×Fdn4(2,0)+I(4,1,n4)×Fdn4(2,1)+I(4,2,n4)×Fdn4(2,2)...(9)
A(2,1,n4)=I(2,1,n4)×Fdn4(0,0)+I(2,2,n4)×Fdn4(0,1)+I(2,3,n4)×Fdn4(0,2)
+I(3,1,n4)×Fdn4(1,0)+I(3,2,n4)×Fdn4(1,1)+I(3,3,n4)×Fdn4(1,2)+I(4,1,n)×Fdn4(2,0)+I(4,2,n4)×Fdn4(2,1)+I(4,3,n4)×Fdn4(2,2)...(10)
A(2,27,n4)=I(2,27,n4)×Fdn4(0,0)+I(2,28,n4)×Fdn4(0,1)+I(2,29,n4)×Fdn4(0,2)+I(3,27,n4)×Fdn4(1,0)+I(3,28,n4)×Fdn4(1,1)+I(3,29,n4)×Fdn4(1,2)+I(4,27,n)×Fdn4(2,0)+I(4,28,n4)×Fdn4(2,1)+I(4,29,n4)×Fdn4(2,2)...(11)其餘依此類推,於此不再贅述。
在一實施例中,第二運算器155採用脈動陣列結構。第二運算器155將第二部分資料(即,部份暫存的第一輸出資料)區分成多個第二脈動陣列輸入,並分別對這些第二脈動陣列輸入進行第二運算,以取得多個第二脈動陣列輸出。各第二脈動陣列輸出的大小將受限於脈動陣列的大小。例如,第二脈動陣列輸出的元素量小於或等於脈動陣列的容量。此外,基於相同第二部份資料的這些第二脈動陣列輸出組成第二輸出資料。以圖10B為例,若脈動陣列的大小為16×16,則第二輸出資料Fso1包括1×16×16及1×12×16的第二脈動陣列輸出。
針對下一個卷積層,圖11是依據本發明一實施例的基於卷積神經網路的資料處理方法的流程圖。請參照圖11,在一實施例中,第二運算器155可暫存一個或更多個第二輸出資料在第二
暫存記憶體171的第二暫存區(步驟S111)(步驟S280)。具體而言,相似地,本發明實施例將上一個卷積層的輸出暫存在下一個卷積層的緩衝器中,而不是將輸出資料直接輸出到記憶體110。
當第一暫存記憶體171或第二暫存區所暫存的第二輸出資料大於第二預定資料量時,第三運算器175可對第二輸出資料進行第三運算,以取得第三輸出資料(步驟S113)。具體而言,第三運算所輸入的第三部份資料包括第二暫存記憶體171所暫存的第二輸出資料,且第三部份資料的大小相關於第三運算的過濾器大小。假設第三運算是逐點(pointwise)卷積運算。逐點卷積運算的各過濾器的大小僅為1×1。相似於卷積運算,逐點卷積運算的各過濾器也是對所有通道的資料進行卷積運算。此外,只要暫存的那些第二輸出資料的高增加至過濾器的高(為1)且第二輸出資料的寬增加至過濾器的寬(為1),過濾器即可與這些暫存的第二輸出資料(作為第三部份資料)進行逐深度卷積運算。
在一實施例中,依據圖10B~圖10D所示,每一筆的第二輸出資料皆可滿足逐點卷積運算所需的大小。因此,第二先入先出單元172可依序輸入每一筆第二輸出資料至第三運算器175。第三運算器175可對各暫存的第二輸出資料進行第三運算。
例如,圖12A是依據本發明一實施例的暫存的第一輸出資料Ftfo的示意圖,且圖12B是依據本發明一實施例的暫存的第二輸出資料Ftso的示意圖。請參照圖12A及圖12B,若第二運算器155已完成對所暫存的多個第一輸出資料中的一部分的卷積運
算,則第一暫存記憶體151可暫存大小(高,寬,通道數)為(1,Wso21,Cso2)的第二脈動陣列輸出或(1,Wso21+ Wso21,Cso2)的第二輸出資料,並據以成為暫存的第二輸出資料Ftso。其中,通道數Cso2相同於通道數Ctf2。
圖13A是依據本發明一實施例的第三運算的示意圖。請參照圖13A,第三運算器175將圖12B的暫存的第二輸出資料Ftso作為第三部份資料Fti(其寬Wso3為Wso21+Wso21),並對第三部份資料Fti與逐點卷積運算所用的過濾器Fp進行第三運算。
圖13B是依據本發明一實施例的第三輸出資料Fto的示意圖。請參照圖13A及圖13B,第三輸出資料Fto大小等同於第三部份資料Fti。即,寬Wto1相同於寬Wso3,且通道數Cto1相同於通道數Cso2。
在一實施例中,第三運算器175採用脈動陣列結構。第三運算器175將第三部分資料區分成多個第三脈動陣列輸入,並分別對這些第三脈動陣列輸入進行第三運算,以取得多個第三脈動陣列輸出。各第三脈動陣列輸出的大小將受限於脈動陣列的大小。例如,第三脈動陣列輸出的元素量小於或等於脈動陣列的容量。此外,基於相同第三部份資料(即,部份暫存的第二輸出資料)的這些第三脈動陣列輸出組成第三輸出資料。例如,若第三部份資料的大小為1×28×16,且脈動陣列的大小為16×16,則第三輸出資料包括1×16×16及1×12×16的第三脈動陣列輸出。
I(i6,j6,n6)代表所讀取的輸入資料在位置(高位置i6,寬位置j6,通道位置n6)的值。而第二先入先出單元172由右至左且由上至下依序輸入那些資料至第三運算器175。
Fdn(i7,j7,n7)代表所讀取的第n過濾器在位置(高位置i7,寬位置j7,通道位置n7)的值。
A(i6,j6,n6)代表脈動陣列輸出在位置(高位置i6,寬位置j6,通道位置n6)的值,且其數學表示式為:A(i6,j3,n6)=I(i6,j6,0)×Fdn6(0,0,0)+I(i6,j6,1)×Fdn6(0,0,1)+…+I(i6,j6,15)×Fdn6(0,0,15)...(12)。
因此,脈動陣列輸出SA6o的各值為(n60~15):A(0,0,n6)=I(0,0,0)×Fdn6(0,0,0)+I(0,0,1)×Fdn6(0,0,1)+…+I(0,0,15)×Fdn6(0,0,15)...(13);A(0,1,n6)=I(0,1,0)×Fdn6(0,0,0)+I(0,1,1)×Fdn6(0,0,1)+…+I(0,1,15)×Fdn6(0,0,15)...(14)。
A(0,15,n6)=I(0,15,0)×Fdn6(0,0,0)+I(0,15,1)×Fdn6(0,0,1)+…+I(0,15,15)×Fdn6(0,0,15)...(15),其餘依此類推且不再贅述。
因此,脈動陣列輸出SA7o的各值為(n60~15):A(0,16,n6)=I(0,16,0)×Fdn6(0,0,0)+I(0,16,1)×Fdn6(0,0,1)+…+I(0,16,15)×Fdn6(0,0,15)...(16);A(0,17,n6)=I(0,17,0)×Fdn6(0,0,0)+I(0,17,1)×Fdn6(0,0,1)+…+I(0,17,15)×Fdn6(0,0,15)...(17)。
A(0,27,n6)=I(0,27,0)×Fdn6(0,0,0)+I(0,27,1)×Fdn6(0,0,1)+…+I(0,27,15)×Fdn6(0,0,15)...(18),其餘依此類推且不再贅述。此外,圖14A的脈動陣列輸出SA6o為已完成輸出141,脈動陣列輸出SA7o為當前處理輸出142。
因此,最後一筆當前處理輸出142的脈動陣列輸出SA8o的各值為(n60~15):A(2,16,n6)=I(2,16,0)×Fdn6(0,0,0)+I(2,16,1)×Fdn6(0,0,1)+…+I(2,16,15)×Fdn6(0,0,15)...(19);A(2,17,n6)=I(2,17,0)×Fdn6(0,0,0)+I(2,17,1)×Fdn6(0,0,1)+…+I(2,17,15)×Fdn6(0,0,15)...(20)。
A(2,27,n6)=
I(2,27,0)×Fdn6(0,0,0)+I(2,27,1)×Fdn6(0,0,1)+…+I(2,27,15)×Fdn6(0,0,15)...(21),其餘依此類推且不再贅述。
在一實施例中,第三運算器175運行第三運算時,第一運算器135及第二運算器155持續分別運行第一運算及第二運算。也就是說,若第一運算器135及第二運算器155對所有輸入資料的運算尚未完成,這第一運算器135、第二運算器155及第三運算器175的運算可一併進行。
請參照圖2,最後,第三運算器175將第三運算所得出的第三輸出資料輸出至記憶體110(步驟S290)。
為了方便理解完整流程,以下再舉一實施例說明。圖15是依據本發明一實施例的MobileNet架構的資料處理方法的流程圖。請參照圖15,第一運算器135自記憶體110中的輸入資料讀取已定義區段的寬的資料以做作第一部分資料(步驟S1501)。第一運算器135判斷當前處理的條數是否大於或等於(第一過濾器的大小-1)且這條數與第一運算所用的第一跨步(stride)相除所得的餘數是否為1(步驟S1503)。若符合步驟S1503的條件,則第一先入先出單元132依序將第一部分資料輸出至第一運算器135(步驟S1505)。第一運算器135自記憶體110讀取卷積運算所用的第一過濾器中的權重(步驟S1511),進行卷積運算(步驟S1513),並將所得的第一輸出資料輸出至第一暫存記憶體151(步驟S1515)。第一運算器135判斷當前區段中的當前條(其大小相同於過濾器的大小)的所有資料是否皆已進行卷積運算(步驟S1517)。若這些資料
尚未完成卷積運算,則第一先入先出單元132繼續將第一部分資料輸出至第一運算器135(步驟S1505)。若這條的所有資料皆已進行卷積運算,則第一運算器135判斷當前區段中的所有條的所有資料是否皆已進行卷積運算(步驟S1518)。若當前區段中的一條或更多條的資料尚未完成卷積運算或步驟S1503的條件為符合,則第一運算器135自記憶體110中的輸入資料繼續處理下一條的資料(步驟S1507)。若當前區段中的每一條的所有資料皆已進行卷積運算,則第一運算器135判斷所有區段的所有資料是否皆已進行卷積運算(步驟S1519)。若尚有區段的資料未完成卷積運算,則第一運算器135繼續處理下一個區段的資料(步驟S1509)。此外,第一運算器135將當前處理的條數歸零,並設定當前處理的寬數設為:原寬數+區段的寬-(第一運算所用的第一跨步-1+第二運算所用的第二跨步-1)。若所有區段的所有資料皆已進行卷積運算,則第一運算器135完成對輸入資料的所有卷積運算(步驟S1520)。
第二運算器155判斷第一暫存記憶體151所暫存的第一輸出資料是否大於第一預定資料量(步驟S1521)。第二過濾器的大小以3×3為例,則第二運算器155判斷所暫存的第一輸出資料是否已有三條。第二運算器155判斷在第一運算已處理的條數與第二運算所用的第二跨步所得的餘數是否等於零(步驟S1523)。若於數為零,則第二運算器155讀取暫存的第一輸出資料並作為第二部分資料(步驟S1525)。
若步驟S1521及步驟S1523未符合條件,則第二運算器
155判斷目前處理的資料是否為第一筆第一部分資料(步驟S1531)。若步驟S1531未符合條件,則結束所有第二運算(步驟S1540)。另一方面,第二運算器155自記憶體110讀取逐深度卷積運算所用的第二過濾器中的權重(步驟S1533),進行逐深度卷積運算(步驟S1535),並將所得的第二輸出資料輸出至第二暫存記憶體171(步驟S1537)。第二運算器155判斷當前區段中的所有條的所有資料是否皆已進行逐深度卷積運算(步驟S1538)。若當前區段中的一條或更多條的資料尚未完成卷積運算,則第二運算器155位移至下一個點索引(例如,相隔第二跨步)(步驟S1527)並處理下一筆的資料。直到第一暫存記憶體151中的所有條的所有資料皆已進行逐深度卷積運算,則第二運算器155將當前處理的條數設為:原條數+1,且將當前處理的寬數歸零(步驟S1539)。接著,第二運算器155完成對第二輸入資料的所有逐深度卷積運算(步驟S1540)。
第三運算器175判斷第二暫存記憶體171所暫存的第二輸出資料是否已達到一條第二輸出資料(步驟S1541)。第三運算器175讀取暫存的第二輸出資料並作為第三部份資料(步驟S1543)。第三運算器175自記憶體110讀取逐點卷積運算所用的第三過濾器中的權重(步驟S1551),進行逐點卷積運算(步驟S1553),並將所得的第三輸出資料輸出至記憶體110(步驟S1555)。第三運算器175判斷第二暫存記憶體171中的所有條的所有資料是否皆已進行逐點卷積運算。若這些資料尚未完成逐點卷積運算,則第二先入先出單元172繼續將第三部份資料輸出至第三運算器175。若第二
暫存記憶體171中的所有條的所有資料皆已完成逐點卷積運算,則第三運算器175完成對第三部份資料的所有逐點卷積運算(步驟S1560)。
本發明實施例更提供一種電腦可讀取儲存媒體(例如,硬碟、光碟、快閃記憶體、固態硬碟(Solid State Disk,SSD)等儲存媒體),並用以儲存程式碼。運算電路100或其他處理器可載入程式碼,並據以執行本發明實施例的一個或更多個資料處理方法的相應流程。這些流程可參酌上文說明,且於此不再贅述。
綜上所述,在本發明實施例的基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體中,暫存第一輸出資料及/或第二輸出資料而不輸出至記憶體,並可在暫存的資料符合第二運算及/或第三運算所需的大小的情況下,開始第二運算及/或第三運算。藉此,可減少記憶體的存取次數,並提升運算效率。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,任何所屬技術領域中具有通常知識者,在不脫離本發明的精神和範圍內,當可作些許的更動與潤飾,故本發明的保護範圍當視後附的申請專利範圍所界定者為準。
S210~S290:步驟
Claims (13)
- 一種基於卷積神經網路(Conventional Neural Network,CNN)的資料處理方法,包括:自一記憶體讀取一輸入資料;透過一第一運算器對該輸入資料中的一第一部份資料進行一第一運算,以取得一第一輸出資料,其中該第一運算設有一第一過濾器,該第一輸出資料的大小相關於該第一運算的該第一過濾器的大小及該第一部份資料的大小;暫存該第一輸出資料於一第一暫存區;當該第一暫存區所暫存的該第一輸出資料的量大於一第一預定資料量、MH×Hf1o未小於Hkd且MW×Wf1o未小於Wkd時,透過一第二運算器對該第一輸出資料進行一第二運算,以取得一第二輸出資料,其中該第二運算設有一第二過濾器,該第一預定資料量為該第二過濾器的大小,該第二輸出資料的大小相關於該第二運算的該第二過濾器的大小,該第二過濾器的高(height)為Hkd,該第二過濾器的寬(width)為Wkd,該第二過濾器的大小為Wkd×Hkd,每一區段的該第一輸出資料的高為Hf1o,每一區段的該第一輸出資料的寬為Wf1o,Hkd、Wkd、Hf1o及Wf1o為正整數,該第一暫存區所暫存的該第一輸出資料的量所組成的高為MH×Hf1o且所組成的寬為MW×Wf1o,MH及MW為倍數且為正整數;暫存該第二輸出資料於一第二暫存區;以及對該第二輸出資料進行一第三運算所得出的一第三輸出資料 輸出至該記憶體,其中,對該第一輸出資料進行該第二運算時,持續對該輸入資料進行該第一運算。
- 如請求項1所述的基於卷積神經網路的資料處理方法,其中該第二運算不同於該第三運算,且暫存該第二輸出資料於該第二暫存區記憶體的步驟包括:當該第二暫存區所暫存的該第二輸出資料的量大於一第二預定資料量時,對該第二輸出資料進行該第三運算,以取得該第三輸出資料,其中該第三運算設有一第三過濾器,且該第三輸出資料的大小相關於該第三過濾器的大小。
- 如請求項2所述的基於卷積神經網路的資料處理方法,其中對該第二輸出資料進行該第三運算所得出的該第三輸出資料輸出至該記憶體的步驟包括:對該第二輸出資料進行該第三運算時,持續進行該第一運算及該第二運算。
- 如請求項1所述的基於卷積神經網路的資料處理方法,其中該第二運算為一逐深度(depthwise)卷積運算,且對該第一輸出資料進行該第二運算的步驟包括:當該第一暫存區所暫存的該第一輸出資料的量大於Wkd×Hkd時,進行該第二運算。
- 如請求項2所述的基於卷積神經網路的資料處理方法,其中該第三運算為一逐點(pointwise)卷積運算,該第三過濾器 的高及寬皆為1,且對該第三輸入資料進行該第三運算的步驟包括:對每一該暫存的第二輸出資料進行該第三運算。
- 如請求項4所述的基於卷積神經網路的資料處理方法,其中該第一運算為一卷積運算,且自該記憶體讀取該輸入資料的步驟包括:對該輸入資料往一第一滑動方向讀取該第一部分資料,其中該第一滑動方向平行於該輸入資料的高。
- 如請求項4所述的基於卷積神經網路的資料處理方法,其中該第一運算為一卷積運算,且自該記憶體讀取該輸入資料的步驟包括:對該輸入資料往一第二滑動方向讀取該第一部分資料,其中該第二滑動方向平行於該輸入資料的寬。
- 如請求項2所述的基於卷積神經網路的資料處理方法,其中對該輸入資料中的該第一部份資料進行該第一運算、對該第一輸出資料進行該第二運算、或對該第二輸出資料進行該第三運算的步驟包括:將該第一部份資料區分成多個第一脈動陣列(systolic array)輸入;以及分別對該些第一脈動陣列輸入進行該第一運算,以取得多個第一脈動陣列輸出,其中該些第一脈動陣列輸出組成該第一輸出資料。
- 一種基於卷積神經網路的運算電路,包括:一記憶體,用以儲存一輸入資料;一處理元件,耦接該記憶體,並包括:一第一運算器,用以對該輸入資料中的一第一部份資料進行一第一運算以取得一第一輸出資料,並暫存該第一輸出資料至該處理元件的一第一暫存記憶體,其中該第一運算設有一第一過濾器,該第一輸出資料的大小相關於該第一運算的該第一過濾器的大小及該第一部份資料的大小;一第二運算器,用以當該第一暫存記憶體所暫存的該第一輸出資料的量大於一第一預定資料量、MH×Hf1o未小於Hkd且MW×Wf1o未小於Wkd時,對該第一輸出資料進行該第二運算以取得一第二輸出資料,並暫存該第二輸出資料至一第二暫存記憶體,其中該第二運算設有一第二過濾器,該第一預定資料量為該第二過濾器的大小,該第二輸出資料的大小相關於該第二運算的該第二過濾器的大小,該第二過濾器的高(height)為Hkd,該第二過濾器的寬(width)為Wkd,該第二過濾器的大小為Wkd×Hkd,每一區段的該第一輸出資料的高為Hf1o,每一區段的該第一輸出資料的寬為Wf1o,Hkd、Wkd、Hf1o及Wf1o為正整數,該第一暫存記憶體所暫存的該第一輸出資料的量所組成的高為MH×Hf1o且所組成的寬為MW×Wf1o,MH及MW為倍數且為正整數;該第二暫存記憶體,用以儲存該第二輸出資料;以及一第三運算器,用以將對該第二輸出資料進行一第三運 算所得出的一第三輸出資料輸出至該記憶體,其中,該第二運算器進行該第二運算時,該第一運算器持續進行該第一運算。
- 如請求項9所述的基於卷積神經網路的運算電路,其中,該第一運算器在一單位時間內具有一第一最大運算量,該第二運算器在該單位時間內具有一第二最大運算量,該第三運算器在該單位時間內具有一第三最大運算量,該第一最大運算量大於該第二最大運算量,該第一最大運算量大於該第三最大運算量。
- 如請求項9所述的基於卷積神經網路的運算電路,其中,該第三運算器運行該第三運算時,該第一運算器及該第二運算器持續運行該第一運算及該第二運算。
- 如請求項9所述的基於卷積神經網路的運算電路,其中,該第一暫存記憶體以及該第二暫存記憶體為一靜態隨機存取記憶體。
- 一種電腦可讀取儲存媒體,用於儲存一程式碼,一處理器載入該程式碼以執行如請求項1至8中任一項所述的基於卷積神經網路的資料處理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210055056.1A CN114781626A (zh) | 2021-01-21 | 2022-01-18 | 运算电路、数据处理方法和计算机可读取存储媒体 |
US17/578,416 US20220230055A1 (en) | 2021-01-21 | 2022-01-18 | Computing circuit and data processing method based on convolutional neural network and computer readable storage medium |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163139809P | 2021-01-21 | 2021-01-21 | |
US63/139,809 | 2021-01-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202230229A TW202230229A (zh) | 2022-08-01 |
TWI840715B true TWI840715B (zh) | 2024-05-01 |
Family
ID=83782564
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110140625A TWI840715B (zh) | 2021-01-21 | 2021-11-01 | 基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體 |
TW110141505A TWI792665B (zh) | 2021-01-21 | 2021-11-08 | 人工智慧(ai)演算法運算加速處理器與其方法、計算機系統與非暫態電腦可讀取媒體 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110141505A TWI792665B (zh) | 2021-01-21 | 2021-11-08 | 人工智慧(ai)演算法運算加速處理器與其方法、計算機系統與非暫態電腦可讀取媒體 |
Country Status (1)
Country | Link |
---|---|
TW (2) | TWI840715B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108108811A (zh) * | 2017-12-18 | 2018-06-01 | 北京地平线信息技术有限公司 | 神经网络中的卷积计算方法和电子设备 |
US20190147318A1 (en) * | 2017-11-14 | 2019-05-16 | Google Llc | Highly Efficient Convolutional Neural Networks |
US10789505B2 (en) * | 2016-07-01 | 2020-09-29 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
TWI716108B (zh) * | 2018-09-19 | 2021-01-11 | 英屬開曼群島商意騰科技股份有限公司 | 適用於深度神經網路之卷積計算積體電路及其方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9959498B1 (en) * | 2016-10-27 | 2018-05-01 | Google Llc | Neural network instruction set architecture |
KR102395463B1 (ko) * | 2017-09-27 | 2022-05-09 | 삼성전자주식회사 | 적층형 메모리 장치, 이를 포함하는 시스템 및 그 동작 방법 |
US11442700B2 (en) * | 2019-03-29 | 2022-09-13 | Stmicroelectronics S.R.L. | Hardware accelerator method, system and device |
CN111915003B (zh) * | 2019-05-09 | 2024-03-22 | 深圳大普微电子科技有限公司 | 一种神经网络硬件加速器 |
US11301545B2 (en) * | 2019-07-11 | 2022-04-12 | Facebook Technologies, Llc | Power efficient multiply-accumulate circuitry |
-
2021
- 2021-11-01 TW TW110140625A patent/TWI840715B/zh active
- 2021-11-08 TW TW110141505A patent/TWI792665B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10789505B2 (en) * | 2016-07-01 | 2020-09-29 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
US20190147318A1 (en) * | 2017-11-14 | 2019-05-16 | Google Llc | Highly Efficient Convolutional Neural Networks |
CN108108811A (zh) * | 2017-12-18 | 2018-06-01 | 北京地平线信息技术有限公司 | 神经网络中的卷积计算方法和电子设备 |
TWI716108B (zh) * | 2018-09-19 | 2021-01-11 | 英屬開曼群島商意騰科技股份有限公司 | 適用於深度神經網路之卷積計算積體電路及其方法 |
Also Published As
Publication number | Publication date |
---|---|
TW202230113A (zh) | 2022-08-01 |
TWI792665B (zh) | 2023-02-11 |
TW202230229A (zh) | 2022-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11625581B2 (en) | Hardware implementation of a convolutional neural network | |
US10942673B2 (en) | Data processing using resistive memory arrays | |
CN108573305B (zh) | 一种数据处理方法、设备及装置 | |
TWI836132B (zh) | 儲存系統以及用於動態地擴縮儲存系統的排序操作的方法 | |
CN105117351B (zh) | 向缓存写入数据的方法及装置 | |
WO2022206556A1 (zh) | 图像数据的矩阵运算方法、装置、设备及存储介质 | |
CN112668708B (zh) | 一种提高数据利用率的卷积运算装置 | |
CN108804973B (zh) | 基于深度学习的目标检测算法的硬件架构及其执行方法 | |
WO2020073801A1 (zh) | 一种3d图像处理中数据读写方法及系统、存储介质及终端 | |
WO2022179023A1 (zh) | 一种排序装置及方法 | |
CN116992203A (zh) | 一种基于fpga的大规模高吞吐量稀疏矩阵向量整数乘法的方法 | |
TWI840715B (zh) | 基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體 | |
CN109902821B (zh) | 一种数据处理方法、装置及相关组件 | |
CN108764182B (zh) | 一种优化的用于人工智能的加速方法和装置 | |
TW201514729A (zh) | 一種用以建構人工智慧電腦之平行硬體搜索系統 | |
KR20210024751A (ko) | 이종 메모리 장치를 포함하는 그래프 처리 시스템 및 그래프 처리 시스템의 동작방법 | |
CN114781626A (zh) | 运算电路、数据处理方法和计算机可读取存储媒体 | |
JP2024516514A (ja) | 畳み込みニューラル・ネットワーク実行のための活性化のメモリ・マッピング | |
CN114816322B (zh) | Ssd的外部排序方法、装置和ssd存储器 | |
Xiao et al. | A mobilenet accelerator with high processing-element-efficiency on fpga | |
Okafor et al. | Fusing in-storage and near-storage acceleration of convolutional neural networks | |
TW202014882A (zh) | 基於記憶體處理器的多處理架構及其操作方法 | |
Huai et al. | Crossbar-aligned & integer-only neural network compression for efficient in-memory acceleration | |
CN109002467B (zh) | 一种基于向量化执行的数据库排序方法及系统 | |
CN118673260B (zh) | 一种数据处理方法、装置和存储介质 |