摘 要:傳統(tǒng)邊緣檢測(cè)算子采用逐行求梯度的方法順序進(jìn)行,遇到圖像尺寸大或計(jì)算速度高效時(shí),較難勝任這類計(jì)算密集度高的需求。文章從并行化角度對(duì)Scharr算子進(jìn)行設(shè)計(jì),采用CUDA語言對(duì)二維數(shù)據(jù)并行計(jì)算上進(jìn)行算法優(yōu)化,提出了多線程塊偏移計(jì)算的設(shè)計(jì)思路,同時(shí)采取流處理的方式縮短傳輸開銷。實(shí)驗(yàn)結(jié)果表明,與傳統(tǒng)Scharr算子相比,在7 000×7 000尺寸圖像識(shí)別上呈現(xiàn)了高效的識(shí)別速度,加速比提高了300倍左右,有較高的應(yīng)用價(jià)值。
關(guān)鍵詞:邊緣檢測(cè);Scharr算子;并行計(jì)算
中圖分類號(hào):TP391.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2024)16-0044-05
Research on Parallelization of Scharr Operators Based on CUDA
Abstract: Traditional edge detection operators use the method of seeking gradients row by row in order, which makes it difficult to meet the high computational density requirements of large image sizes or high computational speed. This paper designs the Scharr operator from the perspective of parallelization, optimizes the algorithm on two-dimensional data parallel computing using CUDA language, proposes a design idea for multithreaded block offset calculation, and adopts stream processing to reduce transmission overhead. Experiment results show that compared with the traditional Scharr operator, it exhibits efficient recognition speed in image recognition of sizes on 7 000×7 000, with an acceleration ratio increased by about 300 times, and has high application value.
Keywords: edge detection; Scharr operator; parallel computing
0 引 言
目前,人工智能的普及應(yīng)用和發(fā)展成為技術(shù)領(lǐng)域的研究熱點(diǎn),基于Opencv庫的使用和機(jī)器視覺技術(shù)的運(yùn)用使得圖像識(shí)別領(lǐng)域有廣闊的研究空間。其中針對(duì)卷積層的卷積核來說,邊緣檢測(cè)算子就是其中對(duì)圖像起到濾波信息提取作用,而圖像特征提取是否充分影響后續(xù)識(shí)別精度,因此對(duì)邊緣檢測(cè)卷積算子的研究有利于提高對(duì)圖像邊緣信息特征的識(shí)別。
傳統(tǒng)針對(duì)圖像邊緣檢測(cè)算子有Canny[1-3]、Sobel[4-6]等一階邊緣算子,二階邊緣算子如拉普拉斯算子[7]、高斯拉普拉斯算子和高斯差分算子等。李浩誼等人基于改進(jìn)的Scharr算法的海上艦船圖像邊緣檢測(cè)[8],在傳統(tǒng)Scharr的基礎(chǔ)上對(duì)算子在方向進(jìn)行改進(jìn),增加了0°、45°、90°和135°四個(gè)方向,提高了算子檢測(cè)的完整程度。李浩誼等學(xué)者采用多方向Scharr的齒輪邊緣檢測(cè)與中心定位方法[9],增加到8個(gè)方向,用5×5算子模板進(jìn)行檢測(cè),最終減小了噪聲的影響。蔣潔琦等學(xué)者對(duì)表面弱邊緣瑕疵檢測(cè)算法及應(yīng)用[10],結(jié)合力形態(tài)學(xué)開閉濾波,達(dá)到增強(qiáng)弱邊緣的效果。林麗等學(xué)者提出了一種具有抗噪聲能力的圖像清晰度評(píng)價(jià)函數(shù)[11],增加到4個(gè)方向進(jìn)行梯度檢測(cè),減小算法計(jì)算量同時(shí)提高了精度,獲得理想的效果。
隨著顯卡的普遍應(yīng)用,計(jì)算能力得到飛速提高大部分得益于顯卡加速,在復(fù)雜計(jì)算中,針對(duì)算法中可并行的重復(fù)計(jì)算子過程考慮采用CUDA語言或Opencl等語言對(duì)CPU代碼進(jìn)行重新程序設(shè)計(jì)。以實(shí)現(xiàn)在高密集度計(jì)算上得到提升。如趙志建等學(xué)者提出了基于CUDA并行優(yōu)化的矩陣相乘算法研究[12],有效提升了吞吐量,利用了共享內(nèi)存的資源。采用共享內(nèi)存可以降低延遲。本文采用CUDA框架優(yōu)化Scharr算子從而提升性能。
1 Scharr算子介紹
該算子是在Sobel算子的基礎(chǔ)上做了改進(jìn),實(shí)現(xiàn)了差異性的增強(qiáng),因此二者的濾波原理是一樣的。采用3×3卷積核對(duì)圖像每個(gè)像素點(diǎn)進(jìn)行運(yùn)算,通過算子上權(quán)值來實(shí)現(xiàn)凸顯像素之間的差異化。下面介紹x方向上的一階Scharr模板。
y方向上一階算子模板如下:
圖像任意區(qū)域矩陣表示如下:
求梯度過程如下:
計(jì)算總梯度:
求閾值,總體上求出全像素圖像上平均閾值作為判定像素是否為邊界點(diǎn):
其中?x、?y分別為水平和垂直兩個(gè)方向灰度值的落差,e為圖像全局范圍內(nèi)的最大落差。
2 Scharr算子計(jì)算流程
Scharr算子計(jì)算過程如:
1)對(duì)算子賦初值。
2)對(duì)原始的灰度圖像外圍添加一圈0,作為padding的填充,主要是考慮到作為3×3的卷紙算子來說,大部分處理集中在算子中心區(qū)域,對(duì)于圖像邊緣一圈的計(jì)算相對(duì)少,故而添加一圈padding填充,增大了卷積核的感受視野。
3)求取閾值T,從兩個(gè)方向進(jìn)行,如從x方向和y方向進(jìn)行求取,求取過程以x方向?yàn)槔貉刂椒较蛑鹦袑?duì)相鄰兩個(gè)像素灰度值進(jìn)比較,經(jīng)過一輪比較即可比較出max差值和min差值,同時(shí)需要注意到雖然圖像是二維呈現(xiàn)的,在循環(huán)便利中需要進(jìn)行跨越一行偏移。
4)進(jìn)行算子求梯度運(yùn)算,由于數(shù)據(jù)是二維呈現(xiàn)的,在進(jìn)行跨行偏移時(shí),在局部范圍內(nèi)增設(shè)小循環(huán)窗口,如i,j窗口步長為3,即可獲取到(x,y)當(dāng)前位置的鄰域范圍內(nèi)的3×3區(qū)域。
CPU偽代碼如下:
3 使用CUDA設(shè)計(jì)
對(duì)CPU程序的并行設(shè)計(jì)流程如圖1所示。
從流程,體現(xiàn)了CUDA并行程序設(shè)計(jì)的總體思路,考慮到充分利用數(shù)據(jù)的總線傳送時(shí)間,采用常用的CUDA流技術(shù),充分利用了傳送數(shù)據(jù)時(shí)間,在傳輸數(shù)據(jù)的同時(shí),開始了共享內(nèi)存中計(jì)算任務(wù)。
主要尋求計(jì)算過程中,批量簡單的操作進(jìn)行改進(jìn),同時(shí)還要結(jié)合CPU-GPU數(shù)據(jù)傳輸開銷綜合設(shè)計(jì),避免過多邏輯判斷的原則。這都基于GPU硬件體系結(jié)構(gòu)而決定,如圖2所示
在CUDA體系結(jié)構(gòu)中,一個(gè)Grid計(jì)算單元含有多個(gè)計(jì)算塊block,每個(gè)計(jì)算塊block。如示例中有6個(gè)block塊,每個(gè)塊含有4個(gè)thread線程。
訪問如下:
下面從內(nèi)存布局角度分析如圖3所示。
由于共享內(nèi)存的容量空間是有限的,需要對(duì)共享內(nèi)存的數(shù)據(jù)做初始化,初始化之后可以讓更多的線程同步__syncthreads()。
4 算法并行化設(shè)計(jì)
近年來顯卡普遍運(yùn)用到人工智能的各個(gè)領(lǐng)域中,與GPU有著并行計(jì)算單元,更適合處理計(jì)算邏輯少,大量并行計(jì)算任務(wù),而CPU更適合于多任務(wù)進(jìn)程計(jì)算,邏輯控制單元豐富,對(duì)于復(fù)雜的邏輯控制,更擅長。CUDA編程中CPU-GPU之間送數(shù)據(jù)也會(huì)占用大量的時(shí)間,如何處理好傳送數(shù)據(jù)時(shí)間與核函數(shù)的計(jì)算時(shí)間是提升加速性能的關(guān)鍵,計(jì)算單元內(nèi)部利用共享內(nèi)存提高單元性能。
本文對(duì)CPU代碼中兩個(gè)部分進(jìn)行流程改寫,進(jìn)行并行程序設(shè)計(jì),偽代碼如下:
5 并行開銷
當(dāng)圖像較小時(shí),雖然采用流式切片方式傳送數(shù)據(jù),但數(shù)據(jù)尺寸小,浪費(fèi)在主板上時(shí)間會(huì)比單純CPU代碼耗時(shí)久。例如圖像尺寸在500×500時(shí),傳輸耗時(shí)較大,隨著圖像尺寸逐漸增大,計(jì)算與傳輸耗時(shí)相比,優(yōu)勢(shì)明顯,獲得速度提升。如表1所示。
從表1可以看出,小尺寸上計(jì)算耗時(shí)很小,大部分時(shí)間浪費(fèi)在主板數(shù)據(jù)傳輸上,在大尺寸上,傳輸耗時(shí)也很大,主要在對(duì)原圖進(jìn)行水平切片,按切片進(jìn)行傳送子圖,但計(jì)算耗時(shí)不大。示意圖如圖4所示。
6 實(shí)驗(yàn)分析
CP78ffb23fa79fe510a5e7dc295d40e7aef00989c877145c18fdc4c0f2eac7382fU配置如下:Intel Xeon CPU E5-2620,32 GB RAM。
GPU配置如下:全局內(nèi)存8 GB,每block最多含1 024個(gè)線程,CUDA處理核3 840個(gè)。
為了測(cè)試不同尺寸的數(shù)據(jù),采用OpenCV對(duì)原圖進(jìn)行尺寸放大,最大到7 000×7 000,測(cè)試加速比如表2所示。
從表2可見在小尺寸上加速不明顯,由于傳送耗時(shí)和資源加載開銷,導(dǎo)致總體加速比并不理想,在大尺寸上表現(xiàn)較好,充分利用了流與計(jì)算單元荷載。
7 實(shí)驗(yàn)效果
如圖5所示,Scharr過濾結(jié)果能夠清晰分辨出紋理走向,相比Sobel體現(xiàn)出來了檢測(cè)點(diǎn)附近的權(quán)重值較大,從而中心點(diǎn)鄰域點(diǎn)對(duì)最終處理起到了增強(qiáng)的效果。Scharr過濾算子對(duì)于邊緣模糊的情況很適合使用。
8 結(jié) 論
本文采用CUDA對(duì)傳統(tǒng)的CPU程序進(jìn)行設(shè)計(jì)優(yōu)化,提出了基于CUDA的Scharr檢測(cè)研究。研究從分析Scharr程序開始著手,通過切片法,將整個(gè)圖切成不同的子圖流式發(fā)給GPU,對(duì)于小尺寸來講加速比并不理想,主要是時(shí)間耗費(fèi)在資源初始化開銷方面上。對(duì)于大尺寸圖像來說,由于采取了分片流式并行計(jì)算,充分利用了流在同一時(shí)間傳輸和計(jì)算同時(shí)進(jìn)行的優(yōu)勢(shì),充分利用了GPU線程資源,同時(shí)也還原了Scharr算法。今后考慮在融合多方向模板去進(jìn)一步優(yōu)化Scharr算子本身,在算法精度提高方面進(jìn)一步研究。
參考文獻(xiàn):
[1] 李平陽,孫志毅.一種提升Canny算子的自適應(yīng)邊緣檢測(cè)方法 [J].太原科技大學(xué)學(xué)報(bào),2013(3):171-174.
[2] 馬新星,徐健,張健.一種基于自適應(yīng)Canny算子的艦船紅外圖像邊緣檢測(cè)方法 [J].紅外,2013(7):25-30.
[3] 汪宗洋,王煜,朱碩.基于改進(jìn)Canny算法的邊緣檢測(cè)技術(shù)應(yīng)用及發(fā)展趨勢(shì) [J].信息通信技術(shù)與政策,2023(8):90-96.
[4] RAKESH R,VINAY A. Edge Detection Using Guided Sobel Image Filtering [J].Wireless Personal Communications,2023,132(1):651-677.
[5] 樸思儒,李彬,張赫,等.基于多方向擴(kuò)展Sobel加權(quán)算法的合作目標(biāo)檢焦方法研究 [J].機(jī)電工程術(shù),2023(5):131-134.
[6] 薛文格,鄺天福.基于Sobel算子和灰色關(guān)聯(lián)分析的圖像邊緣檢測(cè) [J].楚雄師范學(xué)院學(xué)報(bào),2023(3):135-140.
[7] LUIS J P D,REYES E G. Analysis of a fire Extinguishing Model with a p-Laplacian Operator and with Non-Linear Advection and Reaction [J/OL].Physica Scripta,2023,98(8)[2024-01-09].https://iopscience.iop.org/article/10.1088/1402-4896/ace08c.
[8] 李浩誼,馬春庭.基于改進(jìn)的Scharr算法的海上艦船圖像邊緣檢測(cè) [J].艦船電子工程,2019(3):103-106.
[9] 李浩誼,馬春庭,唐秀媛.多方向Scharr的齒輪邊緣檢測(cè)與中心定位 [J].工具技術(shù),2019(2):130-133.
[10] 蔣潔琦,楊庚,劉沛東,等.表面弱邊緣瑕疵檢測(cè)算法及應(yīng)用 [J].計(jì)算機(jī)技術(shù)與發(fā)展,2019(5):142-147.
[11] 林麗,李詩云,陳健.一種具有抗噪聲能力的圖像清晰度評(píng)價(jià)函數(shù) [J].重慶郵電大學(xué)學(xué)報(bào):自然科學(xué)版,2022(2):223-233.
[12] 趙志建.基于CUDA并行優(yōu)化的矩陣相乘算法研究 [J].智能計(jì)算機(jī)與應(yīng)用,2022(11):192-196.