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