本發(fā)明涉及一種基于GPU與CPU混合數(shù)據(jù)處理的輸電線路部件識(shí)別方法。
背景技術(shù):
隨著我國(guó)國(guó)民經(jīng)濟(jì)的飛速發(fā)展和城市建設(shè)規(guī)模的日益擴(kuò)大,通過(guò)增架高壓、超高壓線路來(lái)滿(mǎn)足日益增強(qiáng)的電力能源需求。為保證整個(gè)電網(wǎng)的穩(wěn)定供電與安全運(yùn)行,要求對(duì)輸電線路進(jìn)行常規(guī)巡檢和特殊巡檢。人工巡檢通常依靠巡檢人員攜帶相關(guān)設(shè)備(望遠(yuǎn)鏡、紅外成像儀等)進(jìn)行觀察,無(wú)法全面的觀察輸電線路及設(shè)備的運(yùn)行狀態(tài),而且勞動(dòng)強(qiáng)度大。這種傳統(tǒng)巡檢模式已無(wú)法滿(mǎn)足現(xiàn)階段的巡檢需求,無(wú)人機(jī)作為一種新型、高效的巡檢模式被引入到日常巡檢工作中。無(wú)人機(jī)巡檢模式具有機(jī)動(dòng)性高、受地域環(huán)境限制小、維護(hù)費(fèi)用低等特點(diǎn),可以實(shí)現(xiàn)對(duì)輸電線路近距離的信息采集,獲取到的輸電線路狀態(tài)信息更為準(zhǔn)確。
現(xiàn)有無(wú)人機(jī)搭載的數(shù)據(jù)采集設(shè)備圖像分辨率較高(1500W像素及以上),而且對(duì)每基輸電線路桿塔采集幾十張甚至上百?gòu)垐D像,數(shù)據(jù)量較大。依靠人工對(duì)圖像進(jìn)行處理、識(shí)別圖像中的部件,勞動(dòng)量大而且由于操作人員經(jīng)驗(yàn)、熟練程度不同會(huì)造成識(shí)別不準(zhǔn)確與部分部件的漏識(shí)別,從而造成安全隱患。利用圖像處理的手段對(duì)圖像中部件進(jìn)行識(shí)別,可以大大的提高工作效率,而且采用統(tǒng)一的識(shí)別標(biāo)準(zhǔn)不會(huì)因?yàn)橹饔^因素造成識(shí)別誤差?,F(xiàn)有的處理方式采用基于CPU單獨(dú)處理數(shù)據(jù)的方式完成部件的識(shí)別任務(wù),但是在現(xiàn)在的巡檢中,每次巡檢獲取到的圖像數(shù)目多、數(shù)據(jù)量大,只用CPU進(jìn)行數(shù)據(jù)處理耗時(shí)較長(zhǎng),無(wú)法滿(mǎn)足現(xiàn)在巡檢的后期數(shù)據(jù)處理要求。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為了解決上述問(wèn)題,提出了一種基于GPU與CPU混合數(shù)據(jù)處理的輸電線路部件識(shí)別方法,本方法利用圖形處理器GPU處理簡(jiǎn)單、重復(fù)但是運(yùn)算次數(shù)較多的數(shù)據(jù)運(yùn)算步驟,利用CPU處理邏輯推理、數(shù)據(jù)分析等計(jì)算量小、控制復(fù)雜的數(shù)據(jù)處理步驟,利用CPU與GPU的特性進(jìn)行數(shù)據(jù)運(yùn)算上的互補(bǔ),提高整體的數(shù)據(jù)處理效率。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種基于GPU與CPU混合數(shù)據(jù)處理的輸電線路部件識(shí)別方法,包括以下步驟:
(1)根據(jù)輸入的圖像文件夾路徑,將該路徑下的圖像形成數(shù)據(jù)流文件,依據(jù)圖像數(shù)據(jù)大小開(kāi)辟圖像處理器的內(nèi)存空間;
(2)提取圖像的像素值,進(jìn)行中央處理器內(nèi)存與圖像處理器的內(nèi)存數(shù)據(jù)的交換;
(3)根據(jù)圖像原始數(shù)據(jù)大小及內(nèi)核數(shù)目,在保證填充滿(mǎn)每個(gè)線程內(nèi)存的基礎(chǔ)上向每個(gè)線程分配內(nèi)存,同時(shí)確保處理后數(shù)據(jù)與原始數(shù)據(jù)的對(duì)應(yīng)關(guān)系;
(4)利用prewitt算子提取圖像的邊緣特征,利用線程同步機(jī)制保持?jǐn)?shù)據(jù)的一致性;
(5)中央處理器根據(jù)圖像處理器計(jì)算得到的邊緣數(shù)據(jù),確定圖像中的桿塔或?qū)Ь€部件。
所述步驟(1)中,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,根據(jù)圖像所在文件路徑,形成數(shù)據(jù)流信息;根據(jù)這些信息在CPU上開(kāi)辟內(nèi)存空間將圖像讀入內(nèi)存中并提取圖像的灰度信息。
所述步驟(1)中,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,具體包括:
(1-1)形成圖像數(shù)據(jù)流:通過(guò)輸入的圖像文件夾路徑依次讀取路徑下的圖像數(shù)據(jù),并記錄圖像的基本信息形成數(shù)據(jù)流;
(1-2)讀取機(jī)載GPU版本信息以及此次處理是否使用GPU的標(biāo)識(shí)符的狀態(tài)信息。
所述步驟(1-1)中,記錄的圖像的基本信息包括:圖像的絕對(duì)路徑、圖像名稱(chēng)和圖像的長(zhǎng)寬尺寸。
所述步驟(1-2)中,GPU版本信息包括GPU型號(hào)、GPU內(nèi)存大小和GPU內(nèi)核數(shù)量。
所述步驟(3)中,根據(jù)GPU的內(nèi)核數(shù)量設(shè)計(jì)kernel函數(shù),GPU利用kernel函數(shù)使數(shù)據(jù)填充滿(mǎn)每個(gè)線程的內(nèi)存,對(duì)數(shù)據(jù)進(jìn)行預(yù)取,提前準(zhǔn)備GPU kernel所需要的數(shù)據(jù),在GPU kernel計(jì)算的同時(shí)在多管道中同時(shí)對(duì)數(shù)據(jù)進(jìn)行拷貝完成數(shù)據(jù)傳送。
所述步驟(3)中,利用同步鎖實(shí)現(xiàn)數(shù)據(jù)處理過(guò)程中的一致性。
所述步驟(4)中,利用八方向prewitt算子操作提取圖像的邊緣信息,同時(shí)利用數(shù)據(jù)同步機(jī)制確保邊緣提取后數(shù)據(jù)的一致性。
所述步驟(5)中,對(duì)于桿塔的識(shí)別過(guò)程包括:將圖像分割為多個(gè)圖像塊,分析每個(gè)圖像塊的邊緣信息,按照其傾斜類(lèi)型與角度對(duì)其進(jìn)行分組,設(shè)定邊緣數(shù)目閾值,根據(jù)邊緣的數(shù)目判斷圖像塊是否為桿塔,對(duì)是桿塔的圖像塊進(jìn)行標(biāo)記。
如果每個(gè)分塊中有多個(gè)角度的分組中都存在邊緣,則判斷為桿塔;如果只有一組角度的邊緣且邊緣數(shù)目小于3,則判為不是桿塔目標(biāo)。
所述步驟(5)中,對(duì)于導(dǎo)線的識(shí)別過(guò)程,具體包括:提取邊緣信息中的垂直和水平邊緣信息,計(jì)算每條邊緣的屬性,包括每條線段上下左右端點(diǎn)位置坐標(biāo)、線段的中心點(diǎn)坐標(biāo)和線段的長(zhǎng)度,設(shè)定直線融合角度閾值,根據(jù)每條線段的坐標(biāo)信息和中心坐標(biāo),當(dāng)相鄰的兩條邊緣的角度差值小于閾值時(shí),將兩條邊緣合并成一條邊緣,遍歷圖像中所有的邊緣完成邊緣的合并,分析合并邊緣的長(zhǎng)度、貫穿性與平行性特性,從而確定導(dǎo)線目標(biāo)。
本發(fā)明的有益效果為:
(1)本發(fā)明提出了優(yōu)化數(shù)據(jù)分配策略,根據(jù)圖像特點(diǎn)及GPU屬性信息,自動(dòng)的計(jì)算分塊數(shù)據(jù)的數(shù)目及分塊大小,根據(jù)分塊處理的特點(diǎn),弱化了數(shù)據(jù)間的關(guān)聯(lián)性,提高了并行計(jì)算的能力;
(2)本發(fā)明采用GPU與CPU的混合計(jì)算的模式,實(shí)現(xiàn)了輸電線路部件的快速識(shí)別。通過(guò)將簡(jiǎn)單、重復(fù)性計(jì)算移植到GPU模塊,CPU只負(fù)責(zé)處理邏輯推理、判斷的計(jì)算,充分發(fā)揮了CPU與GPU的性能優(yōu)勢(shì),提高了識(shí)別任務(wù)的執(zhí)行效率。
附圖說(shuō)明
圖1為本發(fā)明的流程示意圖;
圖2為本發(fā)明的桿塔識(shí)別流程示意圖;
圖3為本發(fā)明的導(dǎo)線識(shí)別流程示意圖;
圖4為本發(fā)明的GPU線程塊與線程的關(guān)系示意圖。
具體實(shí)施方式:
下面結(jié)合附圖與實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
一種基于GPU與CPU混合數(shù)據(jù)處理的輸電線路部件識(shí)別方法。利用GPU處理簡(jiǎn)單、重復(fù)但是運(yùn)算次數(shù)較多的數(shù)據(jù)運(yùn)算步驟,利用CPU處理邏輯推理、數(shù)據(jù)分析等計(jì)算量小、控制復(fù)雜的數(shù)據(jù)處理步驟,利用CPU與GPU的特性進(jìn)行數(shù)據(jù)運(yùn)算上的互補(bǔ),提高整體的數(shù)據(jù)處理效率。
如圖1所示,具體步驟包括:
(1)數(shù)據(jù)預(yù)處理。將文件路徑下的圖像形成數(shù)據(jù)流文件,判斷現(xiàn)有GPU是否滿(mǎn)足數(shù)據(jù)處理要求。
(2)數(shù)據(jù)管理。提取圖像像素值,并實(shí)現(xiàn)CPU內(nèi)存與GPU內(nèi)存數(shù)據(jù)的交換。
(3)數(shù)據(jù)分配。根據(jù)GPU的信息創(chuàng)建kernel序列,使數(shù)據(jù)填充滿(mǎn)每個(gè)線程的內(nèi)存。利用多通道數(shù)據(jù)傳輸技術(shù),實(shí)現(xiàn)GPU計(jì)算的同時(shí)完成數(shù)據(jù)的傳輸,并增加數(shù)據(jù)同步機(jī)制,確保數(shù)據(jù)的一致性。
(4)特征提取。利用優(yōu)化的prewitt算子提取圖像的邊緣特征,并使用同步技術(shù)保證數(shù)據(jù)的一致性。
(5)特征分析。通過(guò)分析GPU計(jì)算得到的邊緣數(shù)據(jù),確定圖像中的桿塔、導(dǎo)線部件。
所述步驟(1)的數(shù)據(jù)預(yù)處理包括:
(1)形成圖像數(shù)據(jù)流。通過(guò)輸入的圖像文件夾路徑依次讀取路徑下的圖像數(shù)據(jù),并記錄圖像的基本信息:圖像的絕對(duì)路徑、圖像名稱(chēng)、圖像的長(zhǎng)寬尺寸。
(2)獲取GPU信息及狀態(tài)信息。讀取機(jī)載GPU版本信息:GPU型號(hào)、GPU內(nèi)存大小、GPU內(nèi)核數(shù)量。狀態(tài)信息為此次處理是否使用GPU的標(biāo)識(shí)符。
數(shù)據(jù)預(yù)處理完成后,根據(jù)圖像數(shù)據(jù)流信息,將圖像讀入內(nèi)存中提取圖像的灰度值信息。根據(jù)NAVDIA推出的針對(duì)GPU的通用并行計(jì)算結(jié)構(gòu)CUDA(Compute Unified Device Architecture)語(yǔ)言的支持實(shí)現(xiàn)CPU存儲(chǔ)單元與GPU存儲(chǔ)單元間的數(shù)據(jù)交換,根據(jù)圖像大小開(kāi)辟GPU內(nèi)存空間,采用數(shù)據(jù)預(yù)取、多管道數(shù)據(jù)拷貝的方式,利用PCI-E總線實(shí)現(xiàn)數(shù)據(jù)的傳輸,減少數(shù)據(jù)交換時(shí)的開(kāi)銷(xiāo)。
步驟(3)數(shù)據(jù)分配,主要包括;
(1)數(shù)據(jù)分塊:根據(jù)GPU的內(nèi)核數(shù)量設(shè)計(jì)kernel函數(shù),主要包括GPU包含的線程塊數(shù)目,每個(gè)線程塊中包含的線程數(shù)目。在GPU運(yùn)算前,在CPU端為GPU的計(jì)算根據(jù)數(shù)據(jù)的大小提前開(kāi)辟GPU數(shù)據(jù)內(nèi)存空間,并進(jìn)行數(shù)據(jù)復(fù)制。根據(jù)圖像原始數(shù)據(jù)大小及內(nèi)核數(shù)目,在保證填充滿(mǎn)每個(gè)線程內(nèi)存的基礎(chǔ)上向每個(gè)線程分配內(nèi)存,該步驟在GPU中執(zhí)行完成。
線程塊與線程的二維層次結(jié)構(gòu)如圖4所示。
(2)數(shù)據(jù)傳輸:數(shù)據(jù)傳輸主要是多管道的數(shù)據(jù)拷貝。首先對(duì)數(shù)據(jù)進(jìn)行預(yù)取,提前準(zhǔn)備GPU kernel所需要的數(shù)據(jù),在GPU kernel計(jì)算的同時(shí)采用CUDA Stream的方式在多管道中同時(shí)對(duì)數(shù)據(jù)進(jìn)行拷貝完成數(shù)據(jù)傳送,從而減少數(shù)據(jù)拷貝的開(kāi)銷(xiāo)。
(3)數(shù)據(jù)同步:為了保證處理后數(shù)據(jù)與原始數(shù)據(jù)的對(duì)應(yīng)關(guān)系,利用同步鎖實(shí)現(xiàn)數(shù)據(jù)的一致性。該步驟在GPU中完成。
輸電線路是具有典型線性結(jié)構(gòu)的人造物體,通過(guò)邊緣特征算法來(lái)提取邊緣特征并根據(jù)不同部件的固有屬性進(jìn)行分析,從而完成部件的識(shí)別任務(wù)。目前,輸電線路典型設(shè)備主要包括:桿塔、導(dǎo)線及絕緣子三大類(lèi)以及其上的附屬設(shè)備等。為了在GPU上實(shí)現(xiàn)邊緣特征提取,主要包括以下步驟:
(1)邊緣提取prewitt算子。數(shù)據(jù)載入GPU模塊后,執(zhí)行prewitt算子操作提取圖像的邊緣信息。這里的八方向prewitt算子:水平方向、垂直方向及其余六個(gè)方向。其中prewitt算子為:
{1,1,1,1,-2,1,-1,-1,-1,
1,1,1,1,-2,-1,1,-1,-1,
1,1,-1,1,-2,-1,1,1,-1,
1,-1,-1,1,-2,-1,1,1,1,
-1,-1,-1,1,-2,1,1,1,1,
-1,-1,1,-1,-2,1,1,1,1,
-1,1,1,-1,-2,1,-1,1,1,
1,1,1,-1,-2,1,-1,-1,1};
(2)數(shù)據(jù)同步。在CUDA語(yǔ)言中提供了數(shù)據(jù)同步機(jī)制,使用函數(shù)cudaDeviceSynchronize完成數(shù)據(jù)的同步操作,確保邊緣提取后數(shù)據(jù)的一致性,避免因?yàn)閿?shù)據(jù)對(duì)齊問(wèn)題導(dǎo)致的數(shù)據(jù)尋址錯(cuò)誤。
步驟(5)在經(jīng)過(guò)GPU計(jì)算提取到圖像的邊緣特征后,需要通過(guò)計(jì)算邊緣位置關(guān)系、角度信息等信息,對(duì)邊緣特征進(jìn)行分析、組合從而確定輸電線路各部件的位置。因此本步驟在CPU端完成。主要包括:
(1)桿塔識(shí)別。首先根據(jù)圖像的尺寸,將圖像切割成4*3的圖像塊;第二:分析每個(gè)圖像塊中的邊緣信息,將邊緣分類(lèi)為4組:-5°~5°:水平線段;小于-85°或大于85°:垂直線段;5°~85°:斜上線段;-85°~-5°:斜下線段;第三:設(shè)定邊緣數(shù)目閾值,根據(jù)邊緣的數(shù)目判斷圖像塊是否為桿塔;最后,將屬于桿塔的圖像塊邊緣標(biāo)記為紅色,從而完成桿塔目標(biāo)的識(shí)別。具體流程如圖2所示。
(2)導(dǎo)線識(shí)別。首先,提取邊緣信息中的垂直和水平邊緣信息;第二,計(jì)算每條邊緣的屬性,包括每條線段上下左右端點(diǎn)位置坐標(biāo)、線段的中心點(diǎn)坐標(biāo)、線段的長(zhǎng)度;第三,設(shè)定直線融合角度閾值,根據(jù)每條線段的坐標(biāo)信息和中心坐標(biāo),當(dāng)相鄰的兩條邊緣的角度差值小于閾值時(shí),將兩條邊緣合并成一條邊緣;最后,遍歷圖像中所有的邊緣完成邊緣的合并。導(dǎo)線通常在無(wú)人拍攝的圖像中呈現(xiàn)平行、貫穿圖像的特性,通過(guò)分析合并邊緣的平行性、貫穿性的特點(diǎn)從而確定導(dǎo)線目標(biāo)。具體流程如圖3所示。
GPU線程塊與線程的關(guān)系如圖4所示,根據(jù)數(shù)據(jù)的大小,創(chuàng)建線程塊,并設(shè)定線程塊中包含的數(shù)目,每個(gè)線程處理一個(gè)數(shù)據(jù),從而實(shí)現(xiàn)了并行運(yùn)算。
上述雖然結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行了描述,但并非對(duì)本發(fā)明保護(hù)范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動(dòng)即可做出的各種修改或變形仍在本發(fā)明的保護(hù)范圍以?xún)?nèi)。