EasySegment - 检测和分割缺陷

EasySegmentOpen eVision的深度学习细分库。它包含无监督分割工具 (EUnsupervisedSegmenter 类)。

Deep Learning Studio

要在 Deep Learning Studio中创建无监督分割工具:

1. 开始 Deep Learning Studio
2. 选择 无监督分割器 (在 新建深度学习工具 对话框中)。

以下对话框显示在 Deep Learning Studio 的开头或从工具栏创建新的深度学习工具时。

配置

无监督分割器工具有5个参数:

1. 神经网络 容量 (默认: 正常)代表它能够学习的信息量。容量越大,工具速度越慢。

在API中:

容量由枚举类型 EUnsupervisedSegmenterCapacity表示。
EUnsupevisedSegmenter::Capacity 设置工具的容量。
2. 图像类型 (默认: 单色 (1 通道)):

在API中:

要使用单色(灰度,1通道)图像,将 EUnsupervisedSegmenter::ForceGrayscale 设置为 true
要使用彩色(3个通道)图像,将 EUnsupervisedSegmenter::ForceGrayscale 设置为 false
3. 使用 缩放EUnsupervisedSegmenter::Scale) 将图像自动调整为较低分辨率并加快处理速度。
4. 采样密度EUnsupervisedSegmenter::SamplingDensity) 是滑动窗口算法的参数,用于使用大小为 (EUnsupervisedSegmenter::PatchSize)的面片处理整个图像。
它表明图像面片之间有多少重叠 (100-100/SamplingDensity %).
实际上,两个连续面片之间的步幅 PatchSize/SampleDensity 像素。
5. 好标签 是包含好图像的类的名称。

训练工具

在API中,要训练无监督的分割器,请调用 EDeepLearningTool::Train(trainingDataset, validationDataset, numberOfIterations) 方法。

迭代 相当于在10 000个图像面片上进行训练,并计算每个训练和验证图像的结果。
训练过程需要大量的迭代重复,才能获得良好的结果。
迭代次数默认为50。
迭代次数越高,训练时间越长,获得的结果越好。

使用相同的训练方法和验证数据集,多次调用 EDeepLearningTool::Train ,相当于调用它一次,但迭代次数更高。
调用 EDeepLearningTool::GetNumTrainedIterations 以获取用于训练分类器的迭代总数。

训练过程保持 异步模式
EDeepLearningTool::Train 启动了一个在后台进行训练的新线程。
EDeepLearningTool::WaitForTrainingCompletion 可暂停程序,直到完成整个训练。
EDeepLearningTool::WaitForIterationCompletion 可暂停程序,直到完成当前迭代。
在训练期间,调用 EDeepLearningTool::GetCurrentTrainingProgression 来显示训练进展。
批量大小 对应于一起处理的图像面片数量。
训练受批量大小的影响。
大批量可增加GPU上单次迭代的处理速度,但需要更多内存。
太小的批量大小,使训练过程无法学到好的模式。
在默认情况下,批量大小在训练期间可自动确定,以针对可用内存优化培训速度。

- 使用 EDeepLearningTool::SetOptimizeBatchSize(false) 禁用此行为。

- 使用 EDeepLearningTool::SetBatchSize来更改批量的大小。

EDeepLearningTool::GetBatchSizeForMaximumInferenceSpeed 获取批处理大小,以使GPU上的(批)分类速度(针对可用内存)最大化。
出于性能原因,通常选择2的幂作为批大小。

验证结果

无监督分割工具有两种度量:

无监督 度量只在好图像上使用工具的结果。只有一个无监督的度量:错误。
Supervised metrics require both good and defective images. 有监督的度量包括AUC(ROC曲线下面积)、ROC曲线、准确度、良好检测率(也称为真阴性率)、缺陷检测率(也称为真阳性率)。

无监督分割工具计算每个图像的分数(请参阅 EUnsupervisedSegmenterResult::ClassificationScore)。结果的标签是通过使用分段器分类阈值 (EUnsupervisedSegmenter::ClassificationThreshold)对该分数进行阈值化来获得的。因此,有监督的度量也取决于该分类阈值的值。

The ROC curve (Receiver Operating Characteristic) is the plot of the defect detection rate (the true positive rate) against the rate of good images classified as defective (also called the false positive rate). 它是通过改变分类阈值获得的。ROC曲线显示了良好检测率和缺陷检测率之间的可能权衡。

ROC曲线下的区域(AUC)独立于所选择的分类阈值,并代表工具的总体性能。其值介于0(不良性能)和1(完美性能)之间。

Deep Learning Studio中:

训练 选项卡中,在验证数据集上(在训练期间)计算度量值 最佳验证错误最佳验证精度 ,而不使用数据扩张。为每次迭代绘制验证误差、训练误差和验证AUC。

数据集结果 选项卡中,将显示各种度量、混淆矩阵、累积得分直方图和ROC曲线。您也可以在此选项卡中直接更改分类阈值。
累积分数直方图显示了良好(绿色)和缺陷(红色)图像(相对于图像分数)的累积比例。
您可以通过三种方式更改分类阈值:直接输入、拖动分数直方图中的阈值线和选择ROC曲线上的一个点。

在API中:

指标由 EUnsupervisedSegmenterMetrics 对象表示,该对象包含以下性能指标:
良好图像上的错误 (EUnsupervisedSegmenterMetrics::GetError
混淆矩阵 (EUnsupervisedSegmenterMetrics::GetConfusion
如果不良图像的结果包含在度量中, EUnsupervisedSegmenterMetrics::IsTotallyUnsupervisedfalse 并且还可以访问以下度量:

- 精确度 (EUnsupervisedSegmenterMetrics::GetAccuracy

- ROC曲线下的区域 (EUnsupervisedSegmenterMetrics:: GetAreaUnderROCCurve

- 对应于分类阈值的ROC点 (EUnsupervisedSegmenterMetrics::GetROCPoint

将工具应用于新图像

Deep Learning Studio中:

打开 分类图像 选项卡,以:
将分割器应用于新图像。
显示主数据集每个图像的详细结果。
Once the unsupervised segmenter is trained, call EUnsupervisedSegmenter::Apply to detect and segment defects in an Open eVision image.

此方法返回 EUnsupervisedSegmenterResult 对象:

EUnsupervisedSegmenterResult::IsGoodEUnsupervisedSegmenterResult::IsDefective 返回工具是否已经确定图像是良好的还是有缺陷的(依据 EUnsupervisedSegmenterResult::ClassificationScoreEUnsupervisedSegmenter::ClassificationThreshold)。
EUnsupervisedSegmenterResult::GetSegmentationMap 返回 EImageBW8 一个图像,其中值不同于0的所有像素都是 有缺陷的 像素。

缺陷像素的值与该位置缺陷的重要性成比例。

EUnsupervisedSegmenterResult::GetRegion 返回与图像的分割区域相对应的 ERegion 对象( EUnsupervisedSegmenterResult::GetSegmentationMap 的所有像素值都严格高于0)。
EUnsupervisedSegmenterResult::Draw draws the segmentation mask.