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

深度学习之半监督学习:一文梳理目标检测中的半监督学习策略

什么是半监督目标检测?

传统机器学习根据训练数据集中的标注情况,有着不同的场景,主要包括:监督学习、弱监督学习、弱半监督学习、半监督学习。由于目标检测任务的特殊性,在介绍半监督目标检测方法之前,我们查看一下目标检测在四个方向上的具体设定:
在这里插入图片描述
总而言之,目标检测的setting分为四个部分:

  • 有监督目标检测:拥有大规模带标签的数据,包括完整的实例级别的标注,即包含坐标和类别信息
  • 弱监督目标检测:数据集中的标注仅包含类别信息,不包含坐标信息
  • 弱半监督目标检测:数据集中拥有部分实例级别的标注,大量弱标注数据,模型希望利用大规模的弱标注数据提升模型的检测能力
  • 半监督目标检测:数据集中拥有部分实例级别的标注,大量未标注数据,模型希望利用大规模的无标注的数据提升模型的检测能力
      半监督目标检测方法的核心在于,如何充分利用大量未标注、多样性的数据提升模型在测试集上的性能,目前的半监督目标检测方法主要有两个方向:
    1.一致性学习(Consistency based Learning)
    2.伪标签(Pseudo-label based Learning)
    前者利用两个深度卷积神经网络学习同一张unlabeled图像不同扰动(比如水平翻转,不同的对比度,亮度等)之间的一致性,充分利用unlabeled data进行推理,经过NMS后减少大量冗余框,利用一个阈值去挑选伪标签,最后利用伪标签训练模型,两种方法没有本质区别,本身都是伪标签技术,一致性学习可以认为是一种soft pseudo label,而后者是一种hard pseudo label.
    近期比较好的半监督目标检测文章

1. Consistency-based Semi-supervised Learning for Object Detection, NeurIPS 19

论文link:https://papers.nips.cc/paper/2019/hash/d0f4dae80c3d0277922f8371d5827292-Abstract.html
code:code
  CSD 这篇文章是比较早期的半监督目标检测方法,非常简单,该文章提出了一个 Consistency-based 半监督目标检测算法,可以同时在单阶段和双阶段检测器上工作。
图2 CSD半监督目标检测算法结构图

CSD的结构如图二所示,以单节段目标检测器为例,训练的损失函数主要包括两个部分,labeled sample的监督损失和unlabeled samples的Consistency loss.针对unlabeled samples,首先将图片翻转,然后分别送到网络之中,得到对应的Feature map,由于两张翻转的图像的空间位置是可以一一对应的,因此可以在对应的位置计算一致性损失。分类部分,利用JS散度作为consistency loss;定位部分,利用L2 loss作为consistency loss。
双阶段检测器的部分与单阶段检测器类似,差别主要在于RPN(Region Proposal Network)对于不同的输入可能产生不同的proposals,因此在计算consistency loss时无法一一对应,解决此问题也很简单,两张图像使用同一个RPB生成同一组RoI(Region of Interest)来提取特征得到proposals。
作者还提出了一个 Background elimination 方法来消除大量背景部分的损失主导训练过程的问题,因此作者定义了一个 mask 来过滤大量的背景样本:
在这里插入图片描述
其中,当该实例的类别不等于背景类时等于1,否则为 0

2.A Simple Semi-Supervised Learning Framework for Object Detection

paper:link
code:code
TAC 提出了一个基于 hard pseudo label 的半监督目标检测算法,如图三所示,该方法包含四个步骤:

  • 首先利用 labeled data 训练一个 Teacher 模型;
  • 生成 pseudo label, 将 unlabeled data 输入进 Teacher 网络中,得到大量的目标框预测结果,利用 NMS 消除大量的冗余框,最后使用阈值来挑选高置信度的 pseudo label;
  • 应用 strong data augmentation。得到 pseudo label 后与 unlabeled image 图像相结合,包括图像级别的颜色抖动、geometric transformation(平移、旋转、剪切)、box-level transformation(小幅度的平移、旋转、剪切);
  • 计算无监督 loss (pseudo label)和监督学习 loss;
    在这里插入图片描述
    图三 STAC 半监督目标检测算法示意图

3.Instant-Teaching: An End-to-End Semi-Supervised Object Detection Framework

paper:link
Instant-Teaching 主要的 motivation 在于 STAC 仅生成一次的 pseudo label,即离线生成,在训练的过程中不会更新。这样的模式存在一个问题是,当训练的模型精度逐步提升,超过原本的模型,继续使用原来模型生成的 pseudo label 会限制模型精度进一步提升。因此作者提出 Instant-Teaching,以及 Instant-Teaching。
在这里插入图片描述
图四 Instant-Teaching 和 Instant-Teaching* 示意图
Instant-Teaching 采用即时生成 pseudo label 的模式,在每一个迭代中,包括两个步骤:
1.生成 pseudo label: 对 unlabeled image 进行 weak augmentation,送入模型中得到 hard label;
2.利用生成的 pseudo label 进行 strong augmentation,除了 在 STAC 中的数据增强,还包括了 Mixup 和 Mosaic,利用增强后的数据训练模型;
  Instant-Teaching 主要提出了一个 co-rectify scheme 来解决 pseudo label 的 confirmation bias 的问题(噪声 pseudo label 的错误累计效应)。因此,作者利用两个模型,给予不同的初始化参数,输入不同的数据增强的样本,分别彼此纠正和检测对方生成的 pseudo label,形式如图四右半部分。

总结

  本文介绍了一些半监督目标检测算法,即如何利用大量的 unlabeled data 提升模型的检测性能,当前主要的方法包含 consistency based 以及 pseudo label based 两类。consistency based 方法主要学习模型在 unlabeled data 上的一致性,pseudo label 则利用在 unlabeled data 上生成 pseudo label 进而监督模型训练,主要的方向即为如何生成高质量的伪标签以及模型如何对抗在 unlabeled data 上的 noise label。本文介绍了的半监督目标检测方法不多,关于方法的介绍较为笼统,如有谬误,烦请指正,其中细节,还需仔细阅读文章,欢迎讨论。

转自wx:https://mp.weixin.qq.com/s?__biz=MzU0NjgzMDIxMQ==&mid=2247602689&idx=3&sn=608057273347f3109b0a6e65212ed3c4&chksm=fb54b0edcc2339fb809d96e89c98a6a023d9f4d19185c875ce70f348d2265ddf620d91fba086&scene=27

相关文章:

  • IT专业入门,高考假期预习指南
  • 浅谈前置处理器之用户参数
  • 一文学会LVS:概念、架构、原理、搭建过程、常用命令及实战案例
  • 基于Java微信小程序小说阅读系统设计和实现(源码+LW+调试文档+讲解等)
  • 使用 Vue 实现包含单选框的弹窗功能(附Demo)
  • 苹果公司的Wifi定位服务(WPS)存在被滥用的风险
  • GPIO和PIN
  • 用户想知道数据库每天增长几个G,到底都是啥?
  • Jmeter 入门指南:从零开始学习
  • 【分享】Word“打开密码”的常见问题及解决方法
  • electron教程(一)创建项目
  • uniapp + vue3 + Script Setup 写法变动 (持续更新)
  • IP白名单及其作用解析
  • 获取HTML元素的offsetParent属性
  • 传输线在阻抗匹配时串联端接电阻为什么要靠近发送端
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Fabric架构演变之路
  • php ci框架整合银盛支付
  • socket.io+express实现聊天室的思考(三)
  • tweak 支持第三方库
  • Twitter赢在开放,三年创造奇迹
  • 动态规划入门(以爬楼梯为例)
  • 基于遗传算法的优化问题求解
  • 深度学习中的信息论知识详解
  • 微服务核心架构梳理
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序开发中的那些坑
  • 终端用户监控:真实用户监控还是模拟监控?
  • zabbix3.2监控linux磁盘IO
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #职场发展#其他
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创)可支持最大高度的NestedScrollView
  • .bat批处理(一):@echo off
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • ?php echo ?,?php echo Hello world!;?
  • @WebService和@WebMethod注解的用法
  • [C/C++] C/C++中数字与字符串之间的转换
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [Cloud Networking] Layer Protocol (continue)
  • [codevs 1515]跳 【解题报告】
  • [CTSC2014]企鹅QQ
  • [HackMyVM]靶场Crossbow
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [JavaScript]_[初级]_[不使用JQuery原生Ajax提交表单文件并监听进度]