【半监督学习】3、PseCo | FPN 错位对齐的高效半监督目标检测器
文章目录
- 一、背景
- 二、方法
- 2.1 基础框架结构
- 2.2 带噪声的伪边界框学习
- 2.3 多视图尺度不变性学习
- 三、实验
论文:PseCo: Pseudo Labeling and Consistency Training for Semi-Supervised Object Detection
代码:https://github.com/ligang-cs/PseCo
出处:ECCV 2022 | 南京科技大学 商汤
一、背景
现阶段图像分类、目标检测等任务的效果都取得了很大的进展,这很大程度上依赖于大量标注好的数据。
但是大量的数据标注非常耗时且昂贵,尤其是目标检测任务,需要很严格精细的标注。
所以,使用未标注的数据来提升模型效果的半监督学习就被提出来,可以同时使用标注数据和未标注数据来进行模型训练。
半监督图像分类(Semi-Supervised for Image Classification,SSIC),对未标记数据的学习可以分为两类:
- 伪标记 [7,18]
- 一致性训练 [24,22]
还有一些方法如 FixMatch [19],FlexMatch [28] 试图将这两种技术结合到一个框架中来提升效果
半监督目标检测( Semi-Supervised Object DetectionS,SOD)中,一些工作借鉴了 SSIC 的关键技术(如伪标记、一致性训练),并将其直接应用于SSOD,但效果不尽如意。原因主要有两点:
- 一方面,与图像分类相比,目标检测的伪标签更加复杂,既包含类别信息,又包含位置信息。
- 另一方面,目标检测需要捕获比图像分类更强的尺度不变能力,因为它需要仔细处理具有丰富尺度的目标
本文的贡献:
- 提出了一个 SSOD 框架(PSEudo labeling and COnsistency training,PseCo),将目标检测属性集成到 SSOD 中,使得伪标签和一致性训练能更好的用于目标检测任务
二、方法
PseCo 的整体架构如图 2 所示,在未标记的数据中,PseCo 由以下两部分构成:
- 带噪声的伪框学习(Noisy Pseudo box Learning,NPL)
- 多视图尺度不变学习(Multi-view Scale-invariant Learning,MSL)
2.1 基础框架结构
本文使用 Faster RCNN 作为基础检测框架
使用 Teacher-student 训练模式,教师模型是通过对学生模型进行指数移动平均(Exponential Moving Average,EMA)得到的,教师网络和学生网络的结构完全相同。学生网络使用梯度更新来训练,教师网络根据学生网络来更新且无需参与训练。
整体过程如下:
- 使用定义好的采样率来从标注数据和未标注数据中采用,得到一个 batch 的数据输入网络进行训练
- 对标注数据:送入学生网络进行学习,并得到监督学习 loss,Ll=Lclsl+LreglL_l=L^l_{cls} + L^l_{reg}Ll=Lclsl+Lregl
- 对未标注数据:
- 进行弱数据增强后送入教师网络进行学习,生成伪标签
- 进行强数据增强后送入学生网络进行学习,学习伪标签
- 根据学生网络和教师网络的预测结果,得到半监督学习 loss:Lu=LclsuL_u = L^u_{cls}Lu=Lclsu
- 然后计算总体的 loss: L=Ll+LuL = L_l + L_uL=Ll+Lu,用于指导梯度更新来更新学生网络的权重
- 最后,使用指数移动平均来更新教师网络权重
每次训练根据抽取比例进行随机抽取标注数据和未标注数据:
-
对标注数据:
- student model 按正常模式训练,用 gt box 来监督其训练,Ll=Lclsl+LreglL^l = L_{cls}^l+L_{reg}^lLl=Lclsl+Lregl
-
对未标注数据:
弱数据增强后送入教师模型生成伪标签,强数据增强后送入学生网络学习伪标签,且由于作者认为分类和回归没有强联系,即分类好不一定回归好,则对未标注数据舍弃了回归 loss,只使用分类 focal loss: Lu=LclsuL^u = L^u_{cls}Lu=Lclsu
-
首先,使用弱数据增强(水平翻转、随机调整大小等),然后输入教师模型进行伪标签生成(也就是让教师模型输出预测结果,毕竟教师模型是比较大的,能力较强,对学生网络有很大的指导作用的)。此外,考虑到在使用了 NMS 后的伪标签(检测框)也会很密集,故此又设置了一个分数阈值 τ\tauτ,只保留分数高于阈值的框作为伪标签
-
之后,对输入训练数据进行强增强(如切割、旋转、亮度抖动等),生成学生模型的训练样本,对学习模型进行训练
-
最后,由于好的分类和好的定位没有强关联,所以作者不对未标记数据进行位置回归,而且实验也能证明对未标记的数据进行位置回归的话也会导致训练不稳定,所以作者对无标签数据没有使用回归 loss,只使用了分类 Focal loss
-
前景和背景的数量不平衡问题:
- 前景-背景不平衡在目标检测中普遍存在,在半监督情况下更加严重
- 上面提到的过滤 NMS 保留下来的伪标签的得分阈值 τ\tauτ 虽然可以提高伪标签的精度,但也会导致伪标签数量减少,使得模型容易学习优势类别,导致偏倚的预测
如何解决前景和背景的数量不平衡问题:
-
对未标记的数据,分类 loss 使用类似于 Unbiased Teacher[14] 中的方法,将 CE loss 替换成 Focal loss,且 αt\alpha_tαt 和 γ\gammaγ 和原始论文中一样
-
标记数据和未标记数据的总体 loss 为 L=Ll+βLuL = L^l+\beta L^uL=Ll+βLu,其中 β\betaβ 被用于控制未标记数据的权重
2.2 带噪声的伪边界框学习
Noisy Pseudo Box Learning
在 SSOD 中,伪标签包含类别和位置两种信息
伪标签的类别得分只能表示其类别的置信度,无法保证框位置的质量,如果伪标签的框位置不精确的话就会拉低模型的效果,所以本文使用下面两种方法来减少位置对 label assign 和回归任务的损害:
- Prediction-guided Label Assignment
- Positive-proposal Consistency Voting
1、Prediction-guided Label Assignment
Faster RCNN 中的 label assignment 是基于 IoU 的方法,将和 gt 的 IoU 大于阈值(0.7)的 box 置位正样本。
在半监督学习中,gt 就是生成的伪标签。
该做法的前提是假设 gt 的框位置非常的准确,所以方法不适合于未标记的数据,可能会导致一些低质量的 proposal 被分配为正样本。
一个示例如图 1c 所示,一个和真实 gt 的 IoU 为 0.39 的 proposal 被分配为正样本了。
为了解决这个问题,作者提出了 PLA(Prediction-guided Label Assignment):
- 将教师模型的预测作为辅助信息,且降低对 IoU 的依赖
- 在 Teacher-Student 训练模式下,不仅仅教师网络预测结果 NMS 之后的框可以做伪标签,NMS 之前的框也可以做伪标签,用于指导学生模型的训练。
- 作者将教师网络生成的 RPN 和学生网络共享,那么教师网络在这些 proposal 上的预测结果就可以很方便的迁移到学生网络
- 为了更好的衡量 proposal 的质量 q,同时使用教师网络的分类得分和定位预测来作为衡量方法,即 q=sα×u1−αq = s^{\alpha} \times u^{1-\alpha}q=sα×u1−α,s 是 RPN 输出的前景得分,u 是 RPN 预测的 proposal 和 gt 的 IoU。α\alphaα 控制 s 和 u 对结果的贡献程度。
如何在未标记数据上使用呢:
- 首先,使用传统的基于 IoU 的方法为每个 gt 生成一系列候选框,且 IoU 阈值设置为比较低的值(0.4)来保证包含更多的候选框
- 对于这些候选框,按质量 q 进行降序排序,将 top-N 的框看做正样本,其余为负样本,N 是基于 OTA 方法中的 dynamic k 估计得到的
PLA 的优势:
- 减轻了对 IoU 的强烈依赖,减轻了定位较差的框带来的负面影响
- 标签分配策略将更多的教师知识整合到了学生模型的训练中,实现了更好的知识蒸馏
2、Positive-proposal Consistency Voting
由于分类得分不能很好的表示定位的质量,所以作者还提测了一个方法来衡量定位质量——PCV
基于 CNN 的模板检测器一般都是会将多个 proposal 分配给一个 gt(或 pseudo box),这些 proposal 回归结果的一致性能反映其对应的这个伪边界框的质量。
则第 j 个伪边界框的回归一致性 σi\sigma_iσi 表示为:
- 其中,u 是预测框和伪边界框的 IoU
- N 是分配给第 j 个伪边界框的正 proposal 的数量
得到了 σi\sigma_iσi 后,使用 instance-wise 的回归:
- reg 是回归的输出
- reg^ 是 gt
如图 1b 所示,其中描述了伪边界框的预测一致性和其真实 IoU 之间的关系散点图,可以看出:
- 一致性和 IoU 正相关
- 橘色圆中的是标注错误引起的
如图 5,展示了伪边界框也可以准确的指导模型预测
2.3 多视图尺度不变性学习
不同于图像分类,目标检测中的目标尺度变化较大,故难以在每个尺度上都表现较好。
所以,从未标记数据中学习尺度不变的表示对 SSOD 相当重要。
在一致性训练中,强数据增强为提高模型性能起到了很重要的作用。
通过在输入图像中注入强扰动,能使模型对各种变化都保持鲁棒性。
标签级一致性:
从尺度不变性角度来看,将常见的数据增强(如随机调整大小)看做标签级一致性,因为其能根据输入图像尺度的变化来调整标签的大小。
特征级一致性:
由于检测网络通常有丰富的特征金字塔设计,因此特征级的一致性也很容易在配对输入之间实现。
所以,本文中提测了多视图尺度不变学习,将标签级和特征级的一致性组合到一个框架中,特征一致性通过对齐两个内容相同但尺度不同的图像之间的金字塔特征来实现的。
过程:
- 两个视图(两个图像)分别为 V1V_1V1 和 V2V_2V2,用于训练 MSL 中的学生网络
- 教师模型的输入图像为 V0V_0V0
- V1V_1V1 和 V2V_2V2 会被结合起来分别学习标签级和特征级的一致性
- V1V_1V1 是使用随机缩放得到的,也就是将 V0V_0V0 和伪边界框进行随机的缩放,缩放尺度在 [0.8, 1.3]。
- V2V_2V2 是将 V1V_1V1 下采样 2 倍得到的
- V1V_1V1 和 V2V_2V2 构成一组图像对儿
- V1V_1V1 的 FPN 的 P3-P7 层可以刚好和 V2V_2V2的 P2-P6 层大小对应,如图 3 所示
三、实验
1、数据集
使用 MS COCO,包括两个训练集:
- train2017,包含 118k 标注数据
- unlabeled2017,包含 123k 未标注数据
Partially Labeled Data:
- 随机选择 train2017 中的 1%,2%,5%,10% 作为标注数据,其他的作为未标注数据
- 在每个采样率下,对比了 5 种不同倍的均值和方法
Fully Labeled Data:
- 使用 train2017 作为带标签的训练数据,unlabeled2017 作为无标签的训练数据
2、实验细节
使用 Faster RCNN with FPN 作为检测框架,backbone 为 Res50
伪标签分类阈值为 0.5
伪标签 loss 权重 β=4.0\beta=4.0β=4.0
Partially Labeled Data:
- 在 8 GPU 上训练 180k iters
- 初始学习率为 0.01,在 120k、160k iters 分别降低 10 倍
- 每个 GPU 的每个 batch 有 5 张图,无标签:有标签=4:1
Fully Labeled Data:
- 在 8 GPU 上训练 720k iters
- 每个 GPU 每个 batch 为 8 张图,有标签:无标签=1:1
- 初始学习率为 0.01,在 480k、680k iters 分别降低 10 倍
3、和 SOTA 的对比(COCO val2017)
Partially Labeled Data:
- 当有标注的数据比较少时(1% 或 2% 采样率),本文方法超越 Unbiased Teacher 分别为 1.7% 和 3.5%
- 当有标注的数据增多时(5% 或 10% 采样率),本文方法比最强的 Soft Teacher 分别高 1.8% 和 2.0%
- 本文方法和 Soft Teacher 的收敛速度如图 4 所示,可见本文方法收敛速度更快
Fully Labeled Data:
- 本文方法获得了 46.1 mAP,是 SOTA 的效果
- 定性的可视化如图 5 所示
4、消融实验
相关文章:
【半监督学习】3、PseCo | FPN 错位对齐的高效半监督目标检测器
文章目录一、背景二、方法2.1 基础框架结构2.2 带噪声的伪边界框学习2.3 多视图尺度不变性学习三、实验论文:PseCo: Pseudo Labeling and Consistency Training for Semi-Supervised Object Detection 代码:https://github.com/ligang-cs/PseCo 出处&a…...
Tomcat+Servlet初识
文章目录Tomcat什么是TomcatTomcat的安装启动tomcat静态页面的访问动态页面的访问一个Servlet程序的部署流程Tomcat 什么是Tomcat Tomcat是一个HTTP服务器,在开发或调试Servlet代码时应用广泛;使用Tomcat,实际就是将用户浏览器输入的http请…...
ChatGPT-4 终于来了(文末附免费体验地址)
大家好,我是小钱学长。 ChatGPT4.0 重磅来袭,今天一打开plus页面出现的就是这个GPT-4的体验界面!现在就带大家一起看看GPT4.0。 进入之后是这样的 看到最下面有一行话,目前应该是4个小时限制100条消息。 GPT-4有什么优势&…...
【C++学习】类和对象(中)一招带你彻底了解六大默认成员函数
前言:在之前,我们对类和对象的上篇进行了讲解,今天我们我将给大家带来的是类和对象中篇的学习,继续深入探讨【C】中类和对象的相关知识!!! 目录 1. 类的6个默认成员函数 2. 构造函数 2.1概念介…...
面试——Java基础
说一说你对Java访问权限的了解 在修饰成员变量/成员方法时,该成员的四种访问权限的含义如下: private:该成员可以被该类内部成员访问; default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访…...
JavaWeb——Request(请求)和Response(响应)介绍
在写servlet时需要实现5个方法,在一个service方法里面有两个参数request和response。 浏览器向服务器发送请求会发送HTTP的请求数据——字符串,这些字符串会被Tomcat所解析,然后这些请求数据会被放到一个对象(request)里面保存。 相应的Tom…...
JMeter压测文件上传接口和中文乱码
一、压测文件上传接口 新建测试计划,然后添加需要的元件。 1、添加HTTP信息头管理器 可以在测试计划中添加,也可以在线程组里面添加。 我的接口使用到 token信息。这里在测试计划中添加。 2、添加线程组 上图解释:会在 2秒钟之内启动起来 5…...
CSRF漏洞复现
目录标题原理如何实现和xss区别危害CSRF实战(pikachu)dvwa靶场CSRF(Cross Site Request Forgery)。跨站请求伪造原理 攻击者会伪造一个请求(一般是一个链接),然后让用户去点击,然后…...
Google Colab导入GitHub python项目进行运行
本文介绍包含 ipynb后缀文件的github项目,导入到GitHub上进行运行的方法。 导入项目 Colab是需要梯子的。 访问网址:https://colab.research.google.com 输入github网之后回车,下面的内容是从github上自动获取的。 选择项目要打开的ipynb文…...
Qss样式表语法
QSS样式表语法 更多精彩内容👉个人内容分类汇总 👈👉QSS样式学习 👈文章目录QSS样式表语法[toc]概述一、样式规则二、选择器类型三、子控件四、伪状态五、样式表冲突解决六、级联七、继承八、命名空间中的控件概述 Qt样式表的概念…...
「Python 基础」异步 I/O 编程
I/O 密集型应用程序大大提升系统多任务处理能力; 异步 I/O 模型 一个消息循环,主线程在消息循环中不断重复 读取消息-处理消息; # 获取线程池 loop get_event_loop() while True:# 接收事件消息event loop.get_event()# 处理事件消息pro…...
通配符的匹配很全面, 但无法找到元素 ‘tx:advice‘ 的声明
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 通配符的匹配很全面, 但无法找到元素 ‘tx:advice’ 的声明 错误原因: xmlns和xsi:schemaLocation未书写约束或者书写错误 正确书写 <beans xmlns:tx&q…...
响应式编程详解,带你熟悉Reactor响应式编程
文章目录一、什么是响应式编程1、Java的流和响应式流2、Java中响应式的使用3、Reactor中响应式流的基本接口4、Reactor中响应式接口的基本使用二、初始Reactor1、Flux和Mono的基本介绍2、引入Reactor依赖3、响应式类型的创建4、响应式类型的组合(1)使用m…...
踩坑篇之WebSocket实现类中无法使用@Autowired注入对象
大家好,我是小简,今天我又大意了,在WebSocket这个类上踩坑了。 接下来我讲讲我踩坑的经历吧! package cn.donglifeng.shop.socket.endpoin;import cn.donglifeng.shop.common.context.SpringBeanContext; import cn.donglifeng.s…...
QT CTK插件框架 (一 下载编译)
CTK 为支持生物医学图像计算的公共开发包,其全称为 Common Toolkit。为医学成像提供一组统一的基本功能;促进代码和数据的交互及结合;避免重复开发;在工具包(医学成像)范围内不断扩展到新任务,而…...
【Java版oj】day10 井字棋、密码强度等级
目录 一、井字棋 (1)原题再现 (2)问题分析 (3)完整代码 二、密码强度等级 (1)原题再现 (2)问题分析 (3)完整代码 一、井字棋 &a…...
JavaScript的事件传播机制
你在学习和编写JavaScript时可能听说过事件冒泡(event bubbling)。它会发生在多个元素存在嵌套关系,并且这些元素都注册了同一事件(例如click)的监听器时。 但是事件冒泡只是事件机制的一部分。它经常与事件捕获(event capturing)和事件传播…...
队列的定义及基本操作实现(链式)
个人主页:【😊个人主页】 系列专栏:【❤️数据结构与算法】 学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高 系列文章目录 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 文章目录…...
集成方法!
目录 关注降低variance,选择bias较小的基学习器 Bagging Stacking Random Forest 关注降低bias,选择variance较小的基学习器 Adaboost Boosting 关注降低variance,选择bias较小的基学习器 Bagging 给定m个样本的数据集,利用有放回的随机采样法,得…...
20年程序员生涯,读了200多本技术书,挑了几本精华好书分享给大家
不知不觉已经又走过了20个年头了,今年已经44了,虽然我已经退休在家,但一直都保持着读书的习惯,我每年平均要读10本技术书籍,保持不让自己的技术落伍。 这些年读的技术书不下200本,很多好书我都会保存在家&a…...
C++ 手写一个WebServer
文章目录 前言一、WebServer的原理刨析二、HTTP协议基础三、C++代码实战四、运行测试前言 本文由:我不会画饼呀 提供建议 大家如果有什么想看的文章(想了解的知识点),都可以在本专栏文章底部评论,或者私信我,在有能力的前提下,我都会尽量给大家写出来,供大家学习参考 …...
Elasticsearch 简介与安装
简介 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。 但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java…...
Qt5.12实战之QByteArray与字符指针及字符串转换
示例源码:#include <QCoreApplication> #include <QDebug> #include <QTextStream> static QTextStream cout (stdout,QIODevice::WriteOnly); #include <iostream> #include <QtGlobal> #include <QByteArray>void test() {qDebug() <…...
二、ElasticSearch基础语法
目录一、简单了解ik分词器(分词效果)1.standard(单字分词器,es默认分词器)2.ik_smart分词(粗粒度的拆分)3.ik_max_word分词器(最细粒度拆分)二、指定默认分词器1.为索引指定默认分词器三、ES操作数据1.概述2.创建索引3.查询索引4.删除索引5.添…...
Yolov8详解与实战
文章目录摘要模型详解C2F模块Losshead部分模型实战训练COCO数据集下载数据集COCO转yolo格式数据集(适用V4,V5,V6,V7,V8)配置yolov8环境训练测试训练自定义数据集Labelme数据集摘要 YOLOv8 是 ultralytics …...
多线程案例——阻塞队列
目录 一、阻塞队列 1. 生产者消费者模型 (1)解耦合 (2)“削峰填谷” 2. 标准库中的阻塞队列 3. 自己实现一个阻塞队列(代码) 4. 自己实现生产者消费者模型(代码) 一、阻塞队列…...
学习优秀博文(【国产MCU移植】手把手教你使用RT-Thread制作GD32系列BSP)有感 | 文末赠书5本
学习优秀博文(【guo产MCU移植】手把手教你使用RT-Thread制作GD32系列BSP)有感 一篇优秀的博文是什么样的?它有什么规律可循吗?优秀的guo产32位单片机处理器是否真的能成功替换掉stm32的垄断地位? 本文博主以亲身经历聊…...
写用例写的焦头烂额?看看摸鱼5年的老点工是怎么写的...
给你个需求,你要怎么转变成最终的用例? 直接把需求文档翻译一下就完事了。 老点工拿到需求后的标准操作: 第一步:解析需求 先解析需求-找出所有需求中的动词,再列出所有测试点。测试点过程不断发散,对于…...
基于深度学习的鸟类检测识别系统(含UI界面,Python代码)
摘要:鸟类识别是深度学习和机器视觉领域的一个热门应用,本文详细介绍基于YOLOv5的鸟类检测识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面。在界面中可以选择各种鸟类图片、视频以及开启摄像头进行检测识别…...
零基础搭建Tomcat集群(超详细)
💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…...
阜阳商城网站建设/seo外链友情链接
准备环境:VS.2003, windows2003(IIS6.0)SP1因为偶然的原因,需要调试几个asp页面,但手动上只有UltraEdit和VS.net.知道InterDev可以调试,可以装起来以后,总是出错。我本身对其也不熟悉,也没时间摸索…...
50套企业网站源码打包asp网站源码网站模板带后台无限制/天眼查企业查询入口
Contents创建内存映射区释放内存映射区创建匿名内存映射区无血缘关系进程进行通讯总结父子进程共享:1、文件描述符2、内存映射区内存映射区不仅可以进行有血缘关系之间的进程通信,还可以进行无血缘关系之间的进程通信。内存映射区分为匿名映射区和有名映…...
网站的版面布局/什么是核心关键词
在这篇由两部分组成的文章中,Elliotte Rusty Harold 与您一起探讨经典java.lang.Math 类中的“新”功能。第 1 部分主要讨论比较单调的数学函数。第 2 部分将探讨专为操作浮点数而设计的函数。有时候您会对一个类熟悉到忘记了它的存在。如果您能够写出 java.lang.Fo…...
wordpress标签插件/app开发工具
lotus同一台机拆分P1、P2绑定CPU创建目录运行P1,绑定cpu 0-15运行P2,绑定cpu 16-31创建目录 /tmp01 /tmp02/seal/worker01 /seal/worker02运行P1,绑定cpu 0-15 env TMPDIR/tmp01 nohup taskset -c 0-15 lotus-worker --worker-repo/seal/wo…...
湖南鸿源电力建设有限公司网站/头条搜索是百度引擎吗
【实验】【VNC】Linux环境VNC服务安装、配置与使用 1.确认VNC是否安装默认情况下,Red Hat Enterprise Linux安装程序会将VNC服务安装在系统上。确认是否已经安装VNC服务及查看安装的VNC版本[roottestdb ~]# rpm -q vnc-servervnc-server-4.1.2-9.el5[roottestdb ~]#…...
wordpress百度不收录文章/it教育培训机构排名
如果你只是想要一个更好的版本的现有程序,我已经修复了你的代码,并压缩成一个函数如下。但是,我认为编辑你已经写过的东西比重做它更有建设性-有关修复代码的详细信息,请参阅我的回答的其余部分**from random import randintdef m…...