文/徐銘君
圖像的卷積運(yùn)算在圖像處理中十分重要,卷積運(yùn)算可以有效的提取圖像的特征?,F(xiàn)在機(jī)器視覺和機(jī)器學(xué)習(xí)的過程中往往需要對圖像進(jìn)行多次多層的卷積,對于一幅N2大小的灰度圖像,利用M2的卷積核進(jìn)行卷積運(yùn)算(M 圖像卷積是用原始圖像的各個像素及其領(lǐng)域的灰度值與卷積核的對應(yīng)元素進(jìn)行逐項相乘后相加的過程,運(yùn)用式(1)并把結(jié)果Y 重新賦值給z5。 自定義指令可以讓開發(fā)者定制Nios II 處理器來滿足特定應(yīng)用程序的需求。在ALU 上掛載自定義硬件邏輯塊,可以加快軟件的執(zhí)行速度 。因為Nios Ⅱ給出的組合邏輯的自定義指令的傳入接口是兩個32bit 的輸入dataa 和datab。而原始灰度圖像的數(shù)據(jù)是8 位的無符號整形的變量,卷積核為有符號的8 位的變量,所以該系統(tǒng)在設(shè)計時把輸入數(shù)據(jù)分割成為4 個變量,如圖1。并把這四個灰度值和權(quán)重進(jìn)行對應(yīng)項相乘之后相加,交給輸出接口32 位的result 輸出,這樣可以一次性完成2x2 像素點(diǎn)的灰度值卷積。通過重復(fù)調(diào)用這個指令并把結(jié)果相加,同樣可以完成3x3,4x4 等的圖像卷積運(yùn)算。 圖1:VHDL 實現(xiàn)數(shù)據(jù)分割 圖2:軟件位移合并圖像數(shù)據(jù) 圖3:邊緣提取原圖及輸出圖像 運(yùn)用Nois Ⅱ內(nèi)核所提供的自定義指令的調(diào)用宏ALT_CI_CONVOLUTION_0(A,B),可以調(diào)用VHDL 設(shè)計的卷積指令。但是因為該宏命令的傳入?yún)?shù)只有兩個32 位長的整形變量,所以應(yīng)當(dāng)依照上面VHDL 硬件描述語言中的數(shù)據(jù)劃分方法,在C 語言軟件上需要把四個傳入的8 位灰度像素點(diǎn)進(jìn)行整合如圖2,對于用位移相或的方法,把原始圖像的灰度移動到32位的變量中再傳入自定義指令的宏中。 利用該自定義指令系統(tǒng)進(jìn)行圖像卷積,采用Laplacian 算子的卷積核進(jìn)行邊緣提取。先分別對文字和智能車實驗賽道進(jìn)行退化處理(圖3a,c),之后再使用Laplacian 算子的卷積核對該圖像卷積,對應(yīng)得到如下的結(jié)果圖像(圖3b,d)。 利用Nios Ⅱ提供的時間戳(timestamp)功能,分別對完全C 語言軟件實現(xiàn)和自定義指令實現(xiàn)的過程進(jìn)行計時,并且輸出兩者所用的時鐘周期。 對于3×3 的卷積核需要調(diào)用三次自定義四點(diǎn)卷積指令。經(jīng)過測試,通過計時多次得到結(jié)果取平均值得到完全軟件實現(xiàn)所用時鐘周期為108397813,而自定義指令需要的時鐘周期為62150273。為純軟件實現(xiàn)的57.34%,速度提升了74.4%。 該自定義指令系統(tǒng),運(yùn)用VHDL 構(gòu)建了一個四個灰度像素點(diǎn)的卷積器,相比于以往的完全靠軟件實現(xiàn)圖像卷積,加快了卷積的過程。使速度加快70%以上,特別的現(xiàn)在對于圖像的卷積層數(shù)越來越深,用這種軟硬件結(jié)合的方式對于圖像的實時處理有積極的意義。2 SOPC自定義指令構(gòu)建
2.1 自定義指令部分的實現(xiàn)
2.2 自定義指令軟件調(diào)用
3 成果及運(yùn)用
3.1 功能實現(xiàn)
3.2 效率提升分析
4 結(jié)語