米向榮 曹建芳 史昊



摘要:大數據技術已經成為當下熱點問題,Hadoop技術在煤礦領域運用也引起了廣泛關注。針對傳統監控模式下煤礦視頻監控系統圖像采集點多、歷史留存數據量大、不利于后續查找特征圖像等問題,提出一種Hadoop平臺下PCA-SIFT算子的圖像特征提取算法,研究并改進了MapReduce并行編程模型的任務設計,對傳統尺度不變特征轉換算法進行了并行化設計,在Hadoop集群下實現了海量煤礦圖像的PCA?SIFT并行特征提取。使用汾西礦務局煤礦圖像井下數據集進行實驗,算法SIFT特征點檢測效果好,運行耗時少。在圖像數量龐大時,系統加速比幾乎呈線性增長趨勢,驗證了算法處理大規模煤礦圖像數據的有效性。
關鍵詞:SIFT算子;尺度不變特征;Hadoop平臺;MapReduce并行編程模型
PCA?SIFT Feature Extraction Algorithm of Coal Mine Image in Hadoop Platform
MI Xiang?rong?CAO Jian?fang?SHI Hao?2
(1.Computer Department, Xinzhou Teachers University, Xinzhou 034000, China;
2.College of Computer Science and Technology, Taiyuan University of Science and Technology, Taiyuan 030024, China)
Abstract:Large data technology has become a hot issue at present, and Hadoop technology has also attracted widespread attention in the field of coal mining. Aiming at multiple the image acquisition points of traditional video monitoring system of coal mine monitoring mode and?the huge historical data which are not conducive to the subsequent search features of images and other issues, this paper presents an image feature of a Hadoop platform for the optimization of SIFT operator algorithm. We studied and improved design of MapReduce parallel programming model and?the traditional scale invariant feature conversion algorithm for parallel design in the Hadoop cluster and implemented parallel SIFT image feature extraction of massive coal mine. By using the Pascal VOC2012 data set for experiment, the effect of the SIFT feature point detection algorithm is proposed and the operation is less time?consuming. When dealing with?a large number of images, the system speedup is almost linearly, which verifies the validity of data processing algorithm of large?scale coal mine image.
Key Words:SIFT operator; scale invariant feature; hadoop platform; MapReduce parallel programming model
0?引言
煤炭資源一直是我國較為豐富的資源,煤礦產業也是我國發達產業,但由于特殊地理環境,井下事故時有發生,嚴重影響安全生產。為了實現安全生產,多數礦區安裝井下監控系統實現對井下視頻信號的監控,產生大量監控數據,為大數據應用于煤礦奠定了基礎[1?2]。通過對多機位煤礦場景圖像提取目標特征,可以實時觀測、及時匹配井下運動目標,同時針對井下機位角度有限等問題,可根據匹配特征點建立投影模型實現拼接[4]。
近年來,目標特征提取技術一直都是國內外學者研究的熱點。Morioka等[5]提出了使用顏色直方圖作為區域特征,Mittal等[6]通過使用高斯顏色模型解決了多個攝像機之間的匹配問題。然而顏色特征易受光線強度和視角變化影響,加上煤礦井下工人制服顏色近似,易產生誤匹配。煤礦井下光線差、粉塵多、噪聲大,環境復雜,使得煤礦井下圖像特征匹配難度較大[7]。SUSAN[8]、MIC[9]等角點檢測算子雖具有一定程度的不變性,但由于關鍵點只集中在某些區域,信息量單一,不適合煤礦井下環境[10]。David [11]于 2004 年提出了基于尺度不變特征變換(Scale?Invariant Feature Transform,SIFT) 的特征提取算法,對于不同場景、光照、幾何形狀變換都具有較強穩定性,提高了匹配精確度。因此,相對于其它圖像局部特征提取算法,SIFT更適用于煤礦領域[11?12]。賈世杰等[13]對SIFT算法在圖像尺度、視角變化、目標遮擋、噪聲影響等方面的魯棒性進行了驗證;厲丹等[14]將SIFT算法應用于煤礦目標,匹配準確率高于其它算法;梁玉等[15]采用RANSAC隨機抽樣一致性優化的SIFT算法解決誤匹配問題;姜代紅等[16]將SIFT特征點提取算法中多尺度理論和特征點描述符引入傳統Harris算法。然而,SIFT算法本身仍然存在一些不足,比如特征描述符的維數過大、耗時過長,而且隨著煤礦監控系統的逐步完善,煤礦場景圖像數據集越來越龐大,SIFT算法在處理海量煤礦領域場景圖像時問題更加明顯。
本文針對大數據量下SIFT計算量急劇增大、時間性能驟然下降問題,提出一種新的基于Hadoop平臺的融合PCA(Principal Component Analysis)降維SIFT算法[17?18]。該方法將原始 SIFT 特征提取算法與主成分分析法(PCA)融入,既不改變算法的穩定性,又降低了SIFT特征向量的維數。通過改進OpenCV函數庫中SIFT算法規范MapReduce代碼框架,利用Hadoop平臺MapReduce并行編程模型實現了在集群環境下并行PCA?SIFT算法,對煤礦領域場景圖像局部特征提取任務進行并行處理,將其結果與傳統SIFT算法對比。將Haddop平臺下不同數量圖片的運行時間和加速比進行比較,大大加快了對海量煤礦領域圖像局部特征提取的速度,對優化煤礦監控視頻提取目標特征有積極意義。
1?PCA?SIFT特征提取算法
1.1?SIFT算法原理
SIFT即尺度不變特征變換算法,是一種利用尺度空間性質提出的局部特征檢測方法,利用圖像關鍵點的SIFT特征向量進行匹配,提取出的特征點具有尺度和旋轉不變性等特點,因此對視角變化、仿射變換及噪聲變化具有較好魯棒性。傳統SIFT算法通過分步處理對圖像局部特征進行提取,主要包括以下步驟[11]:
(1)生成不同尺度空間,檢測極值點。高斯核是唯一一個能夠實現尺度變換的變換核,通過高斯微分函數與圖像卷積,識別潛在特征點。
其中,?σ?0是基準層尺度,o?為組Octave的索引,?s?為組里圖像的層索引。
(2)刪去一些無效點和關鍵點定位。抹掉低對比度點,在每個可能候選位置上,通過一個擬合精細的模型確定關鍵點位置和尺度。關鍵點的精確定位需要對尺度空間DoG函數進行曲線擬合。利用DoG函數在尺度空間的Taylor展開式(擬合函數)為:
其中,?X=(x,y,σ)?T。求導并令方程等于0,可以得到極值點的偏移量為:
對應極值點,方程取值為:
其中,?=(x,y,σ)?T代表相對插值中心的偏移量,當它在任一維度上大于0.5時(即?x或y或σ?),意味著插值中心已經偏移到其鄰近點上,所以必須改變當前關鍵點位置。
(3)提取關鍵點方向,保證旋轉不變性。根據圖像局部梯度方向,算法自動分配給每個關鍵點位置一個或多個方向。
(4)關鍵點描述。按照以上步驟,考慮到每一個關鍵點有3個信息:位置、尺度以及方向,接下來為每個關鍵點建立一個描述符,用一組向量將該關鍵點描述出來,使其不隨各種變化而改變,比如光照變化、視角變化等。該描述子不但包括關鍵點,也包含關鍵點周圍對其有貢獻的像素點,并且描述較有獨特性,以提高特征點正確匹配的概率。
1.2?PCA?SIFT降維
主成分分析算法即PCA是最常用的線性降維方法,用于降低數據復雜性,識別最重要的多個特征。它將高維數據映射到低維空間中表示,以此使用較少數據維度,而且數據在較少維度上的方差最大。這是原始數據信息丟失最少的一種線性降維方式。
PCA?SIFT壓縮了SIFT描述子數據。首先收集數據所有特征,通過變換數據,觀察數據的重要成分并進行分類以減少數據。如想表達某一種物體,而物體有很多個屬性,通過變換數據,可以觀察到每個屬性的重要性,從而選擇幾種重要屬性描述該物體,就起到了壓縮數據的作用。具體步驟如下:
(1)構建描述子區域選定為以特征點為中心的41×41矩形(已與特征點主方向對齊)。
(2)由于最外層像素不計算偏導數,計算39×39矩陣每個像素水平、垂直方向的偏導數,得到一個39×39×2=3 042維的向量,并將其歸一化。
(3)假設有N個特征點,則所有特征點描述子向量構成一個N×3 024的矩陣,然后計算N個向量的協方差矩陣。
(4)計算N×N協方差矩陣前m個最大特征值對應的特征向量,該 m個向量組成一個3 042×m的投影矩陣。
(5)將N×3 024描述子矩陣與3 024×m投影矩陣相乘,得到降維描述子向量組成的N×m矩陣。此時N個特征點的描述子向量均為m維,也就將數據轉換到上述m個特征向量構建的新空間中了。
2?海量煤礦場景圖像特征提取PCA?SIFT算法并行化
2.1?Hadoop平臺
Hadoop是一個能夠對大規模數據進行分布式處理的軟件框架, 以一種可靠、高效、可伸縮方式進行數據處理[19]。HDFS(Hadoop Distributed File System)和MapReduce 是Hadoop框架最核心的兩個設計,前者為海量數據提供存儲,而海量數據計算由后者提供 。HDFS是一種在通用硬件上運行的分布式文件系統,采用主/從模式體系結構,提供了高吞吐量數據訪問,很適合大規模數據集的應用。MapReduce是一種并行編程模型且用于大規模數據集的并行運算[20]。它能夠將計算任務和數據分配到Hadoop集群的各個節點,由各節點并行執行任務得到中間結果,然后進行匯總并再次向各節點分配計算,以獲得最終結果。MapReduce的Map函數和Reduce函數定義了任務本身,交給用戶實現,通過定義mapper()和reducer()函數實現一個鍵值對到另一個鍵值對的映射,其處理流程如圖1所示。
2.2?總體框架
Hadoop平臺上SIFT算法煤礦圖像特征提取過程如圖2所示。系統架構共3層。
(1)表現層。使用者通過網絡接受服務,提交煤礦圖像或接收檢測結果。
(2)業務邏輯層。Web服務器根據使用者的請求執行對應業務處理。
(3)數據處理層。其是整個系統的核心部分,主要進行海量煤礦圖像的存儲和管理,負責并行PCA—SIFT特征提取、輸出結果等。使用者將煤礦圖像數據通過網絡提交給Hadoop分布式系統,經過MapReduce計算模型進行算法優化和特征提取,最后輸出結果。
本文對MapReduce框架的處理模型進行了改進,將Reduce任務數設置為0,全程通過mapper()函數完成所有處理任務,Map階段結束后直接將實驗結果輸出。避免Reduce任務處理需大量時間,減少Map任務與Reduce任務中間操作消耗時間,使得集群節點之間傳輸數據的時間消耗降低,提高時間性能。
具體步驟如下:①將海量煤礦圖像庫中的圖像處理成Hadoop作業的輸入格式SequenceFile;②Map 任務按照Hadoop默認的切片大小(128M Byte)對圖像文件進行分片,每個分片包含多個圖像文件;③以<圖像文件名,圖像源文件>鍵值對形式,利用MapReduce框架對圖像的PCA?SIFT特征并行提取;④最后生成<圖像文件名,圖像PCA?SIFT特征>形式的鍵值對,寫入Hadoop平臺的分布式文件系統HDFS中。
2.3?算法設計與實現
OpenCV提供大量Java接口,實現了圖像處理和計算機視覺方面的很多算法。因此,實驗使用OpenCV函數庫,對其中SIFT算法進行改進,在Hadoop平臺下用Java語言編程,實現基于并行PCA?SIFT的煤礦場景圖像特征提取算法。
2.3.1?圖像數據類型定義
由于Hadoop本身沒有定義與圖像相關的類,作為鍵值對<key, value>的數據類型,而Hadoop規定用戶自定義類型只有通過實現Writable接口才能使用。因此,本文自定義了數據類型RawImage,重寫了Hadoop中Writable定義的基本輸入輸出方法。與其它類型不同,該類型在實現圖像讀取、存儲等基礎功能時,增加了將圖像轉換為單通道或者三通道的Mat類型以及將Mat類型編碼為圖像文件的功能,使其與OpenCV結合更加方便。
2.3.2?作業輸入/輸出格式設計
在Hadoop平臺下,一張圖像若被分片進行分布式存儲并處理,則會破壞像素信息。因此,本文將整張圖像作為鍵值對中的value值進行處理。
(1)圖像文件輸入格式類定義。本文采用Hadoop內置的SequenceFileInputFormat輸入格式,它以SequenceFile文件作為輸入,把大的SequencFile文件切成分片,交給Map任務處理,而一個分片里包含多條記錄,每一條記錄就是一張圖像,key為圖像文件名,value為其值,很好地解決了由于小文件太多導致啟動Map任務數量過多的問題。
(2)圖像文件輸出格式類定義。FileOutputFormat類主要用于描述輸出數據格式,本文設計了ImageOutputFormat類,繼承自FileOutputFormat實現,用于將用戶提供的<key, value>對寫入特定格式文件中。ImageRecordWriter類繼承自RecordWriter<Text, RawImage>類的實現,將圖像文件名作為鍵名、RawImage類型的實例作為值存入HDFS文件系統中。
2.3.3?mapper()函數設計與實現
mapper()函數的主要功能包括讀取圖像、處理圖像、轉換數據等操作。實現偽代碼如下:
Mat mat = Highgui.imread(files[i].toString());
Mat SIFTMat=new Mat();
FeatureDetector fd = FeatureDetector.create(FeatureDetector.
SIFT);
MatOfKeyPoint mkp =new MatOfKeyPoint();
fd.detect(mat, mkp);
//Features2d.drawKeypoints(mat, mkp, SIFTMat);
DescriptorExtractor de = DescriptorExtractor.create(Descri
ptorExtractor. SIFT);
de.compute(mat,mkp,SIFTMat );//提取SIFT特征
2.3.4?圖像特征提取結果輸出
由于Hadoop默認輸出文件名是name?r(m)?nnnnn形式,其中name是由用戶設定的名字,r表示reduce輸出,m表示map輸出,nnnnn是一個指明塊號的整數。但為了便于后續方便處理和顯示圖像,能夠使輸出文件以文件名.jpg的形式輸出,本文重寫了FileOutputFormat類的getDefaultWorkFile()方法,實現偽代碼如下:
getDefaultWorkFile(TaskAttemptContext
context,String extension) throws IOException{
FileOutputCommitter committer =
(FileOutputCommitter) getOutputCommitter(context);
return new Path(committer.getWorkPath(),
getUniqueFile(context,getOutputName(context),extension));
}?//獲得一個任務提交器
本文使用hadoop中的 MultipleOutputs多文件輸出格式,將每個圖像的文件名作為key值,圖像文件作為Value值以一條記錄的方式寫入文件系統。實現偽代碼如下:
ImageRecordWriter extends RecordWriter<Text, RawImage>
{
write(Text fileName, RawImage img)
{
FSDataOutputStream out = fs.create(outputPath);
out.write(img.getRawData());
}
//把圖像寫入到輸出路徑,且文件名為圖像原文件名
}
2.3.5?PCA?SIFT并行化降維
單幅煤礦場景圖像每個SIFT特征點有128維,海量圖像數據集維度過于龐大,而PCA可以在盡可能保留原始數據信息的情況下,把可能具有相關性的高維變量合成線性無關的低維變量。偽代碼如下:
//用pca降維
Mat mean = new Mat();
Mat vectors = new Mat();
Mat result=new Mat();
Mat SIFTMat_r=new?Mat();
Core.normalize(SIFTMat, SIFTMat_r,-1.0, 1.0, Core.NORM_MINMAX);
Core.PCACompute(SIFTMat_r, mean, vectors,64);
Core.PCAProject(SIFTMat_r, mean, vectors, result);
//第二輪降維
Mat mean_2 = new Mat();
Mat vectors_2 = new Mat();
Mat result_2=new Mat();
Core.PCACompute(result.t(), mean_2, vectors_2,64);
Core.PCAProject(result.t(), mean_2, mean_2, result_2);
3?實驗結果及分析
3.1?實驗環境與數據來源
本文采用6臺計算機搭建Hadoop集群,1臺為Master節點,其余5臺為Slave節點。所有節點計算機硬件配置:酷睿i7四核八線程4.2G處理器,8G內存,4T硬盤;軟件配置:操作系統為64位Ubuntu 14.04,Java環境為jdk1.7.0_79,Hadoop為Hadoop?2.5.1(64位編譯)版本。
本文使用的實驗數據來源于汾西礦務局煤礦圖像井下數據集,涉及人物、開采工具、井下隧道場景等多種類別。數據集共包含2萬張圖像、14個類別,為驗證提出算法在處理海量圖像時的性能,本文采用復制方法構建了海量圖像庫。
3.2?煤礦圖像SIFT特征點檢測效果
為了驗證SIFT特征點檢測效果,本文對傳統SIFT算子與提出的算法在汾西礦務局煤礦圖像井下數據集進行實驗對比,圖3 是部分圖像的PCA?SIFT特征檢測效果。
從圖3結果可清晰看到,相對于傳統SIFT算法的特征提取效果,并行PCA?SIFT算法特征提取效果更加明顯。并行PCA?SIFT所獲取的描述子在旋轉、尺度變換、透視變換、添加噪聲匹配和亮度變換等條件下,匹配均大幅領先于SIFT。雖然提取特征點沒有傳統SIFT多,但所得正確特征點遠遠多于傳統SIFT。由此可見,并行PCA?SIFT生成的描述子質量很高。并行PCA?SIFT在特征點提取、描述子計算中運行時間稍少于SIFT,速度稍快,但在隨后描述子匹配過程中,運行時間遠遠低于SIFT算法,速度遠遠超過SIFT算法。
3.2.2?運行時間
為進一步驗證并行化算法的時間性能,同時為了公平比較,本文采用復制方法構建不同數量級規模的數據集,對單一節點和多節點算法的運行耗時進行了實驗比較,結果如圖4所示。
圖4結果表明,在圖像數量小于8 000時,節點數目不同對煤礦圖像SIFT特征提取的運行耗時影響不是很明顯。多節點集群架構運行耗時有時可能會比單節點計算機處理時間長,原因是多節點架構在處理小量圖像數據集時增加了節點計算機之間的通信聯系開銷,而煤礦場景圖像數量急劇增大時,多節點架構的Hadoop集群計算機系統優勢就慢慢體現出來。雖然不同節點情況下,算法運行時間均會隨煤礦場景圖像數量增加而增加,但單一節點計算機運行耗時線性增長,而多節點集群架構的計算機系統運行耗時增加比較平緩,并且隨著節點計算機數量愈多,所需處理的運行時間曲線上升愈平緩。因此,本實驗充分證明了Hadoop集群架構在處理海量圖像數據時的優越性。
3.3?加速比
加速比是指同一任務在單節點環境下與多節點環境下運行時間的比值,是衡量Hadoop平臺下并行算法效率的一個重要指標[21]。為驗證算法在Hadoop平臺下的性能,本文從汾西礦務局煤礦圖像井下數據集上復制并構建了包含8 000、20 000、60 000張不同類別圖像的3個數據集,進行加速比測試,結果如圖5所示。
理想狀態下,系統加速比應隨著節點計算機增加而呈線性增長,但由于受通信開銷、負載平衡影響,實際上加速比并不能呈線性增長。從圖5可以看到,在圖像數量不多時,系統的加速比隨著節點計算機增多而增大,但增長幅度并不大,而隨著圖像數量增多,系統加速比增長幅度會變大,圖像數量達到60 000張時,系統加速比幾乎呈線性增長趨勢,進一步充分說明了Hadoop集群在處理大規模數據集時更能體現其優越性。
4?結語
本文對Hadoop平臺下基于PCA?SIFT算子的煤礦圖像特征提取算法進行了深入探討,并研究如何將MapReduce并行編程模型應用于傳統SIFT特征提取算法中,實現海量圖像的SIFT特征提取。實驗結果表明,算法的SIFT特征提取效果好,處理大規模圖像數據集運行耗時少,搭建的Hadoop集群能夠充分利用各節點計算機資源,相對于單節點計算機,系統獲得了很好的加速比,充分體現了Hadoop集群分布式并行處理的強大運算能力。
隨著大數據時代到來,各類大數據分析處理已成為新的研究熱點。下一步研究工作主要有:①擴展Hadoop集群的節點數、調節參數,提高分布式并行處理效率;②將提取的并行PCA?SIFT特征應用于煤礦場景圖像分類中,以提高數字圖像理解的智能性。
參考文獻:
[1]?李波, 巨廣剛, 王珂,等.2005?2014年我國煤礦災害事故特征及規律研究[J].礦業安全與環保, 2016,43(3):111?114.
[2]?賈世奎,李臻,李鑫,等.煤礦井下用夜視攝像系統研制[J].機械研究與應用,2016,29(6):147?149.
[3]?馬小平,胡延軍,繆燕子.物聯網、大數據及云計算技術在煤礦安全生產中的應用研究[J].工礦自動化, 2014,40(4):5?9.
[4]?王蓓蓓,李玉良,胡浩.基于Matlab的煤礦井下運動目標檢測的研究[C].廈門:煤礦機電一體化新技術2011學術年會,2011.
[5]?MORIOKA K, MAO X, HASHIMOTO H. Global color model based object matching in the multi?camera environment[C].International Conference on Intelligent Robots and Systems, 2006:2644?2649.
[6]?MITTAL A, DAVIS L S.M2 tracker: a multi?view approach to segmenting and tracking people in a cluttered scene[J].International Journal of Computer Vision, 2003,51(3):189?203.
[7]?高翔,徐柱.基于多尺度模型的數據庫影像特征匹配[J].測繪科學,2016,41(2):121?125.
[8]?WENG M, HE M. Image feature detection and matching based on SUSAN method[C]. International Conference on Innovative Computing, Information and Control, 2006:322?325.
[9]?TANG L, WANG K, LI Y, et al. The application of the MIC and improved snake algorithm on the image segmentation[C].Industrial Electronics and Applications,2007:1898?1902.
[10]?厲丹,錢建生,柴艷莉.井下危險區域目標檢測[J].煤炭學報,2011,36(3):527?532.
[11]?LOWE D G. Distinctive image features from Scale?Invariant keypoints[M].Kluwer:Kluwer Academic Publishers,2004.
[12]?FROMMEL A Y, MANEJA R, LOWE D, et al. Severe tissue damage in Atlantic cod larvae under increasing ocean acidification[J]. Nature Climate Change, 2012,2(1):42?46.
[13]?JIA S J, WANG P X, JIANG H Y, et al. Study of image matching algorithm based on SIFT[J]. Journal of Dalian Jiaotong University, 2010,31(4):17?21.
[14]?DAN L, QIAN J S. SIFT?based object matching and tracking of coal mine[C].International Conference on Wireless, Mobile and Multimedia Networks,2011:327?330.
[15]?梁玉,厲丹,牛翠溪,等.基于井下環境的SIFT算法研究[J].工礦自動化,2011(2):55?58.
[16]?姜代紅,華鋼,王永星.礦井監控圖像自動快速拼接算法研究[J].工礦自動化,2015,41(4):78?82.
[17]?WHITE T. Hadoop: the definitive guide[M]. 2nd edition. Hadoop: The Definitive Guide Yahoo Press, 2010.
[18]?LUO J, GWUN O. A comparison of SIFT, PCA?SIFT and SURF[J]. International Journal of Image Processing, 2013,3(4):143?152.
[19]?顧榮,嚴金雙,楊曉亮,等.Hadoop MapReduce短作業執行性能優化[J].計算機研究與發展,2014(6):1270?1280.
[20]?李建江,崔健,王聃,等.MapReduce并行編程模型研究綜述[J].電子學報,2011,39(11):2635?2642.
[21]?林宇晗,孔繁鑫,徐惠婷,等.線性加速比并行實時任務的節能研究[J].計算機學報,2013,36(2):384?392.