分割工具介绍#
章节目标#
了解什么场景下应该选用分割工具
了解分割工具中配置器和算子的连接关系
了解分割工具中的配置器和算子
支持的使用场景#
像素级缺陷检测:需要输出缺陷的精准的像素级轮廓,及需要由缺陷轮廓计算得到缺陷的面积、长宽、平均灰度等特征用于后续过滤及判定的场景
无需角度的目标粗定位:当待检测目标需要提取ROI或去除背景干扰时,可以使用分割工具提取目标的精准轮廓后将轮廓区域内视图传递给其余算法工具
分割工具中配置器和算子的连接关系#
详细参数定义及各配置器输入输出请参考 工具及详细流程图
分割工具中的配置器#
标签类别参数配置器(label_classes.conf)#
描述:用于配置分割工具中可能出现的目标类别列表(
visionflow::param::LabelClasses
),例如[划伤, 脏污, 黑点],缺陷标签列表会被用于标注器以提前确定类别范围
Warning
背景类为默认类别,不需要显式设置在LabelClasses中
不能出现重复的缺陷类别名
标注器参数配置器(label_oper.conf)#
描述:用于配置标注器的自定义附加参数(
visionflow::param::BinaryPacks
),例如不同标注类别对应的标注样式(纹理、颜色、线宽、线型等)。为了生成分割工具所需要的缺陷标注,在分割工具中我们引入了标注器算子,由于目前标注过程需由人工标注产生,所以标注器算子中的执行逻辑交由人工操作实现而标注器中需要提供较多的分割标注工具,这些标注工具的参数是需要维护在visionflow工程数据中的,且这些参数是由标注器的设计者决定,因此当前标注器参数配置提供了一个较灵活自动的自定义二进制数据类型,以让标注器开发者可以自动设置参数。
图像均值配置器(image_mean_conf)#
描述:用于计算训练集中的视图的灰度均值,灰度均值会被用于训练及推理过程中对输入视图进行提前减均值操作。
基本原理:统计训练集中所有视图各通道的灰度总和并除以训练集图像总数。
分割工具训练器(trainer)#
描述:基于AI算法的分割工具训练器,用于生成分割工具模型。
训练样本推荐器(sample_recommend)#
描述:用于从非训练样本中推荐指定数量的样本,经用户标注后加入训练集用于分割工具训练,以减小对机器视觉工程师挑选训练集的要求。
基本原理:训练样本推荐器输出结果为
visionflow::param::PropertyObjectIdSet
,从PropertyObjectIdSet中获取对应的训练样本的SampleID和ViewID即可获取到推荐的样本。
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)、重点学习区域(VFLOW:Hard-Case)来完成标注过程。
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
各类别对应的概率图,根据推理参数中得分阈值设定的各类别像素分数阈值进行阈值分割,得到一个0,1二值图分别对各类别二值图提取缺陷轮廓
根据推理参数中的各类别区域分数阈值对提取的缺陷轮廓进行过滤得到最终剩余的推理结果
- 区域分数的计算:
取
visionflow::props::FeatureMap
上某缺陷轮廓内的缺陷分数最大值作为该缺陷的区域得分
Warning
推理结果中各
visionflow::PolygonRegion
可能会存在交叠
推理结果过滤算子(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)#
描述:计算推理结果和对应标注的相似性,得到最终模型效果的评价指标:像素召回率、像素精确率、区域召回率、区域精确率
基本原理:参考 模型评估