非监督分割工具介绍#

章节目标#

  • 了解什么场景下应该选用非监督分割工具

  • 了解非监督分割工具中配置器和算子的连接关系

  • 了解非监督分割工具中的配置器和算子

支持的使用场景#

应用场景#

  • 异常目标分割 :用于检测出所有与训练集图像有差异的异常区域。仅使用OK品图像训练非监督分割后,模型将识别并分割出所有与OK图有差异的区域,并将这些区域判为NG。

与有监督分割工具的区别#

  • 训练数据:有监督分割工具需要收集足量缺陷品图片进行训练,而非监督分割工具仅需要OK品图像即可。

  • 检测机理:有监督分割仅能识别已经参与训练的类别目标,而非监督分割工具能检测出所有与训练集OK品有差异的区域。因此即使出现了没有见过的新缺陷,也会由于新缺陷区域与OK图差异较大而被检测出来。

  • 分割能力:有监督分割具有多类别分割能力,可以根据用户的标注类别对缺陷类别进行区分,分割结果较为精准。非监督分割仅能将分割结果分类为NG类,且分割结果偏粗糙。

数据要求#

  • 目前支持检测的最低缺陷对比度为15个DN值,最小检测缺陷尺寸为5*5

  • 要求训练集中图像一致性较好,无明显差异(例如不支持多个型号混合)

非监督分割工具中配置器和算子的连接关系#

非监督分割工具中的配置器#

图像均值配置器(image_mean_conf)#

  • 描述:用于计算训练集中的视图的灰度均值,灰度均值会被用于训练及推理过程中对输入视图进行提前减均值操作。

  • 基本原理:统计训练集中所有视图各通道的灰度总和并除以训练集图像总数。

非监督分割工具训练器(trainer)#

  • 描述:基于AI算法的非监督分割工具训练器,用于生成非监督分割工具模型。

trt模型标定器(trt_calibrator)#

  • 描述:对模型进行int8量化时,为了保证量化后模型精度不会丢失过多,需要进行一个模型标定的过程,此标定过程可以调用trt模型标定器自动完成。

  • 基本原理:trt模型标定器基于输入的原始图像、视图和原始模型,会在内部计算网络各层在int8量化后的新的参数范围,并输出标定后的文件。

Warning

仅在需要进行int8模型转换前调用。

trt int8模型转换器(trt_int8_converter)#

  • 描述:为了提升模型推理的速度,可以将模型进行int8量化以减少推理时的处理数据量。在进行int8推理前需要将原始模型转换为int8模型。

  • 基本原理:int8模型转换器基于输入的原始模型和由trt模型标定器输出的标定文件,自动完成模型的转换并输出int8模型。

trt float模型转换器(trt_float_converter)#

  • 描述:为了提升模型推理的速度,可以将模型进行int8量化以减少推理时的处理数据量,但某些数据集和模型上,int8推理效果劣化严重,此时可以选择用FP16或FP32进行模型推理,可以在保证推理结果不劣化的情况下提升推理效率。

  • 基本原理:float模型转换器仅输入原始模型即可自动完成模型的转换并输出FP32(极速推理高精度)或FP16(极速推理)模型。

非监督分割工具中的算子#

标注器算子(label_oper)#

  • 描述:用于产生某张图像上的缺陷标注、掩模和不学习区域。标注器算子在当前非监督分割工具中是一个占位算子,实际无法自动运行,需要交给标注器开发者自己触发运行。注意在非监督分割中可以进行缺陷标注,但无法参与训练,仅用于统计和展示。

  • 如何产生标注:通过直接给label_oper算子设置输出对应的缺陷标注、不学习区域(VFLOW:Without-Training)来完成标注过程。

Warning

  • 缺陷标注需要根据所在视图的状态(已标注在训练集中(train)、已标注在测试集中(test)、已标注未知集合(unknown))来进行相应的状态更新,否则会影响view_tagger的正常功能

视图标签算子(view_tagger)#

  • 描述:在visionflow中,视图有四种状态,已标注在训练集中(train)、已标注在测试集中(test)、已标注未知集合(unknown)、未标注(unlabel)。当分割工具的前序工具的推理结果发生改变时,view_tagger可以复用之前已有的标注用于生成新的视图的状态。

  • 基本原理:在标注器算子中,生成的标注均带有标签,以表示某个标注是在train、test、unknown状态,当前序工具推理结果发生改变并生成新的view时,会计算新的view和当前已有标注的IOU值,若某个view能找到CIOU大于指定阈值的标注,则将该标注的状态赋予该view。

推理算子(infer)#

  • 描述:将输入的视图经过推理网络计算后得到对应的非监督分割特征图( visionflow::props::FeatureMap ), visionflow::props::FeatureMap 是一个多张灰度图的集合,每一张灰度图均为数值在0-1之间的概率值,表征视图上对应的像素点属于对应类缺陷的概率。

trt模型推理算子(trt_infer)#

  • 描述:与infer算子功能相同,当需要推理trt模型时选择trt_infer算子。

推理结果生成算子(featmap_filter)#

  • 描述:将推理算子的输出 visionflow::props::FeatureMap 转换为最终的输出结果 visionflow::props::PolygonRegionList

  • 基本原理
    • 取出 visionflow::props::FeatureMap 中NG类别的概率图,根据推理参数中得分阈值设定的各类别像素分数阈值进行阈值分割,得到一个0,1二值图

    • 分别对各类别二值图提取缺陷轮廓

    • 根据推理参数中的各类别区域分数阈值对提取的缺陷轮廓进行过滤得到最终剩余的推理结果

  • 区域分数的计算:

Warning

推理结果过滤算子(filter)#

  • 描述:将推理结果生成算子的输出 visionflow::props::PolygonRegionList 经过面积、长边、短边、宽、高等过滤后输出最终推理结果。

  • 基本原理
    • 面积的计算:polygon_region.area()

    • 长边的计算:geometry::min_area_rect(polygon_region.bounding_ring())获取最小外接矩形后取长边

    • 短边的计算:geometry::min_area_rect(polygon_region.bounding_ring())获取最小外接矩形后取短边

    • 宽的计算:envelope(transform_rotate(polygon_region.bounding_ring(), -polygon_region.angle()))获取正矩形后取x方向边为宽

    • 高的计算:envelope(transform_rotate(polygon_region.bounding_ring(), -polygon_region.angle()))获取正矩形后取y方向边为高

推理结果比对算子(comparator)#

  • 描述:计算推理结果和对应标注的相似性,得到最终模型效果的评价指标:像素召回率、像素精确率、区域召回率、区域精确率

  • 基本原理:参考 模型评估