几何匹配工具介绍#

章节目标#

  • 了解什么场景下需要使用几何匹配工具

  • 了解几何匹配工具中配置器和算子的连接关系

  • 了解几何匹配工具中的配置器和算子

  • 算法升级

  • 如何调整训练和推理参数

支持的使用场景#

  • 特定目标定位:用于对多个相似2D工件做高精度定位。相对于AI定位,几何匹配只需要一个模版作为训练集,秒级训练时间,且无需GPU即可得到快速和准确的定位结果。同时,由于此工具参数较多,如何根据图像特点调整参数以获得最优的效果有一定难度,需要用户对图像处理知识有一定的了解。

几何匹配工具中配置器和算子的连接关系#

几何匹配工具中的配置器#

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

  • 描述:用于配置定位工具中可能出现的目标类别列表(visionflow::param::LabelClasses),例如[螺钉, 电阻],目标标签列表会被用于标注器以提前确定类别范围。几何匹配支持同时定位多个目标,每种类别的标签只能有一个。标注时应保持矩形框紧贴目标,如标注框过大,会导致匹配效率下降。

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

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

几何匹配工具训练器(trainer)#

  • 描述:几何匹配工具训练器,用于生成几何匹配工具模型。

几何匹配工具中的算子#

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

  • 描述:将输入的视图经过推理,并根据预设的阈值进行过滤,只保留概率值高于阈值的目标区域,并进行非极大值抑制(NMS)操作,输出最终的目标识别结果。其输出为 visionflow::props::PolygonRegionList 类型。

算法升级#

在visionflow0.10.3及以前的版本中,使用的几何匹配工具为旧版。在当前版本中,我们对几何匹配工具做了全面升级,且支持同时定个多个类别的目标。对于旧版的几何匹配工具,用新版可以正常打开、训练和推理,原有的模型也可以正常使用。但建议用户尽早升级为新版的几何匹配工具,以获得更好的效果,同时旧版的几何匹配工具也会在未来某个版本移除。使用新版VisionFlow创建的几何匹配工具默认为新版,且不能再创建旧版的工具。新版与旧版使用同样的加密狗。

如何调整训练和推理参数#

训练#

  • 原理:首先需要提供含有一个待检产品的训练模板,用于进行模型训练。提取模版上的边缘点,找出边缘点之间的连线形成边缘链,再将边缘链的信息保存下来用于比对即完成训练。

训练参数#

参数

推荐值

调整方式

选择图像页面

0

  • 选择用图像中哪一张子图进行训练,一般为0(第一张),对于混合图工程可能需要设置。

手动参数

  • 手动设置参数,包括最小对比度、最小链长、最小可区分像素数三个参数,如果不开启,则根据模板图像自动确定参数;

  • 一般使用流程是先不开启手动参数,观察特征链是否提取完整,如有必要再手动设置参数;

  • 输出的日志中有实际使用的参数值。

最小对比度

30

  • 最小对比度在提取边缘的过程中起到过滤作用,在边缘检测时,当生成的梯度幅值大于该值的边缘点才会被保留;

  • 如果无关特征的点过多,则适当增大最小对比度;

  • 如果提取的边缘点过于稀疏,缺少模板匹配的关键特征点,则适当减小最小对比度;

  • 不设置手动参数时,此值无效,注意这个参数自动寻参和手动设置参数采用不同的策略,因此即使手动设置了与自动参数里一样的最小对比度,仍有可能得到不同的特征链。

最小特征链长度

5

  • 边缘链长度的最小值,只有长度不小于该值的边缘链被保留;

  • 最终模板保存的结果以边缘链为基本单元。边缘链即一组位置靠近、方向一致的有序的边缘点。如果某条链太短,说明该链较弱,可能是噪干扰,将被过滤删除;

  • 如果观察到较多细碎的边缘链,若它们所处位置确实是图像灰度值变化大的地方,则需要上调最小特征链长度;

  • 如果观察到关键的边缘链缺失,则调低最小链长;

  • 实际操作中,可以先预设为自动寻参的值,先调最小对比度,确保关键边缘都已经出现,并尽可能减少细碎边缘链;然后再提高最小链长,过滤掉细碎的边缘链;

  • 不设置手动参数时,此值无效。

最小可区分像素数

16

  • 表示区分出特征最少需要的像素个数;

  • 提取边缘链前先对图像进行金字塔建模,金字塔层数越高,特征像素数越少,训练和推理的速度越快,但检测的精度越差;

  • 对于尺度较大的图像,可以适当增加最小可区分像素数;对于模糊的图像,应适当减少最小可区分像素数;

  • 调整方式为每次乘2或除2,如16效果不满意,应调整到8或32,注意15的效果与8相同,17的效果与32相同,其他情况与之类似;

  • 不设置手动参数时,此值无效。

特征点缩减

自动缩减

  • 低、中、高三种模式分别缩减约50%、67%、75%的特征点,自动则会根据图像内容自动缩减0%~75%;

  • 对于尺寸较大的模板,或边缘链比较整齐的模板,可以适当增加缩减程度;

  • 一般而言,缩减特征点数量可以提高匹配速度,但会降低匹配精度,但有些情况下特征点减少时目标的可区分性也会降低,进而会导致顶层候选的目标增加,追踪过程时间增长。

推理#

  • 原理:根据搜索范围(包括旋转范围和缩放范围)将训练好的模板扩增,然后在金字塔顶层逐一与图像上每个位置进行比对,当相似度超过阈值时,即找到了一个匹配结果。搜索完顶层的后,再将结果逐层映射到底层,确定目标的准确位置和角度。直到在指定像素精度找到了所有目标后完成推理。

推理参数#

参数

推荐值

调整方式

角度旋转范围

-180~180

  • 模版扩增的相对于模板自身的角度范围;

  • 此参数用于匹配不同角度的目标,当目标角度有差异时,可适当增大角度旋转范围。角度旋转范围越大,匹配时间越长。

缩放范围

1~1

  • 模版扩增的尺度范围;

  • 此工具有一定兼容不同尺度物体的能力,所以即使不开启缩放,仍有可能匹配到不同尺度的目标;

  • 此参数用于匹配不同尺度的目标,当目标大小有差异时,可适当增大缩放比例范围;缩放比例范围越大,匹配时间越长。

长宽比范围

1~1

  • 此参数为1时,即保持目标的长宽比,否则,长宽比不同的目标也会被匹配;

  • 仅缩放范围不为1时生效。

极性

严格一致

  • 共有三种模式,严格一致表示匹配目标的梯度变化必须与模版一致,一致或相反表示匹配目标的梯度变化可以与模版相反,忽略极性表示匹配目标的梯度变化可以部分与模板相同,部分与模版相反。

最小对比度

0

  • 匹配时最小对比度,与训练参数中的最小对比度含义相同;

  • 0表示自适应计算,非0表示手动设置的最小对比度;

  • 此值与训练中设置不同时,可以接受对比度与模版不同的目标;如测试图像比较模糊时,可以降低最小对比度。

匹配分数

0.5

  • 匹配目标与模版的相似度,分数越大匹配的目标越准确,数量越少;

  • 输出目标的得分不一定超过此值;

  • 靠近图像边缘的位置的目标一般分数偏低,需要调低匹配分数才能检出;

  • 一般匹配分数越小,得到的匹配的目标越多,匹配速度也越慢。

匹配个数

1

  • 每个视图中的匹配数量不会超过此值;

  • 设置为0时,即不限制检测数量。

贪婪度

0.9

  • 匹配的贪婪程度,如果匹配到特征链上某个点时就发现此目标得分已经大概率超不过目标得分了,则跳过,不再匹配剩余点,但其实它仍有可能是合法目标;

  • 越贪婪地匹配速度越快,漏检可能性越大。

目标交叠率

0.5

  • 目标交叠率为两个有重叠的目标的重叠比例;

  • 当超过目标交叠率时,这两个目标视为一个,并只输出得分较高的目标;不超过目标交叠率时,两个目标都输出;

  • 该值的设置不影响效率。

像素精度

1像素

  • 像素精度表示匹配结果的像素精度范围,分为像素级和亚像素级;

  • 像素级有1~256共8个等级,1像素表示目标可精确到1个像素,2像素表示目标可精确到2个像素,以此类推;像素精度值越高,匹配速度越快,但结果的偏差也越大;对于尺寸较大模版,一般需要增大像素精度值,忽略一些细微的特征;当精度超过模型上限时,使用上限值;

  • 亚像素精度表示用最小二乘法计算亚像素精度,一般而言像素精度能适应大多数场景,只有在追求更高精度的场景才会使用亚像素精度;速度优先表示快速计算的亚像素结果,精度较高,精度优先表示计算精度最高的亚像素结果。

允许超出边界

  • 允许超出边界时,即使有部分物体位于ROI外,只要目标中心点位于ROI内也可以找到目标;不允许超出边界时,全部目标必须都在ROI内才能找到;

  • 不允许时匹配速度快于允许,模板尺寸越大快得越多;

  • 对于有出界目标的情况,可以设置为是。