目标检测是非常基础和重要的计算机视觉任务,在各行业有非常广泛的应用。然而,在很多领域的实际落地过程中,由于样本稀缺、标注成本高或业务冷启动等困难,难以训练出可靠的模型。
在目标检测这类较为复杂的学习任务上,样本不足带来的挑战更加棘手,因为模型复杂度高意味着对训练数据量有更高的要求,否则很容易导致模型过拟合。应对这类问题,一类常见的思路是迁移学习,即依赖资源丰富的源数据集或强大的预训练模型,为下游任务提供额外引导。而少样本学习是一类特殊的迁移学习任务,其针对的是每个标注类型仅有几十甚至几个样本的情况。
为了解决这个问题,飞桨联合百度研究院大数据实验室,发布两种少样本迁移学习的新算法,从不同角度应对标注不足的挑战,提升模型学习效果。
跨领域Label Co-tuning算法
该方法的主要思路是充分利用预训练模型的语义空间,挖掘其与下游任务的关联,计算出类别之间的关系作为下游任务的辅助语义标签,作为原始one-hot类别标签的补充。
领域内Contrastive Tuning算法
对比学习是一种通用的表征学习思路,可以学习样例级的判别特征,也可视为一种有效的数据增强策略。该算法针对目标检测的任务特性,实现patch级别的对比学习,以强化目标领域的表征学习效果。
快速体验
您可以下载PaddleDetection最新代码体验我们的算法。
https://github.com/PaddlePaddle/PaddleDetection/tree/develop
上述少样本学习算法在套件中高度封装,接口简单,只需使用我们提供的配置样例,或在原配置文件中添加少样本学习算法,即可使用算法训练。
具体可参照我们的使用说明
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/few-shot
接下来,本文将从“跨领域Label Co-tuning算法”和“领域内Contrastive Tuning算法”两个方面来解读PaddleDetection少样本迁移学习新算法的方案技术。
少样本学习的一个普遍思路是在预训练模型基础上进行微调,然而这种直接的方式面临明显的挑战。
挑战一:当下游任务样本量太少时,很容易导致模型在目标数据集上过拟合,最终,微调后的模型泛化能力差。
挑战二:在微调过程中,如果直接将预训练任务的分类头舍弃,重新初始化,会导致大量预训练模型所学到的信息丢失。而这些信息可能对于预训练模型知识迁移至目标数据集很重要。
针对以上的问题,清华大学的Kaichao You等人在NeurIPS 2020发表了Label Co-tuning[1]算法,该算法是一种针对图像分类任务的迁移学习算法。其主要思路是对预训练类别空间Ys和目标任务类别空间Yt的关联进行建模。在微调之前,预先学习预训练类别ys∈Ys和yt∈Yt之间的条件概率分布,即p(ys|yt),作为目标类别的一种辅助语义标签。这样可以有效的降低少量目标样本过拟合其标签的风险,同时预训练模型的分类头也将被重用,提供目标数据在Ys类别空间的预测结果,充分挖掘了预训练模型的迁移潜力。
以下为一个直观的例子,演示为何Label Co-tuning方法能够有效。如果我们的预训练数据集是具有1000类物体的ImageNet,而下游目标任务是COCO图像分类。此时,上下游任务之间存在大量有关联但又不完全相同的类别。如COCO中有“大象”这一类别,而ImageNet则粒度更细,包含“印度象”和“非洲象”。
由于不同数据集中,图像本身的视觉特征也存在一定差异,那么即使在类别的语义概念上有明显重合,其真实关联多数情况下也是比较隐晦、复杂,难以通过人工经验来指定。所以比较严谨的方式是通过学习的方式,建立起Ys和Yt两个完整类别空间的概率分布关系。如下图所示。
学习到这种类别关系后,对于每个目标数据集的样本(xi,yi),我们在微调过程中除了要拟合其原始的one-hot类别标签yi外,还会利用一个额外的预训练任务分类头拟合辅助语义标签p(ys|yt=yi),这个辅助标签的长度和预训练分类数相同,是一个soft label。
我们对该原型算法进行了改造和扩展,使其适合目标检测任务,并在PaddleDetection的经典结构Faster RCNN上添加了对Label Co-tuning算法的支持。在上下游类别关系矩阵的计算中,考虑到目标检测任务的特点,我们使用每个patch,而非每张图片作为一个样本。具体而言,需要从目标任务的训练数据中,直接提取出bounding box的标注,并在前向计算中获得该ground truth区域在预训练分类头上的预测结果,同时结合其自身标注的目标类别,来一起计算关系矩阵签p(ys|yt)。需要注意的是,Label Co-tuning虽然利用了完整的预训练模型,但并不需要预训练任务的数据集,关系矩阵是完全利用目标任务训练集计算出来的。
同样的,在微调过程中,我们也在bounding box粒度上应用辅助语义标签。对于每一个需要预测的检测框,我们除了拟合原始的类别标签和位置外,还会额外的拟合其在预训练语义空间上的soft label。
领域内Contrastive Tuning算法
对比学习是一种很有潜力的自监督表征学习方式,一般被用于预训练阶段学习图像的通用的视觉表征。而近期的一些研究表明,在常规的监督学习任务中,合理引入对比学习也能提升模型的判别效果,如分类、检测、分割等。基于这一思路,南加州大学的Bo Sun等人实现了检测框粒度上的自监督学习方法[2],可以显著提升少样本目标检测效果,并将成果发表在CVPR 2021。
该算法本质上有别于通常的样本级对比学习,通常的对比学习选择将每个样本的不同变换作为正例,其他样本作为负例。而在检测任务上,该方法引入了类别级的对比学习,但以每个bounding box为样本单元,即属于同类别的检测框之间互为正例,而不同类别则作为负例。
通过这样一种类别对比的方式,算法在微调过程中引入额外的loss来引导模型对同类patch学习更加紧密的表征,而不同类patch的表征则区别更加明显,如下图所示。
和Label Co-tuning算法相比,这种Contrastive Tuning的方法更加通用,虽然没有改进对预训练模型的复用,但其优点是对任务所做的假设更少,例如不需要依赖预训练任务和目标任务之间的潜在关联。在原始论文中,该算法仅适用于二阶段的Faster RCNN模型。我们对算法进行了扩展和改进,使其能够应用于PaddleDetection最新的PP-YOLOE系列模型。
PP-YOLOE系列模型具备非常出色的精度和效率,同时模型结构也大为精炼。但对于Contrastive Tuning来说,这种单阶段模型由于简化了Anchor生成和筛选的过程,使得中间过程中存在大量无效的patch,增加对比学习的计算负担。
针对此问题,我们引入了一种均衡策略,从采样和损失两方面对Contrastive Tuning的计算效率进行优化,同时不影响计算精度。具体来说,在前向计算的采样过程中,我们只对正样本patch全部保留,而对负样本patch选择随机采样,来保持正负样本的合理配比。在计算Contrastive loss时,我们根据当前patch的IoU得分来设定阈值,仅对得分高于阈值的样本点进行loss回传。
算法效果
项目传送门
PaddleDetection少样本学习算法体验
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/few-shot
PaddleDetection官方库
https://github.com/PaddlePaddle/PaddleDetection
欢迎大家扫描下方二维码加入PaddleDetection官方技术交流群~
公众号后台回复关键词:PaddleDetection,获取更多学习资料包。
[1] You, Kaichao, et al. "Co-tuning for transfer learning." Advances in Neural Information Processing Systems 33 (2020): 17236-17246.
[2] Sun, Bo, et al. "Fsce: Few-shot object detection via contrastive proposal encoding." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021.
关注【飞桨PaddlePaddle】公众号
获取更多技术内容~