few shot object detection via feature reweight笔记

news2024/12/23 13:47:44

摘要部分

few shot很多用的都是faster R-CNN为基础,本文用的是one-stage 结构。
用了一个meta feature learner和reweighting模块。
和其他的few shot一样,先学习base数据集,再推广到novel数据集。
feature learner会从base数据集中提取meta feature, 再用这个feature去检测novel数据集。
reweighting模块把一些novel数据的example转为向量,这个向量表示meta feature的重要程度。
所以理解为这是few shot的迁移学习方法。

introduction和相关工作

样本少的时候CNN容易overfit, 推广性比较差。
本文用base数据集和少样本的novel数据集训练,达到同时能识别base和novel数据集的效果。
属于迁移学习,迁移base的knowledge到novel数据。

novel数据有一个query image和一些support images.
模型包括meta feature learner和re-weighting模块。
meta feature learner从query image中提取meta feature.
re-weighting模块从support image中得到global features, 然后嵌入到re-weighting系数中,
这个系数表示query image meta feature的重要程度。
这样的话,query meta feature就得到了support image的信息,调整到适合novel数据检测的程度。
调整过的meta features送给目标检测的预测模块,用来预测类别和目标框。

总结一下就是先训练得到meta feature,
如果novel数据集有N个类别,那么re-weighting模块会用到N个类别的support images,
得到N个re-weighting向量,每个向量负责检测对应的类别。

两个模块是端到端一起训练的。
paper的方法是2个训练的步骤,第1个训练用base数据,提取meta feature,
第2个训练用novel数据集微调.
当然也设计了损失函数。

之前另一篇survey提到过,迁移学习的缺点是“忘性大”,学习了base数据后,再学novel数据,base数据的检测效果就会下降。
Related Work中也提到了有关迁移学习的只评价了novel类别。而paper是同时评价base和novel的。

方法

backbone用YOLOv2, 用backbone提取meta特征,也就是把backbone作为meta feature extractor.
还有一个re-weighting模块M,设计成一个轻量级的CNN,不影响效率。

meta feature的提取通过query image, re-weighting模块用support image.
re-weighting用来改变meta feature的权重。

比如 I 是 input query image, 那么它的meta feature是一个(w, h, m)的 feature F F F(经过backbone).
所以meta feature有m个feature map.
对于类别 i, support image和bounding box分别为 I i I_i Ii M i M_i Mi,
re-weighting模块的输入为( I i I_i Ii M i M_i Mi),会得到一个与class相关的系数在这里插入图片描述
这个系数与 F F F在channel上相乘(实现用1x1 depth-wise卷积),就得到与类别 i 相关的feature F i F_i Fi,
在这里插入图片描述
F i F_i Fi送进预测模块P,得到objectness score o, 目标框(x,y,h,w)和类别score c i c_i ci, 每个anchor适用。
在这里插入图片描述

和之前小样本检测一样,把COCO,PASCAL等公共数据集作为base数据集,
把base数据集分成多个小样本检测任务,每个任务由support image和query image组成,
其中,support image是N个类别,query image是其中一个类别。
query image用来做evaluation.

损失函数:
请添加图片描述
请添加图片描述
请添加图片描述

可以理解为query image经过backbong得到meta feature, 然后经过re-weighting得到 着重强调类别 j 的特征,
再经过prediction模块得到bounding box,和query image的box计算损失。

训练分为2步。
第一步用base训练,上面的D,M,P三个模块一起训练。
第2步是小样本微调。用base和novel数据一起训练。

novel数据集中的类别只有k个标注的目标框,为了避免class imbalance,
所以在每个base类别中也取k个box。
训练过程和第一步一样,但是训练epoch数减少,因为样本数量不多。

训练过程中,re-weighting系数由(support image, box)决定,每个epoch它们是随机采样的。
完成第2步的训练后,就不再需要support image, 可以直接检测。

re-weighting系数是取k-shot samples预测出来的系数的平均,
得到这个系数向量之后,re-weighting模块可以在推理中移除,所以几乎没有增加新的参数。
就相当于在prediction之前把特征channel-wise乘一个re-weighting向量。

总的结构图如下:
请添加图片描述

损失函数

按照之前的描述,在推理过程中,应该是按类别预测的(每个类别一个re-weighting系数)。
所以很容易想到BCE损失函数,是target class就是1,否则为0.
但是用BCE容易出现一片区域预测出多个类别的情况。NMS并不能过滤掉多余的目标框,因为NMS只能过滤同类别的高度重叠的目标框,不同类别的是不过滤的。

作者用softmax校正了class score

请添加图片描述

根据log函数的性质, c i c_i ci越小, l o g ( c i ) log(c_i) log(ci)负值越小,损失就越大,反之损失越小。
直接BCE的问题在于它必须同时预测一个positive和negative. 而类别又不止两类。

其他损失函数部分和YOLOv2类似,但是 L o b j L_{obj} Lobj处考虑到正样本和负样本的平衡,有些负样本的损失不计算。
整体的损失函数为

请添加图片描述

re-weighting模块的input格式

re-weighting模块的input应该是图片中的ROI区域,
一个图片可能有多个类别的目标,所以在RGB通道上再加一个通道Mask, ROI区域内值为1,其他区域为0.
如果同一类目标有多个object, 那么只取一个。

实验

选择VOC07,12,20个类别, train/val用于训练,5个类别作为novel, 15个作为base数据。
COCO数据集中,选择和VOC重合的20类作为novel, 剩下的60类作为base.

几个对比版本:
YOLO-joint: base和novel一起训练,训练epoch和paper方法一致
YOLO-ft:先用base训练,再用novel微调,epoch数和paper方法一致
YOLO-ft-full: 把YOLO-ft训练至完全收敛
LSTD(YOLO): 把Low-Shot Transfer Detector(LSTD)的background depression(BD)和transfer knowledge(TK)实现到YOLO上,训练epoch数和paper一致
LSTD(YOLO)-full: LSTD(YOLO)训练到收敛

VOC数据集的mAP
请添加图片描述

COCO数据集上的mAP

请添加图片描述

收敛速度对比

请添加图片描述

re-weighting系数可视化

请添加图片描述

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

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

相关文章

Python机器学习实战-特征重要性分析方法(8):方差分析ANOVA(附源码和实现效果)

实现功能 使用f_classif()获得每个特征的方差分析f值。f值越高,表明特征与目标的相关性越强。 实现代码 from sklearn.feature_selection import f_classif import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as p…

七张图解锁Mybatis整体脉络,让你轻松拿捏面试官

前言 MyBatis是一款ORM(Object-Relational Mapping)框架,其主要用于将Java对象与关系数据库之间进行映射,凭借其轻量性、稳定性以及广泛的开源社区其受到了广大开发者的追捧。 那MyBatis为我们做了哪些事情呢?其实&a…

Thinking for Doing:让LLMs能推断他人心理状态来做出适当的行动。

LLMs通常能回答有关心理状态的问题,但往往不能将这些推断用于实际行动。例如,如果一个故事中的角色正在寻找他的背包,而模型知道背包在厨房里,那么模型应该能推断出最好的行动是建议角色去厨房查看。T4D 的目的就是要求模型不仅要…

JavaScript-mooc(纯分享)

第一步下载软件 mooc_v1.3.2_windows_amd64.zip - 蓝奏云 解压后打开有这么多文件 用记事本的打开方式打开config的文件 第一个尖头改成你学校对应慕课英华网址 第二个箭头是你的账号 第三个箭头是你的密码 改好后点击文件保存 最后一步点击运行 {"global": {&qu…

零代码编程:用ChatGPT一键自动制作英文绘本音频

读英文绘本,对于儿童的英语启蒙非常重要。在这个过程中,必然要父母给孩子读大量的英文绘本,这会非常累。有些英文绘本自带音频,直接播放即可,这就轻松多了。如果没有自带音频呢?这时候可以从YouTube下载绘本…

应用在智能家电中的触摸感应芯片

智能家电就是将微处理器、传感器技术、网络通信技术引入家电设备后形成的家电产品,具有自动感知住宅空间状态和家电自身状态、家电服务状态,能够自动控制及接收住宅用户在住宅内或远程的控制指令;同时,智能家电作为智能家居的组成…

Linux常见指令3

Linux常见指令3 一.Linux指令1.时间相关的指令1.date指定格式显示时间2.时间戳3.补充内容-日志3.Cal 2.find补充1.which2.whereis 3.uname-a-r 4.重要的几个热键5.关机命令 二.grep-i选项-n选项-v选项grep其他用途1.搜索指定进程信息2.查找日志等级 补充命令补充命令:sort补充命…

void * 类型指针

目录 一、什么是void *类型指针 二、void *类型指针作用 三、void *类型指针的用法 一、什么是void *类型指针 void *类型指针是无具体类型指针。不能直接进行解引用操作,也不能进行加减整数的操作。 二、void *类型指针作用 void *类型指针可以用于接收任意类型…

【2023集创赛】平头哥杯一等奖作品:基于无剑100开源SoC平台构建双核TEE安全系统

本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)平头哥杯一等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品…

超全整理,Jmeter接口性能测试-Beanshell调用jar包加密(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、添加beanshell…

Jmeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量,相比于并发模式,更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS,我们可以把他理解为我们的TPS,我们就不…

《软件方法(下)》第8章2023版连载(05)关于实体类

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.2 建模步骤C-1 识别类和属性 8.2.2 三种分析类 8.2.2.2 关于边界类 边界类的责任是接受输入、提供输出以及做简单的过滤。 图8-20中提到边界类的映射方法——每个有接口的外系统…

Linux TCP协议通信 (流程 三次握手 四次挥手 滑动窗口)

TCP通信流程 Socket函数 TCP通信实现&#xff08;服务器端&#xff09; #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int main() {//1.创建socketint lfd socket(AF_INET, SOCK_…

微软首款AI芯片代号“雅典娜”;马斯克四年内将让“星舰”上火星丨 RTE 开发者日报 Vol.61

开发者朋友们大家好&#xff1a; 这里是**「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻**」、「有态度的观点」、「有意思的数据」、「有思考的文章」…

关于对XSS原理分析与绕过总结

一、原理 该文章仅用于信息防御技术教学&#xff0c;请勿用于其他用途。 1、XSS原理 XSS&#xff08;跨站脚本攻击&#xff09;是一种常见的网络安全漏洞&#xff0c;攻击者通常会在网页中插入恶意的 JavaScript 代码。由于服务器对输入数据的过滤和验证不严格&#xff0c;这…

刘京城:我的《软件方法》学习经历(有彩蛋)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 写在前面&#xff08;潘加宇&#xff09; 下面是刘京城写的关于他学习《软件方法》的经历。我在前面啰嗦几句。 我做软件建模方面的研究和普及工作已经24年了&#xff0c;和各行各业…

机器学习-数值特征

离散值处理 import pandas as pd import numpy as npvg_df pd.read_csv(datasets/vgsales.csv, encoding "ISO-8859-1") vg_df[[Name, Platform, Year, Genre, Publisher]].iloc[1:7]NamePlatformYearGenrePublisher1Super Mario Bros.NES1985.0PlatformNintendo2…

30 数据分析常见概念(略写可跳)

文章目录 数据科学领域概述数据如何驱动运营给企业带来价值岗位关键词说明业务的商业模式 数据指标数据指标定义及常用数据指标如何选取指标分析角度计数流量导向的工具内容导向的工具用户导向的工具业务导向的工具 数据分析方法对比分析多维分析漏斗分析留存分析总结 用户画像…

王兰去(黑客)自学

前言&#xff1a; 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“…

京东数据分析软件:2023年8月京东彩妆行业品牌销售排行榜

鲸参谋监测的京东平台8月份彩妆市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;今年8月份&#xff0c;京东平台上彩妆行业的销量将近390万&#xff0c;其中&#xff0c;环比来看增长约11%&#xff0c;同比则降低约34%&#xff1b;销售额为6.3亿&#xf…