此文章之範例適用於下列條件:
硬體需求 :
- Advantech AIR 300 Training server
- TM Robot (HW 3.0 and above version)
- 電控箱
- 偏光片
- 適當的工作環境
- 校正板
軟體需求 :
- Dongle with TM AI license
版本要求:
- TMflow 軟體版本: 1.88.2200(若是使用以上之版本,需對應相關版本的TM AI+ Training Server )
- TM AI+ Training Server 2.12.2200(若是使用以上版本,需對應相關的TMflow 軟體版本)
電控箱檢測任務說明 #
檢測流程 : #
以電控箱顯示面板進行Pattern matching定位,並將手臂移至檢測區域,依序檢測下列項目
1.電源線上是否裝置濾波磁環
2.線頭是否確實插進插槽
3.螺絲孔是否有螺絲
4.排線方式是否正確
拍攝畫面調整 #
放置電控箱於工作平面中 #
確定工作環境為固定的,將電控箱置於工作平面上,調整拍攝角度,並將光源打開,可換上偏光片,避免反光導致圖像不清楚
移動手臂選取拍攝範圍 #
將手臂移至欲拍攝位置,使用控制器控制手臂移動,並透過Vision觀察欲檢測物是否在可視範圍內
拍攝畫面及參數調整 #
確定要檢測的視野範圍,放置一塊校正版,開啟光源(建議使用偏光片,避免反光導至拍攝不清楚),調整相機參數
如何選取ROI與收圖 #
收圖說明 #
進行AI Classification時,並非將整個畫面均收圖,必須針對欲偵測範圍內的特徵進行選取,以下分別示範下列檢測內容如何選取ROI及選擇應收取的圖片
- 是否有裝設電磁環
- 有裝設電磁環為OK
- 無裝設電磁環為NG
- 插件是否確實插入
- 有確實插入為OK
- 無確實插入或是未插入為NG
- 螺絲孔是否有鎖附螺絲
- 鎖附螺絲為OK
- 未鎖附螺絲為NG
- 排線有沒有接通正確
- 排線接通且正確為OK
- 排線未接通為NG
- 排線交錯接通為CROSS
收圖說明-是否有裝設電磁環 #
先將電池環附上,由於電磁環附於電源線上,會有一定的移動範圍,針對電磁環進行框選框選時,必須盡可能考量電磁環的移動可能,參考如下圖
收集OK的情況時,必須考量電磁環移動的各種可能性,所以可以試著多移動電磁環,以製造電磁環出現的各種可能,為了確保有足夠的資訊,建議收取30張左右的圖片,示範如下
收集NG的情況時,必須考量電源線的各種可能性,所以可以試著多製造電源線出現的各種可能,為了確保有足夠的資訊,建議收取30張左右的圖片,示範如下
收圖說明-插件是否確實插入 #
由於插件位置固定,插件畫面須於ROI畫面中佔絕大部分,以此避免受到背景因素而影響AI判斷
收集OK的情形時,由於插件變化不大,可以試著改變線頭的角度,建議收取30張左右的圖片,或是改變環境光源以適應各種環境變化,如若要改變環境光源,建議多收取一些圖片以增加資訊給AI學習
收集NG的情形時,須多收取未完全插入的可能性,以防止AI將幾乎插進去與完全插進去的可能搞混,同時完全沒有插入的可能也要考量進去,建議收取30張左右的圖片
收圖說明-螺絲孔是否有螺絲_上拍電控箱 #
框選螺絲孔時,孔位也須於ROI中佔一半以上,考量到拍攝螺絲有多種角度或是光線問題,框選範圍也不能過於狹窄,才能應付不同的情形
由於螺絲鎖附螺絲的狀態不會有太多的變化,加上背景多為金屬版面,所以我們可以製造額外的光源,以此增加各種環境變化的資訊
以下示範收取OK的情形,建議收取30張左右的圖,可以發現每張圖均受不同的光影響
收取NG時,同樣可以參考與收取OK情形的方式,也同樣建議收取30張左右的圖片,並且考量不同光源影響
收圖說明-螺絲孔是否有螺絲_側拍電控箱 #
拍完上方螺絲後,我們接著移動手臂至電控箱側面,檢測側面電控箱螺絲是否鎖附,由於側面拍攝會有各式各樣的變化,一樣可以額外製造光源來模擬變化情形
螺絲孔一樣需要佔ROI範圍的一半以上,且螺絲孔盡量在ROI中間,以防反光導至AI資訊誤判
同樣在收取OK的情形,可以考量不同的光源,為了使得AI能夠判斷更多螺絲孔是否鎖附螺絲,可以將上拍電控箱的情形加入此情況一起進行訓練,建議收取30張左右的圖,配合上電控箱的情形,以此應對各種情形
而在收取NG的情形,一樣可以將上拍電控箱的情形加入此情況一起進行訓練,建議收取30張左右的圖,配合上電控箱的情形,以此應對各種情形
收圖說明–排線有沒有接通正確 #
此次任務目的為確認排線是否確實插入以及插入正確位置,不能有錯插或是未插入的情形,整個排線也須佔ROI的絕大部分範圍,盡量不要有多餘的背景,而影響AI判斷,我們將排線分成三種情形進行收圖
- 一一對應,線交疊也接受,視為OK
- 線頭確實插入,但是插錯洞,視為CROSS
- 線頭未確實插入,視為NG
收圖說明–排線有沒有接通正確_OK情形
一一對應,線交疊也接受,確定線頭確實插入,製造一些開闔的情形,也製造線頭交疊,約收集30張左右,以下均視為OK的情形
收圖說明–排線有沒有接通正確_CROSS情形
線頭確實插入,但是插錯洞,收取兩條線交錯,三條線交錯,四條線交錯的情形,盡可能考量所有排列組合,上述情形均收取2至3張圖,所以總共約收取30張左右
收圖說明–排線有沒有接通正確_NG情形
線頭未確實插入,收取可能有四條未插,三條未插,兩條未插,甚至全部未插的情形,收取約30張左右的圖
收圖說明-存圖方式 #
存取圖片分兩大項(詳細存圖說明可以參閱說明書)
- 在AI Classification儲存ROI圖
- TM AI+ Training Server Dataset
- TM SSD外部硬碟2
- 用Vision Job 執行時儲存Source圖
-
- TM SSD 外部硬碟
- Network Service
- Save Image Component
當選擇第二項方式儲存Source圖,可於2.12 Training Server 的Dataset中Crop ROI
Crop ROI,Crop後的ROI會被標記為unlabeled
TM AI+訓練模型並將AI模型匯入手臂測試 #
TM AI+操作 #
分別將上述檢測流程之圖片存成一個為OK的資料集,另一個為NG的資料集,示意如下
TM AI+ 建立於公司內部服務器上。 任何可以連接到公司內網的設備都可以透過瀏覽器使用TM AI+,對於操作的系統沒有任何限制,本篇文章使用TM AI+ Training Server 2.12.2200作為示範
建立Classification的資料集
點擊編輯,建立資料集
建立Label及上傳對應的資料集
這是Project的管理畫面,可以在此建立我們的專案
新增Project,命名並選擇Classification
依照任務情境選擇適合的模型以及資料集
調整完參數後,開始訓練模型
訓練完成後,可以透過summary查看訓練模型的效果,並透過Heatmap進行分析,判斷AI所學習到的資訊,是否為我們所要比較的特徵,接著本文會分別分析各個檢測結果並進行分析
TM AI+-是否有裝設電磁環 #
觀察Training Progress,其每次訓練的Accuracy幾乎都在百分之百,表示檢測電磁環的模型是比較穩定的
藉由Heatmap可以發現AI都有偵測到線上的電磁環,表示AI學習的特徵為合理的特徵,將此模型匯入手臂進行測試,測試下來均能穩定判別點磁環的有無
之後切換到另一台手臂及環境測試,也均能穩定判別,模型無須更動
TM AI+-插件是否確實插入 #
觀察training progress,其多次訓練的Accuracy在百分之百,表示檢測插件是否確實插入的模型是比較穩定的
藉由Heatmap發現AI學習的特徵聚焦在上方的小黑孔上,若是未確實插入,上方的黑孔會特別明顯,而被判定為NG,其結果如我們預期,NG情形的Heatmap也關注在上方的黑孔是否過於明顯,或是插件完全脫落,將模型匯入手臂後,也能順利運行各種情況
之後切換到另一台手臂及環境測試,發現完全脫落的情形容易被判定為OK,猜測為光源的變化導致接線拍攝不明顯,誤將線頭平放在插座上方的情形誤判,所以在此環境下,又增加了20張左右的NG情形,同時也增加20張左右的OK情形適應環境變化
TM AI+-螺絲孔是否有螺絲_上拍電控箱 #
觀察training progress,其訓練的Accuracy多為在百分之百,表示上拍電控箱情形下檢測螺絲孔是否有螺絲的模型是穩定的
藉由Heatmap可以發現無論在何種光源下,AI都能學習到孔洞上是否有螺絲這個特徵,將模型匯入手臂後,測試也很穩定
之後切換到另一台手臂及環境測試,也均能穩定判別,模型無須更動
TM AI+-螺絲孔是否有螺絲_側拍電控箱 #
觀察training progress,其訓練的Accuracy也多為在百分之百,表示側拍電控箱情形下檢測螺絲孔是否有螺絲的模型也算是穩定的
- 觀察Heatmap,AI所關注的特徵也確實有在螺絲孔是否有螺絲上,但是將模型其匯入手臂進行測試時,有些角度的螺絲孔容易受框選的ROI影響而辨識錯誤,表示此模型不夠穩定,資料量也不夠多
- 建議將上拍螺絲的圖一起考慮進去,進行訓練,以此獲得相對穩定的模型,也可以結合以往關於螺絲鎖附的資料,就能訓練出比較穩健的模型,如此一來,此模型就能運用在此電控箱上的多數螺絲孔位上
- 考量較多資料所訓練出來的模型,在切換手臂及環境後,也能穩定的判斷螺絲孔是否有螺絲
TM AI+-排線有沒有接通正確 #
以上述收圖方式進行第一次訓練,training progress較前面的幾種情形不穩定一些
觀察Heatmap,無法確定OK有交疊之情形與CROSS的情形是否有被AI學習出來,需要匯入手臂進行實際的測試
1.匯入手臂進行測試之後,可以發現CROSS下的兩條線交錯容易判定為OK,三條線及四條線交錯的則沒有問題
2.而NG情形下,線並排未插入也容易被判定為NG
3.OK情形下,若是存在交疊也容易判為CROSS
將誤判的情形進行收圖約20張左右,重新訓練後,依舊未能改善問題,甚至未能收斂出較正確的結果
所以我們將模型選擇由Regular改為Ultra進行訓練,進行資料增量,以及些微的參數調整,使其考量更多的變化
1.Epochs由30加到100,使其有機會找到收斂的結果
2.Batch Size由設定的小一些,使其同時不會看太多可能性,而導致無法收斂
3.Learning Rate微調低一些,使其較有機會走到較低的Loss
調整後的training progress有找到較低的Loss,也出現一些百分之百的Accuracy,但是還不能確定訓練出來的模型為合理的
再將此模型匯入手臂測試,改善了以下問題
- NG的情形不會再誤判為OK
- CROSS的情形不會再誤判為OK
OK情形下,若是帶有交疊的問題,依舊無法辨識出來
建議將OK若是有交疊的情形當作是CROSS,當檢測出來為CROSS依舊需要檢驗人員進行調整
因此將問題改分類為下列情形 :
- 一一對應,線需要條條分明,視為OK
- 線頭確實插入,但是交錯或是出現節點視為CROSS
- 線頭未確實插入,視為NG
重新調整分類的情形後,進行模型訓練,並觀察Heatmap,發現AI能正確學習出線與線交錯所導致的節點,以及未確實插入而露出洞口的情形
最後匯入手臂以及改變環境進行測試,均能穩定運行
Tip #
- 收圖時可以先收30張左右進行訓練,接著匯入手臂測試,如遇判定錯誤之情形,可將錯誤情形再收取20張進行測試
- 模型訓練結果不理想,可以改用Ultra模型進行訓練,並適當調整augmentation,考量物體可能有對稱,或是縮放的情形
- 模型訓練不穩定,可以將Epoch增加至50至100,使其有機會找到收斂的結果,Learning可以調降至0.00008左右,使其有機會找到較低的Loss