编写程序以识别图片中的对象然后以特定方式裁剪它们的最佳方法是什么?

人工智能 机器学习 卷积神经网络 计算机视觉
2021-11-06 10:31:52

我的作品质量控制部门负责通过我们的质量控制流程在各个阶段对我们的产品进行拍照,目前流程如下:

  1. 给产品拍照
  2. 将图片裁剪为仅产品
  3. 将裁剪后的图片命名为任何部分以及其他一些相关数据

根据产品的类型,图片将以某种方式裁剪。所以我最初的想法是使用对对象标识符的引用,然后一旦识别出对象,它将使用特定于该产品的裁剪方法。将来通过 OCR 命名的图片中也会有 QR 码,所以如果这被证明是缓慢或有问题的,我可能可以通过这种方式识别部件。

我不确定的部分是如何让程序知道如何根据一个部分进行裁剪。例如,我想向该程序展示一些产品 X 的裁剪前和裁剪后照片,然后根据这两个输入为产品 X 制作一个特定的裁剪公式。

此外,如果它有什么不同,我的代码是在 C#

2个回答

根据您拥有的数据类型和数量,您可能会考虑几种方法。

  1. 在数据集上标记目标对象并训练返回目标对象坐标的 CNN。在这种情况下,请记住,当训练数据 ROI 具有相对于图像大小的坐标时,通常会更快。

  2. 使用某种焦点机制,例如空间变换器网络:

    这种网络组件能够学习最大化主分类器目标度量的图像变换(包括裁剪)。本教程在 pytorch 上:

    显示了 STN 结果的一些很好的可视化。这种网络的好处是,如果有足够的数据,它可能会从图像分类数据(照片 -> 类别)中学习适当的转换。无需在图像上明确标记目标对象!

  3. 对象检测网络,如 YOLO、Faster-RCNN。有很多关于这个问题的教程,例如:

  4. 显着性提取。简单的想法是生成热图,显示输入图像的哪些部分最能激活分类器。我想您可以尝试根据此类热图计算边界框。研究论文示例:

第 1 点和第 2 点可能很容易实现,所以我将从它们开始。

这听起来像你有一个监督学习问题。Microsoft 提供了一个 C# 库,但它可能不适合您的问题。

您可以尝试许多不同的算法,其中大部分都属于计算机视觉的子领域如今,某种深度神经网络可能是最好的选择,但正确的选择可能取决于您问题的细节。古德费罗等人。有一本最近的书,这可能是决定使用什么的好资源。

也许从事计算机视觉工作的人可以给您更具体的建议。