一键式学习模式识别算法

引言


我想向您展示我的图像识别算法的实验结果以及首次学习(所谓的一次学习)。 实验的结果是,开发了某些图像结构化方法,结果将它们体现在几种相互关联的算法中以及Android上的测试应用程序中,您可以使用它们检查算法的质量和性能。


我的目标是创建一种具有清晰工作原理的算法,该算法可以第一次(在学习过程中)找到图片中的抽象依赖性,并在随后的识别周期中显示出可接受的识别质量(搜索此类抽象依赖性)。 同时,决策的逻辑应该是透明的,易于分析的,更接近于线性算法。 在条件规模上,大脑的一端和另一端是一台CNC机器,它比神经网络更接近机器。


为什么不使用神经网络?


目前,神经网络支配着识别任务,特别是CNN是一种模式识别的标准。 但是,在我看来,它们的应用并非无限,因此需要寻求其他方法。


我将提出反对神经网络的几个理由:


  1. 训练需要大量的数据集,而这些数据可能根本不可用。
  2. 强大的学习能力和每张图片的学习时间
  3. 该算法不透明,无法调试和直接影响结果。 理解权重分配的逻辑非常困难,即使不是不可能。 这既有优势也有劣势。

如何运作


基本思想是这样的:图像样本应结构化,即 其中的信息应减少到必要的最低限度,但不要失去其含义。 例如,艺术家绘制草图-仅用几条精确的线,艺术家就可以描绘一个人的脸部或某些物体,并且观众将理解所描绘的内容。 一张照片包含一个N * M像素的矩阵,每个像素包含一些颜色信息,如果您以线参数的形式想象所有这些信息,则信息量将急剧减少,并且处理此类信息会更加简单。 该算法应该做大致相同的事情。 他应该在框架中突出显示主要细节-包含基本信息,并丢弃所有不必要的信息。



该算法沿着样本中对象的边界找到矢量的结构,并在识别的图像中找到相同的结构。



为了获得矢量,图像要经过几个处理阶段:


  • 使用简单的公式(红色+绿色+蓝色)/ 3转换为单色
  • 为矩阵的每个点计算梯度。
  • 找到了梯度的最重要的权重区域
  • 我们搜索覆盖这些区域的向量链
  • 接下来,循环步骤以获得携带最大信息的最小数量的向量。


在分析的算法中发生相同的事情。 接下来,比较向量的结果数组:


  • 首先,该算法尝试保留一些相似的部分(局部簇)。 例如,他可以在样品中找到与眉毛相似的眉毛,然后找到看起来像鼻子的鼻子。
  • 然后,寻求本地集群之间的相似关系。 例如,一条眉毛+鼻子+另一条眉毛。 已经获得了更复杂的集群。
  • 等等 直到获得一张收集所有或几乎所有图像向量的聚类之间关系的图片。 即 例如眉毛,眼睛,鼻子等 面对是行不通的。

因此,小的细节被包括在整个图片中,并且发生雪崩状的图案识别。
分类本身基于从存储中找到最相似图像的原理。 最相似的是匹配向量数量最多,相对于样本中向量总量的偏差最小的样本。


算法操作的一般方案:



多阶段训练


尽管该算法可以从一个样本有效地工作,但是通过分析多个样本可以提高识别精度。 该功能尚未在演示版本中实现,因此我将仅讨论此功能,它非常简单。 对几个样本进行训练的原理是丢弃不必要的向量。 多余的是未包含在相互找到的向量簇中的那些。 例如,样本上可能有阴影被识别为边界,但下一个样本上可能没有阴影。


因此,如果向量是在保存的样本中和在分析的样本中找到的聚类的一部分,则它会得到+1点;否则,它将不会得到任何东西。 经过几次训练,得分很少的向量将从保存的样本中删除,不再用于分析。


您还可以制作一个视觉编辑器,该编辑器仅允许您在初次训练后从帧中删除不需要的向量。


可以用什么


老实说,我将所有精力都集中在算法本身上。 虽然自 我在业务解决方案和生产自动化的环境中工作,然后看到一个应用程序-仓库和生产线中的产品识别-此处没有大数据集-然后需要先显示示例然后进行识别。 作为仅不带条形码的条形码绑定。 但通常,该应用程序与任何其他识别算法相同。 该应用是由于算法的功能和局限性。


测试申请



该应用程序使用100 * 100像素的矩阵,将图像转换为此大小的单色矩阵。 该算法并不关心样品的角度,其尺寸也在一定范围内。


左侧显示突出显示当前图像的重要区域和其中的匹配矢量(绿色)的结果,右侧显示找到的矢量的结构,最合适的已保存矢量和相似矢量在已保存的结构上以红色突出显示。 因此,该算法认为相似的红色和绿色突出显示的矢量结构。


您可以保存多个样本。 通过显示新图像,该算法将找到最合适的图像并显示相似的部分。

Source: https://habr.com/ru/post/zh-CN414425/


All Articles