2023年7月8日 星期六

AOI產業職涯規畫相關文章

 之前好一陣子都在搜尋AOI相關文章, 一方面是好奇前景(錢景)好不好, 也害怕中年會不會有失業的問題

以下是在網路上搜尋的文章:

[請益] AOI影像處理職涯規畫問題

https://www.ptt.cc/bbs/Soft_Job/M.1535304457.A.FFE.html

[請益] AOI新鮮人請益

https://www.ptt.cc/bbs/Tech_Job/M.1530971769.A.B09.html

[請益] 跳出舒適圈的下份工作

https://www.ptt.cc/bbs/Tech_Job/M.1528378619.A.304.html

[請益] 一個重要問題

https://www.ptt.cc/bbs/Soft_Job/M.1518744764.A.06B.html

關於AOI光學檢測產業的發展

https://www.dcard.tw/f/job/p/233896388

AOI工程師 Offer請益(鴻海iPEBG/由田新技)

https://www.dcard.tw/f/tech_job/p/242308306


希望以上文章可以給更多人理解跨入AOI產業時的一些問題, 更了解AOI產業在做甚麼

2021年1月20日 星期三

如何提高CNN準確度

markdown 主要從網路上心得做整理 * 增加更多Data * 參考[data imbalance-資料不均勻問題與處理方式](https://ny20201209blog.blogspot.com/2020/12/data-imbalance.html)中的data Oversampling * [更換CNN架構](https://ny20201209blog.blogspot.com/2021/01/kerascnn.html) * 使用預訓練(pretrained)的卷積層 * tune parameter * 提高epoch * learning rate
* 觀察是Overfitting還是Underfitting * Underfitting * 提高epoch、增加訓練時間 * 增加更多特徵 * 減少 regularization * Data augmentation * Overfitting * 減少特徵(無用的特徵)、降維(特徵工程) * L2 regularization * 讓網路變淺(減少層數)、減少隱藏層 * 確保訓練與測試資料來自同一個資料分布 * Drop out * Early Stopping

2021年1月11日 星期一

在Keras上使用經典的CNN架構

markdown CNN架構選擇一直是deep learning中很重要的一部分,從早期LeNet-5用來手寫字元辨識
F-CNN、resnet、vgg19...
一開始心中都會有個疑問,到底這些層數是怎麼決定出來的
後來大概理解就像是hyperparameter一樣吧,透過不斷的實驗而得出來的最佳化結果
通常這類的CNN架構,還會包含預先訓練好的conv layer
讓你在訓練新的data時收斂速度更快

在keras中,只要簡單的指令就可以快速的把這些經典的CNN模型架起來
並且可以修改輸入的影像尺寸、增減模型的層數
```=python # 定義你的輸入影像尺寸 custom_input_shape =(128, 128, 3) # 定義你的data類別總數 classes = 6 # 從tf.keras.applications載入CNN架構 base_model=MobileNetV2(weights='imagenet', input_shape=custom_input_shape) x=base_model.output x=GlobalAveragePooling2D()(x) x=Dense(1024,activation='relu')(x) #增加dense層讓model可以學習更複雜的分類 x=Dense(1024,activation='relu')(x) #dense layer 2 x=Dense(512,activation='relu')(x) #dense layer 3 preds=Dense(classes,activation='softmax')(x) #最後一層需填入dataset的類別總數 model=keras.Model(inputs=base_model.input,outputs=preds) #宣告model, 指定輸入和輸出 model.summary() # 用文字方式顯示CNN架構 ``` 想看keras有甚麼經典模型可以看這裡Module: tf.keras.applications 參考:Keras with MobilenetV2 for Deep Learning

2021年1月5日 星期二

在C#上使用emgucv中的image stitching(影像拼接)功能

markdown 測試資料下載:test data 安裝emgucv方法參考連結 ```=C# //載入影像到image array中 string[] dirs = Directory.GetFiles(@"你的影像路徑資料夾", "*.jpg"); Image[] sourceImages = new Image[dirs.Length]; for (int i = 0;i(dirs[i]); } Stitcher stitcher = new Stitcher(); //選擇特徵演算法 Emgu.CV.Features2D.SIFT finder = new Emgu.CV.Features2D.SIFT(); WarperCreator warper = new SphericalWarper(); stitcher.SetFeaturesFinder(finder); stitcher.SetWarper(warper); VectorOfMat vm = new VectorOfMat(); Mat result = new Mat(); vm.Push(sourceImages); //紀錄拼接時間 Stopwatch watch = Stopwatch.StartNew(); //拼接開始 Stitcher.Status stitchStatus = stitcher.Stitch(vm, result); watch.Stop(); if(stitchStatus == Stitcher.Status.Ok) { Bitmap img = result.ToBitmap(); img.Save("save.bmp"); } ``` 結果


 可依使用需求修改拼接演算法
 EX:影像角度旋轉量較大的用SIFT 
想要運算速度快一點的可以用ORB

2020年12月31日 星期四

data imbalance-資料不均勻問題與處理方式

markdown 問題
許多實際應用中,資料不均勻是常見的 如:工廠中的OK/NG的樣本數比例、醫學影像中罕見疾病的發生機率 使用不均勻資料進行機器學習,所產生的結果會造成偏差 例如:[信用卡詐騙分析](https://www.kaggle.com/mlg-ulb/creditcardfraud)的資料集中,no fraud與fraud佔的百分比為99.83%、0.17% ![](https://i.imgur.com/HF2qj57.png) 由於資料的數量偏向某一類別,在資料沒有處理的情況下會造成overfitting 分類模型將假定在大多數情況下沒有詐騙,而實際的模型是希望能找出少數的詐騙事件 解決方法 * 收集更多數據 * 設定訓練時的 class weights 調整訓練時的類別權重,讓類別資料數較少的影像有較高的權重 EX:當資料數量為100:2:50, 權重可設定為 $\dfrac{100}{100} : \dfrac{100}{2} : \dfrac{100}{50} = 1 : 50 : 2$ ```=python # 設定訓練權重 class_weight = {0: 1., 1: 50., 2: 2.} model.fit(X_train, Y_train, nb_epoch=5, batch_size=32, class_weight=class_weight) ``` * Oversampling * Random oversampling 隨機重複採樣相同資料填充數據集 * Data Generator 影像中的過採樣 對現有影像旋轉、位移、調整亮度、縮放產生更多數據集
參考[keras ImageDataGenerator](https://keras.io/api/preprocessing/image/) * SMOTE(Synthetic Minority Oversampling Technique)
基於已存在的資料,隨機抽取一個點,並與他的鄰居資料點(k-nearest neighbors)產生一個新的合成資料 * Undersampling * Random undersampling 從各類別中隨機抽取樣本 * Cluster
各群內進行clustering(K-Means),刪除遠離各群群心的資料點 Note:採樣流程要在切分訓練、測試集之後,才能讓測試集保持純度 所得到的測試結果才有鑑別度 參考 [训练集样本不平衡问题对CNN的影响](https://zhuanlan.zhihu.com/p/23444244) [smote-enn-解決數據不平衡建模的採樣方法](https://medium.com/%E6%95%B8%E5%AD%B8-%E4%BA%BA%E5%B7%A5%E6%99%BA%E6%85%A7%E8%88%87%E8%9F%92%E8%9B%87/smote-enn-%E8%A7%A3%E6%B1%BA%E6%95%B8%E6%93%9A%E4%B8%8D%E5%B9%B3%E8%A1%A1%E5%BB%BA%E6%A8%A1%E7%9A%84%E6%8E%A1%E6%A8%A3%E6%96%B9%E6%B3%95-cdb6324b711e)

2020年12月28日 星期一

在C#上使用Nuget套件安裝EmguCV

markdown 還記得2.X版需要下載一包檔案在解壓縮,並設定環境變數 才能在C#上使用EmguCV的函式庫 在EmguCV 4已經可以在C#內建的NuGet套件管理員上做安裝,非常方便 官網安裝教學:網址 打開VS 進到NuGet套件管理員,搜尋emgu





安裝由Emgu Corporation發布的Emgu.CV.runtime.windows 安裝後來測試看看 讀入圖片並進行邊緣檢測 GUI介面拉一個button 跟picturebox ```=C# public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog o = new OpenFileDialog(); o.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory; o.Title = "請選擇圖片"; o.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"; if (o.ShowDialog() == DialogResult.OK) { Image

image = new Image(o.FileName); Mat edges = new Mat(); CvInvoke.Canny(image, edges, 3, 3 * 3, 3); pictureBox1.Image = edges.ToBitmap(); } } } ``` 打完會出現無法將類型 'Emgu.CV.Image' 隱含轉換成 'System.Drawing.Image 這邊要在NuGet多安裝EmguCV套件,才能將image格式轉換為Bitmap 套件名稱為Emgu.CV.Bitmap 安裝後就可以將Image格式轉換為Bitmap讓picturebox顯示 pictureBox1.Image = image.ToBitmap(); 出現一個錯誤 ``` 識別為 'Emgu.CV.Bitmap, Version=4.4.0.4099, Culture=neutral, PublicKeyToken=7281126722ab4438' 的組件 'Emgu.CV.Bitmap' 會使用 'Emgu.CV.Platform.NetStandard, Version=4.4.0.4099, Culture=neutral, PublicKeyToken=7281126722ab4438',而後者的版本高於識別為 'Emgu.CV.Platform.NetStandard, Version=4.4.0.4061, Culture=neutral, PublicKeyToken=7281126722ab4438' 的參考組件 'Emgu.CV.Platform.NetStandard' ``` 這裡須將NuGet內的套件版本修改為同一版本號



對Emgu.CV點擊進行版本更新 

就可以執行了

2020年12月20日 星期日

打光方式

人之所以可以看到任何物體,都是來自於有光

而自動光學檢測中,以攝影機來取代人的眼睛

而物體成像是由光線照到物體所成像的結果

那怎麼讓這個物體成像的光也就非常重要了

好的打光方式可以最大化物體要檢測的可能瑕疵處

因此公司通常也會有專門研究於於打光光源色彩的光學工程師





以這個硬幣為例,在不同照明方式下有不同的成像結果

直接照明:光線直接照射物體,顯示成像結果有亮度不均的問題,硬幣中間部分過亮

漫射照明:相較於直接照明結果,光線分布較均勻

同軸照明:相較於直接照明與漫射照明,原先的細微部分消失,成像結果較平滑

高角度傾斜照明:成像結果凸顯影像凹凸不平處,類似邊緣檢測結果

低角度傾斜照明:相較於高角度照明,低角度傾斜照明的結果更貼近邊緣檢測結果

背光:檢測外部輪廓





AOI產業職涯規畫相關文章