稀疏編碼用於產品表面異常檢測
9 人贊了文章
1.起源
這幾周老闆給了一個小任務,要求是,我們僅有一張或者幾張一個產品的圖像,通過一種方法學習特徵,然後再見到這個產品的時候,能夠判斷出來是否有瑕疵。對於上面的問題,首先想到了稀疏編碼,下面按照寫作套路來,進行稀疏編碼的介紹。
2.稀疏編碼
稀疏編碼(Sparse coding)包括字典學習和編碼部分,相對於稀疏自編碼,稀疏編碼直接學習數據樣本的特徵集,而稀疏自編碼直接學習原始數據樣本,稀疏編碼目的在於找出一組超完備特徵向量用於表示樣本,這個超完備的向量維數大於原始數據樣本。而只有一層隱含層的稀疏自編碼相當於PCA,用低維度向量表示原始樣本。主要思路首先利用正常紋理的圖像學習得到過完全字典,然後基於字典訓練出特徵,通過稀疏表達和特徵來重建待測圖像,通常瑕疵的重建誤差遠大於正常紋理,從而實現檢測。
3.稀疏編碼的思想
這種方法被稱為Sparse Coding。通俗的說,就是將一個信號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將信號表示出來。「稀疏性」定義為:只有很少的幾個非零元素或只有很少的幾個遠大於零的元素。要求係數 是稀疏的意思就是說:對於一組輸入向量,我們只想有儘可能少的幾個係數遠大於零。
比如在圖像的特徵抽取的最底層要做邊緣的生成,那麼這裡的工作就是從自然原始圖像中隨機選取一些小patch,通過這些patch生成能夠描述他們的「基」,也就是右邊的8*8=64個basis組成的basis,然後給定一個testpatch, 我們可以按照上面的式子通過basis的線性組合得到,而稀疏矩陣就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱「sparse」。
1)Training階段:給定一系列的樣本圖片[x1, x 2, …],我們需要學習得到一組基[Φ1,
Φ2, …],也就是字典。稀疏編碼是k-means演算法的變體,其訓練過程也差不多(EM演算法的思想:如果要優化的目標函數包含兩個變數,如L(W, B),那麼我們可以先固定W,調整B使得L最小,然後再固定B,調整W使L最小,這樣迭代交替,不斷將L推向最小值。訓練過程就是一個重複迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標函數最小。每次迭代分兩步:
a)固定字典Φ[k],然後調整a[k],使得上式,即目標函數最小(即解LASSO問題)。
b)然後固定住a
[k],調整Φ [k],使得上式,即目標函數最小(即解凸QP問題)。 不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。2)Coding階段:給定一個新的圖片x,由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。
4.實現
主要分為三個步驟:
- 無缺陷樣本的字典建立
通過學習斯坦福深度學習中稀疏編碼的基礎理論,參考其提供的一些用於解決稀疏編碼中字典學習的兩個主流優化方法,實現了無缺陷樣本的字典建立。
1. 初始化參數,然後載入數據(1張512*512白化後的灰度圖),然後從中隨機抽取出10000張小圖像塊。
2. 實現稀疏編碼代價函數,並求出代價函數對權值矩陣A的導數,然後檢查它的實現是否正確。
3. 實現非拓撲稀疏編碼代價函數,並求出它對特徵集s的導數,然後檢查它的實現是否正確。
4. 實現拓撲稀疏編碼代價函數,並求出它對特徵集s的導數,即代價函數對s梯度,然後檢查它的實現是否正確。
5. 迭代優化參數A和s(用lbfgs或cg演算法),得到最佳的權值矩陣A,並顯示出來。
設置的patch為16x16的大小,提取256個,顯示如下:
- Training階段
上部分無缺陷樣本的字典建立使用的是一張正常的256x256像素的圖像抽取的patch,訓練階段使用的是同種正常樣本另一張圖像,將其隨機採樣得到patch集合Y{y1,y2…..yn}。在上部分獲得的字典D基礎上,基於下式,通過迭代優化學得稀疏係數a,通過字典重建y。此部分其實就是稀疏表示,一定要分清什麼叫稀疏編碼、稀疏自編碼、稀疏表示!關於稀疏表示的求解有多種,比如貪婪演算法OMP、凸優化方法APG等。稀疏表示在人臉識別上應用很成功,當然應用到這種工業上也不錯。
然後計算y與重建後的相關性和標準差,並將標準差作為輸入參數,使用SVDD訓練。其實不一定非要用SVDD,機器學習的經典方法好多都行,比如聚類。
- SVDD
SVDD是對SVM分類演算法的一種變形,通過已知的一類數據訓練包含儘可能多的數據樣本的超球面,球面的半徑應該儘可能小。對於待檢測點,如果該點落在球面內,則屬於該類;否則屬於異類。
- Testing
在上部分訓練得到SVDD分類器的基礎上,通過同訓練階段同樣的方法獲得分類輸入數值,使用訓練好的分類器進行判斷,當某一個圖像patch屬於異常樣本時,使用矩形框進行標記;當相鄰的patch屬於異常樣本時,將合併矩形框。
參考文獻
[1] 劉洲峰, 閆磊, 李春雷,等. 基於特徵融合與低秩分解的織物疵點檢測[J]. 棉紡織技術, 2017, 45(10):1-4.
[2] 葉鑒霆, 朱秋平, 范賜恩. 基於稀疏編碼投影特徵的布匹瑕疵檢測[J]. 科學技術與工程, 2014, 14(33):111-115.
[3] Zhou J, Semenovich D, Sowmya A, et al. Sparse Dictionary Reconstruction for Textile Defect Detection[C]// International Conference on Machine Learning and Applications. IEEE Computer Society, 2012:21-26.
[4] Olshausen B A, Field D J. Emergence of simple-cell receptive field properties by learning a sparse code for natural images.[J]. Nature, 1996, 381(6583):607-9.
[5] 景軍鋒, 范曉婷, 李鵬飛,等. 應用深度卷積神經網路的色織物缺陷檢測[J]. 紡織學報, 2017, 38(2):68-74.
[6] 稀疏編碼學習參考http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
本人水平有限,表述不清楚或錯誤的地方請指出,一起進步!
歡迎點贊(開心臉)
推薦閱讀: