前言:
==========================================================
分类器相对于深度学习来讲是一种古老传统的图片处理技术。halcon中常见的有四类分类器:
MLP(多层神经网络neural Nets)
SVM(支持向量机)
K-NN(K-最邻近)
GMM(高斯混合类型)
分类器的应用领域主要是下面这些:
image segmentation 图像分割
object recognition 对象识别
quality control 质量控制
novelty detection 缺陷检测
optical character recognition(OCR) 光学字符识别
勇哥第一次见到分类器的视觉项目是锂电池的极片缺陷检测,效果还不错。
这两年深度学习火起来后,发现深度学习完成上面所说的领域的应用更容易,效果也更好。
但深度学习对硬件要求太高,你把IPC加装个一百多W的显卡很多时候是不现实的。
如果你用cpu来跑,会发现速度乎快乎慢,cpu全部内核会100%被占用。
分类器相对于深度学习来讲不吃硬件,所以相对来讲算是轻量级的应用。
==========================================================
这个例子展示了MLP如何用于回归(函数近似)。
首先,产生21个噪声正弦波样本。
然后,利用噪声数据训练具有线性输出激活的MLP。
最后,绘制了训练后的MLP输出和真实无噪声正弦波。
下图是程序的运行结果。
其中蓝色线是真实正弦函数的曲线,绿色线是MLP计算出来的回归曲线。

evalidate_class_mlp 算子:计算多层感知器对特征向量的评估
算子签名:
evaluate_class_mlp( : : MLPHandle, Features : Result)
evaluate_class_mlp计算结果评估所述特征向量的Features,用MLPHandle(多层感知器MLP的句柄)。
用于评估的公式由create_class_mlp描述。调用evaluate_class_mlp之前的MLP必须经过train_class_mlp训练 。
如果将MLP用于回归(函数逼近),即,如果(OutputFunction = 'linear'),则Result是函数在坐标Features处的值。
对于 OutputFunction = 'logistic'和 'softmax',可以将Result中的值解释为概率。
因此,对于OutputFunction = 'logistic',结果元素代表各自独立属性存在的概率。
通常,阈值0.5用于确定属性是否存在。取决于应用,也可以使用其他阈值。
对于OutputFunction = 'softmax',通常将Result最大值的位置 解释为特征向量的类别,并将相应的值解释为该类别的概率。
在这种情况下,应使用classify_class_mlp而不是 evaluate_class_mlp,因为classify_class_mlp 直接返回类别和相应的概率。
dev_update_pc ('off')
dev_update_window ('off')
dev_update_var ('off')
dev_close_window ()
dev_open_window (0, 0, 500, 500, 'black', WindowHandle)
dev_set_part (0, 0, 499, 499)
* Initialize the random number generator. create_class_mlp will overwrite
* the seed. Therefore, we will only get identical results if we call rand once
* before calling create_class_mlp.
* 初始化随机数生成器。创建create_class_mlp将覆盖随机种子。
* 因此,只有在调用create_class_mlp之前调用rand一次,我们才能得到相同的结果。
D := rand(1)
* 创建MLP.
create_class_mlp (1, 3, 1, 'linear', 'none', 1, 9, MLPHandle)
* 产生正弦波的噪声样本.
D := []
T := []
Noise := 0.2
NData := 21
for J := 0 to NData - 1 by 1
D := [D,real(J) / (NData - 1)]
T := [T,sin(rad(360) * D[J]) + Noise * (rand(1) - 0.5)]
endfor
* 绘制样本.
dev_clear_window ()
dev_set_color ('red')
disp_cross (WindowHandle, 250 - T * 200, D * 500, 20, 0)
* 训练MLP.
for J := 0 to NData - 1 by 1
add_sample_class_mlp (MLPHandle, D[J], T[J])
endfor
train_class_mlp (MLPHandle, 200, 0.00001, 0.00001, Error, ErrorLog)
* 生成MLP输出和真实正弦波的曲线图。Y将包含MLP的输出,而G将包含地面真值(即真正弦波)。
NPlot := 101
X := []
Y := []
G := []
for J := 0 to NPlot - 1 by 1
*x轴刻度
X := [X,real(J) / (NPlot - 1)]
evaluate_class_mlp (MLPHandle, X[J], R)
Y := [Y,R]
G := [G,sin(rad(360) * X[J])]
endfor
dev_set_color ('blue')
for J := 0 to NPlot - 2 by 1
disp_line (WindowHandle, 250 - G[J] * 200, X[J] * 500, 250 - G[J + 1] * 200, X[J + 1] * 500)
endfor
dev_set_color ('green')
for J := 0 to NPlot - 2 by 1
disp_line (WindowHandle, 250 - Y[J] * 200, X[J] * 500, 250 - Y[J + 1] * 200, X[J + 1] * 500)
endfor---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


少有人走的路



















