背景
工業檢查(用于產品缺陷檢測)是現代制造業的重要組成部分。隨著人工智能,計算機視覺和大數據技術的發展,我們可以建立先進的工業檢測系統以實現和人類水平媲美的準確性,并具有更高的效率和更低的成本。在本文中,我們將分享我們在美的/ KUKA,使用英特爾Analytics Zoo(一個基于Apache Spark、TensorFlow和BigDL的開源數據分析+ AI平臺),來建立基于深度學習的工業檢測平臺的經驗。
基于Analytics Zoo的端到端的解決方案
為了便于構建和生成大數據的深度學習應用程序,AnalyticsZoo(https://github.com/intel-analytics/analytics-zoo)提供了統一的數據分析+AI平臺,可將Spark,TensorFlow和BigDL程序無縫集成到一個統一的數據分析流水線中;然后,整個流水線可以透明地擴展到(運行在標準的Intel至強服務器上的)Hadoop/Spark集群,以進行分布式訓練或推理。
如上圖所示,美的 / 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,
hard_code_batch_size=True)
<<<
在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
from object_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 mAP@0.5。
>>>>
with tf.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 模型進行分布式訓練(如BigDL技術報告所述)。無需修改代碼或手動配置, 整個訓練流程就可以自動從單個節點擴展到基于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上的示例了解更多詳細信息。
-
英特爾
+關注
關注
61文章
9950瀏覽量
171695 -
Web服務
+關注
關注
0文章
26瀏覽量
18457 -
SPARK
+關注
關注
1文章
105瀏覽量
19893
發布評論請先 登錄
相關推薦
評論