3小時帶你實際體驗一日AI智慧製造工程師
透過專業 AI工程師分享智慧製造案例、風險管理與簡單操作,讓學員能夠具體理解 AI在工廠中應用的願景與困難。
內容簡介
作者介紹
適合人群
你將會學到什麼
購買須知
-
筆記專區
-
3小時帶你實際體驗一日AI智慧製造工程師 - 程式碼
本次要預測的類別一共有以下六種RS: rolled-in scalePa: patchesCr: crazingPS: pitted surfaceIn: inclusionSc: scratches # 下載訓練資料並解壓縮 %mkdir data %mkdir models %cd data !wget https://www.dropbox.com/s/tv08497wvg40ach/NEU-CLS%20%281%29.rar !mv "NEU-CLS (1).rar" NEU-CLS.rar !pip install patool import patoolib patoolib.extract_archive("NEU-CLS.rar", outdir="./") # 最基本的幾個套件,基本上一定要import import numpy as np import time import tensorflow as tf from tensorflow import keras # 跟「繪圖」有關的套件,如果沒有打算繪圖就不用 import %matplotlib inline import matplotlib.pyplot as plt # 跟「Preprocess」有關的套件,如果沒有要訓練模型的話就不用 import from tensorflow.keras.utils import to_categorical from tensorflow.keras.preprocessing.image import ImageDataGenerator # 跟「設計模型」有關的套件,如果沒有要設計或是修改模型的話就不用 import from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Activation, Flatten, Dropout, Conv2D, MaxPooling2D # 跟「編譯(compile)模型」有關的套件 from tensorflow.keras.optimizers import Adam, SGD from tensorflow.keras.metrics import categorical_crossentropy from tensorflow.keras.callbacks import ModelCheckpoint, Callback # 跟「混淆矩陣(confusion matrix)」有關的套件 from sklearn.metrics import confusion_matrix import itertools # 繪圖相關 from PIL import Image import random # 定義必要資訊 IMAGE_NUMBER = 300 type_list = ['RS','Pa','Cr','PS','In','Sc'] file_path = "/content/data/NEU-CLS/" # 打亂資料順序 def unison_shuffled_copies(a, b): assert len(a) == len(b) c = list(zip(a, b)) random.shuffle(c) a, b = zip(*c) return a, b # 查看訓練圖片 def view_image(image_data, title1, title2=None): if title2 is None: num = min(len(image_data), len(title1), 9) else: num = min(len(image_data), len(title1), len(title2), 9) plt.figure(figsize=(14,14)) for i in range(num): plt.subplot(3, 3, i+1) plt.imshow(image_data[i]) plt.colorbar(orientation='vertical') if title2 is None: plt.title(str(title1[i])) else: plt.title(str(title1[i]) + ' | ' + str(title2[i])) # python內載入資料 def data_loader(path, test_set, shuffle=True): raw_train_x = [] raw_train_y = [] raw_test_x = [] raw_test_y = [] plot_data = [] # with zipfile.ZipFile(path, 'r') as myzip: if True: for t_index, t in enumerate(type_list): temp_x, temp_y=[],[] for i in range(IMAGE_NUMBER): # with myzip.open('NEU-CLS/' + t + '_' + str(i+1) + '.bmp') as myfile: myfile = path + t + '_' + str(i+1) + '.bmp' img = Image.open(myfile) ary = np.array(img) temp_x.append(ary) temp_y.append(t_index) if i==0: plot_data.append(ary) # imgplot = plt.imshow(img) # plt.colorbar() shuffled_temp_x, shuffled_temp_y = unison_shuffled_copies(temp_x, temp_y) test_size = int(IMAGE_NUMBER*test_set + 0.5) raw_train_x += shuffled_temp_x[test_size:] raw_train_y += shuffled_temp_y[test_size:] raw_test_x += shuffled_temp_x[:test_size] raw_test_y += shuffled_temp_y[:test_size] shuffled_raw_train_x, shuffled_raw_train_y = unison_shuffled_copies(raw_train_x, raw_train_y) train_x = np.array(shuffled_raw_train_x) train_y = np.array(shuffled_raw_train_y) test_x = np.array(raw_test_x) test_y = np.array(raw_test_y) view_image(plot_data, type_list) return train_x, train_y, test_x, test_y # python內載入資料 raw_x_train, raw_y_train, raw_x_test, raw_y_test = data_loader(file_path, 0.2) # 查看資料集大小 print(raw_x_train.shape) print(raw_x_test.shape) # 設定訓練環境 physical_devices = tf.config.experimental.list_physical_devices('GPU') print(" Number of GPUs available: " , len(physical_devices)) tf.config.experimental.set_memory_growth(physical_devices[0], True) Functions # 畫出訓練的訓練的loss下降/acc上升圖 def show_train_history(train_history): fig , ax = plt.subplots() fig.subplots_adjust(hspace=0.4, wspace=0.4) #設定子圖的間隔 fig.set_figwidth(14) ax1 = plt.subplot(1, 2, 1) plt.title("Accuracy") plt.plot(train_history.history['accuracy'],'-', label='accuracy') plt.plot(train_history.history['val_accuracy'],'-', label='val_accuracy') leg = ax1.legend(loc='lower right') plt.ylabel('accuracy') plt.xlabel('Epoch') ax2 = plt.subplot(1, 2, 2) plt.title("Loss") plt.plot(train_history.history['loss'],'-', label='loss') plt.plot(train_history.history['val_loss'],'-', label='val_loss') leg = ax2.legend(loc='upper right') plt.ylabel('loss') plt.xlabel('Epoch') plt.show() # 畫confusion matrix def plot_confusion_matrix( test_labels, results, classes, normalize=False, title="Confusion Matrix", cmap=plt.cm.Blues): cm = confusion_matrix(test_labels, results) plt.figure() plt.imshow(cm, interpolation='nearest', cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] thresh = cm.max() / 2 for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])): plt.text(j, i, cm[i, j], horizontalalignment="center", color="white" if cm[i, j] > thresh else "black") plt.tight_layout() plt.ylabel('True label') plt.xlabel('Predicted label') # 測量時間工具 class TimeHistory(keras.callbacks.Callback): def on_train_begin(self, logs={}): self.times = [] def on_epoch_begin(self, batch, logs={}): self.epoch_time_start = time.time() def on_epoch_end(self, batch, logs={}): self.times.append(time.time() - self.epoch_time_start) Setting and Preprocess # add channel x_train_reshaped = raw_x_train.reshape(1440,200,200,1) x_test_reshaped = raw_x_test.reshape(360,200,200,1) x_train_normalized = x_train_reshaped / 255 x_test_normalized = x_test_reshaped / 255 y_train_onehot = to_categorical(raw_y_train) y_test_onehot = to_categorical(raw_y_test) print(x_train_normalized.shape) print(x_test_normalized.shape) model1 = Sequential([ Conv2D(filters=32, kernel_size=(5,5), activation="relu", padding="same", data_format="channels_last", input_shape=(200,200,1)), Conv2D(filters=32, kernel_size=(5,5), activation="relu", padding="same", data_format="channels_last"), MaxPooling2D(pool_size=(2,2), data_format="channels_last"), Conv2D(filters=64, kernel_size=(5,5), activation="relu", padding="same", data_format="channels_last"), Conv2D(filters=64, kernel_size=(5,5), activation="relu", padding="same", data_format="channels_last"), MaxPooling2D(pool_size=(2,2), data_format="channels_last"), Conv2D(filters=128, kernel_size=(5,5), activation="relu", padding="same", data_format="channels_last"), Conv2D(filters=128, kernel_size=(5,5), activation="relu", padding="same", data_format="channels_last"), MaxPooling2D(pool_size=(2,2), data_format="channels_last"), Flatten(), Dense(512, activation="relu"), Dropout(0.5), Dense(256, activation="relu"), Dropout(0.5), Dense(6, activation='softmax'), ]) # 定義模型,可以改改看 model = Sequential([ Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last", input_shape=(200,200,1)), Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last"), MaxPooling2D(pool_size=(2,2), data_format="channels_last"), Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last"), Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last"), MaxPooling2D(pool_size=(2,2), data_format="channels_last"), Conv2D(filters=64, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last"), Conv2D(filters=64, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last"), MaxPooling2D(pool_size=(2,2), data_format="channels_last"), Conv2D(filters=64, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last"), Conv2D(filters=64, kernel_size=(3,3), activation="relu", padding="same", data_format="channels_last"), MaxPooling2D(pool_size=(2,2), data_format="channels_last"), Flatten(), Dense(512, activation="relu"), Dropout(0.3), Dense(6, activation='softmax'), ]) model.summary() # 定義訓練方式 # loss function: 交叉熵 # optimizer: Adam # 評估模型: 準確率 model.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=5e-5), metrics=['accuracy']) # 開始訓練 filepath="/content/models/weights-{epoch:02d}-{val_accuracy:.2f}.hdf5" time_callback = TimeHistory() checkpoint = ModelCheckpoint(filepath, monitor='val_accuracy', verbose=1, save_best_only=True, mode='max') callbacks_list = [checkpoint, time_callback] # TODOS # train_history = model.fit( <訓練資料input> , <訓練資料answer>, validation_split=<train/val set切分比例>, epochs=?, batch_size=?, callbacks=callbacks_list, verbose=2) # 儲存模型 model.save("/content/models/") # 看看訓練的怎麼樣了 show_train_history(train_history) # 用用testing set幫模型算分數 score = model.evaluate(x_test_normalized, y_test_onehot) print("Accuracy: ", score[1]*100) # 畫confusion matrix RESULTS = model.predict(x_test_normalized) RESULTS = np.argmax(RESULTS,axis=1) plot_confusion_matrix(raw_y_test, RESULTS, type_list) 📎project.ipynb
-
3小時帶你實際體驗一日AI智慧製造工程師 - 投影片
Rex 黃璽軒 • 經歷:• 樂達創意科技創辦人兼技術長 • 專長:• 深度學習、電腦視覺、工廠自動化 • 經歷: 國立臺灣大學電信工程學系碩士 鴻海科技雲運算事業群訊號模擬工程師 6+ years 電腦視覺實作經驗 5+ years 業內深度學習實作經驗 3+ years 產品/專案開發經驗 (立地於台灣 越南 中國 知名 製造產業) 風險管理大師五大步驟 Andy 黄世氶 • 現職:• 阿柏教育共同創辦人兼技術長 • 專長:• 程式教學、自然語言處理、網頁開發 • 經歷: 國立臺灣大學電機工程學系學士 經濟部工業局DIGI+Talent(跨領域數位人才加速 躍升計畫)必修課程【資料科學領域】講師 經濟部工業局iPAS(經濟部產業人才能力鑑定) 【AI知識課程模組】數位核心課程講師 雲林科技大學、師大附中資訊營隊講師 什麼是機器學習 • 人工智慧:AI (Artificial Intelligence) • 機器學習:ML (Machine Learning) • 深度學習:DL (Deep Learning) • 人工智慧:讓機器表現出像人類一樣的智慧 •機器學習是實現人工智慧的手段 為什麼要用機器學習 • 簡單的任務:基於規則的系統 (Rule-based System) • 例:選單式聊天機器人、深藍 • 複雜的任務:機器學習 •例:圖像識別、AlphaGo •機器學習:給大量資料,讓機器自己找規則! • 想像人類的小嬰兒要怎麼學習...... •機器也是一樣! 機器學習的應用 •物體偵測 • 自動駕駛 Source: https://www.gigabyte.com/tw/Article/cons tructing-the-brain-of-a-self-driving-car • 醫療影像檢測 Source:https://www.bmvc2021- virtualconference.com/assets/papers/1249.pdf • OCR (光學字元識別) • iOS 15: Live Text 在訓練之前 • 訓練模型之前先準備資料 • 以圖像分類為例,圖片就是我們的資料 • 只有圖片夠嗎? • 還需要標註圖片的類別 • 圖像分類的資料(data) 如何訓練一個模型 • 深度學習三步驟 • 什麼是模型 但不用正確率來更新參數!!! 損失函數 • 損失函數常見的有以下幾種: 如何訓練一個模型 • 機器學習三步驟 訓練模型 (梯度下降法) 梯度下降法 • 梯度下降法 (Gradient Descent) • 是深度學習的基石之一 • 但今天時間不夠,不教 • 我們可以簡單的想像成是「滑雪」的過程 • 目標:滑到最低點 (找到能讓損失最低的模型) • 梯度:滑行的方向 模型訓練技巧 • 學習率 (Learning Rate) • 過擬合 (Overfitting) • 優化器 (Optimizer) • Batch size 學習率 • 學習率 (Learning Rate) • 模型的參數更新的速度 • 某種程度上可以想像成「滑雪的速度」 • 不是越大越好• 也不是越小越好 • 調整大小需要經驗與嘗試 過擬合 • 前面有提過,訓練模型就像人類學習一樣 •那讓我們看看小明的學習狀況 • 試想我們今天準備了10000張練習卷給小明寫...... • 一直寫同樣的練習會讓小明考試成績變好嗎? • 即使小明練習卷全對, 考試能全對嗎? • 不會一直變好,考試不能全對 • 小明可能會把練習卷的答案背下來 • 只看練習卷的分數並無 法判斷小明的學習狀況 • 訓練集 (Training Set) 與驗證集 (Validation Set) • 訓練集:作業 • 驗證集:考試 • 避免過擬合(Overfitting) • 訓練時損失很低 • 驗證時損失很高 • 在訓練集訓練後,用驗證 • 集衡量模型表現 • 實務上通常還會有一個標籤不公開的「測試集」(testing set) • 比賽排名、公司驗收用 優化器 • 優化器 (Optimizer) 是一種在梯度下降法中幫助模型訓練得更好 的方法 • 常見的優化器 • SGD (Stochastic Gradient Descent) • RMSprop (Root Mean Square Propagation) • Adam 什麼是 batch • 訓練資料太大,沒辦法一口氣放進GPU裡 • 解法:Mini-Batch Gradient Descent • 把所有資料切成若干組,每次只拿一組來計算梯度 • Mini-Batch的大小我們稱之為Batch Size • 用完所有batch訓練一次稱之為一個Epoch Lily 劉穎立 • 現職: • 洽吧智能資料科學家 • 阿柏教育創辦人兼執行長 • 專長: • 程式教學、深度學習、電腦視覺、邊緣運算 • 經歷: 國立臺灣大學電機工程學系學士 臺大創意創業學程學生會會長 經濟部工業局DIGI+Talent(跨領域數位人才加速躍升 計畫)必修課程【資料科學領域】講師 經濟部工業局iPAS(經濟部產業人才能力鑑定)【AI知 識課程模組】數位核心課程講師 雲林科技大學、師大附中、資訊營隊講師 國泰人壽、新光人壽教育訓練講師 工廠哪裡會需要AI? 樂事洋芋片生產線 想想看 • 影片中,生產製造的哪些步驟可以利用AI優化? 機器人削皮 • 製造過程中,有哪些潛在問題可以利用AI解決? 洋芋片烤焦 • 宏觀整個產業上下游,從馬鈴薯田到我們手中的洋芋片,還有 那些部分有引入AI的價值? 智慧推薦消費者喜歡的口味 工廠哪裡需要AI? 有這麼容易嗎? 聽起來好像什麼問題,都可以利用AI來解決,那為什麼 現在還有這麼多事情需仰賴人力? 半導體案例 半導體案例 包裝袋分類 問題:如何使用AI取代人力分類包裝袋? 風險管理大師五步驟 實際場域影片 https://youtu.be/1LcUU2BkhyY 需求場域 – 鋼鐵工廠 資料集 • 六種分類,每類300張,共1800張 • 每張圖大小為200*200 • 均為黑白.bmp影像 鋼材表面缺陷影像分類 圖像分類 Now open your Colab! Colab 是 Colaboratory 的簡稱 是一個由 Google 提供開發者虛擬主機,可在雲端運行及編輯的一個執行環境 有支援python語言 有GPU! 建議使用Chrome Step 1 Step 2 Step 3 搜尋「colaboratory」並安裝 Step 4 將課程雲端提供的檔案下載,並上傳到此資料夾 Step 5 Step 6 開始訓練嘍! 開始訓練前,你要知道... • tensorflow: 一個機器學習框架,支援深度學習的各種演算法 • keras: 一個適合快速開發的程式庫 • sklearn: python常用的機器學習工具包,裡面有很多方便的函式 • matplotlib: 畫圖用的 • PIL(pillow): 處理圖片用的 • 分六類的話,答案要如何設定呢? 訓練結果 除了正確率,還有什麼方法可以衡量模型? 訓練好模型,然後呢? 風險管理大師五步驟 需求場域 – 鋼鐵工廠 問題:是否可以將生產線上拍攝影像做缺陷分類? 開啟AI專案。 之前 概念驗證? 概念驗證元素 概念驗證Demo https://youtu.be/2Ll4ht8UhZw AOI產品架構 一、人工智慧於製造業導論 更多的個案分析,帶您了解製造業導入AI的眉角 二、機器學習/類神經網路 學習不能只會輸入,反覆輸出才是真正的學進去 三、資料處理 四、物件偵測實戰 除了分類以外, 還可以做更多? 不會只教你跑 五、AI模型部署 六、自動光學檢測DIY 請填寫問卷留下您寶貴的意見
-
-
影片專區
本專區包含活動完整影片以及活動過程各精彩段落,學員可依據自身需求觀看影片
-
3小時帶你實際體驗一日AI智慧製造工程師 - 完整影片
-
精選影片1 - AI在老闆的眼中
-
精選影片2 - 什麼是人工智慧?
-
精選影片3 - 為什麼要用機器學習?
-
精選影片4 - 機器學習的應用與實際視覺化案例
-
精選影片5 - 訓練模型之前需要做的事情
-
精選影片6 - 模型訓練三步驟簡介
-
精選影片7 - 學習率
-
精選影片8 - 工廠潛在的AI應用
-
精選影片9-1 - 智慧工廠實際案例
-
精選影片9-2 - 智慧工廠實際案例
-
精選影片9-3 - 智慧工廠實際案例
-
精選影片10 - AI可以在工廠中的應用
-
精選影片11 - 半導體在AI開發案例
-
精選影片12 - 食品業在AI開發案例
-
精選影片13 - 實作說明
-
精選影片14-1 - Colab環境簡介與建置
-
精選影片14-2 - Colab環境簡介與建置
-
精選影片15 - 六分類的答案要如何設定
-
精選影片16-1 - 實作
-
精選影片16-2 - 實作
-
精選影片17 - 除了正確率,還有哪些方法可以衡量模型訓練結果?
-
精選影片18 - 建立鋼材表面瑕疵檢測系統後還需要注意什麼?
-
精選影片19 - 需求場域與開啟AI專案
-
精選影片20 - 產品落地課程推廣
-