基於美的 / KUKA工業檢測平臺使用Intel Analytics Zoo的深度學習
背景
工業檢查(用於產品缺陷檢測)是現代製造業的重要組成部分。隨著人工智慧,計算機視覺和大資料技術的發展,我們可以建立先進的工業檢測系統以實現和人類水平媲美的準確性,並具有更高的效率和更低的成本。在本文中,我們將分享我們在美的/ KUKA,使用英特爾 ofollow,noindex" target="_blank"> Analytics Zoo (一個基於Apache Spark、TensorFlow和BigDL的開源資料分析+ AI平臺),來建立基於深度學習的工業檢測平臺的經驗。
基於Analytics Zoo的端到端的解決方案
為了便於構建和生成大資料的深度學習應用程式,Analytics Zoo( https://github.com/intel-analytics/analytics-zoo )提供了統一的資料分析+ AI平臺,可將Spark,TensorFlow和BigDL程式無縫整合到一個統一的資料分析流水線中;然後,整個流水線可以透明地擴充套件到(執行在標準的Intel至強伺服器上的)Hadoop / Spark叢集,以進行分散式訓練或推理。
如上圖所示,Midea / KUKA的工業檢測平臺是一個建立在Analytics Zoo之上的端到端資料分析流水線,包括
(1)使用Spark以分散式方式處理從製造流水線獲取的大量影象。
(2)使用Tensorflow Object Detection API直接構建物件檢測(例如,SSDLite + MobileNet V2)模型
(3)直接使用在第一步中預處理的影象RDD,以分散式方式在Spark叢集上訓練(或微調)物件檢測模型。
(4)直接使用評估影象集的RDD,以分散式方式在Spark叢集上評估(或推斷)訓練模型。
(5)使用Analytics-Zoo中POJO模式的API, 將整個Pipeline部署在低延遲的、線上Web 服務中。
在檢測時間期間,具有相機的工業機器人可以自動拍攝產品的照片,並通過HTTP將影象傳送到網路服務以檢測各種缺陷(例如,缺失標籤或螺栓等),如下所示。
Spark , TensorFlow 和 BigDL的統一整合
如前所述,Analytics Zoo提供了“整合資料分析”的深度學習程式設計模型,因此使用者可以輕鬆開發端到端的資料分析+ AI流水線(使用Spark,TensorFlow,Keras等),然後透明地執行在大型Hadoop / Spark叢集上、使用BigDL和Spark進行分散式訓練和推理。此外,使用者還可以輕鬆部署端到端的流水線,以實現低延遲的線上服務(使用Analytics Zoo提供的POJO風格的模型服務API)。
例如,為了以分散式方式處理缺陷檢測流水線的訓練資料,我們可以使用PySpark將原始影象資料讀取到RDD中,然後應用一些變換來解碼影象,並提取邊界框和類標籤,如下所示。
<<<<
train_rdd = sc . parallelize ( examples_list )
.map ( lambda x : read_image_and_label ( x ))
.map ( lambda image : decode_to_ndarrays ( image ))
<<<<
返回的 RDD ( train_rdd )中的每條記錄都包含一個 NumPy ndarray 的列表(即影象,邊界框,類和檢測到的框的數量),它可以直接用於建立TensorFlow模型,並在Analytics Zoo上進行分散式訓練。我們可以通過建立 TFDataset (如下所示)來實現這一功能。
<<<<
dataset = TFDataset . from_rdd ( train_rdd ,
names =[ "images" , "bbox" , "classes" , "num_detections" ],
shapes =[[ 300 , 300 , 3 ],[ None , 4 ], [ None ], [ 1 )]],
types =[ tf . float32 , tf . float32 , tf . int32 , tf . int32 ],
batch_size = BATCH_SIZE )
<<<<
在Analytics Zoo中, TFDataset 表示一個分散式儲存的記錄集合,其中每條記錄包含一個或多個Tensorflow Tensor 物件。然後我們可以直接將這些 Tensor 作為輸入構建Tensorflow模型。例如,我們使用了Tensorflow Object Detection API構建了SSDLite + MobileNet V2模型(如下圖所示):
<<<<
# using tensorflow object detection api to construct model
# https://github.com/tensorflow/models/tree/master/research/object_detection
fromobject_detection . builders import model_builder
images , bbox , classes , num_detections = dataset . tensors
detection_model = model_builder . build ( model_config , is_training = True )
resized_images , true_image_shapes = detection_model . preprocess ( images )
detection_model . provide_groundtruth ( bbox , classes )
prediction_dict = detection_model.predict(resized_images, true_image_shapes)
losses = detection_model . loss ( prediction_dict , true_image_shapes )
total_loss = tf . add_n ( losses . values ())
>>>>
在模型構建之後,我們首先載入預先訓練的Tensoflow模型,然後使用Analytics Zoo中的 TFOptimizer (如下所示)對模型進行微調訓練;最終我們在驗證資料集上達到0.97 [email protected]。
>>>>
withtf . Session () as sess :
init_from_checkpoint ( sess , CHECKPOINT_PATH )
optimizer = TFOptimizer ( total_loss , RMSprop ( LR ), sess )
optimizer . optimize ( end_trigger = MaxEpoch ( 20 ))
save_to_new_checkpoint ( sess , NEW_CHEKCPOINT_PATH )
>>>>
在執行過程中,Analytics-Zoo使用PySpark從磁碟中讀取了輸入資料並進行預處理,並構造了一個Tensorflow Tensor 的RDD。然後,基於BigDL和Spark對Tensorflow模型進行分散式訓練(如所述)。無需修改程式碼或手動配置,整個訓練流程就可以自動從單個節點擴充套件到基於Intel至強伺服器的大型Hadoop / Spark叢集。
模型訓練結束後,我們還可以基於與訓練流程類似的流水線,使用PySpark,TensorFlow和BigDL在Analytics Zoo上執行大規模的分散式評估/推斷。
低延遲 的 線上服務
如下所示,我們也可以使用Analytics Zoo提供的POJO風格的模型服務API輕鬆部署推理流水線,以實現低延遲的線上服務(例如,Web服務,Apache Storm,Apache Flink等等)。有關詳細資訊,請參閱 https://analytics-zoo.github.io/master/#ProgrammingGuide/inference/
<<<<
AbstractInferenceModel model = new AbstractInferenceModel (){};
model . loadTF ( modelPath , 0 , 0 , false );
List < List < JTensor >> output = model . predict ( inputs );
<<<<
結論
Midea / KUKA通過結合人工智慧,計算機視覺和大資料技術,在Analytics Zoo( https://github.com/intel-analytics/analytics-zoo )上成功構建了先進的工業檢測系統。它使用了工業機器人,相機和英特爾至強伺服器等工具對產品的缺陷進行自動檢測。尤其是Analytics Zoo提供統一的資料分析+ AI平臺,可將Spark,BigDL和TensorFlow程式無縫整合到一個數據分析流水線中,從而可以輕鬆構建和生產化部署基於大資料的深度學習應用程式(包括分散式訓練和推理,以及低延遲線上服務)。您可以參考Github上的 示例 瞭解更多詳細資訊。