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

什么是半监督目标检测?

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

总而言之,目标检测的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 半监督目标检测算法,可以同时在单阶段和双阶段检测器上工作。

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

相关推荐
朝九晚五ฺ1 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
小喵要摸鱼1 小时前
Python 神经网络项目常用语法
python
一念之坤2 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
猫爪笔记2 小时前
前端:HTML (学习笔记)【1】
前端·笔记·学习·html
wxl7812273 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder3 小时前
Python入门(12)--数据处理
开发语言·python
ZHOU_WUYI3 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若1233 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
pq113_63 小时前
ftdi_sio应用学习笔记 3 - GPIO
笔记·学习·ftdi_sio
澄澈i3 小时前
设计模式学习[8]---原型模式
学习·设计模式·原型模式