姜慶勝,李研彪,計時鳴
(浙江工業(yè)大學 機械工程學院,浙江 杭州 310023)
軸是機械行業(yè)普遍使用的零部件,其表面缺陷對其的使用性能和壽命有重要影響。一般情況下,軸的表面缺陷檢測依靠工人肉眼觀察完成,人工判斷缺陷并剔除次品,檢驗人員的勞動強度大,長期工作對眼睛有傷害,并且檢測結果一致性差,易發(fā)生漏檢。而利用機器視覺自動檢測軸的表面缺陷,可有效提高檢測效率、檢測質量,保護檢測人員健康,是未來技術的發(fā)展趨勢。
在軸的在線檢測中,圖像處理的速度是提高檢測效率的重要因素之一。隨著被處理的圖像數(shù)量的增加,以及圖像分辨率的不斷提高,處理速度會變得越來越慢。由于計算機硬件系統(tǒng)的限制,會造成對復雜數(shù)據(jù)的處理速度的限制。根據(jù)摩爾定律[1],CPU的主頻已經發(fā)展到了極限,無法僅靠提升硬件性能來提高運算速度。
近年來,超級計算的計算方法已應用到生產實踐中。超級計算的最基本方法就是并行計算。并行計算的方法和硬件的結構有著密切的關系,但是其基本的原理和模型就是串行問題并行化。按其硬件形式可分為兩類:(1)多機并行集群方式;(2)單機多核,例如GPU系統(tǒng)。
并行計算目的是為了加快運算速度,追尋并行架構的演變軌跡[2],經歷了向量、分布存儲[3]、共享存儲、異構幾個階段。與之對應的程序設計語言有:面向向量的VFortran、面向分布存儲的PVM和MPI、面向共享存儲的OpenMP和面向異構的OpenCL[4]。當前應用更廣泛的是Nvidia公司的使用CUDA C語言的顯卡和專用計算卡。
Spark是近幾年最流行的也比較成熟的多機并行的分布式集群運算架構[5-9],隨著并行數(shù)量的增加,其運算速度明顯加快。而對于基于面向異構的CUDA的單機多核并行計算也已經有了大量的研究和應用[10-14],這種方式加速非常明顯。另外其他的并行方式有MPI[15]、OpenMP[16]等,但應用不多。
本文研究兩種典型的并行計算方式,并提出一種將兩種架構結合的方式,實現(xiàn)實時和大數(shù)據(jù)檢測。
拋光軸表面缺陷檢測系統(tǒng)不但需要實時識別出產品是否合格,而且也需要缺陷分析。
比較典型的軸表面缺陷檢測系統(tǒng)如圖1所示。
圖1 缺陷檢測系統(tǒng)
由于軸是屬于有規(guī)則型旋轉曲面,而且經過拋光,具有高光反射特性,對于這種具有鏡面特點的曲面上的缺陷,當前比較流行的圖像獲取方式是線掃描。在線掃描裝置中,相機采用線陣相機,光源采用線光源。為了防止由于鏡面的高光反射,而拍攝不到缺陷,必須先確定相機和線光源的角度。同時,軸的轉動時間也必須和拍攝時間保持一定的比例關系,否則缺陷會失真。
軸的線掃描裝置如圖2所示。
圖2 軸的線掃描裝置
線掃描圖像采集主要設備型號如表1所示。
表1 圖像采集主要設備型號
根據(jù)被檢測軸缺陷的尺度,某些情況下需要采集較高分辨率的圖像。筆者研究的檢測對象活塞軸,其長度為200 mm~400 mm,直徑約20 mm左右,表面經拋光處理,表面最小缺陷的直徑約0.1 mm。根據(jù)缺陷尺度識別要求,采集圖像的分辨率至少要達到16 384×4 096,即6.7×107像素,這就意味著處理時需要比較長的時間。
活塞軸和部分缺陷圖如圖3所示。
圖3 活塞軸和部分缺陷圖
針對高分辨率圖像,圖像處理的耗時直接影響到機器視覺自動檢測系統(tǒng)效率。因此,要選擇合理的圖像處理平臺和算法。
活塞軸表面圖像具有像素多、被檢測缺陷點小的特點,一般情況下6.7×107像素的圖像中的缺陷是僅有數(shù)十個互相連通的像素團。根據(jù)統(tǒng)計分析,16個像素以下的像素團應作為噪聲濾除,而且生產要求在線識別是否合格時間要小于1 s。
16 384×4 096線掃描圖像如圖4所示。
圖4 16 384×4 096線掃描圖像
對于物體表面缺陷的檢測,常用的處理方法有[17]:統(tǒng)計法、頻譜法和模型法。(1)統(tǒng)計法又可以分為直方圖法[18]、灰度共生矩陣法[19]、自相關法[20]、數(shù)學形態(tài)學法[21];(2)頻譜法可以分為傅里葉特征法[22]、Gabor特征法[23]和小波特征法[24];(3)模型法可以分為分形體法[25]、隨機場模型法[26]和新模型法[27]。
圖3中,軸表面缺陷點一般是凹坑、壓痕、磨損和長條狀的劃痕。當圖像經過均值濾波之后,非缺陷點的像素明顯高于某個閾值,所以只要能檢測出圖片中的閾值小于這個閾值的點數(shù)的總數(shù)占一定的比例,就可以判斷該軸是否存在缺陷。
由于需要檢測軸表面非常微小的缺陷,采集的單張圖片至少要大于6.7×107像素,并行計算是最好的選擇。并行計算可以分為:任務并行性和數(shù)據(jù)并行性。對于Spark多機分布并行計算適用于任務并行法,而對于單機多核的GPU適合使用數(shù)據(jù)并行法。
為了便于對比,筆者采納了基于像素的逐次遍歷串行計算方法:采集灰度化圖像,通過均值濾波去除16點以下的像素團干擾,再將圖像的像素值轉換為二維數(shù)組,對每個數(shù)組元素和選取的閾值進行對比,小于某閾值的就進行統(tǒng)計,全部依次對比完成后,得到總的小于該閾值的像數(shù)總數(shù),如果該總數(shù)達到某個缺陷的值,就認為存在缺陷,一次性完成圖像的特征提取和識別。
普通串行算法的缺陷檢測系統(tǒng)如圖5所示。
圖5 普通串行算法的缺陷檢測系統(tǒng)
分布式并行處理就是多臺具有獨立運算功能的計算機并聯(lián)運行。Spark是在擴展了Hadoop+MapReduce計算模型基礎上的通用集群計算平臺,其特點是易用性;運算速度快,具有交互功能;通用性,在其基礎上可以完成其他各種復雜運算。它可以完成原先需要多種不同的分布式平臺的場景的運算。Spark的API接口可以是基于Python、Java、Scala和SQL的程序,可以和其他大數(shù)據(jù)工具緊密配合。
Spark的核心是Spark core,實現(xiàn)任務調度、內存管理等,但真正的工作是對彈性分布式數(shù)據(jù)集RDD的API定義,RDD主要的編程對象是分布在各個節(jié)點上可以并行操作的元素集合[28]。
Spark是個多任務的操作模式,就是將一個項目通過管理器分成很多個小任務,然后將這些小任務分到各個計算機節(jié)點去運算。
應用于軸表面缺陷的處理,主要是針對圖像的預處理和像素的檢索,利用了Spark的機器學習組件MLib中的函數(shù)[29]。
基于Spark的缺陷檢測系統(tǒng)如圖6所示。
圖6 基于Spark的缺陷檢測系統(tǒng)
由于其強大的圖像并行處理能力,圖像處理單元GPU被廣泛應用于計算密集型計算。CUDA是Nvidia公司在圖形處理卡GPU上運行的應用軟件,它可以讓C或C++代碼在GPU上高效運行。
GPU是一種異構架構[30],其運行原理是主程序使用串行方式編程,在CPU中運行,但遇到程序中的計算密集型部分,就把這些數(shù)據(jù)拷貝到GPU中,也就是顯卡或計算卡,讓GPU進行并行計算,當GPU計算完成之后,再把數(shù)據(jù)拷貝到CPU中。
為了具有對比性,此處仍然以串行遍歷像素點的方法來確認是否有缺陷,不過采用了CUDA并行計算,并且使用了線程協(xié)助管理和共享內存的特性來優(yōu)化求和計算[31]。
并行計算數(shù)學原理為:
當n?m,且i≤n時,則:
當Pi 當Pi>T時,令Pi=0; 由此可得像素和為: Sn=S1+S2+…+Si+…+Sm (1) 其中: S1=P1+Pm+1+…+Pn-m+1S2=P2+Pm+2+…+Pn-m+2……Si=Pi+Pm+i+…+Pn-m+i……Sm=Pm+Pm+m+…+Pn (2) 但是這樣并行求和后,仍然會有m個數(shù)據(jù)求和,可以考慮再一次使用取半規(guī)約算法的數(shù)學方法進行并行求解。 根據(jù)式(1)有(Sj∈m): (j=1,2,3,……) (3) 此式可寫為: (4) 令: (5) 可得和為: (6) 再令: (7) 以此類推,令通式為: (8) 經過k次迭代后,可得最后和為: (9) 式中:i—像素位置;T—閾值;P—像素值;S—像素的和;n—總的像素個數(shù);m—一次并行處理的線程數(shù);k—迭代次數(shù)。 檢測系統(tǒng)中,圖像噪聲濾波和像素點判斷統(tǒng)計采用不同的核函數(shù),這里充分利用了Nvidia圖像卡GPU中已經分配的地址,以減少數(shù)據(jù)拷貝時間。 CUDA缺陷檢測系統(tǒng)如圖7所示。 圖7 CUDA缺陷檢測系統(tǒng) (1)多計算機集群配置的設備來自阿里服務器,其集群硬件如表2所示。 表2 集群硬件 集群軟件配置如表3所示。 表3 集群軟件配置 (2)單機多核運行的實驗設備系統(tǒng)配置是:CPU為Intel(R) CPU E5-2620 v3 @2.40 GHz(2 core)內存32GB,GPU為Nvidia的GTK1080Ti。操作系統(tǒng)是Windows Servers 2012 R2 64位操作系統(tǒng)。使用OpenCV、C++、CUDA C。1.5節(jié)的串行傳統(tǒng)遍歷算法也使用該計算機CPU運算。 實驗中使用圖4中的被檢測圖片。由于生產現(xiàn)場被檢測的軸是按照流水線逐個檢測,每次檢測一張圖片,并判定是否合格。實驗分別按照1.5,2.1,2.2節(jié)的方法測定運行時間,運行時間按照有數(shù)據(jù)傳輸和無數(shù)據(jù)傳輸分別測定。 不含通訊和數(shù)據(jù)拷貝的時間對比如表4所示。 表4 不含通訊和數(shù)據(jù)拷貝的運算時間對比 包含數(shù)據(jù)通訊和拷貝的時間對比如表5所示。 表5 包含數(shù)據(jù)通訊和拷貝的時間對比 3.3.1 基于Spark的檢測 根據(jù)2.1節(jié)采用Spark框架檢測一張圖片的運行時間,包括圖片拷貝到HDFS上的時間、計算機之間的數(shù)據(jù)交換通訊時間,以及調度器在不同節(jié)點上的工作任務部署時間,至少需要6 s以上,這對于實時系統(tǒng)顯然是不合適的。 根據(jù)眾多文獻實驗證明,大量圖片一次性拷貝到HDFS上進行運算,隨著計算機節(jié)點數(shù)量的增加,運算時間明顯減少,適合大數(shù)據(jù)的批量運算。 3.3.2 基于CUDA檢測 根據(jù)2.2節(jié),用基于CUDA的單計算機多核并行計算方式,實驗表明其完整運算時間為320 ms,可以滿足實時要求[32]。如果采用機器學習,得到預測模型會花很長時間。根據(jù)文獻[33]實驗可知,一張512×512單張圖片的模型檢測時間在2.29 s以上,這對于Spark的分布式計算機集群上是可行的,但不符合實時檢測要求。 評估并行加速的指標是加速比,其公式為: (10) 式中:Te—串行計算時間;TP—并行計算時間;Sp—加速比。 由實驗可知,GPU在有通信的時候的加速比是3;無通訊的時候的加速比是52,可見數(shù)據(jù)的通訊和拷貝時間占用比較多的時間。 根據(jù)以上分析,對于一個比較完整的軸表面缺陷檢測,即要滿足實時在線的快速檢測,又要進行缺陷分類,宜用人工智能中的基于神經網(wǎng)絡的深度學習,所以筆者提出了一種CUDA+Spark的混合模式。 CUDA+Spark模型如圖8所示。 圖8 CUDA+Spark模型 根據(jù)混合模型,利用CUDA實現(xiàn)快速的實時檢測,然后把缺陷圖片全部上傳到HDFS存儲,可以間隔一段時間,對批量數(shù)據(jù)進行分析處理。 RDD最適合對數(shù)據(jù)集中所有的元素進行相同的操作的批處理類應用,所以將缺陷分析部分置于Spark架構上是可行的。 兩種并行方式的結合使用會有更好的空間,除了租用云服務器外,也可以將云計算改成就地多計算機系統(tǒng)組成就地云網(wǎng)絡,以減少數(shù)據(jù)傳輸時間,并用于存儲超大數(shù)據(jù)和長時間的復雜計算,使用GPU系統(tǒng)并行計算來作為實時計算,同時利用就地云網(wǎng)絡的計算結果來為實時判斷提供依據(jù)。 當前,基于視覺的缺陷檢測已經不僅僅局限于實時檢測產品是否合格,也需要分析產生缺陷的原因,而分析產生缺陷的原因需要對大量數(shù)據(jù)進行存儲和處理。 筆者經實驗證明了通過數(shù)學并行原理優(yōu)化后的GPU片上多核的并行計算方式,適用于高分辨率圖像實時環(huán)境;而基于云的Spark架構分布式并行計算方式,不適用于實時環(huán)境,但卻適合使用在計算和數(shù)據(jù)密集、大批量數(shù)據(jù)處理的場合,而GPU卻不適合。所以采用GPU和Spark結合模式可以滿足對高分辨率圖像的實時檢測和大數(shù)據(jù)量分析場合的需求。3 實驗及結果分析
3.1 實驗設備
3.2 實驗數(shù)據(jù)
3.3 實驗結果分析
3.4 實時檢測和大數(shù)據(jù)量數(shù)據(jù)分析的混合結構模式
4 結束語