一.项目背景
Fig. Checkbox复选框
复选框(Checkbox)是文档中常见的一种符号,用来获取人们的意见反馈、选择意愿。如项目报表、医疗清单、物料清单、调查报告、菜单等。因为复选框包含着非常重要的信息,所以除了要准确识别文字内容外,还需要检测复选框的位置、识别复选框的状态、关联复选框的描述文字范围。
最开始我们希望直接通过OCR来识别复选框,经过较多的真实项目,发现直接使用OCR技术识别复选框并不能够获得好的效果。
首先,复选框的状态并不是由其本身决定的,而是用户所画的标记符号决定的。而复选框和标记符号之间又存在尺寸、距离、形状等多种变化因素。因而即使单独的正确识别了复选框和标记符号,仍然需要进一步的判别处理。
其次,复选框和标记符号在很多场景下呈现出图形化特征,而非字符。没有标准的编码值。尽管可以使用特殊字符的编码来替代这些图形化的符号进行训练。但会面临着不直观、易出错、字符集不方便扩展等问题。
经过思考,我们将复选框识别的问题抽象为以下两个:
复选框的“位置检测”
复选框的“状态判别”
在技术方案上,把复选框和标记符号看做目标进行检测;然后对复选框和标记符号进行关联获取状态信息。
最终实现的方案有三个优点:目标检测任务相对简单,模型小速度快;对复选框和标记符号之间的变化因素更为鲁棒;对新符号的扩展更为方便。在常见的文档场景下,获得了不错的使用效果。
Fig. 包含复选框的文档图像
二.技术方案
2.1 数据特点
2.1.1 复选框
复选框的形状在大部份场景下为方框(□),有些场景下的文档表现为和背景有亮度/颜色差异的方块、无线框。
复选框会存在尺寸大小、线条粗细、长宽比等变化。如果是拍照或者扫描件,则还可能存在仿射变换、透视变换、边缘腐蚀、模糊、浸透背景等。下面展示了几种复选框类型。
Fig. 若干常见的复选框
2.1.2 标记符号
在本项目中,复选框的状态有两种:选中和未选中(标记/未标记)。
对于“未选中”状态,表示复选框上没有任何标记;对于“选中”状态,会在复选框上叠加标记符号。
标记符号的变化因素有多种:
(a)样式。有对号、叉号、划线、圆圈、黑色方块、涂改(杂乱一团);
(b)位置。标准的标记位置应该是正好标记在勾选框的位置,如下图。
Fig. 标记符的位置和勾选框区域重合度较好
但很多情况下,标记区域相对于复选框的区域存在位置偏移。甚至没有交集。
Fig. 标记位置和勾选框区域偏移存在偏移
复选框和标记符号有各自的特点,复选框通常都是打印图案,且形状变化不大;而标记符号包含打印和人工两种样式。由于书写习惯不同,人工绘制的样式千差万别。
两种符号之间的相对位置和相对尺寸也存在很大的差异。但是为了便于别人正确判别标记符号的归属。仍然遵守两条经验规律:
相关联的复选框和标记符号相距并不太远
相关联的复选框和标记符合尺寸差异并不太大
2.2 技术选择
2.2.1 目标检测
从实际场景中统计出若干类常见的复选框和标记符号作为目标检测的主体。如下表所示。
这些目标的尺寸和图像中的文字尺寸相似。当图像规整化到1280x1280时,目标尺寸在20~40pix之间。文档中目标的数量差异较大,从几个到上百个不等。
基于数据特点,我们选择了yolov5算法。检测效果和性能能够满足项目要求。
序号 | 目标名称 | 类别描述 | 图例 |
1 | 复选框 | £,o,p | |
2 | 黑色方块 | 复选框由黑色覆盖。 | n |
3 | 对钩 | 常见的标记符号。 | √ |
4 | 叉号 | 常见的标记符号。 | × |
5 | 划线 | 可以是横竖斜任意方向的划线。 不完全要求是直线。 | \,/,— |
6 | 圆圈 | 可以是正圆、椭圆、或类似圆形的绘制图案,闭合或半闭合曲线。 | ¡¢ |
7 | 涂改 | 常见于选错后的涂改 | ,, |
Table1. 目标检测的类型
2.2.2 状态判别
根据目前项目的需求,仅输出两种复选框的状态:“选中”、“未选中”,两者在业务上定义如下
当输出类别为“黑色方块”时,判定选中状态;
当输出类别为“复选框”时,状态需要进一步确认,确认规则如下:判断在“复选框”邻近的范围内,包含有【表1】的3、4、5、6、7类标记符、则判为选中状态;否则判为未选中状态。如下图所示:
Fig. 复选框邻近范围的标记符
当输出类别为标记符号时,不做状态判断。
三.数据准备
3.1 真实数据
丰富的数据是检测模型获得优异效果的必要基础。在本项目中真实数据包含了30个场景,约1200张样本图像,4.5万个标注目标。
但是这批数据中存在明显数据分布不均衡的问题:复选框数量占绝大多数,标记符号占比太少。同时标记符号各个类别的数量差异也很大。常见的“对号”、“叉号”占大多数。不均衡的数据分布会导致模型效果不佳,对低占比类别容易出现漏检。
在保证训练数据大致符合实际场景分布的前提下。我们通过样本合成增加少数类别的数量。
3.2 合成数据
在本项目中,我们使用了两种数据合成方式。第一种是完全合成数据;第二种是结合标注数据的半合成数据。
复选框的数据合成需要三种素材:背景图像、复选框、标记符号。下面分别说明两种合成数据方法是如何进行的。
3.2.1 完全合成数据
(1)创建素材。
绘制不同样式的复选框。如下图。
采集不同人手工绘制的各种标识符号,并裁切为图像。如下图。
收集背景图像。分为不同颜色的纯色背景,以及不包含复选框和标记符的真实文档图像。
(2)随机挑选一个背景图像。
(3)随机挑选一个复选框和一个标记符号图像。
(4)根据统计规律,随机选择复选框和标记符号的大小比例、相对位置参数。
(5)生成标记状态图像。复选框图像和标记符号图像组合为一幅图像,模拟人对复选框的标记。
(6)根据背景图像的尺寸,在合理范围内随机调整标记状态图像的尺寸。
(7)在背景图像上选定一个锚点位置,并把标记状态图像融合到背景图像中。
(8)循环执行3~7步,直到背景图像中合成了一定数量的复选框和标记符号。
(9)循环执行2~8步,直到生成足够多的合成数据。
Fig. 部分复选框样式
Fig. 部分人工绘制标记符号示意
通过上述方法合成的数据如下图所示:
Fig. 生成的部分模拟数据
在合成数据过程中,可以通过控制各类别的数量比例、空间布局和增强方式,进一步增加合成数据的多样性。
3.2.2 半合成数据
真实样本中大部份复选框区域是空白的,没有与之重叠的标记符号区域。因此在空白的复选框区域融合人工模拟的标记符号,用来解决真实数据中标记符号分布不均衡的问题。
合成过程如下:
(1)准备合成素材:
标记符号:人工绘制的各种符号。
背景图像:标注好的背景图像。
(2)随机挑选一个标注的背景图像。
(3)随机挑选一个标记符号图像。
(4)在背景图像上随机选定一个空白复选框区域。
(5)根据选定的复选框区域,确定标记符号的相对大小,相对位置,形变等。
(6)标记符号图像融合到背景图上的选定位置上。
(7)依次执行3~6步,直到文档背景中合成了一定的数量的标记符号。
(8)执行2~7,直到生成足够多的合成数据。
标注数据图 | 半合成数据 |
Fig. 空白的复选框中融合了人工模拟的标记符号
相对于完全合成方式,这种结合真实标注数据的半合成方式生成的数据更接近真实场景。
3.3 数据增强
此外,对于真实数据和合成数据,需要做图像增强,模拟真实场景下的多种降质情况。本项目采用了多种增强方式:
(1)小角度的正负倾斜。
(2)gamma、模糊、噪点。
(3)色偏color shift。
四.模型训练
本项目训练过程分为两个阶段。第一阶段使用大量的合成数据得到基础模型。该阶段在训练时,也会使用开源的预训练模型。第二阶段使用真实的场景数据进行微调。
五.后处理逻辑
5.1 NMS和IOU
Yolov5目标检测结果需要经过NMS(非极大值抑制)操作合并多余bbox。针对复选框的特殊场景,在合并时需要区分类别的NMS操作,避免复选框和标记符号在某些情况下被合并。如下几种情况:
Fig. 不区分类别的NMS会导致误合并的情况
IOU是两个bbox的交集面积和并集面积的比值。我们做了一些改动:两个bbox的交集面积除以两个bbox面积的最小值。这样能把iou的值规整化到0~1.0的范围内。方面阈值设定。
5.2 复选框和标记符号的关联
5.2.1 特殊情况
正如前面所述,复选框和标记符号的大小、距离都有很多变化。由于手动绘制标记符号时的随意性,在判断两者的关联关系时并不能简单的使用IOU,因为会有几种较为常见的情形:
(a)一个复选框可能和任何标记符号的IOU=0;
(b)一个复选框可能同时和多个标记符号的IOU>0;
(c)一个复选框的关联标记符号可能不是IOU值最大的那个;
Case a | Case b/c |
Fig. 几种特殊情况
5.2.2 关联组
因此我们在关联复选框和标记符号时,需要按关联组来考虑。“关联组”是由相互之间IOU大于一定阈值的多个复选框和标记符号的组合。关联组的构建采用如下方法。
针对第i个复选框,构建关联组的方法如下:
(1)对该复选框区域进行扩展,根据统计值,上、下各扩展0.5倍高度值;左、右各扩展2倍的宽度值。如下图所示:
Fig. 复选框区域扩展
(2)统计所有和该扩展区域IOU大于0的标记符号的区域。得到复选框i的关联组。如下图所示。
(3)循环遍历所有复选框,得到每个复选框的关联组。
复选框的关联组 | 标记符号的关联组 |
Fig. 构建两种关联组
同理,针对第j个标记符号,
(1)分别统计该标记符号区域和每个复选框扩展区域IOU大于0的区域。扩展区域方式与前面相同。得到标记符号j的关联组。
(2)遍历每个标记符号,得到每个标记符号的关联组。如上图所示。
5.2.3 状态判别
通过两个关联组可以方便的判定复选框和标记符号的关联。以第i个复选框的状态判别为例,具体步骤如下:
(1)如果复选框i只关联了一个标记符号j,且标记符号j也只关联了复选框i,那么两者可以确定关联。
(2)如果复选框关联了多个标记符号,则通过IOU和中心点距离做进一步判断:
由于不同的标记符号形状差异较大,“对号”和“划线”这种标记符容易跨越更大的范围。因此我们把“对号”和“划线”两种符号平分为4个区域,并用左下角子区域替代原区域。而其它类型的标记符号则很少出现这种情况,是否使用该方式影响不大。
Fig. 两种标记符号的特殊处理
(2.1)计算每个标记符号子区域和复选框i原始区域(未扩展)的IOU值。
(2.2)计算每个标记符号子区域和复选框i原始区域中心点之间的距离。
(2.3)选取IOU最大的标记符号区域,作为最佳“候选标记符号”。
(2.4)如果IOU最大的区域有多个,或则IOU都小于0,则选择距离最近的标记符作为最佳“候选标记符号”。
(3)根据标记符号关联表,判断“候选标记符号”关联的复选框情况:
(3.1)如果只关联了一个复选框区域,则肯定是复选框i,两者确定关联。
(3.2)如果标记符号关联了多个复选框区域,则通过前述相同的方法,筛选出该标记符号的“候选复选框”。
(3.3)如果该“候选复选框”就是复选框i,则复选框i和“候选标记符j”确定关联。
(3.4)如果该“候选复选框”不是复选框i,则进入步骤(4)
(4)根据IOU值和dist值,选取次佳的标记符号区域作为新的“候选标记符号”。并继续循环上一步处理。
可以简单的使用图形表示如下:
Fig. 1vs1关联确定示意图
Fig. 1 vs n的关联判定示意图
六.效果及改进方向
6.1 效果
从真实场景数据中筛选出了约100张图像作为测试数据集。使用本技术方案复选框的选中/未选中的状态识别效果符合预期(准确度94%,召回率大于98%,不同测试集指标会有所不同)。
Fig. 复选框状态识别的效果图,紫色表示“选中”,青色表示“未选中”
6.2 改进方向
本技术方案采用的深度学习模型+后处理的方案。两个环节都有较大的改进空间。
在深度学习模型方面,首先,需要补充更多地真实场景数据,覆盖多种低质量场景和不同的复选框和标记符号类型。另外,当复选框和标记符号重叠度很高时,两种不同类别的目标特征区分度不高,会影响模型的最终效果。尽管通过标注技巧(如对于重合度较高的情况,复选框标注需要往外扩,标记符号标注区域往里缩)和增加数据量来提升效果,但应该探寻更好的算法模型来解决。
在后处理方面,由于后处理逻辑结合了现有场景的数据特点进行参数设置。泛化到其它场景可能会造成效果下降。
未来更合适的方向应该是端到端的处理,本项目也会不断探索新的技术方案。