Rethinking Semantic Segmentation: A Prototype View 2022CVPR Oral

流行的语义分割方案的掩码解码策略(基于参数softmax或基于像素查询)视为可学习的类原型。本研究揭示了这种参数分割策略的几个局限性,并提出了一种基于不可学习原型的非参数替代方案。与之前的方法以完全参数化的方式为每个类学习单个权重/查询向量不同,我们的模型将每个类表示为一组、不可学习的原型,仅依赖于该类中几个训练像素的平均特征。这允许我们的模型通过优化嵌入像素和锚定原型之间的排列来直接塑造像素嵌入空间。它能够处理任意数量的类,具有恒定数量的可学习参数。

图1所示。不同的语义分割:(a-b)参数与(c)非参数。无论是使用(a)参数softmax还是(b)查询向量进行掩码解码,都可以被视为基于可学习原型的方法,以完全参数化的方式学习类原型。我们提出了一种非参数方案(c),该方案直接选择嵌入像素的子簇中心作为原型,并通过非参数最接近原型检索实现全像素预测。

文章主旨:

基于参数化范式的可学习原型的局限性是什么?如何解决这些限制?

三个局限性:首先,通常每个类只学习一个原型,不足以描述丰富的类内方差。其次,要将H×W×D特征张量映射到H×W×C掩码,至少需要D×C个参数进行原型学习。这损害了概括性,尤其是在词汇量大的情况下;例如,如果有800个类,D= 512,那么我们需要0.4M个可学习的原型参数。第三,交叉熵损失只优化类内和类间距离的相对关系,像素和原型之间的实际距离,即类内紧凑性,被忽略。

我们的模型有三个优点:首先,每个类都由一组原型抽象出来,很好地捕获了类的特征和类内方差。由于原型的含义清晰,可解释性也得到了增强——每个像素的预测可以直观地理解为其在嵌入空间中最近的类中心的参考。其次,由于非参数性质,提高了广义性。由于可学习的原型参数的数量不再局限于类的数量(即0 vs D×C),因此可以有效地处理大词汇的语义分割。第三,通过原型锚定的度量学习,将像素嵌入空间塑造成良好的结构,最终有利于分割预测。

基于原型的分类

设{pm}为代表其对应类{C}的一组原型,对于数据样本i,通过比较i与{pm}进行预测:

式中i和{pm}为数据样本和原型在特征空间中的嵌入,<. .>代表距离度量,通常设置为l2距离,但也可以应用其他接近度。

基于不可学习原型的非参数语义分割

首先采用一个编码器网络φ将输入图像h×w×3映射到H×W×D。然后引用了一组不可学习的原型,即{pc,k},它们完全基于类数据的子中心。每个类C由K个原型{pc,k}表示,原型pc,k确定为c类训练像素样本在嵌入空间φ中第K个子聚类的中心。这样,原型就可以在不引入φ之外的额外可学习参数的情况下有效地捕获相应类的特征属性。最终,每个像素i的类别预测是通过winner-take-all的分类来实现的:

式中,i表示像素i的l2归一化嵌入,距离测度<>定义为负余弦相似度,即<i,p>=−iTP(因为已经归一化,所以余弦相似度直接是两个向量点积

我们首先定义像素i在C类上的概率分布:

像素级距离si,c∈[−1;1]计算为类c到最近原型的距离。给定每个像素的groundtruth类i,即ci,交叉熵损失可以用于训练:

上式可以看作是将像素i推得更靠近其对应类的最近原型(而不是更靠近其对应类,仔细体会这句话),并且远离其他不相关类的接近原型。然而,仅仅采用这样的培训目标是不够的,原因有二(很值得学习与思考)。首先,式子只考虑像素-类的距离,而没有处理类像素-原型的关系。例如,对于判别表示学习,期望像素i进一步靠近类ci的某个原型(即特别适合的模式),并且远离类ci的其他原型(即其他不相关但在类内的模式)。其次,由于像素-类之间的距离是在所有类之间归一化的,因此交叉熵只优化了类内和类间距离之间的相对关系,而不是直接正则化像素与类之间的余弦距离。例如,当像素i的类内距离相对小于其他类间距离时,得到的惩罚较小,但类内距离可能仍然较大。

有点抽象,大白话就是1交叉熵没有考虑和proto之间的关系,2只保证了类间的分散,没有保证类内的紧凑

类内在线聚类策略+两个额外的训练目标

我们采用在线聚类方法进行原型选择和分配:将同一类中的像素样本分配给属于该类的原型,然后根据分配更新原型。在线聚类使我们的方法可扩展到大量数据,而不是离线聚类,需要在整个数据集上进行多次特征计算。

我们的目标是将N个像素i映射到c类的K个原型。我们将这个像素到原型的映射表示为Lc:K×N,其优化是通过最大化像素嵌入Xc:D×N和原型pc,k :D×K之间的相似性来实现的:

聚类是对每个类别单独进行的处理,前两个约束保证每个c类内的像素点只能匹配到一个prototype,第三个约束是鼓励所有的像素点均匀匹配到各个prototype,避免许多个像素点几乎都匹配到同一个prototype上了,强制每个原型在批次中平均至少被选择N/K次。

设计的Lppc损失则是在同一个类内,不同prototype之间的分散(其实是原型之间的交叉熵);Lppd损失着眼于同一个簇内,像素点与prototype的紧凑性优化.

对于提取特征的网络则还是常规SGD更新。Prototype是不可学习的,采用的动量更新的方式,在每个iteration中,将同属于每个prototype的所有像素的特征做一个平均,然后将它更新到所处的prototype上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码随想录算法训练营第五十二天|647.回文子串、516.最长回文子序列】

文章目录 647.回文子串动态规划双指针法 516.最长回文子序列 647.回文子串 动态规划 dp[i][j]指的是s[i:j1]这段是否是回文串&#xff0c;如果s[i]s[j]需要分三种情况来判断&#xff0c;如果ij或者ji1&#xff0c;那么就是回文串&#xff0c;否则还要看这中间的是否是回文串&…

Kubernetes面试整理-如何利用PodSecurityPolicies来提高集群的安全性?

PodSecurityPolicy (PSP) 是 Kubernetes 中用于定义和控制 Pod 安全配置的策略。通过 PSP,可以设置对 Pod 的一些安全约束条件,从而提高集群的安全性。虽然 PSP 从 Kubernetes 1.21 开始已被弃用,并在 1.25 版本中移除,但在一些旧版 Kubernetes 集群中,PSP 仍然是一个重要…

ubuntu22.04编译安装tesseract

1、 为什么用自己编译安装&#xff0c;而不采用apt安装&#xff1f; 由于tesseract有很多依赖包&#xff0c;直接用deb包或者rpm包等安装包安装很复杂&#xff0c;不一定能成功安装。 2、安装基本的依赖包 sudo apt update sudo apt install g autoconf automake libtool pkg…

Docker-Compose一键部署项目

Docker-Compose一键部署项目 目录 Docker-Compose一键部署项目介绍部署Django项目项目目录结构 docker-compose.ymlnginx的default.conf文件后端Dockerfile文件mysql.env一键部署DNS域名解析引起的跨域问题 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的…

如何排查Java应用的死锁

排查Java应用中的死锁问题是一个复杂但重要的任务&#xff0c;因为死锁会导致应用程序停止响应&#xff0c;影响用户体验和系统稳定性。以下是一些方法和步骤&#xff0c;帮助你排查Java应用中的死锁。 1. 理解死锁的概念 在计算机科学中&#xff0c;死锁是指两个或多个线程相…

新手向导:掌握Axure RP的第一步

其实很多时候&#xff0c;我们很容易把教程做得太复杂&#xff0c;让学生失去重点被复杂的理论吓到。入门基础的时候只需要先弄清楚两个核心内容&#xff0c;学起来就容易多了:一是简单了解这个软件&#xff0c;二是学习这个软件的基本操作。所以如果你问我什么是好的 Axure RP…

cesium升级到116版本后底图和地形加载问题

cesium在2023-07-03 升级到了107版本&#xff0c;107版本加载底图和地形方式做了变更&#xff0c;之前的imageryProvider 和 CesiumTerrainProvider方式被remove掉了&#xff0c;换了另外方式。变更如下所示&#xff1a; cesium/CHANGES.md at 1.116 CesiumGS/cesium GitHub…

【QCustomPlot实战系列】QCPGraph折线图的渐变

包含折线图渐变效果以及QCPAxisTickerDateTime的使用 static QBrush GenerateLinearBrush(Qt::Orientation orientation) {qreal x 1;qreal y 0;if (orientation Qt::Vertical) {x0;y1.5;}QLinearGradient gradient(0, y, x, 0);gradient.setCoordinateMode(QLinearGradie…

USB描述符的一些解释

USB设备描述符、配置描述符和一些数据缓冲区的数组。让我们逐步解析这些数组中的值。 设备描述符 (Device Descriptor) UINT8C DevDesc[18] = {0x12, 0x01, 0x10, 0x01, 0xff, 0x00, 0x02, 0x08,0x86, 0x1a, 0x23, 0x55, 0x04, 0x03, 0x00, 0x00,0x00, 0x01};0x12 (18): 设备…

Spring Boot中的分布式缓存方案

Spring Boot中的分布式缓存方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Spring Boot应用中实现分布式缓存的方案&#xff0c;以提升系统…

软件需求管理规程(DOC原件)

软件需求管理规程是确保软件开发过程中需求清晰、一致、可追踪的关键环节&#xff1a; 明确需求&#xff1a;项目初期&#xff0c;与利益相关者明确项目目标和需求&#xff0c;确保需求完整、无歧义。需求评审&#xff1a;组织专家团队对需求进行评审&#xff0c;识别潜在风险和…

解释Java中的接口和抽象类的使用场景。

在Java中&#xff0c;接口和抽象类是两种特殊的类类型&#xff0c;它们各自有不同的使用场景。 **接口&#xff08;Interface&#xff09;** 接口是一种契约&#xff0c;它定义了一组方法的契约&#xff0c;这些方法在实现类中必须实现。它们常常被用来定义一种规范或者标准&…

【前端】前端文件下载方式盘点

前端文件下载方式盘点 在前端开发中&#xff0c;文件下载是一个常见的功能需求。本文将介绍几种常见的前端文件下载方式&#xff0c;分析各自的优缺点&#xff0c;并提供具体的实现代码。 1. 使用 HTML 的 <a> 标签 优点 简单易用&#xff0c;适用于下载静态文件。浏…

【SQL】⼀条更新语句的执行流程

在关系型数据库管理系统&#xff08;RDBMS&#xff09;中&#xff0c;一条更新语句&#xff08;例如UPDATE语句&#xff09;的执行流程涉及多个步骤&#xff0c;以确保数据的一致性、完整性和高效性。以下是典型的更新语句执行流程的概述&#xff1a; 解析&#xff08;Parsing&…

CPU的核心和线程怎么理解,选购机器如何考虑CPU性能

CPU的核心和线程是计算机处理器的两个重要概念。 CPU核心&#xff1a;CPU核心是指CPU内部实际执行指令的独立单元&#xff0c;每个核心可以独立处理任务。一个CPU可以有一个或多个核心&#xff0c;多核心CPU可以同时处理多个任务&#xff0c;提高计算机的性能。例如&#xff0c…

huggingface加速下载模型

文章目录 所需环境huggingface-cli 用法登录token 获取 huggingface 镜像huggingface 缓存hf-transfer 拉满下载带宽如果开了的话&#xff0c;记得关掉科学上网&#xff01;&#xff01;&#xff01; 所需环境 python huggingface-cli 用法 huggingface-cli的更多用法点击这…

基于SpringBoot+IDEA+Mysql开发的在线课程教育平台

基于SpringBootIDEAMysql开发的在线课程教育平台 项目介绍&#x1f481;&#x1f3fb; 项目背景描述 随着信息技术的迅猛发展和互联网的普及&#xff0c;传统教育模式正面临着前所未有的挑战和机遇。为满足广大用户对于灵活、便捷、高效学习方式的需求&#xff0c;我们决定开发…

Redis 内存碎片是什么?如何清理?

Redis 内存碎片相关的问题在得物、美团、阿里、字节、携程等公司的后端面试中都曾出现过&#xff0c;还是建议认真准备一下。即使不是准备面试&#xff0c;日常开发也是能够用到的&#xff01; 什么是内存碎片? 你可以将内存碎片简单地理解为那些不可用的空闲内存。 举个例子&…

PMP认证有什么好处?

一般这些人适合去考PMP认证&#xff1a; 想要通过资质进行晋升的人群&#xff1a; 比如说在项目相关的助理岗位&#xff0c;企业中的项目人才需求依旧是很大的&#xff0c;项目助理如果想要达到项目经理或者项目主管的提升&#xff0c;就需要让公司对自己的项目管理能力认同才…

基于Java的旅游景区网站系统(springboot+vue)

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…