[AVS 專案應用教學] 用深度學習計數模型示範,HMI新增不同工件模型寫法講解

弘翔精密科技股份有限公司
1粉絲
2024年10月14日
我們一般用深度學習去判斷來料的個數
通常會這樣寫
比如說我現在抓一個相機
它現在就有這個相機
假設我們這個弓箭都是用紙畫的
勾在這個勾子上面
這只是模擬而已
我們怎麼用深度學習呢
我們這邊直接拉一個叫 locate point
這個模型然後把它連起來
那連起來後我們要訓練這個model
訓練這個model我們就左下角
就按這個model directory
那按完了以後
你按下去
因為你這個模型還沒有訓練
所以它就會說
你要不要存在這個model00裡面
那這名字都可以隨便改
那你如果OK
它就會建立一個新的資料夾
所以可以看到說
它這個資料夾在這個範例裡面
叫model00
那操作的時候其實就是按這個
然後去選圖案
但是現在沒有圖案
所以你開完model之後
只能先關掉
那關掉以後就按這個
先把這個mark起來
然後取像
那取像的時候
你現在有在影像
所以就按右鍵
存檔
就隨便開一個資料夾
存檔
有1111存檔
然後這樣子
2222存檔
好關掉
那你要有跑這個功能的時候
纔要把這個mark解掉
然後我們是訓練
再點一下
左下角
左下角已經有這個model00
所以這個檔案在哪
在這邊
這個就是它剛才幫你
開出來一個model的資料夾
那裡面的資料結構
就是它的模型的參數
所以點下去了以後
它就會自己把它打開
那把剛才這兩個存檔
我們剛纔不是存在新資料夾
把它讀進來
讀進來以後
這邊就可以調參數
調參數
那一般來說
都是先用這個當sample
然後prefaces點下去預覽
因為這圖解析度很高
所以我只要知道
大概有一個空間在那邊
所以你調越高
影像就越好
我們大概用到2就可以了
然後接下來就是
點這個點
點下去以後
你可以去判讀
等於說讓它去學習判讀
這個東西在什麼位置
那這個建議說
這個圈圈不要太小
所以我們就
調這個圈圈的大小
我比較習慣說
剛好跟這個物體差不多大就好
那調好了以後
先調一個
我們先調一個
調一個以後
我們去調下面這個
的參數
那比如說你給它一些
旋轉啊
然後左右顛倒
那看有沒有要上下顛倒
然後
稍微上下左右shift
然後放大縮小
因為你弓箭可能會
掛在鉤子上會搖晃
然後給它一些
行變量
然後
對比度的一些變化
讓它適應一些
廣場的變化
好那接下來就是
停止條件
一般來說
就是會用這個
without improvement
等於說如果
習慣用15個
15個回合如果它
收斂到平緩
沒有再收斂下去的話
它自己就會停下來
那這個對end user來說
會比較簡單
因為它不用去判斷
它到底收斂了沒有
電腦會幫它判斷
好那要訓練開始之前
就是左下角
它這邊要是綠燈
好那
你如果電腦剛打開的時候
剛打開的時候是紅燈
它現在是紅燈
因為我剛才故意把它關掉
這個的話
這個背景裡面
有一個service
service的話是用來
跟它內部的
這個訓練引擎
單機的訓練引擎
去做溝通
所以我們點一下以後
它就會嘗試連線
那這訓練引擎
也是掛在那個顯示卡
所以它會嘗試去找
這個顯示卡
好那
這邊的綠燈了以後
我們就把這個
一個一個把它點完
下一個一直A回合
然後按save
按訓練
好那這個
只是先大概講解
就是我把它訓練完
好我先跳出
好那如果我們要跑
我們就是把它解開
那我這邊有一個剛才訓練
我把它指向
這個是剛才訓練完
我把這個路徑把它copy
貼上去
這是剛才訓練好這個檔案
好就可以直接跑
那跑的時候
就是這個訓練引擎
要先關掉
那它就會把這個都標出來
都會把這個標出來
好就
我們可以按這個右鍵
然後count
這邊就會顯示個數
好五個
然後再翻
六個
可是現在問題來就是說
如果我的零件很多種
那我怎麼樣去創造一個
很好用的給end user的這個UI
那
這邊的話就是有一個
我剛才示範這個叫做簡單的寫法
那這個話是HMI的demo
這個HMI
demo的話
大概八成都用它內建功能
八成都用內建功能
再加上一點巧思
加上一點巧思
好那內建功能就是
我們可以去畫這個HMI
那我給它
比如說我給它一張影像
還有給它一個on off的按鈕
on off的按鈕是在這裡
on off按鈕
那這個on off的按鈕
就是用來切換
自動模式或手動模式
好給它一個recipe的下拉選單
再給它一個拍
因為你要拍圖
你總不能
叫人家
回到這個開發畫面
所以給它一個拍圖片
自動存檔的按鈕
然後再給它一個訓練引擎
那個
剛纔有個US可以點
點那個模型
按下去以後
就會叫出那個模型的編輯器
然後最後的話
就是給它輸出
目前的這個辨識到的個數
好那稍微解釋一下這個
剛才指的都是八成它內建功能
那兩成發揮自己的巧思是在哪裡
就是我們要去搞這個程式架構
好程式架構
主程式只有在這個
就man這裡
這個是一個單子行序的程式
我拍照然後做一個procedure
然後這個procedure
inspection
它是一個布林值
也就是說這個布林值來自於這個
on off
你如果是off
就是不要inspection
就是手動模式
那如果是on
這就是自動模式
好那我們點進去看
這個渠道影像會丟到這個procedure裡面
好所以
force的時候
我什麼事都不做
我就是把這個model path
model path是一個全域變數
我把它讀出來
讀出來給誰
給HMI滑鼠一點
會點到這邊
給這個訓練編輯器
因為訓練編輯器打開
它要知道它要開哪一個model
秀給你看
所以把這個指過來
好那至於這個model path從哪裡
那個等一下再解釋
好那再來就是我的image
因為我是off這個狀態
所以我的image
我每次拍的時候
我都要存在這個全域變數
叫offline image
color offline image裡面
那假如使用者有去按這個
拍攝讀檔這個按鈕
的話
它就會自動把這個offline image存下
好所以我來看一下
拍攝讀檔按下去會是什麼
拍攝讀檔這個按鈕
按下這個左邊那個閃電
這個是一個按下按鈕的事件
它會去按
btn capture trim image click
好所以
我這個事件裡面
它會讀出這個offline image
這是一個image
可以看到這行編
行編叫image
然後它也讀出了training path
這個path是一個
就是一個你切換recipe的時候
你是切到一個recipe
然後讀出目前的時間碼
那時間碼的話是在這個地方
這個有一定的規則
就是yyyymmdd
然後時時分分秒秒
那這個詳細它這個
控制碼怎麼寫可以看手冊
好那接下來就是
把這個時間碼
時間碼加上image path
image path是路徑
然後時間碼然後jpg
然後就把這個存起來
好這個按按鈕這個很簡單
好那麼重頭戲就來了
這個東西怎麼控制
好那這個東西我們也看到這個閃電這裡
閃電這裡
當我change
change這個recipe
的時候會觸發一個事件
觸發這個事件
好這個事件它做什麼
第一個步驟因為你change
所以我叫呼叫一個函式叫做
dal clean device去把
那個deep learning這個顯示卡的
記憶體先稍微清一下
好那接下來recipe的name
我從這個上面讀進
這個點下去以後它就會秀出
last selected的那個config
的這個名字
好那一開始什麼名字都沒有的話
你再按這個另存這個
logo可以新增它新的名字
那這個容量是無限值
它可以一直新增
好把這個名字讀進來以後我用一個公式
那判斷先判斷這個名字是不是
空的因為你一定要打
好如果不是空的話我就認為
我就寫一個model case
model case是一個相對路徑
目前的資料夾裡面有一個recipe
就是在這邊recipe
這個recipe
然後裡面的資料夾叫model
然後recipe資料夾叫image
所以recipe有一個名字
然後後面有一個model
recipe裡面有一個名字有一個叫image
它就會跑出這樣
recipe washard
點進去裡面有image跟model
recipe羅帽點進去有image跟model
它就會自己跑出來
好這個只是把名字告訴它
好那怎麼把這個資料
跑出來跑出來的話
跑出來之前我們先把它存這個
這個字串我把它存到權域變數
所以剛才你看到這個權域變數
就是用這個字串保存起來
權域變數在左邊這裡
好那我們去看說
檢查說這個資料夾有沒有在
因為你新的recipe剛生出來的時候
只有名字而已裡面內容是空的
沒有東西
所以如果內容是空的時候
我們就copy一個空的model
copy一個空的model
然後怎麼copy
它是direct等於說
你如果model裡面內容是空的
空的話我們就會觸發true
觸發true了以後我們就
把這個比如說羅帽
然後我們就開一個叫model的資料夾
並且把
並且把用一個copy5
把template model
的model裡面
所有的檔案都貼進來
好那個是什麼
左邊這個是template model的model
那
這個裡面的東西其實就是
比如說我新開一個新專案
那我隨便先train一個model
然後把參數都調好
那它會生出資料結構
所以我把它放在固定
把它放在這個template model
以後我有新recipe的時候
我就把這一坨東西
直接把這一坨東西貼到它身上
這樣子Andy user每次
打開的時候那個參數都是調好的
這是一個自己自創的一個技巧
大概是這樣
好那接下來就是
我還要再開一個叫image的資料夾
這個是image pass
那剛才按按鈕的時候
它會跑去哪裡
按按鈕會跑去哪裡
比如說washa
你要做訓練
你的model旁邊
你就要有這個washa
不然的話你的那個訓練的那個編輯器
裡面它沒有圖可以用
所以會要自動把它放在
螺帽旁邊就有image
然後這裡面一開始是空的
等一下可以示範
好那這個大概是這樣
所以我們來玩一下
好再打開
那怎麼用螺帽切到螺帽
然後按
好所以就是變是螺帽
好off
如果要變是washa
切到washa
按
那你有可能因為你這東西不是washa
所以你可能誤判機率會比較高
所以我這個畫面真的washa
好這個是washa
好那這時候呢
如果是這個怎麼辦不一樣的東西
這個東西叫挖狗
所以我們就這邊有個save configuration
按下去
挖狗
ok它就跑出一個挖狗的資料
我們來看一下
這個挖狗會自己跑出來
好裡面有model
而且資料都被自動被copy進去
然後image裡面是空的
好所以我們就
拍攝圖檔
好檔案就跑出來了
好這是一個
好沒有一張然後放這邊
拍攝
好那反邊的挖狗
也可以拍嘛
好按下訓練
那它就會把這個空的模型把它打開
那參數都是調好
好所以按下這個資料夾
切到挖狗的image
那
目前是沒有功能可以自動指向那個
你打開這個recipe
這只能手動選
但是要知道這個名字叫挖狗
然後剛才存image在這邊
好全部選進來
按下右鍵
這邊要習慣就是說
選擇那個相對路徑
好那隨便挑幾張
validation然後
test
就開始挑
star service
按下train
那這個藍線是
那個training data的這個分數
然後橘線的話是
validation的分數
然後紅線是lost
所以lost越低越好
然後藍線跟橘線越高
那我們一般觀察就是
藍跟橘爬升到
一定程度變成平緩而且沒有掉下來
大概斜率是
接近0的時候就可以把它停掉
那我剛纔有設定一個
沒有without improvement
這個自動停止條件
那你如果沒有人沒有一直在
旁邊看的話它也會自己把它停下來
那目前這個系統
它估計訓練時間
大概是15分鐘
這個是估計出來
好這個快要熟練
我先故意先train到這邊
那如果還需要再訓練
的話
如果還需要繼續訓練的話
這邊右下角
resume的按鈕
訓練完可以看一下這個
training data
大致上還ok
這個時候就可以
把這個service
關掉然後離開
離開了以後呢
我們還在這個resume
所以我們就直接把它開起來
好那就可以變成wago
這個就是
可以支援這個
任意增加resume
然後自動去新增model
的一個寫法的一個介紹
