当前位置: 首页 > news >正文

few shot object detection via feature reweight笔记

摘要部分

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系数可视化

请添加图片描述

相关文章:

few shot object detection via feature reweight笔记

摘要部分 few shot很多用的都是faster R-CNN为基础,本文用的是one-stage 结构。 用了一个meta feature learner和reweighting模块。 和其他的few shot一样,先学习base数据集,再推广到novel数据集。 feature learner会从base数据集中提取meta…...

工会排队模式:电商新营销模式吸引消费者,提升销售!

随着电商行业的繁荣发展,私域流量已经成为了电商平台争夺消费者和促进销售的重要手段。工会排队模式正是在这种背景下应运而生的一种创新性的电商营销模式。这种模式通过奖金池的资金来为消费者和商家提供返现和排队奖励,构建了一个实现消费者和商家共赢…...

定档通知2024中国(北京)国际红外技术及设备展览会

时间:2024年7月14-16日 地点:北京国家会议中心 ◆展会背景background: 各有关红外企业厂商:2024年7月14~16日,2024中国国际红外技术及设…...

自助建站系统,一建建站系统api版,自动建站

安装推荐php7.2或7.2以下都行 可使用虚拟主机或者服务器进行搭建。 分站进入网站后台 域名/admin 初始账号123456qq.com密码123456 找到后台的网站设置 将主站域名及你在主站的通信secretId和通信secretKey填进去。 即可正常使用 通信secretId和通信secretKey在主站的【账号…...

算法框架-LLM-1-Prompt设计(一)

原文:算法框架-LLM-1-Prompt设计(一) - 知乎 目录 收起 1 prompt-engineering-for-developers 1.1 Prompt Engineering 1.1.1 提示原则 1. openai的环境 2. 两个基本原则 3. 示例 eg.1 eg.2 结构化输出 eg.3 模型检验 eg.4 提供示…...

一个rar压缩包如何分成三个?

一个rar压缩包体积太大了,想要将压缩包分为三个,该如何做到?其实很简单,方法就在我们经常使用的WinRAR当中。 我们先将压缩包内的文件解压出来,然后查看一下,然后打开WinRAR软件,找到文件&…...

批量获取拼多多商品详情数据,拼多多商品详情API接口

批量获取拼多多商品详情数据可以采用以下方式: 使用拼多多开放平台API接口。 拼多多开放平台提供了API接口,可以通过API接口获取拼多多平台上的商品信息,使用API接口需要进行权限申请和认证,操作较为复杂。 使用第三方工具。 市面…...

Redis Cluster Gossip Protocol: 目录

术语说明 server:当前的节点 cluster:每个节点的内存中都有一个集群信息结构,里面包含了集群中各个节点的状态信息(包括server自己) myself:当前节点在cluster中的实体 node:cluster节点字典中…...

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Span

作为Text组件的子组件,用于显示行内文本的组件。无子组件 一、接口 Span(value: string | Resource) 从API version 9开始,该接口支持在ArkTS卡片中使用。 参数: 参数名 参数类型 必填 参数描述 value string | Resource 是 文本内…...

这些负载均衡都解决哪些问题?服务、网关、NGINX

这篇文章解答一下群友的一系列提问: 在微服务项目中,有服务的负载均衡、网关的负载均衡、Nginx的负载均衡,这几个负载均衡分别用来解决什么问题呢? 在微服务项目中,服务的负载均衡、网关的负载均衡和Nginx的负载均衡都…...

Lambda表达式在C++中的定义

目录 背景介绍: Lambda表达式的定义: Lambda结构介绍: 1. Lambda capture 2. Lambda parameter list 3. Lambda mutable 4. Lambda return type 5. Lambda 主体 Lambda 表达式小结: Lambda 引用参考: 背景介…...

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验

课程1_第2周_测验题 目录:目录 第一题 1.神经元计算什么? A. 【  】神经元计算激活函数后,再计算线性函数(zWxb) B. 【  】神经元计算一个线性函数(zWxb),然后接一个激活函数…...

前端代码格式化规范总结

在日常开发过程中,经常会碰到代码格式化不一致的问题,还要就是 js 代码语法错误等没有及时发行改正,下面就介绍一下如何使用eslint、prettier、husky、lint-staged、commitizen来规范代码格式和提高代码质量的方法。 目录 准备工作代码检测代…...

Windows10打开应用总是会弹出提示窗口的解决方法

用户们在Windows10电脑中打开应用程序,遇到了总是会弹出提示窗口的烦人问题。这样的情况会干扰到用户的正常操作,给用户带来不好的操作体验,接下来小编给大家详细介绍关闭这个提示窗口的方法,让大家可以在Windows10电脑中舒心操作…...

易点易动固定资产管理系统: 帮助您应对2023年年终固定资产大盘点

作为一名企业的行政人员,我们都了解年终固定资产盘点对于企业来说至关重要。然而,面对众多资产、复杂的流程和繁琐的记录工作,往往会令人感到头疼不已。为了帮助您应对2023年的年终固定资产大盘点,我们推荐易点易动固定资产管理系…...

OpenGLES:绘制一个混色旋转的3D立方体

效果展示 混色旋转的3D立方体 一.概述 之前关于OpenGLES实战开发的博文,不论是实现相机滤镜还是绘制图形,都是在2D纬度 这篇博文开始,将会使用OpenGLES进入3D世界 本篇博文会实现一个颜色渐变、旋转的3D立方体 动态3D图形的绘制&#xf…...

Maven(4)-利用intellij idea创建maven 多模块项目

本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具:intellij idea。 一、项目结构 multi-module-project是主工程,里面包含两个模块(Module): web-app是应用层,用于界面展示&#xff…...

8年测试老鸟,性能测试-数据库连接池问题定位/分析,一篇打通...

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

【Sentinel】Sentinel原码分析

本文内容来自【黑马】Sentinel从使用到源码解读笔记,做了部分修改和补充 目录 Sentinel 基本概念 基本流程 Node Entry 定义资源的两种方式 使用try-catch定义资源 使用注解标记资源 基于注解标记资源的实现原理 Context 什么是Context Context的初始化 …...

计算机竞赛 题目:基于深度学习的人脸表情识别 - 卷积神经网络 竞赛项目 代码

文章目录 0 简介1 项目说明2 数据集介绍:3 思路分析及代码实现3.1 数据可视化3.2 数据分离3.3 数据可视化3.4 在pytorch下创建数据集3.4.1 创建data-label对照表3.4.2 重写Dataset类3.4.3 数据集的使用 4 网络模型搭建4.1 训练模型4.2 模型的保存与加载 5 相关源码6…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...