使用 ML 裁剪图像?

人工智能 机器学习 算法 图像识别
2021-11-03 02:44:23

有没有办法训练人工智能在图像中找到特定的线条或符号并裁剪它?

OpenCV 脚本找到一张脸并对其进行裁剪:如何添加我的注释?

以免说我有这样的图像:

+------+ | * *| | | | * *| | | +------+

我希望它找到 * 并裁剪它。

2个回答

是的,这是可能的。

实际上有一种非常简单的方法,甚至不需要机器学习,只需少量代码即可实现您只需使用图像处理框架(例如Python 的PIL),通过使用适当的过滤器检查图像并使用框架希望提供的实现的裁剪功能来找到标记(或者用 2 个嵌套的 for 循环复制自己编写该地区)。您的过滤器将在图像中看起来像您定义的标记的区域中反应最强。这实际上可以像 CNN 中的单层 conv+RELU 层一样实现(有关 conv 和 RELU 层的详细信息,请参阅此介绍)。

因为您明确询问机器学习,所以我还将为您提供使用完整 CNN 识别边界框来解决此问题的硬版本。找到边界框后,可以像上面的示例中那样进行实际的裁剪,而不是 CNN 的一部分。如果你愿意,你可以称之为后期处理。

您正在寻找的技术称为Object Localization and Detection链接的文章应该告诉你你需要的所有细节。你基本上构建和训练你的 CNN 来定位和识别图像中有趣的对象。简单的方法是训练你的 CNN 分别识别 4 个标记,并返回最有可能包含你的标记的 4 个区域的坐标。您计算这 4 个单独点的中心并将其提供给您的裁剪功能。困难的方法找到包含所有 4 个标记的最小边界框. 这是一个更难的问题,因为神经网络需要知道它应该在检测期间忽略除这 4 个标记之外的所有内容,尽管它们将是边界框的一小部分。可以,但是单独查找 4 个标记会容易得多。

哪种方法最适合您?取决于你的目标。如果您需要一个强大且高效的算法来解决这个问题,请忘记 ML,并使用我首先描述的直接方法来实现它。无需花哨的学习 CNN。你可以用几十行代码来实现它。

如果这是一个研究 ML 的研究或培训项目,请采用我的第二种方法。简单和困难的方式都很好,困难的方式显然对你的 CNN 更具挑战性。如果您是 CNN 的新手,我建议您学习这个斯坦福课程它会在 25 到 30 小时内教你项目所需的一切(不包括家庭作业)。


编辑:关于您的问题,您如何添加自己的标记。我会简单地使用与裁剪相同的框架来完成它。您的程序需要某种图像处理功能,这也将允许像素处理(至少我建议的框架PIL具有此功能)。只需使用此方法绘制您的标记。如果您愿意,也可以使用 Gimp 等工具手动复制具有透明背景的示例标记。

如果您非常确定 ML 是前进的道路,那么请尝试跟随。

  1. 用于对象检测的 TensorFlow 代码

  2. YOLO 这尤其适用于实时对象检测。

您可以为有问题的对象训练这些模型并查看结果。您可以尝试其他一些本地化模型。