UI2CODE系列文章|如何提高“小目标”检测准确率

背景

  在计算机视觉领域,存在一个“小目标”检测任务,比如自动驾驶中的交通灯,或者医学图像中的早期肿块。“小目标”的正确检出能极大地提高用户体验,促进自动化行业的发展。UI2CODE是闲鱼技术部推出的一个应用工具。通过对页面ui元素的自动解析并自动生成相关代码,UI2CODE能提高工程师的开发效率。ui元素的自动解析部分采用计算机视觉技术来识别ui元素的类别和位置,其作为整体流程的第一步决定了后续代码生成的准确性以及用户使用的体感。页面中存在的一些“小目标”ui元素,比如下图a)页面卡片中的价格组件和芝麻信用图标等,b)页面卡片中“三个点”表示的图标。还有其他一些小目标比如文字、特殊的符号也会出现在页面中,小目标漏检或者误检都会导致后续代码生成的错误。

UI2CODE系列文章|如何提高“小目标”检测准确率_第1张图片

挑战

  根据coco数据集的定义,像素面积小于32x32的物体为小目标物体,像素面积介于32x32与96x96之间的物体为中目标物体,像素面积大于96x96的物体为大目标物体。小目标检测的挑战包括:

1. 类别不均衡。页面中小目标物体相对于其他中、大目标物体占比较少。类别不均衡的问题会导致模型训练过程中损失函数学到的信息更偏向占比多的中、大目标物体。

2. 特征丢失。基于深度学习的目标检测算法为了检测更多复杂的特征往往会加深或加宽网络,同时为了减少计算量以及增加位移不变特性,网络中常常增加池化层。池化层下采样过程不可避免地会丢失部分或者全部小目标特征信息。

3. 定位精度。模型预测框在有相同偏差时,偏差给小目标iou(预测框和标准框面积的交并比)带来的影响要比中、大目标iou带来的影响要大的多,因为小目标预测框只要偏移一点点,iou就降低很多。

小目标检测存在的挑战会导致模型检测结果精确率和召回率下降,具体评价指标上体现为mAP或mAR数值较低。

方案

流程

针对小目标检测存在挑战,采用如下方法来提高小目标的检测效果:

1)训练过程中对小目标进行数据扩充和增强

2)检测模型经历Faster RCNN到FPN到Cascade FPN的优化迭代

3)采用图像处理技术修正预测框位置


数据扩充

  页面中存在的类别不均衡问题会导致模型偏向于学习中、大目标特征,因此训练阶段扩充小目标的数据能有效地提高模型对于小目标的注意力,进而提升小目标在训练过程中对损失函数计算的贡献。数据扩充的方法是在包含小目标的图像中将所有小目标在任意随机位置复制粘贴多次,并且确保小目标粘贴的位置和其他已经存在的目标位置不会出现重叠,并且距离图像边界至少5个像素。粘贴的过程中可以对小目标进行增强,比如在尺度5%范围内进行缩放。下图中a)是原始图像,b)是对小目标"¥9.9"和"..."在任意不重叠位置复制黏贴了5次。

UI2CODE系列文章|如何提高“小目标”检测准确率_第2张图片

模型优化

  深度学习的方法因为其强大的自动学习目标特征能力而成为目标检测领域的主流方法。一般的目标检测模型分成两个派系:以R-CNN家族为代表的两阶段网络和以YOLO、SSD为代表的一阶段网络。一阶段网络直接对预测的目标进行分类和回归,因此计算速度比较快,两阶段网络在对预测的目标进行分类和回归前需要先生成候选的目标区域,这样训练更容易收敛,检测结果更准确。
  不管是采用一阶段网络还是二阶段网络,模型一般都会包含有下采样的卷积层和池化层来提取图像的特征,下采样的存在会导致小目标部分或者全部特征丢失。下图显示的是我们最先开始尝试的Faster RCNN网络结构,主要分成2个部分:1)RPN(Region Proposal Network)部分。该网络用于生成候选目标框,其中前半部分是特征提取模块,使用一组基础的conv+relu+pooling层来提取并得到特征1到特征n,后半部分是先用特征n经过卷积操作生成特征头0,然后用特征头0去判断anchor是属于前景还是背景,并且通过回归去修正前景框的位置。2)fast rcnn部分。前景的候选框在特征n上经过roi池化操作映射到固定大小并送入后续全连接层,后续进一步计算这些候选框的具体类别,并且再次回归修正候选框的位置。

UI2CODE系列文章|如何提高“小目标”检测准确率_第3张图片

  Faster RCNN使用的图像特征是经过多次下采样后特征n上的特征,容易造成小目标的漏检。在Faster RCNN的基础上采用了FPN(Feature Pyramid Network)网络。如下图所示,FPN在RPN部分会将不同层的特征1到特征n进行融合(图中没有画出),然后利用每一层的特征来进行分类和回归,后续部分也用每一层的特征进行特征roi池化操作以及分类和回归。相比于Faster RCNN只用高层的特征n,FPN充分利用了浅层的细节信息和高层的语义信息,更能准确地检测出小目标。

UI2CODE系列文章|如何提高“小目标”检测准确率_第4张图片

  FPN利用多个层特征提高小目标检测效果,但并没有考虑预测框偏差导致的小目标iou定位精度问题。Faster RCNN或者FPN网络在RPN阶段根据设定的iou阈值来选取候选框,如果iou阈值过高,会导致候选框质量很高,但数量会很少,会出现模型过拟合现象;如果iou阈值较低,候选框的数量就会增加,但质量也会下降。因此选取好的iou,对于检测结果很重要。下图所示的Cascade FPN结构在FPN的基础上,从左至右增加了多个检测模块,通过iou阈值从小到大不断提高,在保证候选框数量的同时,也能使得候选框质量不下降。

UI2CODE系列文章|如何提高“小目标”检测准确率_第5张图片

位置修正

  深度学习模型回归位置框时不可避免会产生偏差,尤其是对于小目标,位置框的偏差更加明显。UI2CODE要求位置能精确到1个像素级别,因此需要进行位置修正。简单背景下,采用前景投影的方法能获得精确的位置边界。具体做法为:

1)对图像进行高斯平滑减少噪声影响。

2)采用局部自适应二值化将前景提取出来。

3)目标初始位置框对应的二值化区域进行水平和垂直方向投影,找到左右上下最近的投影值不为0且标准差也不为0的位置,即为修正后的位置。
  下图a)为Cascade FPN检测出来的前景位置框,可以看到大部分位置框位置存在偏差,尤其是小目标“...”偏差比较大。b)图为位置修正后的位置框,大部分都修正到目标位置。当然对于一些复杂背景情况下的位置修正,采用前景投影的方法得到的结果会不准确,需要在前处理阶段进行复杂背景剔除。
UI2CODE系列文章|如何提高“小目标”检测准确率_第6张图片

效果

  上文分析了小目标检测存在的挑战,以及采用数据扩充、模型优化的策略来提高小目标的检测效果。当然作为通用检测模型,还需要同时关注整体的检测效果。
  当模型预测框和真实框之间iou大于设定的置信度阈值(比如0.5)时,认为预测框就是物体检测框,指标mAP和mAR是评判模型精确度和召回率的指标。模型使用的特征提取网络都是resnet101,表1显示的是设定置信度阈值从0.5到0.95不同值时小目标的结果指标,可以看出FPN和Cascade FPN都要优于Faster RCNN, FPN的mAP要高于Cascade FPN的mAP,FPN的mAR要低于Cascade FPN的mAR。表2显示的是设定置信度阈值等于0.5时所有目标的结果指标,可以看出Cascade FPN要优于FPN以及Faster RCNN。

UI2CODE系列文章|如何提高“小目标”检测准确率_第7张图片

展望

  小目标检测方法与其他复杂背景分析、布局分析等组成了UI2CODE页面ui元素自动解析的基础,另外上述方法也提供给淘宝D2C智能和自动化测试使用。未来进一步可以结合生成网络模型将小目标放大进行检测或者在位置修正时结合物体的类别信息从而得到更高精度的位置修正。

闲鱼团队是Flutter+Dart FaaS前后端一体化新技术的行业领军者,就是现在!客户端/服务端java/架构/前端/质量工程师面向社会招聘,base杭州阿里巴巴西溪园区,一起做有创想空间的社区产品、做深度顶级的开源项目,一起拓展技术边界成就极致!

*投喂简历给小闲鱼→[email protected]

开源项目、峰会直击、关键洞察、深度解读

请认准闲鱼技术

你可能感兴趣的:(UI2CODE系列文章|如何提高“小目标”检测准确率)