(中北大學(xué) 信息與通信工程學(xué)院,太原 030051)
隨著數(shù)字圖像檢測(cè)技術(shù)在生產(chǎn)領(lǐng)域的廣泛應(yīng)用,很多應(yīng)用需要及時(shí)地分析當(dāng)前的生產(chǎn)狀況,傳統(tǒng)的數(shù)字圖像檢測(cè)系統(tǒng)難以滿足工業(yè)生產(chǎn)的需求。以玻璃生產(chǎn)加工業(yè)為例,在原料加工、制備、熔化、澄清和冷卻等各種生產(chǎn)環(huán)節(jié)中,由于工藝制度的破壞或操作過(guò)程的差錯(cuò),從退火窯出來(lái)的玻璃帶往往帶有不同類型和大小的缺陷。缺陷檢測(cè)系統(tǒng)需要及時(shí)的控制橫切機(jī)將包含缺陷過(guò)多、不符合國(guó)家標(biāo)準(zhǔn)規(guī)定的部分切除,從而達(dá)到提高整條玻璃生產(chǎn)線玻璃質(zhì)量的效果。由于玻璃帶傳輸速度的加快,缺陷檢測(cè)系統(tǒng)短時(shí)間會(huì)采集大量高分辨率缺陷圖像數(shù)據(jù),要實(shí)現(xiàn)生產(chǎn)線上玻璃帶缺陷的及時(shí)檢測(cè),需要采用與生產(chǎn)速度匹配的,及時(shí)不間斷的在線檢測(cè)系統(tǒng)[1]。
MapReduce應(yīng)用于大規(guī)模計(jì)算機(jī)集群處理海量數(shù)據(jù)的并行計(jì)算中,是一種基于鍵/值對(duì)的數(shù)據(jù)處理模型[2]。該模型將復(fù)雜的分布式計(jì)算過(guò)程分為Map與Reduce兩個(gè)階段???cè)蝿?wù)提前被分割成若干個(gè)小任務(wù),每個(gè)劃分的小任務(wù)由一個(gè)Map任務(wù)來(lái)計(jì)算,Map任務(wù)計(jì)算完成之后將中間結(jié)果傳遞給Reduce任務(wù),進(jìn)行全局的結(jié)果匯總并計(jì)算出最終的結(jié)果。
MapReduce的出現(xiàn)在一定程度上緩解了大數(shù)據(jù)處理的難題。MapReduce由于最初只定義了基于文本的數(shù)據(jù)類型,在默認(rèn)設(shè)置中無(wú)法支持圖像數(shù)據(jù)類型的處理。要實(shí)現(xiàn)對(duì)大量圖像文件的分布式并行化處理,需要實(shí)現(xiàn)圖像數(shù)據(jù)到MapReduce分布式計(jì)算框架所默認(rèn)的數(shù)據(jù)類型轉(zhuǎn)換。目前許多學(xué)者針對(duì)基于MapReduce實(shí)現(xiàn)圖像并行化處理做了深入研究。文獻(xiàn)[3]利用MapReduce所提供的讀寫接口來(lái)設(shè)計(jì)所需要的圖像數(shù)據(jù)類型,由此來(lái)實(shí)現(xiàn)將圖像序列化為MapReduce可進(jìn)行處理的數(shù)據(jù)類型,達(dá)到圖像并行化處理的效果。但這種方法存在的缺陷是當(dāng)面臨大量小文件存儲(chǔ)的問(wèn)題,會(huì)導(dǎo)致Map任務(wù)數(shù)量過(guò)多,造成系統(tǒng)處理效率低的問(wèn)題。文獻(xiàn)[4]提出了一種新型的圖像數(shù)據(jù)并行處理模型。利用MapReduce模型適合處理大規(guī)模文本數(shù)據(jù)的特性,選擇將存儲(chǔ)了圖像路徑的文本文件代替圖像數(shù)據(jù)進(jìn)行輸入,從而避免了設(shè)計(jì)圖像數(shù)據(jù)類型的麻煩,但同樣會(huì)面臨大量小文件存儲(chǔ)導(dǎo)致的存儲(chǔ)效率低下的問(wèn)題。
其次,隨著數(shù)據(jù)處理需求的提高,也暴露出MapReduce這種分布式計(jì)算框架一些缺陷。MapReduce有其性能瓶頸:在Map和Reduce之間,隱形設(shè)有中間處理部分,比如為了讓不同結(jié)果分發(fā)到對(duì)應(yīng)的處理節(jié)點(diǎn)上,需要把所有結(jié)果匯總到每個(gè)節(jié)點(diǎn)上再進(jìn)行排序,每個(gè)節(jié)點(diǎn)截取對(duì)應(yīng)區(qū)間內(nèi)的數(shù)據(jù)[5]。該過(guò)程是MapReduce之所以能夠正確運(yùn)算的關(guān)鍵所在,但是其影響了系統(tǒng)處理的速度。
為解決此問(wèn)題,文獻(xiàn)[6]提出本地增強(qiáng)負(fù)載均衡算法將MapReduce的流程擴(kuò)展到,減少與shuffle重疊的計(jì)算并充分利用CPU和I/O資源,但開(kāi)發(fā)難度較大且不易于擴(kuò)展。文獻(xiàn)[7]中提出了一種本地感知的reduce任務(wù)調(diào)度策略,考慮分區(qū)的位置和大小,采用默認(rèn)的hash partitioner使reduce任務(wù)盡量本地化,以減少shuffle數(shù)據(jù)量,提高 MapReduce 的性能,但對(duì)大規(guī)模數(shù)據(jù)集性能提升不大。文獻(xiàn)[8]提出基于數(shù)據(jù)本地化和負(fù)載均衡的任務(wù)分配策略,既減少了Shuffle階段數(shù)據(jù)的傳輸量,同時(shí)也避免出現(xiàn)任務(wù)分配不均衡的情況。文獻(xiàn)[9]中針對(duì)shuffle處理策略的不足,采取管道策略,將map生成的數(shù)據(jù)通過(guò)管道直接傳輸?shù)絉educe,降低了I/O代價(jià),提高了效率,但缺少shuffle會(huì)導(dǎo)致計(jì)算準(zhǔn)確率嚴(yán)重下降,不適用于大規(guī)模圖像處理。
基于上述背景,本課題以MapReduce并行計(jì)算框架為研究基礎(chǔ),針對(duì)大量小文件的存儲(chǔ)問(wèn)題進(jìn)行了存儲(chǔ)結(jié)構(gòu)的改進(jìn),通過(guò)添加流式數(shù)據(jù)處理模塊和數(shù)據(jù)劃分模塊,使得計(jì)算與存儲(chǔ)本地化,加快數(shù)據(jù)處理的實(shí)時(shí)性。并以在線所采集的大量玻璃圖像為測(cè)試對(duì)象,通過(guò)改進(jìn)MapReduce計(jì)算框架實(shí)現(xiàn)對(duì)各種玻璃缺陷及時(shí)準(zhǔn)確的檢測(cè)。
對(duì)玻璃帶進(jìn)行缺陷的在線檢測(cè),文獻(xiàn)[10]提出一種基于數(shù)字光柵投影的浮法玻璃缺陷檢測(cè)方案,此方法利用位于玻璃帶上方的高速CCD相機(jī)采集玻璃帶表面呈現(xiàn)的圖像,再由檢測(cè)系統(tǒng)的對(duì)采集到的缺陷圖像進(jìn)行缺陷檢測(cè)。由于單位時(shí)間內(nèi)線陣CCD相機(jī)獲得數(shù)據(jù)量十分巨大,目前無(wú)法采用單一的硬件和軟件系統(tǒng)實(shí)現(xiàn),由此本文設(shè)計(jì)了基于Hadoop集群的多路并行處理的玻璃帶缺陷檢測(cè)方案,如圖1所示。
圖1 玻璃缺陷在線檢測(cè)總體方案
該系統(tǒng)由光源、編碼器、高速線陣CCD相機(jī)、圖像處理器和Hadoop集群處理器組成。具體檢測(cè)方法是由多路獨(dú)立的圖像采集單元和由Hadoop集群構(gòu)成的圖像處理單元組成,采用正透視的背光照射方式的檢測(cè)光路[11],通過(guò)多路高速線陣CCD相機(jī)并行采集玻璃表面的光強(qiáng)信號(hào),整個(gè)CCD線陣都與Hadoop集群相連接。高速數(shù)據(jù)采集卡通過(guò)雙DMA模式連續(xù)采集光強(qiáng)度信號(hào),將其轉(zhuǎn)換為灰度圖像數(shù)據(jù)并傳輸?shù)缴衔粰C(jī)。任務(wù)由客戶端提交給資源管理器,CCD攝像機(jī)收集的數(shù)據(jù)傳輸?shù)紿adoop集群的Master。Master將每路CCD相機(jī)數(shù)據(jù)分配給對(duì)應(yīng)的Slave。然后,運(yùn)行分配任務(wù)的Slave完成分割算法。最后,處理結(jié)果返回給Master。一旦缺陷過(guò)多,由系統(tǒng)控制的橫切機(jī)將切除具有缺陷的部分。
在缺陷圖像處理之前,首先要解決圖像數(shù)據(jù)的存儲(chǔ)問(wèn)題。本文默認(rèn)的數(shù)據(jù)塊大小為128M,玻璃缺陷圖像數(shù)據(jù)大小遠(yuǎn)小于默認(rèn)的數(shù)據(jù)塊大小,直接存儲(chǔ)會(huì)在NameNode中存儲(chǔ)大量文件名稱信息,從而嚴(yán)重降低集群的運(yùn)算性能。同時(shí)訪問(wèn)大量小圖像回頻繁調(diào)用I/O接口,也會(huì)增加文件尋址時(shí)間。因此本文針對(duì)圖像分片利用HIPI接口的HipiImageBundle類,將本地圖片通過(guò)文件遍歷方法上傳,圖像分片組成一個(gè)包含數(shù)據(jù)和索引的hib文件存儲(chǔ)結(jié)構(gòu),生成glass.hib和glass.hib.dat。hib文件存儲(chǔ)位移及索引信息,hib.dat文件存儲(chǔ)圖像數(shù)據(jù)。通過(guò)對(duì)HIPI接口的調(diào)用,減少了大量圖像分片對(duì)Hadoop性能的影響。
其次,由于MapReduce運(yùn)算模型的性質(zhì),在圖像處理過(guò)程中會(huì)將圖像數(shù)據(jù)隨機(jī)分塊。如果不對(duì)圖像數(shù)據(jù)進(jìn)行預(yù)處理,而是由Map任務(wù)直接分塊處理,在最后的聚合階段無(wú)法將分塊后的圖像數(shù)據(jù)進(jìn)行準(zhǔn)確的聚合,從而無(wú)法還原到處理之前完整的原始圖像。因此,在Map任務(wù)進(jìn)行分塊前,本文對(duì)玻璃缺陷圖像進(jìn)行預(yù)處理,提前將圖像處理前的分塊順序和圖像分塊相對(duì)于原始圖像的位置坐標(biāo)存儲(chǔ)在數(shù)據(jù)塊的元信息中。在Map任務(wù)完成之后,可以將分塊后的圖像數(shù)據(jù)與提前存儲(chǔ)的元信息進(jìn)行比對(duì),依照原信息中存儲(chǔ)的數(shù)據(jù)塊坐標(biāo)位置即可快速完成分塊圖像的準(zhǔn)確聚合。本文所采取的圖像存儲(chǔ)結(jié)構(gòu)如圖2所示。
圖2 圖像存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)
MapReduce缺陷檢測(cè)實(shí)現(xiàn)過(guò)程可分為如下3個(gè)階段:首先,圖像序列中每個(gè)圖像被分割成多個(gè)小的圖像分片,并將圖像分片分配到Hadoop的數(shù)據(jù)節(jié)點(diǎn)上。接著,數(shù)據(jù)節(jié)點(diǎn)上的每個(gè)Map過(guò)程獨(dú)自完成圖像分片的缺陷分割任務(wù)。最后,在Reduce過(guò)程中將檢測(cè)后的圖像分片聚合,獲得最終檢測(cè)結(jié)果。MapReduce的工作流程如圖3所示。
圖3 MapReduce圖像處理流程
在Map階段,通過(guò)ImageInputFormat接口讀入圖像分片,ImageRecordReader函數(shù)負(fù)責(zé)輸入以及對(duì)記錄進(jìn)行讀取操作,得到分割記錄和產(chǎn)生輸入分片[12]。MapReduce程序?qū)⑤斎氲?key,value>對(duì)輸送給 map完成程序執(zhí)行,采用閾值分割的方法完成每塊圖像的缺陷檢測(cè)。map任務(wù)結(jié)束后,將檢測(cè)結(jié)果以
在Reduce階段,針對(duì)key中保存的元數(shù)據(jù)信息和value中的檢測(cè)結(jié)果,按照元數(shù)據(jù)中存儲(chǔ)的索引號(hào)和像素坐標(biāo)等信息,將檢測(cè)結(jié)果歸并,并將檢測(cè)結(jié)果保存到HDFS中的不同文件夾中。在對(duì)圖片調(diào)用執(zhí)行完畢,再啟動(dòng)reduce程序把執(zhí)行處理后圖像進(jìn)行合并操作。
Map階段數(shù)據(jù)節(jié)點(diǎn)產(chǎn)生的中間數(shù)據(jù)需要經(jīng)過(guò)網(wǎng)絡(luò)傳輸?shù)絉educe階段的計(jì)算節(jié)點(diǎn)作為其輸入數(shù)據(jù),這個(gè)中間階段稱為Shuffle[13]。Shuffle階段的數(shù)據(jù)傳輸和Reduce階段數(shù)據(jù)存儲(chǔ)非常耗時(shí),所以如何減少M(fèi)ap階段不必要的網(wǎng)絡(luò)帶寬占用,成為提升MapReduce作業(yè)執(zhí)行效率的關(guān)鍵。而Map階段性能與數(shù)據(jù)本地化相關(guān),所以提升數(shù)據(jù)本地化可以有效提升MapReduce作業(yè)的執(zhí)行效率。
Hadoop[14]數(shù)據(jù)本地化是指數(shù)據(jù)集無(wú)冗余地劃分至每個(gè)節(jié)點(diǎn),通過(guò)劃分?jǐn)?shù)據(jù)集來(lái)并行化數(shù)據(jù)的處理。如圖4所示,在任務(wù)調(diào)度過(guò)程中,如果不考慮數(shù)據(jù)本地化,就會(huì)使得本可以直接從本地讀取輸入數(shù)據(jù)的任務(wù)需要跨機(jī)架通過(guò)網(wǎng)絡(luò)訪問(wèn)來(lái)遠(yuǎn)程讀取數(shù)據(jù),增加了任務(wù)的執(zhí)行時(shí)間。在改進(jìn)的MapReduce計(jì)算模型中,數(shù)據(jù)本地化使系統(tǒng)能夠感知機(jī)架。通過(guò)數(shù)據(jù)定位,數(shù)據(jù)分配可以提高系統(tǒng)的并行度,從而提高系統(tǒng)的處理效率。在本文中,數(shù)據(jù)塊分區(qū)被提前到Map階段,當(dāng)map完成后,所有數(shù)據(jù)都被發(fā)送到相應(yīng)的Reduce節(jié)點(diǎn),然后進(jìn)入Shuffle階段,這個(gè)過(guò)程在簡(jiǎn)化繁瑣的中間排序過(guò)程的同時(shí)也能很好保證運(yùn)算的準(zhǔn)確性,提高了傳統(tǒng)MapReduce框架的效率。
圖4 MapReduce本地化機(jī)制
本實(shí)驗(yàn)是在局域網(wǎng)內(nèi),實(shí)驗(yàn)搭建Hadoop集群由一個(gè)主節(jié)點(diǎn)和4個(gè)從節(jié)點(diǎn)組成。 Hadoop集群安裝在虛擬機(jī)上,軟件配置和硬件設(shè)置如表1,表2所示。實(shí)驗(yàn)選取在線采集玻璃缺陷圖像作為實(shí)驗(yàn)對(duì)象,缺陷圖像的平均大小約212KB。由于實(shí)驗(yàn)在分布式集群上進(jìn)行,實(shí)驗(yàn)中數(shù)據(jù)塊的副本數(shù)設(shè)置為3,同時(shí)集群中默認(rèn)的數(shù)據(jù)塊大小為128M,MapReduce中Reduce的數(shù)目設(shè)置為1,實(shí)驗(yàn)環(huán)境的軟件和硬件配置如表1和表2所示。
表1 實(shí)驗(yàn)環(huán)境軟件配置
表2 實(shí)驗(yàn)環(huán)境硬件配置
在實(shí)驗(yàn)環(huán)境搭建完成之后,對(duì)在線所采集的玻璃缺陷圖像進(jìn)行基于MapReduce的分布式缺陷檢測(cè)實(shí)驗(yàn),結(jié)果如圖5所示。圖5(a)是一幅含有疥瘤的玻璃缺陷圖像,圖5(b)是在MapReduce上進(jìn)行分塊缺陷檢測(cè)的中間結(jié)果,圖5(c)是將中間結(jié)果聚合后,得到的最終檢測(cè)結(jié)果。
將原玻璃缺陷圖像和檢測(cè)后的結(jié)果進(jìn)行對(duì)比,如圖6所示,分別展現(xiàn)出了劃痕、夾雜、污點(diǎn)和疥瘤的閾值分割結(jié)果。通過(guò)多次的測(cè)試可以看出,本文所采取的圖像分割算法可以有效完成不同種類玻璃缺陷圖像的分割。
圖5 MapReduce疥瘤缺陷檢測(cè)結(jié)果
圖6 MapReduce圖像分割結(jié)果
為了驗(yàn)證本文改進(jìn)的MapReduce框架處理效率和運(yùn)算性能的提升,將改進(jìn)的MapReduce框架與原來(lái)的運(yùn)算框架分別運(yùn)行在三節(jié)點(diǎn)和四節(jié)點(diǎn)的Hadoop集群,測(cè)試所采取的圖像數(shù)據(jù)量分別在200 M、400 M、600 M、800 M和1 000 M的條件下檢測(cè)兩種框架運(yùn)算的效率。通過(guò)圖7和圖8發(fā)現(xiàn),不同節(jié)點(diǎn)Hadoop集群下,隨著圖像數(shù)據(jù)量的不斷提高,處理時(shí)間顯著加快,基本呈線性增長(zhǎng)。對(duì)比三節(jié)點(diǎn)和四節(jié)點(diǎn)集群的處理時(shí)間,圖9和圖10分別展現(xiàn)出了不同節(jié)點(diǎn)下運(yùn)算性能改進(jìn)的加速比,從圖9和圖10的加速比變化可以看出,伴隨著節(jié)點(diǎn)數(shù)的增多,MapReduce的運(yùn)行效率會(huì)有所提高,加速比大約從1.1提高到1.24。集群節(jié)點(diǎn)數(shù)越多,加速比會(huì)適當(dāng)提高,這體現(xiàn)出改進(jìn)的算法在多節(jié)點(diǎn)集群上加速效果更明顯,也可以說(shuō)明本文改進(jìn)的算法在數(shù)據(jù)調(diào)度和本地化數(shù)據(jù)方面改進(jìn)顯著??傊倪M(jìn)的MapReduce架構(gòu)改善了數(shù)據(jù)運(yùn)算性能,因此本文所做的改進(jìn)相對(duì)于傳統(tǒng)的MapReduc框架在性能上有所提高,可以很好的應(yīng)用于玻璃缺陷圖像檢測(cè)系統(tǒng)中。
圖7 三節(jié)點(diǎn)Hadoop集群處理結(jié)果
圖8 四節(jié)點(diǎn)Hadoop集群處理結(jié)果
圖9 三節(jié)點(diǎn)Hadoop集群加速比
圖10 四節(jié)點(diǎn)Hadoop集群加速比
本文針對(duì)目前玻璃檢測(cè)系統(tǒng)無(wú)法滿足及時(shí)性的問(wèn)題,將MapReduce分布式計(jì)算框架應(yīng)用于海量玻璃缺陷圖像檢測(cè)中。通過(guò)對(duì)存儲(chǔ)結(jié)構(gòu)的改進(jìn),解決大量小文件存儲(chǔ)導(dǎo)致效率低下的問(wèn)題,完成基于MapReduce的并行化玻璃缺陷圖像閾值分割算法。此外,在原有的MapReduce計(jì)算框架基礎(chǔ)上,對(duì)中間處理過(guò)程Shuffle做了進(jìn)一步改進(jìn),通過(guò)數(shù)據(jù)本地化改善運(yùn)算性能。實(shí)驗(yàn)表明,改進(jìn)的MapReduce并行計(jì)算框架數(shù)據(jù)處理速度得到顯著提高,保證了系統(tǒng)的準(zhǔn)確性和及時(shí)性,為玻璃缺陷檢測(cè)后續(xù)的打標(biāo)和切割工序提供了有效信息。