基于深度卷积神经网络的小样本分割算法综述

2023-11-03

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自:视学算法

介绍

深度卷积神经网络在图像分类、目标检测、语义分割等许多视觉理解任务上都取得了重大突破。一个关键的原因是大规模数据集的可用性,比如 ImageNet,这些数据集支持对深度模型的培训。然而,数据标记是昂贵的,特别是对于密集的预测任务,如语义分割和实例分割。

此外,在对模型进行训练之后,很难将模型应用于新类的预测。与机器学习算法不同的是,人类只看到几个例子就能很容易地从图像中分割出一个新概念。

人类和机器学习算法之间的差距激发了对小样本学习的研究,其目的是学习一个模型,可以很好地推广到具有稀缺标记的训练数据的新类别。

小样本分割的终极目的是利用支持集中的 K 个训练图像对来“学习”一个模型,使得该模型能对训练图像中出现的类别的新样本实现分割。

相关工作

2.1 元学习

元学习解决的是学习如何学习的问题。元学习的思想是学习「学习(训练)」过程。主要有基于记忆 Memory 的方法、基于预测梯度的方法、利用 Attention 注意力机制的方法、借鉴 LSTM 的方法、面向 RL 的 Meta Learning 方法、利用 WaveNet 的方法、预测 Loss 的方法等等等。

2.2 小样本学习

小样本学习是元学习在监督学习领域的应用,Few-shot Learning

模型大致可分为三类:Mode Based,Metric Based 和 Optimization Based。

其中 Model Based 方法旨在通过模型结构的设计快速在少量样本上更新参数,直接建立输入 x 和预测值 P 的映射函数;Metric Based 方法通过度量 batch 集中的样本和 support 集中样本的距离,借助最近邻的思想完成分类。

Optimization Based 方法认为普通的梯度下降方法难以在 few-shot 场景下拟合,因此通过调整优化方法来完成小样本分类的任务。

2.3 语义分割

语义分割就是按照“语义”给图像上目标类别中的每一点打一个标签,使得不同种类的东西在图像上被区分开来。可以理解成像素级别的分类任务。

输入:(H*W*3)正常的图片;输出:(H*W*class)可以看为图片上每个点的 one-hot 表示,每一个 channel 对应一个 class,对每一个 pixel 位置,都有 class 数目个 channel,每个 channel 的值对应那个像素属于该 class 的预测概率。

FCN 是语义分割的开山之作,主要特色有两点:全连接层换成卷积层,不同尺度的信息融合 FCN-8S,16s,32s。

U-net 用于解决小样本的简单问题分割,比如医疗影片的分割。它遵循的基本原理与 FCN 一样:

1. Encoder-Decoder 结构:前半部分为多层卷积池化,不断扩大感受野,用于提取特征。后半部分上采样回复图片尺寸。

2. 更丰富的信息融合:如灰色剪头,更多的前后层之间的信息融合。这里是把前面层的输出和后面层 concat (串联)到一起,区别于 FCN 的逐元素加和。

不同 Feature map 串联到一起后,后面接卷积层,可以让卷积核在 channel 上自己做出选择。注意的是,在串联之前,需要把前层的 feature map crop 到和后层一样的大小。

SegNet 和 U-net 在结构上其实大同小异,都是编码-解码结果。区别在于,SegNet 没有直接融合不同尺度的层的信息,为了解决为止信息丢失的问题,SegNet 使用了带有坐标(index)的池化。

在 Max pooling 时,选择最大像素的同时,记录下该像素在 Feature map 的位置(左图)。在反池化的时候,根据记录的坐标,把最大值复原到原来对应的位置,其他的位置补零(右图)。后面的卷积可以把 0 的元素给填上。这样一来,就解决了由于多次池化造成的位置信息的丢失。

Deeplab V1 不同于之前的思路,他的特色有两点:

1.由于 Pooling-Upsample 会丢失位置信息而且多层上下采样开销较大,把控制感受野大小的方法化成:带孔卷积(Atrous conv)。

2. 加入 CRF(条件随机场),利用像素之间的关连信息:相邻的像素,或者颜色相近的像素有更大的可能属于同一个 class。

PSPnet:前面的不同 level 的信息融合都是融合浅层和后层的 Feature Map,因为后层的感受野大,语义特征强,浅层的感受野小,局部特征明显且位置信息丰富。

PSPnet 则使用了空间金字塔池化,得到一组感受野大小不同的 feature map,将这些感受野不同的 map concat 到一起,完成多层次的语义特征融合。

Deeplab V2 在 v1 的基础上做出了改进,引入了 ASPP(Atrous Spatial Pyramid Pooling)的结构,如上图所示。我们注意到,Deeplab v1使用带孔卷积扩大感受野之后,没有融合不同层之间的信息。

ASPP 层就是为了融合不同级别的语义信息:选择不同扩张率的带孔卷积去处理 Feature Map,由于感受野不同,得到的信息的 Level 也就不同,ASPP 层把这些不同层级的 feature map concat 到一起,进行信息融合。

Deeplab v3 在原有基础上的改动是:1. 改进了 ASPP 模块。2.引入 Resnet Block。3. 丢弃 CRF。

新的 ASPP 模块:1. 加入了 Batch Norm。2. 加入特征的全局平均池化(在扩张率很大的情况下,有效权重会变小)。全局平均池化的加入是对全局特征的强调、加强。

在旧的 ASPP 模块中:我们以为在扩张率足够大的时候,感受野足够大,所以获得的特征倾向于全局特征。但实际上,扩张率过大的情况下,Atrous conv 出现了“权值退化”的问题,感受野过大,都已近扩展到了图像外面,大多数的权重都和图像外围的 zero padding 进行了点乘,这样并没有获取图像中的信息。有效的权值个数很少,往往就是 1。于是我们加了全局平均池化,强行利用全局信息。

Deeplab v3+可以看成是把 Deeplab v3 作为编码器(上半部分)。后面再进行解码,并且在解码的过程中在此运用了不同层级特征的融合。此外,在 encoder 部分加入了 Xception 的结构减少了参数量,提高运行速递。

方法总结分类

3.1 OSLSM

motivition 就是学习一个 one-shot 的分割模型,首次提出双分支的网络用于 few-shot segmentation,条件分支用 VGG 提取特征,生成权重(w,b),分割分支用 FCN-32s 结构对 query image 进行特征提取,将其与条件分支所得参数进行点乘再通过 σ 函数得到分割结果。

得到一个分割图,上采样到图像大小,利用某个阈值产生分割的二值图。

输出的时候,为了是参数量与分割分支的特征图的通道数相对应,采用 weight hashing 的策略,将输出的 1000 维向量映射为 4097 维(w:4096, b:1),这种映射机制是建模成固定权重参数的全连接层来实现的。

3.2 co-FCN

文章的主要比较惊奇的一点是仅对原始图像做一些稀疏的标注(目标位置上点几个关键点,背景位置上点几个关键点)就却能够实现对目标的像素级的分割。

网络结构和 BMVC 那篇 paper 设置类似,也是采用双分支结构,将标注信息与原始图像 concate 后输入 conditioning branch 得到输入图像的 embedding。

利用 segmentation branch 对 qurey image 进行特征提取,并将结果与 conditioning branch 得到的 embedding 进行 concate,再进行像素级分割。

3.3 AMP-2

motivation:如何得到一个更好的原型。

方法:在 task 流中,不断地更新每个类别地原型。

3.4 SG-One

训练任务的流程:

网络包含一个主干网络 Stem(代表的是 VGG-16 的前 3 个 Block)和两个分支:

Guidance Branch 和 Segmentation Branch,需要注意的是两个分支共用了三个卷积块 ,个人的理解是,如果两个分支完全独立,那么 Guidance Branch 产生的指导就会一成不变;

这就失去了意义,作者在论文最后的消融实验中做了相关的分析与实验;

与 Segmentation Branch 产生交互后就可以在优化分割损失的同时对引导的特征图进行优化,使之匹配相应的真实 mask。网络在训练的时候加载了在 ILSVRC 数据集上预训练的权重。

测试任务的流程:

主要的创新点:

a. 提出使用 masked average pooling 来提取 support set 的中目标的表征向量;

b. 采用余弦相似度来度量 query set 的表征向量与 support set 的表征向量之间距离,用于指导 query set 的分割;

为什么 masked average pooling 会有用?

解释如下:全卷积网络(FCN)能够保留输入图像的中每个像素相对位置;所以通过将二值 mask 与提取到的特征图相乘就可以完全保留目标的特征信息,排除掉背景等无关类别的特征。

3.5 PANet

创新点:

利用了 prototypes 上的度量学习,无参数。

提出 prototypes 对齐正则化,充分利用 support 的知识。

对于带有弱注释的少样本直接使用。

用同一个 backbone 来提取 support 和 query 的深度特征,然后使用 masked average pooling 从 support 的特征将不同的前景物体和背景嵌入不同的 prototypes 中,每个 prototype 表示对应的类别,这样 query 图像的每个的像素通过参考离它的嵌入表达最近的特定类的 prototype 来标记,得到 query 的预测 mask 后。

训练的时候,得到mask后,再将刚才提取的 query feature 和 mask 作为新的“support set”,将之前的 support set 作为新的“query set”,再用“support set”对“query set”做一波预测,然后再算一个 loss

prototype 紧凑且鲁棒的对每个语义类别进行表达;mask 标记那块就是无参度量学习,通过和嵌入空间的逐像素匹配来执行分割

执行一个 prototype 对齐正则化,用 query 和他的 mask 建立新的 support,然后用这个来预测原始的 support set 的分割,实验证明能鼓励 query 的 prototype 对齐他们的 support 的 prototype,只有训练的时候这么做(反向再推一次,看看是否真的相似)

3.6 CANet

主要贡献:

开发了一种新颖的双分支密集比较模块,该模块有效地利用来自CNN的多级特征表示来进行密集的特征比较。

提出迭代优化模块,以迭代方式改进预测结果。迭代细化的能力可以推广到具有少量镜头学习的看不见的类,以生成细粒度图。

采用注意机制有效地融合来自 k-shot 设置中的多个支持示例的信息,其优于单次结果的不可学习的融合方法。

证明给定的支持集具有弱注释,即边界框,我们的模型仍然可以获得与昂贵的像素级注释支持集的结果相当的性能,这进一步减少了新类别对于少数镜头分割的标记工作量。

3.7 PGNet

在 CANet 基础上加了一个图注意力机制

3.8 FWB

两个主要创新点:

Feature Weighting

支持集前后景差异标准化向量:

最大化特征差异:

最终得到的关联向量:

标准化处理后的余弦相似性:

Feature Boosting 

数据集介绍

PASCAL-5i

MS COCO-20i

FSS-100

评测指标介绍

Mean-IoU:

IoU 就是每一个类别的交集与并集之比,而 mIoU 则是所有类别的平均 IoU。

FB-IoU:

前景和背景一起的准确率


结果陈列

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于深度卷积神经网络的小样本分割算法综述 的相关文章

  • Pandas - 按每个可能的键组合聚合

    我有一个 DataFrame Pandas 我想通过 A B C 和 D 列的组合尽可能按数据进行分组 假设它具有以下形式 A B C D E F G 0 Y X Y Z 1 2 7 1 Y X Y Z 3 4 8 2 X Y U V 1
  • django 管理站点导航侧边栏搞砸了

    我最近在我的项目中添加了一个包并做了一个pip freeze gt requirements txt然后 然后我做了pip install r requirements txt到我的本地 它添加了一个侧边栏 I did a pip inst
  • 将 SQLite 的 FTS3/4 与 Python 3 结合使用

    我一直在使用 python 的 Flask 框架开发 peewee 的示例博客应用程序 看https github com coleifer peewee https github com coleifer peewee 内部示例 gt 博
  • Conda 无法在 Powershell 中激活

    我已经在我的 Windows 10 笔记本电脑上安装了 anaconda 我正在尝试激活名为的Python环境pyenv 首先 我检查conda env list在我的笔记本电脑中 这是 powershell 上的输出 PS C Users
  • Windows 中的信号处理

    在Windows中 我试图创建一个等待SIGINT信号的python进程 当它收到SIGINT时 我希望它只打印一条消息并等待SIGINT的另一次出现 所以我使用了信号处理程序 这是我的 signal receiver py 代码 impo
  • 从两个字典创建一个新列表

    这是一个关于Python的问题 我有以下字典列表 listA t 1 tid 2 gtm 3 c1 4 id 111 t 3 tid 4 gtm 3 c1 4 c2 5 id 222 t 1 tid 2 gtm 3 c1 4 c2 5 id
  • @monthly cron 作业不可靠

    我们的客户希望我们每月创建一份报告 过去 我们使用 monthly cron 作业来完成此任务 但这并不可靠 服务器可能会在这一分钟内宕机 Cron 不会重新运行这些作业 如果服务器已启动 此时数据库可能无法访问 如果服务器已启动且数据库已
  • Ttk Treeview:跟踪键盘选择

    这是一个带有 ttk 树视图的 Tk 小部件 当用户单击该行时 会执行某些功能 此处仅打印项目文本 我需要的是以下内容 最初的重点是文本输入 当用户按下 Tab 键时 焦点应该转到第一行 并且应该执行绑定到 Click 事件的函数 当用户使
  • 使用 theano 进行多处理

    我正在尝试将 theano 与 cpu 多处理和神经网络库 Keras 结合使用 I use device gpu标记并加载 keras 模型 然后 为了提取超过一百万张图像的特征 我使用多处理池 该函数看起来像这样 from keras
  • 定义Python字典时,如何使用给定字段的值来计算其他字段?

    考虑代码 a 2 b 3 mylist a a b b product a b 这会生成一个包含三个字段的字典 其中第三个字段是使用第一个和第二个字段的值计算的 我正在寻找更紧凑的定义mylist 我已经尝试过 1 mylist a 2 b
  • Python Subversion 包装器库

    在颠覆的文档 http svnbook red bean com en 1 7 svn developer usingapi html svn developer usingapi otherlangs有一个从 Python 使用 Subv
  • cx_freeze:QODBC 驱动程序未加载

    我的 python 应用程序如下所示 test py from PyQt4 import QtCore from PyQt4 import QtGui from PyQt4 import QtSql import sys import at
  • 为什么 PySpark 中的 agg() 一次只能汇总 DataFrame 的一列? [复制]

    这个问题在这里已经有答案了 对于下面的数据框 df spark createDataFrame data Alice 4 300 Bob 7 677 schema name High 当我尝试找到最小值和最大值时 我只得到输出中的最小值 d
  • 如何判断Python对象是否是字符串?

    如何检查 Python 对象是否是字符串 常规字符串或 Unicode Python 2 Use isinstance obj basestring 对于要测试的对象obj Docs https docs python org 2 7 li
  • Python Pandas:将参数传递给 agg() 中的函数

    我试图通过使用不同类型的函数和参数值来减少 pandas 数据框中的数据 但是 我无法更改聚合函数中的默认参数 这是一个例子 gt gt gt df pd DataFrame x 1 np nan 2 1 y a a b b gt gt g
  • 来自异常导入 PendingDeprecationWarning ModuleNotFoundError:没有名为“异常”的模块

    我正在尝试使用Python 创建一个word 文档 我在终端中 pip install python docx 我的代码如下所示 from docx import Document document Document document sa
  • 如何检查两个数据集的匹配列之间的相关性?

    如果我们有数据集 import pandas as pd a pd DataFrame A 34 12 78 84 26 B 54 87 35 25 82 C 56 78 0 14 13 D 0 23 72 56 14 E 78 12 31
  • Twitter 不再使用请求库 python

    我有一个 python 函数 它使用 requests 库和 BeautifulSoup 来抓取特定用户的推文 import requests from bs4 import BeautifulSoup contents requests
  • numpy 中的分层抽样

    在 numpy 中我有一个这样的数据集 前两列是索引 我可以通过索引将数据集分成多个块 即第一个块是 0 0 第二个块是 0 1 第三个块 0 2 然后是 1 0 1 1 1 2 等等 每个块至少有两个元素 索引列中的数字可能会有所不同 我
  • 按工作日分组的熊猫 (M/T/W/T/F/S/S)

    我有一个 pandas 数据框 其中包含 YYYY MM DD arrival date 形式的时间序列 作为索引 我想按每个工作日 周一到周日 进行分组 以便计算其他日期列是平均值 中位数 标准差等 我最终应该只有七行 到目前为止我只知道

随机推荐

  • 都2022年了,出去面试连分布式锁的源码你都不会画?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 写在前面 二 Redisson实现Redis分布式锁的底层原理 1 加锁机制 2 锁互斥机制 3 watch dog自动延期机制 4 可重入加锁机制 5 锁
  • Linux基础笔记17

    磁盘基础概念知识 计算机主要存储媒介之一 由一个或多个铝制 玻璃的碟片组成 碟片外覆盖具有铁磁性材料 磁盘内部由磁道 柱面 扇区 磁头等关键部位组成 Linux 系统中硬件设备文件放在 dev 下 不同磁盘接口 系统识别的设备名称不一样 I
  • MySQL查询操作

    MySQL查询操作 1 建表 CREATE TABLE 学生 学号 char 7 NOT NULL PRIMARY KEY 姓名 char 8 NOT NULL 性别 char 2 年龄 tinyint 入学时间 datetime 专业 v
  • 【科普贴】MOS管开关原理及应用详解

    前言 MOS管通常被用作电源开关使用 通常使用PMOS做为上管 将NMOS做为下管使用 当然也有反过来使用的场景 但使用较少 此贴为科普贴 就不做累述了 MOS原理介绍 1 NMOS管介绍 电流方向从D S 漏极流向源极 导通条件为VGS有
  • i.mx287学习笔记4-使用QT控制LED

    上面是我的微信和QQ群 欢迎新朋友的加入 目录 1 安装QT CREATOR 2 硬件连接 3 驱动源码 4 编译驱动 测试驱动 5 创建QT界面 6 编译QT 7 运行 8 源码 1 安装QT CREATOR sudo apt get i
  • AVPlayer 播放的时候有黑色边

    iOS视频开发中 使用系统的AVPlayer的几率非常高 然 在部分Plus机型会出现黑边的情况 平时不容易发现 但你的视频若是白色色调 就比较明显 解决方法 修改AVPlayerLayer的属性 使playerLayer光栅化 即位图化
  • python需要学多长时间

    随着人工智能和机器学习的持续升温 Python 目前是首选的AI语言 在数据科学和AI中占据主导地位 而且随着互联网的发展 Python的应用越来越广泛 学习Python的人也越来越多 主要是因为Python门槛低 上手很快 而且通用性和实
  • npm ERR! 400/403 Bad Request - PUT https://registry.npmjs.org/xxx- “xxx“ is invalid for new packages

    npm ERR 403 403 Forbidden PUT https registry npmjs org df ui You do not have permission to publish df ui Are you logged
  • TypeError: 'builtin_function_or_method' object is not subscriptable的一种错误情况

    TypeError builtin function or method object is not subscriptable的一种错误情况 初学python 今天在做练习时为一个Error苦恼了很久 最终找到了解决方法 错误代码块如下
  • Contrastive Self-Supervised Learning 的对比学习框架和设计新方法

    翻译自 建议阅读原文 https towardsdatascience com a framework for contrastive self supervised learning and designing a new approac
  • OpenGL点精灵(Point Sprite)

    From http iiunknown blogbus com logs 48250551 html 在很多粒子的demo中 看到把粒子显示成一个个小球 如果你以为那是用glutSolidShpere画出来的话 你就错了 上万个粒子 每个球
  • 织梦网站服务器配置未见,DedeCms系统配置参数无法显示的解决方法

    Dedecms后台系统基本参数不显示的原因 这个是我使用dedecms建站来遇到的问题 到dedecms官方看了下 什么玩意的信息都没有 蛋疼的官方 对于我们这等草根来说dedecms官方基本没有指导作用 都是论坛的会员在哪儿里互相帮助 此
  • 患病率对 Delta 和样本量的影响 - 使用 R 语言进行计算

    患病率对 Delta 和样本量的影响 使用 R 语言进行计算 概述 在研究和实验设计中 样本量是一个重要的考虑因素 样本量的确定需要考虑多个因素 其中之一是患病率 即事件发生的概率 患病率的不同取值会对所需的样本量和效果大小 Delta 产
  • Flutter学习六:GestureDetector练习

    在Android中所有View都可以设置OnClick事件 但是在Flutter中除开少数自带Press事件的widget 大部分控件都是不带事件的 如果需要添加事件 就可以用GestureDetector作为父widget包裹需要添加事件
  • 华为OD真题练习

    华为OD真题练习 华为OD机考真题练习 题目描述 任务混部 公司创新实验室正在研究如何最小化资源成本 最大化资源利用率 请你设计算法帮他们解决一个任务混部问题 有taskNum项任务 每个任务有开始时间 startTime 结束时间 end
  • 获取ItemsControl中当前item的binding数据

    直接用 Binding 就可以了 如下
  • 负载均衡策略之AbstractLoadBalancerRule和RandomRule源码解读

    一 负载均衡类图 二 AbstractLoadBalancerRule解读 负载均衡策略的抽象类 public abstract class AbstractLoadBalancerRule implements IRule IClient
  • 微信小程序实现 3秒后自动跳转到指定页面

    需求描述 在某个页面 当用户点击 按钮 时 如果用户没有登录 则 3 秒后自动跳转到登录页面 思路 1 判断用户有没有进行登录 如果没有登录 那么就调用this delayTime 这个方法 2 首先写一个展示弹框的方法 this show
  • typescript interface定义数组每一项都为对象

    定义一个方法 返回一个数组 数组的每一项均为对象 对象中包含label和value两个属性 创建一个public ts文件 javascript实现 javascript 实现 export const formatYear functio
  • 基于深度卷积神经网络的小样本分割算法综述

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文转自 视学算法 介绍 深度卷积神经网络在图像分类 目标检测 语义分割等许多视觉理解任务上都取得了重大突破 一个关键的原因是大规模数据集的可用性 比如 ImageNet