H
a
l
c
o
n
之
M
L
P
Halcon之MLP
Halcon之MLP
模
型
训
练
模型训练
模型训练
HTuple hv_MLPHandle
一 定义模型
HOperatorSet.CreateClassMlp(180, 50, 5, "softmax", "normalization", 10, 42, out hv_MLPHandle);
二 读取图像
HOperatorSet.ReadImage(out ho_Image, hv_ImageFiles.TupleSelect(hv_Index));
三 获取特征输入矩阵
gen_features(ho_Image, out hv_FeatureVector);
四 添加训练样本
HOperatorSet.AddSampleClassMlp(hv_MLPHandle, hv_FeatureVector, hv_iGrade);
五 训练模型
public static void TrainClassMlp(HTuple MLPHandle, HTuple maxIterations, HTuple weightTolerance, HTuple errorTolerance,
out HTuple error, out HTuple errorLog);
HOperatorSet.TrainClassMlp(hv_MLPHandle, 500, 1, 0.000001, out hv_Error, out hv_ErrorLog);
六 保存模型到本地
HOperatorSet.WriteClassMlp(hv_MLPHandle, hv_ModelPath);
前
向
推
导
前向推导
前向推导
一 读取模型
HOperatorSet.ReadClassMlp(model_path ,out hv_MLPHandle);
二 读取预测图像
HOperatorSet.ReadImage(out ho_Image, hv_ImageFiles.TupleSelect(hv_Index));
MachineMaster.halcon.GenDetectionRegion(ho_Image, out ho_DectionRegion, out HObject ho_DectionContour, hv_RegionType);
MachineMaster.halcon.gen_features(ho_DectionRegion, out hv_FeatureVector);
三 推导
HOperatorSet.ClassifyClassMlp(hv_MLPHandle, hv_FeatureVector, 5, out hv_FoundClassIDs,out hv_Confidence);
四 预测结果处理
hv_score_base = hv_Score_Base.TupleSelect(hv_FoundClassIDs.TupleSelect(0));
hv_grad = (hv_FoundClassIDs.TupleSelect(0)) + 1;
评测指标
private List<string> preds_list = new List<string>();
private List<string> labels_list = new List<string>();
private string CalculateAcc(List<string> preds_list, List<string> labels_list)
{
int correct = 0;
string label = string.Empty;
for (int i = 0; i < preds_list.Count; i++)
{
string label_substring = labels_list[i].Substring(1, 1);
if(label_substring == "A")
{
label = "1";
}else if(label_substring == "B")
{
label = "2";
}
else if (label_substring == "C")
{
label = "3";
}
else if (label_substring == "D")
{
label = "4";
}
else if (label_substring == "E")
{
label = "5";
}
if (preds_list[i] == label)
{
correct++;
}
}
string res = (correct / preds_list.Count).ToString();
return res;
}
preds_list.Add(hv_grad.ToString());
labels_list.Add(hv_FileName);
string res = CalculateAcc(preds_list, labels_list);