分类工具介绍#
章节目标#
了解什么场景下应该选用分类工具
了解分类工具中配置器和算子的连接关系
了解分类工具中的配置器和算子
支持的使用场景#
视图级缺陷检测:需要输出视图级的图像类别,且缺陷占图像面积比例大于20%的场景
分类工具中配置器和算子的连接关系#
详细参数定义及各配置器输入输出请参考 工具及详细流程图
分类工具中的配置器#
标签类别参数配置器(label_classes.conf)#
描述:用于配置分类工具中可能出现的目标类别列表(
visionflow::param::LabelClasses),例如[划伤, 脏污, 黑点],目标标签列表会被用于标注器以提前确定类别范围。
Warning
不能出现重复的类别名
标注器参数配置器(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)来完成标注过程。
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::MultiNamesPolygonRegionList,visionflow::props::MultiNamesPolygonRegionList是(visionflow::MultiNamesPolygonRegion)的集合, 表示单张图片内所有视图的分类推理结果,每个visionflow::MultiNamesPolygonRegion表示分类工具推理出的视图的区域、类别和得分。
trt模型推理算子(trt_infer)#
描述:与infer算子功能相同,当需要推理trt模型时选择trt_infer算子。
推理结果比对算子(comparator)#
描述:计算推理结果和对应标注的相似性,得到最终模型效果的评价指标:视图级准确率。
基本原理:参考 模型评估
Note
视图匹配对应标注/推理结果时,总会匹配 IOU 最大的结果,因此存在多个视图匹配同一标注的情况。 对于最大 IOU 小于等于阈值的情况则被认为是视图未匹配到标注/推理结果,因此会认为该视图是未标注/未推理的。 在分类中,该阈值为 0.85。
所有视图被划分为三种标识
visionflow::SplitTag:训练集 train,测试集 test,其余的未知集的标识为 unknown。 视图级混淆矩阵统计时会认为训练集和测试集是有标注的,而未知集是没有标注的。 因此未知集不参与匹配标注。 没有标注的训练集和测试集不会参与视图级混淆矩阵统计,也不会被计入视图级准确率中。视图级准确率为: \(Accuracy = \frac{1}{N} \sum_i^N{(y_i = \hat{y_i})}\)
视图级混淆矩阵中的 未标注 是指在 未知集 中对应的推理结果数量; 未推理 是在 所有视图 中统计没有推理结果的数量。
Warning
当新加入视图或者移动视图时,会存在新视图能匹配其他已有的推理结果情况。因此我们要求用户需要修正标注,或者重新完整推理一遍,否则不保证结果的正确性。