few shot目标检测survey paper笔记(迁移学习)

news2024/12/24 10:06:40

paper: Few-Shot Object Detection: A Comprehensive Survey (CVPR2021)

meta learning需要复杂的情景训练,而迁移学习仅需在一个single-branch结构上做两步训练。
常用的结构是Faster R-CNN,下面是Faster R-CNN的结构图。

在这里插入图片描述

RPN的修改

当样本数量很少时,RPN是error增大的关键地方。
比如,当只有一个样本,模型会propose 多个ROI和目标的groud truth匹配,估计这个类别的方差,类似于random cropping augmentation.
即使RPN miss掉一个ROI,performance也会有很大的下降。
因此,CoRPN中修改了RPN,把RPN中一个二分类器(前景背景)换成了M个二分类器。目的是至少有一个分类器能识别到相关的前景ROI。
FORD+BL在RPN之前加上了ASPP以增加感受野。
TFA则是在第2个训练阶段,固定RPN的权重,很多迁移学习也是这么做的。
在Retentive R-CNN中,发现在第一训练阶段(只用 D b a s e D_{base} Dbase训练)RPN会抑制新类别 C n o v e l C_{novel} Cnovel的ROI,
固定RPN的权重,只训练RPN的最后一层,也就是区分前景背景的一层,对于在第2训练阶段提高RPN是足够的。这一点也有其他paper论证。
FSCE和CIR则是把通过NMS的proposal数量加倍,以得到新类别的更多proposal.
但是这会造成计算量的加大,FSCE为此只采样了ROI head中一半的proposal用于计算损失。依据是观察到扔掉的那一半在第2训练阶段都是背景。
总结:为了减少错误的检测,RPN的权重在第2阶段用 D n o v e l D_{novel} Dnovel训练时需要调整,另外通过NMS的proposal数量可以增加。

FPN的修改

不再固定RPN的权重,FSCE中展示了在第2训练阶段微调FPN的权重比固定它的权重有提高。理论依据是认为base数据集的内容不能迁移到新的类别,需要微调权重。
MPSR中提到FPN的scales并不能补偿新类别小样本scale的稀疏性,因此,在refinement branch中,会应用data augmentation解决这个问题。
CIR设计了一个context模块扩大FPN的感受野,也提到了变化的scale问题,尤其是提高了小目标的检测率。
总结:FPN的权重也应该调整。

增加新类别样本之间的差异性

在新类别的样本数量有限,这些类别的样本差异也有限的情况下,一些方法试图增加新类别样本的差异性。
MPSR的refinement branch中,每个目标用正方形的window抠图,然后resize到不同的scales。这样做可以增加样本在size上的差异性。
FSOD-UP,CME中也用了这一策略。
另外,FSSP也用了类似的方法,在辅助分支中把目标做augmentation, 比如scale和平移。

在这里插入图片描述

Halluc中提出幻觉网络(hallucinator network),它会学习如何给新类别产生更多的训练样本。
怎么做到的呢。
用到了ROI head中的新类别样本的特征,把它们扩充,用分享的base数据集的类内特征方差。
LVC用到的data augmentation包括颜色抖动,随机抠图,马赛克,给每个ROI提取的特征作dropout,很大地提高了performance.
FSCE描述了用了随机抠图的augmentation和RPN中多个ROI proposals的相似性。因此,增加每个新类别instance的proposed ROI数量也可以提高样本的差异性,类似于随机抠图的augmentation.
增加样本的差异性主要应用于新的类别中样本极度缺少的场景。

如果包含新的类别的未标记的数据很多,也可以用半监督学习的方法增加样本的数量。
N-PME在微调模型之后伪标记base数据集,为找到base数据集中的 C n o v e l C_{novel} Cnovel(新的类别)。然后在下一阶段的微调中会用到这些伪标注的样本,当然也用到新类别的小样本,这样会提高样本数量。不过这些伪标注的目标框不够准确,因此在计算损失时时要忽略的。
LVC进一步改进了这一措施,还是用的伪标注,不过要验证一下这一样本是不是真的属于 C n o v e l C_{novel} Cnovel,同时还会纠正一下不够精确的目标框。用了ViT进行验证,训练用了一个叫DINO的自学习方法。有了这些高质量的附加样本,微调模型时就不再需要固定某部分的权重,而是直接end-to-end微调。
这种半监督的方法在COCO,VOC数据集中是可以的,但是在现实中,如果要检测某个稀有的类别或是医疗图像,这个方法就会有问题。
总结:在样本极度稀少的情况下,data augmentation或是伪标注可以提高检测准确率,因为增加了训练样本的差异性。

迁移base和新数据的knowledge

LSTD用了一个相似base类别的soft assignment, 对于新类别的权重,由base类别的权重进行初始化以迁移base数据的knowledge.
AttFDNet用base数据集检测器的参数来初始化新类别的检测器,而且用了一种imprinting初始化方法。
CGDP+FSCN也用了imprinting初始化方法。

为了学习和利用base和novel数据集视觉和语义上的相似性,在第2训练阶段,
UniT迁移了目标框regression和分类部分的权重(base to novel)。
SRR-FSD用语义word embedding表示每个类别。图像中的目标会映射到这个embedding空间,在视觉和语义上去学习新的类别。
FADI也融入了语义信息,用到了WordNet来估计base和novel类别的语义相似性。每个新类别应只与一个base类别关联,然后除了ROI head中的FC 层,其他权重都固定,进入第2阶段的微调。这一就可以把新类别的特征分布与base类别相关联。但是也会造成类别的混淆。所以还需要一个识别和区分的步骤。(听起来很复杂)
总结:给新的类别初始化权重的时候,与它语义上最近似的base类别的knowledge可以被迁移。

保持base类别的performance

很多模型会遇到“忘性”问题,训练新的类别之后就会不记得之前用base数据训练的类别。
当然在第2训练阶段可以再用base数据训练,不过跟之前相比效果还是有所下降。
为此,有一些改进方法:

Retentive R-CNN把RPN,ROI proposal中的分类头,classification分别都复制了一遍,分别用作base和novel类别的分类。
在novel head的finetuning阶段,用了cosine分类器,以平衡base和novel类别的特征差异。
同时,把区分base类别的RPN和ROI head的权重固定,这样就可以保持在base类别的performance.
(这样做模型就变大了)
BPMCH在finetuning阶段固定backbone B b a s e B_{base} Bbase和分类head. 然后用一个新的backbone B n o v e l B_{novel} Bnovel用于提取新类别的特征。
MemFRCN中,除了在ROI head应用基于softmax的分类器,每个类别的代表性特征向量都会被学习和储存,以记住base类别,即使在finetuning阶段ROI head的权重被修改。
在推理阶段,前面提取的特征可以用来和输入的类别特征用cosine相似度进行比较,这有点类似于meta learning dual-branch的support vectors.
总结:为解决“忘性”问题,需要考虑base类别和新类别梯度之间的角度。

修改训练目标

可通过修改损失函数引导检测器集中在前景区域,提升多个branch间的一致性,提升特征的类内,类间方差。
还可以限制梯度流。

1)增加损失函数项
LSTD在损失函数中加入了抑制背景和迁移知识正则项,帮助检测器聚焦于目标。
CGDP+FSCN认识到未标注的新类别是个问题,引入了半监督损失项。
AttFDNet提出2个损失项,最大化相同类别instance的cosine相似度,处理未标注的instance的问题。
FADI介绍了set-specialized margin loss, 扩大类别内的差异性。对不同的margin用不同的scale因子。

2)辅助分支的Loss
类似于meta learning方法TIP,FSOD-UP用了一致性损失使两个分支近似。用了KL-Divergence损失。
MPSR的两个分支用共享的权重实现松耦合,两个分支都对损失有贡献。
FSCE在ROI head中引入新的分支。用了一个FC层作为对比分支,以估计相似性。在对比分支中用了contrastive proposal encoding loss用于训练,增加同类别的cosine相似性,减少不同类别的相似性。
DMNet用了辅助分类分支,比较特征的欧式距离。这些特征embedding是通过度量学习得到的。

修改梯度流

DeFRCN中,想在两个训练阶段都更新backbone, 但是他们发现了矛盾的地方。
RPN和ROI head的目的是不一样的,RPN学习与类别无关的region proposal, 但是ROI head又要区分类别。
大量的实验表明要停止RPN到backbone的梯度流,缩放ROI head到backbone的梯度流。
在第一训练阶段,把ROI head的梯度流缩放到0.75,backbone会学习少一点。
在第2训练阶段,训练的是base和novel的并集,需要把上述梯度缩放到0.01,基本上就freeze backbone了。
这样做很大程度地提高了performance, 尤其在第2训练阶段。
CFA提出一个新的梯度更新方法,用到 D b a s e D_{base} Dbase D n o v e l D_{novel} Dnovel样本中的梯度angle.

修改训练方法

FORD+BL提出一上来先不把K个样本都用上,每个类别先用一个样本finetuning一次。然后再把K shot都用上,再finetuning,会提高performance.
TD-sampler在finetuning阶段用了batch采样策略。
总结:当优化了梯度流,修改类内样本差异性后,loss也要被修改。
在辅助分支,对比性的loss可以提高特征的区分度,类似于2 branch meta learning.

用Attention

Attention会加强特征。
方法有FSOD-UP,在prototype和RPN的输出中用到soft attention.
FSSP先用self-attention模块处理图片,然后把这个处理过的input送给one-stage detector. 这样检测器可以把注意力集中在图片重要的部分。
AttFDNet结合了top-down和bottom-up attention. top-down通过监督方式学习。 bottom-up由显着性预测模型计算(BMS,SAM)

修改模型结构

1)基于Faster R-CNN
2)基于one-stage detector
比较早的方法LSDT,结合了SSD的目标框regression方法和Faster R-CNN的分类思想。
CoTrans用了SSD作为one-stage detector, 认为SSD中多尺度的感受野提供了丰富的信息,对knowledge迁移比较重要。
AttFDNet也用了SSD检测器,但是加了2个attention分支,使检测器集中到图片中重要的部分,用了6个prediction heads预测不同scale的目标框和类别。
DMNet结合SSD和YOLO的设计理念提出了一个one-stage detector. 但是对定位和分类用了2个解耦的分支,认为这种解耦有助于少量样本。
FSSP用了YOLOv3, 用了a lot of effort,
比如自注意力机制,辅助分支中包含了网络的复制,辅助分支input data的augmentation, 新增加了损失函数。
使得网络在非常少的样本(10 shot)时效果比TFA要好。
总结:基于Faster R-CNN的检测器,score细化可以减少FP。one-stage检测器可以通过辅助分支做data augmentation.

目前比较好的迁移学习方法

DeFRCN中认为与类别无关的定位任务(RPN)和区分类别的任务(ROI head) 刚好相反,因此,要停止RPN到backbone的梯度,缩放ROI head到backbone的梯度。然后训练检测器的所有部分。一个模块在ROI head中消除掉高分的FP类别,这是分类中平移不变特征和定位的平移协变特征矛盾的地方。

CFA可以应用与DeFRCN的顶部,用来解决finetuning阶段出现的“忘性”问题,这种问题常出现在base类别和novel类别梯度的角度为钝角时。CFA会储存K个base类别样本,用来在finetuning阶段计算base类别的梯度。当base和novel的梯度角为钝角时,两个类别的梯度要被平均,重新赋予权重,不是钝角时新类别的梯度就可以back propagation, 不用担心会出现“忘性”问题。

FADI在finetuning之前把每个新的类别都和一个base类别相关联,通过WordNet测量它们的语义相似度。然后网络被用来训练对齐特征的分布。虽然这样会降低新类别的类内方差,不过会让base和novel混淆,因此后面还跟着一个区分它们的步骤。

总结

迁移学习的训练流程比较简单,不像元学习中用到复杂的情景训练。通过结合一些方法,使得可以finetune尽可能多的模块(比如前面提到的方法),这样迁移学习可以达到SOTA水平。

与元学习的比较

元学习的single-branch近年来用的比较少,而且performance不如dual-branch. 所以比较的是元学习的dual-branch和迁移学习。它们都很有前景,且都可以融合其他训练策略的idea.
在这里插入图片描述
可以看到迁移学习的“忘性”比较大,训练了新的就会忘了旧的,很难保持base数据集的效果。
另外,one-stage detector的效果不如faster R-CNN, 大部分的工作都是基于Faster R-CNN的。

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

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

相关文章

Vue的进阶使用--模板语法应用

目录 前言 一. Vue的基础语法 1.插值 1.1文本插值 1.2HTML插值 1.3属性插值 1.4Vue演示三元条件运算 2 指令 2.1if&&else指令(v-if/v-else-if/v-else) 2.2 v-for 指令 2.3 v-on指令(动态参数) 2.4知识点补充之v-if与v-show的区别 3.过…

著名书法家傅成洪在香港第八届“一带一路”高峰论坛上展示艺术与合作的融合

香港第八届“一带一路”高峰论坛于9月13日至14日在香港隆重举行,吸引了来自海内外的6000多名嘉宾,共同回顾“一带一路”倡议的历程,并展望未来的投资和商贸机遇。这一庆祝活动恰逢“一带一路”倡议的10周年,主题定为“携手十载 共…

[Python进阶] Pyinstaller打包模式

5.3 Pyinstaller打包模式 Pyinstaller将Python源码打包成程序有2种打包的方式: 单文件夹模式:指打包后将所有的程序文件放在一个文件夹内。 单文件模式:打包后只有一个可执行文件,全部的依赖文件都已经被打包进去了。 5.3.1 单文…

Linux 信号相关

int kill(pid_t pid, int sig); -功能:给某个进程pid 发送某个信号 参数sig可以使用宏值或者和它对应的编号 参数pid: >0 ;将信号发给指定的进程 0;将信号发送给当前的进程组 -1;发送给每一个有权限接受这个信号的…

Postman应用——Variable变量设置(Global、Environment和Collection)

文章目录 Global变量设置Environment变量设置Collection变量设置Global、Environment环境变量预览 Global、Environment和Collection变量使用,点击查看。 Global变量设置 全局变量设置,作用域是所有Collection、Folder和Request,全局变量只有…

混淆矩阵和数据不平衡 (1/3)

一、说明 如果数据集数据不平恒,如何评估分类器的效果?如果分类器不好,如何改进分类器?本篇将讲述不平衡数据下,混淆矩阵的应用。 二、混淆矩阵的基本概念 2.1 连续数据分布 LET将数据视为连续的,分类的或有…

阿里云服务器价格更新,轻量应用服务器108元,云服务器182.04元起

阿里云服务器价格更新了,不同时期阿里云服务器的租用价格不同,目前阿里云在官网活动中新增加了一款经济型e实例规格的云服务器,现在购买阿里云轻量应用服务器最低为108元,购买云服务器最低为182.04元,换算到每天只要0.…

零基础学前端(四)3. 重点讲解 CSS:实战补全百度网站首页

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 3. 初学者切忌,不要眼花缭乱,不要四处找其它文档,要坚定一个教授者的方式,将其学通透&#xff…

前端学习路线,带你入门程序猿

相信很多想学前端的小伙伴是非常迷茫的 前端知识体系很多,不知从何学起 而且框架也有不少,不知道该如何下手 很多学习前端的小伙伴都没有一个很好的学习路线图,简直可以说是看见啥学啥 而且自己在学习的时候非常吃力,感觉总是学不…

SQLite 学习笔记1 - 简介、下载、安装

SQLite 简介 SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。 SQLite 是一个由C语音开发的嵌入式库&#xff…

DataGrip汉化

一、关闭DataGrip,下载新的jar包 链接:https://pan.baidu.com/s/1gTHpyMuIME_n8qC9KYbOzA 提取码:ute3 二、把下载的jar包放在lib文件里,把原来自带的jar替换掉 三、打开datagrip

nginx代理故障总结

一、故障现象 今天公司的某个系统文件下载功能失败,报错network error,其他功能正常。 二、故障定位 首先我们检查了公司的网络情况,包括网络路由、防火墙策略、终端安全产品等,均未发现异常。 尝试访问http://X.X.X.X:7002端口&…

uniapp——实现二维码生成+保存二维码图片——基础积累

最近在做二维码推广功能,自从2020年下半年到今天,大概有三年没有用过uniapp了,而且我之前用uniapp开发的程序还比较少,因此很多功能都浪费了很多时间去查资料,现在把功能记录一下。 这里写目录标题 效果图1.根据接口返…

元数据管理平台Datahub0.10.5版本安装部署与导入各种元数据手册

官网文档连接 DataHub Quickstart Guide | DataHub (datahubproject.io) 本文所选择的Python的版本为3.8.16,Docker版本为20.10.0,Datahub为0.10.5版本 python必须为3.7以上的版本。0.10.5不支持以下的版本 如果要使用web上的 添加数据源 直接调用的…

开源分布式存储系统(HDFS、Ceph)架构分析

文章目录 中间控制节点架构-HDFSNameNode节点分析DataNode节点分析SecondNameNode节点分析Client分析 完全无中心架构-CephCeph Monitor分析Ceph OSD分析Ceph Manager分析Ceph Clients分析 小结HDFS优点缺点 Ceph优点缺点 参考 中间控制节点架构-HDFS 以HDFS( Hado…

五、点击切换、滚动切换、键盘切换

简介 通过事件改变当前展示的信息组件&#xff0c;交互的事件有点击上下切换、鼠标轮动上下切换、键盘上下键切换。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件&#xff1a;App.vue、public 一、鼠标点击上下箭头切换 <template><div class"a…

Learn Prompt-Prompt 高级技巧:Agent的颠覆性影响

OpenAI联合创始人Andrej Karpathy在一个开发者活动上发表讲话&#xff0c;谈及了他和OpenAI对AI Agents的看法。他将过去开发 AI Agents 的困难与现在依靠新技术工具而带来的新机会进行了对比。Andrej Karpathy 认为普通人、创业者和极客在构建 AI Agents 方面相比 OpenAI 这样…

还有一天活动就开始我定好闹钟准时上线

&#xff08;整理衣服&#xff09;&#xff08;大步流星走上台&#xff09;&#xff08;拿起麦克风&#xff09;&#xff08;激情发言&#xff09;请大家&#xff08;热泪盈眶&#xff09;&#xff08;哽咽&#xff09;关注&#xff08;流泪&#xff09;&#xff08;擦眼泪&…

蓝桥杯打卡Day11

文章目录 最长上升子序列最长上升子序列II 一、最长上升子序列IO链接 本题思路:本题是一关于dp问题中的一个类型是最长上升子序列问题&#xff0c;首先我们将状态表示出来&#xff1a;f[i]表示以a[i]结尾的最大的上升序列。状态计算&#xff08;集合划分&#xff09;&#xf…

如何防盗版软件

有多少公司&#xff0c;至今都无法摆脱被盗版软件支配的恐惧&#xff1f; 其实大多数时候&#xff0c;企业都是被动当了大冤种&#xff0c;因为他们也并不会主动要求员工使用破解软件。实在是架不住有些不懂版权的、心存侥幸的员工私下里使用。只要公司联网&#xff0c;就一定…