囿于数据少?泛化性差?PaddleDetection少样本迁移学习助你一键突围!

news2025/1/16 1:11:32

目标检测是非常基础和重要的计算机视觉任务,在各行业有非常广泛的应用。然而,在很多领域的实际落地过程中,由于样本稀缺、标注成本高或业务冷启动等困难,难以训练出可靠的模型。

在目标检测这类较为复杂的学习任务上,样本不足带来的挑战更加棘手,因为模型复杂度高意味着对训练数据量有更高的要求,否则很容易导致模型过拟合。应对这类问题,一类常见的思路是迁移学习,即依赖资源丰富的源数据集或强大的预训练模型,为下游任务提供额外引导。而少样本学习是一类特殊的迁移学习任务,其针对的是每个标注类型仅有几十甚至几个样本的情况。

为了解决这个问题,飞桨联合百度研究院大数据实验室,发布两种少样本迁移学习的新算法,从不同角度应对标注不足的挑战,提升模型学习效果。

跨领域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少样本迁移学习新算法的方案技术。

cc9ea644e608e7835a63ff10cc27ba9d.png

跨领域Label Co-tuning算法

848bb2c1be1952fbf0ae4d26751fc284.png算法原理

少样本学习的一个普遍思路是在预训练模型基础上进行微调,然而这种直接的方式面临明显的挑战。

挑战一:当下游任务样本量太少时,很容易导致模型在目标数据集上过拟合,最终,微调后的模型泛化能力差。

挑战二:在微调过程中,如果直接将预训练任务的分类头舍弃,重新初始化,会导致大量预训练模型所学到的信息丢失。而这些信息可能对于预训练模型知识迁移至目标数据集很重要。

针对以上的问题,清华大学的Kaichao You等人在NeurIPS 2020发表了Label Co-tuning[1]算法,该算法是一种针对图像分类任务的迁移学习算法。其主要思路是对预训练类别空间Ys和目标任务类别空间Yt的关联进行建模。在微调之前,预先学习预训练类别ys∈Ysyt∈Yt之间的条件概率分布,即p(ys|yt),作为目标类别的一种辅助语义标签。这样可以有效的降低少量目标样本过拟合其标签的风险,同时预训练模型的分类头也将被重用,提供目标数据在Ys类别空间的预测结果,充分挖掘了预训练模型的迁移潜力。

以下为一个直观的例子,演示为何Label Co-tuning方法能够有效。如果我们的预训练数据集是具有1000类物体的ImageNet,而下游目标任务是COCO图像分类。此时,上下游任务之间存在大量有关联但又不完全相同的类别。如COCO中有“大象”这一类别,而ImageNet则粒度更细,包含“印度象”和“非洲象”。

由于不同数据集中,图像本身的视觉特征也存在一定差异,那么即使在类别的语义概念上有明显重合,其真实关联多数情况下也是比较隐晦、复杂,难以通过人工经验来指定。所以比较严谨的方式是通过学习的方式,建立起Ys和Yt两个完整类别空间的概率分布关系。如下图所示。

bc15b0d9b309ac4a0bc624515cdb5837.png

学习到这种类别关系后,对于每个目标数据集的样本(xi,yi),我们在微调过程中除了要拟合其原始的one-hot类别标签yi外,还会利用一个额外的预训练任务分类头拟合辅助语义标签p(ys|yt=yi),这个辅助标签的长度和预训练分类数相同,是一个soft label。

367268eee4020ba2ef6b847dcd6ddcd4.png算法实现

我们对该原型算法进行了改造和扩展,使其适合目标检测任务,并在PaddleDetection的经典结构Faster RCNN上添加了对Label Co-tuning算法的支持。在上下游类别关系矩阵的计算中,考虑到目标检测任务的特点,我们使用每个patch,而非每张图片作为一个样本。具体而言,需要从目标任务的训练数据中,直接提取出bounding box的标注,并在前向计算中获得该ground truth区域在预训练分类头上的预测结果,同时结合其自身标注的目标类别,来一起计算关系矩阵签p(ys|yt)。需要注意的是,Label Co-tuning虽然利用了完整的预训练模型,但并不需要预训练任务的数据集,关系矩阵是完全利用目标任务训练集计算出来的。

同样的,在微调过程中,我们也在bounding box粒度上应用辅助语义标签。对于每一个需要预测的检测框,我们除了拟合原始的类别标签和位置外,还会额外的拟合其在预训练语义空间上的soft label。

00a7320b33af82a87f625091bc9fe167.png

领域内Contrastive Tuning算法

8f23dda509fe52d192b05d16b22b5fed.png算法原理

对比学习是一种很有潜力的自监督表征学习方式,一般被用于预训练阶段学习图像的通用的视觉表征。而近期的一些研究表明,在常规的监督学习任务中,合理引入对比学习也能提升模型的判别效果,如分类、检测、分割等。基于这一思路,南加州大学的Bo Sun等人实现了检测框粒度上的自监督学习方法[2],可以显著提升少样本目标检测效果,并将成果发表在CVPR 2021。

该算法本质上有别于通常的样本级对比学习,通常的对比学习选择将每个样本的不同变换作为正例,其他样本作为负例。而在检测任务上,该方法引入了类别级的对比学习,但以每个bounding box为样本单元,即属于同类别的检测框之间互为正例,而不同类别则作为负例。

通过这样一种类别对比的方式,算法在微调过程中引入额外的loss来引导模型对同类patch学习更加紧密的表征,而不同类patch的表征则区别更加明显,如下图所示。

296a890a87541230ff589adfa4e54074.png

1595807e0464b9cb7fd7577da8425748.png算法实现

和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回传。

4a11bbe49d1526e1e9b84175ebde60e6.png

算法效果

e745a512c79501a90d0b3f141116ce6f.png

项目传送门

  • PaddleDetection少样本学习算法体验

https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/few-shot

  • PaddleDetection官方库

https://github.com/PaddlePaddle/PaddleDetection

飞桨PaddlePaddle公众号后台回复关键词: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】公众号

获取更多技术内容~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年跨境电商依然是风口,如何做好跨境电商

2023年1月1日,《区域全面经济伙伴关系协定》(RCEP)正式签署生效一周年,(rcep)于2023年1月2日起,RCEP对印度尼西亚正式生效,至此,我国已与其他14个rcep成员中的13个相互实施协定。这预示着,东南亚市场必将成…

下拉控件无法选中

本文迁移自本人网易博客,写于2012年1月9日,二维多段线绘制 - lysygyy的日志 - 网易博客 (163.com)做符号化过程中,一开始发现控件下拉后导致死机,原来是资源切换的问题,使用CAcModuleResourceOverride resOverride;即可…

Cadence PCB仿真使用Allegro PCB SI配置电压地网络电压的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文简单介绍使用Allegro PCB SI软件配置电压地网络电压的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则可这样…

C++连接mysql数据库并读取数据

1、需要包含mysql API的头文件 如果需要连接都本地的mysql数据库&#xff0c;前提是本地要已经安装了mysql数据库。这里要用到一些mysql的API&#xff0c;比如连接数据库、执行查询语句等操作&#xff0c;这些接口都包含在下面的头文件中&#xff1a; #include <mysql/mys…

kubernetes部署nacos集群(防坑)

kubernetes部署nacos集群&#xff08;防坑&#xff09; 官方nacos集群yaml文档参考&#xff1a; https://github.com/nacos-group/nacos-k8s.git 一、nacos 概览 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态…

VUE3中,使用Axios

axios是前后端数据交互的重要桥梁&#xff0c;理论和概念这里不再叙述了。可以看看官网。 axios中文文档|axios中文网 | axios 本例子&#xff0c;从简单到难。 目录 一、简单的使用 二、查询数据时出现等待窗体 一、简单的使用 1.废话少说&#xff0c;先使用HBuilder X建…

【测试】软件测试基本概念

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录1. 什么是需求2.什么是测试用例&#xff1f;3. 软件错误Bug的概念:sparkles:小结普通小孩也要热爱生活&#xff01; 1. 什么是需求 【注】一旦提及“区别”&#xff0c;一定要回答 相同点不同点。 在企业中&#x…

算法刷题打卡第57天:合并两个有序链表

合并两个有序链表 难度&#xff1a;简单 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#x…

liunx中搭建python3.7环境和安装pycharm并搭建Django

首先第一步我们先安装python3.7的环境在liunx中&#xff0c;先去下面这个网站然后找到Gzipped source tarball https://www.python.org/downloads/release/python-377/ 下拉到最底下选择它然后下载 如果python中已经安装就跳过这一步 用python --version 检查后如果已经装好pyt…

【2022年终总结】期待下一个365天

2022结束啦&#xff01;&#xff01;&#xff01;日出万物生&#xff0c;日落满天星&#xff0c;期待下一个365天&#xff01;&#xff01;&#xff01; 不知不觉在CSDN断断续续写文章已经四个月了&#xff0c;回想这段日子&#xff0c;还是很有必要纪念一下的&#xff0c;本期…

ArcGIS基础实验操作100例--实验61数据框投影变换

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验61 数据框投影变换 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&am…

JavaScript 模块化 —— 从概念到原理

走过路过发现 bug 请指出&#xff0c;拯救一个辣鸡&#xff08;但很帅&#xff09;的少年就靠您啦&#xff01;&#xff01;&#xff01; 1. 为什么需要 Javascipt 模块化&#xff1f; 1.解决命名冲突。将所有变量都挂载在到全局 global 会引用命名冲突的问题。模块化可以把变…

人工智能与python

人工智能的话题在近几年可谓是相当火热&#xff0c;前几天看快本时其中有一个环节就是关于人工智能的&#xff0c;智能家电、智能机器人、智能工具等等&#xff0c;在我的印象里&#xff0c;提到人工智能就会出现 Python&#xff0c;然后我便在网上查找了相关信息&#xff0c;并…

(第三章)OpenGL超级宝典学习:认识渲染管线

OpGL超级宝典学习&#xff1a;认识渲染管线 前言 本章作为OpenGL学习的第三章节 在本章节我们将认识OpenGL的渲染管线 对管线内各个过程有一个初步的认识 ★提高阅读体验★ &#x1f449; ♠一级标题 &#x1f448; &#x1f449; ♥二级标题 &#x1f448; &#x1…

【KG】TransE 及其实现

原文&#xff1a;https://yubincloud.github.io/notebook/pages/paper/kg/TransE/ TransE 及其实现 1. What is TransE? TransE (Translating Embedding), an energy-based model for learning low-dimensional embeddings of entities. 核心思想&#xff1a;将 relationship …

基于R的Bilibili视频数据建模及分析——建模-因子分析篇

基于R的Bilibili视频数据建模及分析——建模-因子分析篇 文章目录基于R的Bilibili视频数据建模及分析——建模-因子分析篇0、写在前面1、数据分析1.1 建模-因子分析1.2 对数线性模型1.3 主成分分析1.4 因子分析1.5 多维标度法2、参考资料0、写在前面 实验环境 Python版本&#…

防火墙命令

启动&#xff1a; systemctl start firewalld 查看状态&#xff1a; systemctl status firewalld 停止&#xff1a;systemctl stop firewalld 禁用&#xff1a;systemctl disable firewalld 怎么开启一个端口呢 添加 firewall-cmd --zonepublic --add-port80/tcp --permanent …

easyx保姆级教程---->从游戏玩家到游戏制作者

请点击这里&#xff1a;安装教程 1.头文件 #include<easyx.h> //这个是只包含最新的API(函数接口) #include<graphics.h> //这个头文件包含了上面的&#xff0c;还包含了已经不推荐使用的函数2.窗口 1.初始化绘制窗口 initgraph(width,height,flag); //窗…

Domino Web应用中的搜索功能和结果选择问题

大家好&#xff0c;才是真的好。 还有不到十天Domino多瑙河版本就将发布&#xff0c;在此之前&#xff0c;我们还是讲述一下Web中的搜索技术。 废话不多说&#xff0c;我们直接上干货。 Notes应用的视图在Web浏览器中可以直接展现&#xff0c;并且可选择。 如果这样展现的话…

【QGIS入门实战精品教程】8.1:QGIS制作地图案例教程

文章目录 一、加载矢量数据二、加载影像底图三、美化矢量数据四、切换到排版视图五、添加经纬度格网六、添加其他修饰元素七、地图输出一、加载矢量数据 加载本实验数据基础数据.gpkg中的甘肃省政区矢量数据,如下所示: 二、加载影像底图 QGIS加载在线地图案例教程参考: 【…