检测工具介绍#

章节目标#

  • 了解什么场景下应该选用检测工具

  • 了解检测工具中配置器和算子的连接关系

  • 了解检测工具中的配置器和算子

支持的使用场景#

  • 区域级缺陷检测 :需要输出缺陷是否存在,并通过矩形边界框确定缺陷的具体位置和大小。

  • 目标粗定位 : 当待检测目标需要提取ROI或去除背景干扰时,可以使用检测工具提取目标的矩形包围框后将包围框区域内视图传递给其余算法工具

与分割工具的区别#

  • 待检缺陷:分割工具需要边界明确或占矩形包围区域面积比例低如线状等。检测工具可检边界不明确,不宜标注的缺陷形态,例散点等。

  • 性能:分割工具要求像素级精度,用于根据面积进行分析等。检测工具只给出矩形框,用于判断缺陷有无,以及具体位置等。

  • 标注方式:分割工具需要准确给出像素级标注,检测工具仅需要给出包围矩形框。

检测工具中配置器和算子的连接关系#

检测工具中的配置器#

标签类别参数配置器(label_classes.conf)#

  • 描述:用于配置检测工具中可能出现的目标类别列表(visionflow::param::LabelClasses),例如[划伤, 脏污, 黑点],缺陷标签列表会被用于标注器以提前确定类别范围

Warning

  • 背景类为默认类别,不需要显式设置在LabelClasses中

  • 不能出现重复的缺陷类别名

标注器参数配置器(label_oper.conf)#

  • 描述:用于配置标注器的自定义附加参数(visionflow::param::BinaryPacks),例如不同标注类别对应的标注样式(纹理、颜色、线宽、线型等)。为了生成检测工具所需要的缺陷标注,在检测工具中我们引入了标注器算子,由于目前标注过程需由人工标注产生,所以标注器算子中的执行逻辑交由人工操作实现而标注器中需要提供较多的检测标注工具,这些标注工具的参数是需要维护在visionflow工程数据中的,且这些参数是由标注器的设计者决定,因此当前标注器参数配置提供了一个较灵活自动的自定义二进制数据类型,以让标注器开发者可以自动设置参数。

图像均值配置器(image_mean_conf)#

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

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

检测工具训练器(trainer)#

  • 描述:基于AI算法的检测工具训练器,用于生成检测工具模型。

检测工具中的算子#

标注器算子(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)#

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)#

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

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