基于合成数据的文本定位

数据是目前深度学习的主要限制因素。 好的数据很难获得。 收集和标记数据是一项艰苦的体力劳动。 这是昂贵、耗时且困难的。

AI获胜者并不是有最好算法的人,而是有最多数据的人。 -安德鲁·吴

此问题的一个“次优”解决方案是以编程方式生成合成数据。 合成数据无疑不如真实世界的数据。 然而,在缺乏或缺乏真实数据的情况下,它是最好的选择。

本文是用OpenCV编程生成合成数据,更简单的方法是用UnrealSynth这个基于UE5开发的合成数据生成器,效果更逼真,而且无需编程:

https://tools.nsdt.cloud/UnrealSynth

1、项目介绍

在本文中,我将使用 detectorron2 构建一个对象检测模型,用于检测招牌上的英语和阿拉伯语文本。

通常,要构建多类对象检测模型,每个类需要大约 300 个训练图像。 通过批量下载图像并手动标记它们来创建这样的数据集大约需要 6 小时的手动工作。 这可能会给我们带来最好的结果。 出于实验目的,我决定不采用这种方法。 相反,我以编程方式创建一个合成数据集。

合成数据集包括带有一些英语或阿拉伯语文本的矩形或圆形“标志板”,随机放置在背景图像上。 文本的边界框坐标也可用于每个图像。

2、模型训练方法

我的模型训练方法如下:

  • 创建包含阿拉伯语和英语文本的图像和边界框坐标的综合数据集。
  • 在合成数据集上训练 Faster RCNN 模型
  • 收集一些现实生活中的英语和阿拉伯语标牌示例并评估模型

3、合成数据集的生成

创建合成数据集涉及的步骤如下:

  • 选择招牌形状
  • 选择阿拉伯语和英语短语 — 随机选择 1-4 个单词并组成短语
  • 创建招牌 - 选择招牌上的字体、文本位置
  • 选择纹理——在招牌上叠加纹理
  • 选择背景图片
  • 选择比例、旋转、将图像放置在背景上

经过以上步骤得到的结果图像如下所示:

3、用合成数据训练R-CNN

Facebook 的 detectorron2 包可用于快速训练和评估对象检测模型。 查看 github 上的训练脚本以了解完整实施。

4、评估训练好的R-CNN模型

在一些真实图像上评估模型:

对于这个小型评估来说,这似乎做得相当不错。

尽管合成数据明显是粗糙的、仓促拼凑的并且明显是假的,但该模型仍然设法从中学习基本的文本本地化。 它能够检测我们测试的真实图像中的文本并正确对它们进行分类。

请注意,我没有遵循任何科学方法来确保这些结果的公正性或统计相关性。 这不是一项学术研究,只是一个实践记录。 通常,合成数据用于增强和平衡现实生活数据集,而不是取代它们。

完整代码可以在我的 github 上找到。


原文链接:Generating synthetic dataset for object detection

BimAnt翻译整理,转载请标明出处