My recent work in the object detection algorithm

Posted by 明杰/Ming on September 12, 2023

目标检测算法 – 发展简述、自有工作

前言

目标检测算法从早期传统算法发展到如今的深度学习方法,其中方法经过了多次的迭代,和对过往发现的不断优化,使得精度和模型效率都在不断提高。我上半年通过优化和迭代目标检测方法,学习了最近的SoTA方法和过往的技术发展路线,下文梳理深度学习在目标检测算法的发展脉络,并在展现了最近自己工作中如何应用这些不同的方法,并达到新的性能表现。

深度学习目标检测算法的发展

目标检测算法大致分为两个阶段,传统目标检测算法阶段兴旺到大致2012后深度学习目标检测算法的崛起。自2012年AlexNet在ImageNet比赛上出现,研究者开始把目光投向通过加深神经网络的思路,以达到更好图像语意理解能力。这个方法在图像分类任务上被验证有效后,人们开始尝试这种方法在目标检测上的可行性。深度学习发展至今,目标检测算法又发展出了两条技术路线,分别是Anchor Based方法(One-Stage和Two-Stage)和Anchor Free方法。下图一展示了2000年至2022年的一些有里程碑意义的目标检测算法,图二作为图一的补充,包含了利用Transformer Decoder直接输出预测框的目标检测算法,是近几年火热的方向。

Object Detection Milestones since Millennium.

Fig 1. Object Detection Milestones since Millennium.

As a supplement of the previous.

Fig 2. As a supplement of the previous.

目标检测算法主要分为了以Yolo为主的一阶段检测算法,和MaskRCNN为主的二阶段检测算法。2020年后因为Transformer在检测领域上的应用,其优雅端到端训练的方式和巨大的潜力,使得之后的工作主要围绕着DETR展开。

重要的历史工作

RCNN

这篇深度学习目标检测的开山之作提出了基于区域的概念,是第一次把深度学习图像表征应用到目标检测领域。相较于之前使用手工特征的工作,深度学习面对目标函数有更强的拟合能力,换言之对于相同的物体不同视角,传统方法需要尽可能的多的设计出不同视角的特征模式,深度学习可以通过对训练素材的特征模式的学习拥有一定的泛化能力。

简单来描述这个工作,首先把所有感兴趣的区域裁剪下来,传入CNN网络进行分类,如果该区域符合某一个类别,则记录为这个类别的候选。在训练时,会把候选传回回归器精细修正候选框位置。候选区域使用Selective Search方法,从一张图片生成2000-3000个候选区域。并且按照颜色、纹理、合并后面积和IOU四点规则进行候选区域合并。

Yolo

这个工作把深度目标检测方法真正带入到工业生产领域,在GPU部署的Yolo模型可以达到30FPS以上的推理检测能力。它和它的后续工作极大满足了工业中的需求,并且因为它相对低廉的部署、训练成本,在推理性能被DETR霸榜的当下,在开源社区中的热度不减。

这个工作的检测过程很简单,Yolo会先讲输入图片分成SXS个格子,若一个物体的中心点落入那个各自,则这个个字负责检测出这个物体。对于每个格子,Yolo都会输出B个包围框(bounding box),每个包围框都会预测5个值(box的中心点坐标x、y,物体宽高w、h,分类置信度)。最后所有的候选结果会通过非极大值抑制(nms)方法筛选最终结果。Yolo这个工作需要生产的候选框数量极大减少,整体的计算量也极大减少。

DETR

此前的深度目标检测模型在整个流程中已经需要一些添加一些手工操作,如anchor的生成和候选框过滤的nms操作。DETR的工作提出了一种基于Transformer的端到端训练、检测的流程,摒弃了那些需要人工预设的先验知识,整个流程变得更加优雅、自然和简单。在输入端,图像被转换成一维序列,添加位置编码描述patch的绝对位置信息,在输出端应用另外一套位置编码。如在空间上图片输入均匀采样的点(patch size=16),在输出空间上变成图片随机分布的100个点,解耦输入和输出空间。

使用anchor的深度目标检测模型由backbone(特征提取)、neck(多尺度特征聚合)、head(分类和回归)。DETR也适用这种结构,由backbone(特征提取)、encoder(多尺度特征聚合)、decoder(query精修)。DETR将neck和header使用Transformer实现。进行检测时,一张图片会先经过backbone提取特征,然后由encoder将不同尺度(较低的空间层级和较高的语义层级)的特征聚合后传给decoder,这时 decoder会同时生成query数量的候选框,这些候选经过bipartite match得到最后的结果。

最新的发展

现在的工作体现多种趋势,比如把多种任务统一为一种形式,又比如把大规模与训练得到的知识应用在目标检测,还有就是通过有限的标注数据集训练通用的目标检测数据集。

大规模与训练用于目标检测 Vit Adapter

它提出了一个简单但有效的密集预测任务适配器,它可以让普通的视觉Transformer(ViT)在密集预测任务上达到于Swin相当的性能。实现了上有预训练阶段于下游微调阶段的模型结构解耦,使得ViT可以利用多模态数据进行预训练,从而学习更丰富的语义表示。

这个工作带来了以下几方面的改进,首先它引入了SPM,通过卷积操作来增强ViT的局部空间信息,避免改变ViT的原始结构。并且它设计了两种基于交叉注意力的特征交互操作,即SFI和多尺度特征提取器(MFE),分别用于将空间先验特征注入到ViT中,以及从ViT中提取多尺度特征。

多模态文本语言模型 GroundingDINO、GLIP

GoundingDINO和GLIP都是用了文本和图像两个模态的预训练模型,结合目标检测框架实现了更丰富的下有任务,但它们已经有些不同:

GoundingDINO提出了一个紧密融合的开放集目标检测器,它可以利用人类输入的类别名称或指代表达式来检测任意对象。它还利用有监督的预训练来增强模型对新颖对象和属性的泛化能力。相比之前的工作,它有以下几点改进:它将闭集检测器分为三个阶段,并在每个阶段引入语言和视觉模态之间的交互操作,实现了紧密融合;并且设计了一个特征增强器,使用卷积操作来增强Transformer对局部空间信息的学习;同时语言引导的查询选择器,通过注意力机制来选择于人类输入相关的查询向量;最后通过引入跨模态解码器,通过多头注意力机制来融合语言和视觉特征,并输出最终检测结果。

另外GLIP利用海量的图像-文本对来学习对象级、语言感知和语义丰富的视觉表示,展现了强大的零样本和少样本迁移能力。通过将目标检测和短语定位作为统一的预训练任务,实现检测和定位任务之间的相互促进。

通用目标检测 UniDetector

它可以识别开放世界中超过7000个类别,是目前可测量最大的类别数量。它有以下特点,使用多个来源和异构标签空间的图像进行训练,通过对图像和文本空间进行对齐,保证了通用表示充分信息。通过解耦训练方式和概率校准,进一步提升了对新颖类别的泛化能力。使得UniDetector在约500个类参与训练下,可以检测超过7k个类别,并且在零样本泛化能力上,在没有看到任何对应图像的情况下,超过了传统有监督基线4%。

我的工作

我们有个任务需要对广告图像上的违规元素或对象进行检测,目前一直在使用yolo模型,我想试着做一个基于我们自己预训练的视觉模型的目标检测模型。接下来我把基本背景、参考的工作、实验结果和下一阶段想法分享。

我们自己构建了数量在12k张图片,大概200k实例的有监督目标检测数据集,一共有65个类,分别对应业务上的违规元素。同时我们有一个用VQKD方法和20m张无标注图片预训练的ViT-Base\Large 224\384模型可选。

这个工作中参考了下面的工作,分别是DETR,Deformable DETR、Dino Det、Collaborative DETR、ViTDet。

首先介绍DETR、Deformable DETR,这两个工作都是属于比较早把Transformer网络应用到目标检测领域的工作。首先DETR是第一个完全端到端的目标检测网络,不依赖手工设计的组建,比如锚点生成、非极大值抑制等。Deformable DETR则是基于DETR的基础上,提出解决DETR收敛速度慢和特征空间分辨率有限的问题。特点是引入了可变形的注意力机制,训练速度比DETR快10倍。这两个工作奠定Transformer在目标检测领域的应用

模型训练方法也大量参考了Dino Det和Collaborative DETR的方法,主要有下面两个。使用对比学习的方法来训练去噪锚框,使其能从大量负样本中学习有效的特征表示,减少正负样本之间的重叠,以及混合查询选择方式来初始化锚框。并参考利用多种标签分配方式来训练更有效的DETR检测器,这个训练方案可以用过训练多个并行的辅助头来增强Transformer Encoder的学习能力,这些辅助头使用一对多的标签分配方式。另外通过这些辅助头中提取正样本坐标来生成额外订制化症查询,提高正样本训练效率。

最后为了能使得我们的图像预训练模型派上用场,这里使用了ViTDet方法。使用了一个简单的特征金字塔方法,使用双线性插值把单尺度特征图生成多尺度特征。

在我们训练集、测试集的结果如下:

  AP.50 (area=all) AP.75(area=all) AP.50-.95(area=small) AP.50-.95(area=medium) AP.50-.95(area=large)
YOLOv5l 0.971 N.A. N.A. N.A. N.A.
Co-deformable (r50_1x) 0.968 0.941 0.664 0.803 0.924
Co-deformable (swin_base_1x) 0.952 0.913 0.619 0.771 0.891
Co-Dino (swin-large-1x-192-fun) (3 epoch setting) 0.859 0.807 0.547 0.644 0.773
Co-dino (ViT-base-1x-224-vanilla) 0.899 0.843 0.482 0.664 0.837
Co-dino (ViT-base-1x-224-channel-mapper) 0.969 0.951 0.679 0.859 0.933
Co-dino (ViT-base-1x-224-sfp) 0.984 0.960 0.735 0.829 0.937

从我们的测试数据集上看效果模型提升效果不明显,于是使用新模型做了一个AB测试,粗略估计mAP和mR平均提升10%。在不调整数据集的前提下,这种提升还是相当可观的。

下一步计划从更好ViT多尺度特征融合,DETR对小目标检测两个方向对模型进行优化。另外这次实验也发现我们当前使用的数据已经不能很好的体现模型的优化,后续对数据集重新整理或者添加新增数据。


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.