SOLO算法简读

论文链接:https://arxiv.org/abs/1912.04488

代码链接:https://github.com/WXinlong/SOLO

摘要

提出一种新的实例分割方法。与语义分割等其他密集预测任务相比,实例分割的难度要大得多。为了预测每个实例的掩码,主流方法要么遵循“detect-then-segment”的策略,如Mask R-CNN所使用的策略,要么先预测嵌入向量,然后使用聚类技术将像素分组到单个实例中。通过引入“实例类别”的概念,文章从一个全新的角度来看待实例分割的任务,它根据实例的位置和大小为实例中的每个像素分配类别,从而很好地将实例掩码分割转化为一个可分类的问题。将实力分割分解为两类任务。文章提出的框架在精确度上优于最近的单点实例分段器。

简介

实例分割不仅要准确的分离图像中的所有对象,还要求对每个实例实现像素级的语义分割。图像中的对象属于一组固定的语义范畴,但是实例的数量不同。因此,语义分割可以很容易地表述为密集的逐像素分类问题,而直接按照相同的范式预测实例标签则是一个挑战
最近的实例分割方法可以分为两类:自顶向下和自底向上的范例。前一种方法即“detect-then-segment”,首先检测边界盒,然后将实例掩码分割到每个边界盒中。后一种方法学习一种亲缘关系,通过推离属于不同实例的像素和拉近相同实例的像素,为每个像素分配一个嵌入向量。然后需要分组后处理来分离实例。这两种范式都是步进式和间接式的,要么严重依赖准确的边界盒检测,要么依赖逐像素嵌入学习和分组处理。


image

目标:在完整实例掩码注释的监督下直接分割实例掩码

提出问题:图像中的对象实例之间的基本区别是什么?

发现:在大多数案例下,图像中的两个实例要么有不同的中心位置,要么有不同的对象大小

现今主流:目前占主导地位的范式利用了完全卷积的网络(FCN)输出N个信道的稠密预测

语义切分的目的:区分不同的语义类别

文章引入了“实例类别(instance categories)”的概念来区分图像中的对象实例,量化的中心位置和对象大小,从而能够按位置划分对象

文章中提出的SOLO的核心思想是根据位置和大小分离对象实例。

原理

位置 将图象划分为SxS的网格,从而产生 S^2 个中心位置类。根据对象中心的坐标,将对象实例分配给其中一个网格单元格,作为其中心位置类别。SOLO算法将中心位置类别编码为通道轴,类似于语义分类中的语义类别。每个输出通道负责一个中心位置类别,相应的通道映射应该预测属于该类别的对象的实例掩码。

本质上,实例类别近似于实例的对象中心位置.因此,通过将每个像素分类到其实例类别中,就相当于使用回归从每个像素中预测目标中心。将位置预测任务转换为分类而不是回归

尺寸 为了区分不同对象大小的实例,文章采用了特征金字塔网络(FPN),从而将不同尺寸的对象分配到不同层次的特征图中,作为对象尺寸类。因此,所有的对象实例都是定期分离的,从而能够通过“实例类”对对象进行分类。这里的FPN目的是检测图像中不同尺寸的目标。
FPN是SOLO的核心方法。
在SOLO框架中通过使用掩码注释,以端到端的方式对网络进行优化。并跳出局部框划分和像素分组的限制,进行像素级实例分割。

SOLO在COCO数据集上与Mask R-CNN取得同等结果。另外SOLO具有通用性。
本质上,SOLO将坐标回归转化为离散量化的分类。这样做的一个优点是避免了启发式协调规范化和日志转换,这通常在YOLO之类的检测器中使用.

相关工作
SOLO是完全无箱的,因此不受(锚)箱的位置和规模的限制,并自然受益于固有的优势FCNs
SOLO不利用像素成对关系和像素分组,而是直接在训练期间学习实例掩码注释,并端到端预测实例掩码和语义类别,无需分组后处理。SOLO是一种直接的端到端实例分割方法

SOLO以图像为输入,直接输出实例掩码和对应的类概率,采用完全卷积、无盒、无组的范式。

我们的简单网络可以优化端到端,而不需要箱监督。为了进行预测,该网络直接将输入图像映射到每个单独实例的掩模中,既不依赖于RoI特征裁剪等中间操作,也不依赖于分组后处理。

SOLO

SOLO框架的核心思想是将实例分割重新定义为两个同时存在的分类感知预测和实例感知掩码生成问题。系统将输入图像划分为均匀的SXS的网格,如果一个对象中心落到一个网格单元中,该网格单元格负责1)预测语义类别以及2)分割该对象实例

在语义类别预测的同时,每个正网格单元也将生成相应的实例掩码。对于一个输入图像I,如果我们把它分成S×S个网格,总共最多会有S^2个预测掩模。文章明确地在三维输出张量的第三维(通道)编码这些掩模。具体来说,实例掩码输出将具有Hi×Wi×S2Hi×Wi×S^2Hi×Wi×S2维。第k个通道负责在网格(i, j)处分段实例,其中k = i·S + j(i和j从零开始).为此,在语义类别和类不可知的掩码之间建立了一一对应关系
在这里插入图片描述

SOLO需要一个在空间上变化的模型,或者更准确地说,位置敏感的模型,因为我们的分割掩模取决于网格单元,必须由不同的特征通道分开。

具体地说,文章创建了一个与输入具有相同空间大小的张量,该张量包含归一化为[−1,1]的像素坐标。然后这个张量被连接到输入特征并传递到下面的层。通过让卷积访问它自己的输入坐标,我们将空间功能添加到传统的FCN模型中。如果原始特征张量的大小为H×W×D,则新张量的大小为H×W×(D+2),其中后两个通道为x-y像素坐标。

形成实例分割

在SOLO中,类别预测和对应的掩模自然通过它们的参考网格单元k=i⋅S+jk = i · S + jk=iS+j关联起来。在此基础上,SOLO可以直接形成每个网格的最终实例分割结果。原始实例分割结果是通过收集所有网格结果生成的。最后,使用非最大抑制(non-maximum-suppression, NMS)来获得最终的实例分割结果。不需要其他后处理操作

网络结构
我们使用FPN[11],它为每一层生成一个具有固定数量通道(通常为256-d)的不同大小的金字塔特征图。这些映射用作每个预测头的输入:语义类别和实例掩码。头部的权重在不同层上共享。在这个场景中,只有最后的1×1 conv不共享。

在每个FPN特征级别上,我们附加两个兄弟子网络,一个用于实例类别预测(上),另一个用于实例掩码分割(下)。在掩码分支中,我们将x、y坐标和原始特征连接起来,对空间信息进行编码。这里数字表示空间分辨率和通道。在图中,我们以256个通道为例。箭头表示卷积或插值。所有的卷积都是3×3,除了输出conv。“Align”是指自适应池、插值或区域网格插值,在推理过程中,掩码分支输出进一步向上采样到原始图像大小。

SOLO 学习

标签分配

对于类别预测分支,网络需要给出每个S×S网格下的目标类别概率。具体来说,如果网格(i, j)落在任何ground truth掩码的中心区域,则认为它是正样本,反之则认为它是负样本。使用中心采样进行掩模类别分类。得到质点中心(n,m),宽w高h的mask,那么该实例的中心位置就是(n,m,w1,h1),其中w1=βw,h1=βh,β在文中设为β=0.2

Loss损失函数

L=Lcate+λLmaskL = L_{cate} + λL_{mask} L=Lcate+λLmask
这里的Lcate是传统的语义类别分类的Focal Loss,Lmask是用于掩模预测的损失,λ=3
image
image
Npos表示正样本的数量,p和m分别代表类别和掩模目标。ll是指示函数,当
Pi,j∗>0P^*_{i,j} > 0 Pi,j>0
时为1,否则为0.对于dmask,文章进行了一系列的对比,最终选用 Dice Loss(效果比BCE、Focal Loss好)。Dice Loss定义为

LDice=1−D(p,q),L_{Dice} = 1 −D(p, q), LDice=1D(p,q),
D是骰子系数,定义为
image
px,y和qx,y分别是soft mask p和truth mask q位于(x, y)的像素值。

推论
前向传播得到类别分数pi,j和相应的mask mk,其中k=i∗S+j。首先使用置信阈值0.1来过滤低置信的预测,然后选取前500个排好序的mask进行NMS操作,然后用0.5的阈值进行mask二值化,保留前100个instance mask进行评估。

实验

image

如何工作
在这里插入图片描述

这里我们可以看到不同的实例在不同的掩模预测通道上激活,通过显式地在不同位置分割实例,SOLO将实例分割问题转化为位置感知的分类任务。
在每个网格中只有一个实例被激活,并且一个实例可以被多个相邻掩码通道预测。在推断期间,我们使用NMS来抑制这些冗余掩码

消融实验1

Grid number

将网格数对性能的影响与单一输出特征图进行了比较
image
这一结果表明,我们的单尺度SOLO可以适用于一些对象尺度变化不大的场景。然而,单尺度模型在很大程度上滞后于金字塔模型,这说明了FPN在处理多尺度预测中的重要性。

Multi-level Prediction

image
从表2中我们可以看到,单尺度的SOLO在分割多尺度的对象时遇到了困难。在消融过程中,我们证明这个问题可以通过FPN的多级预测得到很大程度的解决,表3使用
五个FPN金字塔来分割不同尺度的对象.

CoordConv

另一个促进我们的SOLO模式的重要组成部分是空间变化的卷积(CoordConv )

一个单一的CoordConv已经使预测具有良好的空间变异/位置敏感性,过多无用。

Loss function.

骰子损失(DL)导致最好的AP,训练时更稳定

Different head depth

image
图5中的结果显示,当深度超过7时,性能会下降。所以使用的深度为7.

Decoupled SOLO

给定一个预先定义好的网格数,如 S=20S=20,这样SOLO head就会输出400个通道的特征图。但是,这样预测有些冗余,因为绝大多数场景中,图像上的物体都是比较稀疏的,不太会出现特别多的物体实例。这一节,作者进一步介绍了一个等价的、更加高效率的 SOLO 模型的变体,称为 Decoupled SOLO, 如下图所示
image

在Decoupled SOLO中,原始的输出张量
M∈RH×W×S2M∈R ^{H×W×S^2} MRH×W×S2
被替换为两个输出张量X∈R
H×W×S
和Y∈R H×W×S ,对应着两个坐标轴。因此,输出空间就从HxWxS2 降低到了H×W×2S。对于网格位置为(i,j)的物体,原来的SOLO模型在输出张量M的第k个通道上分割掩码,其中k=i⋅S+j。而 Decoupled SOLO的物体掩码预测,定义为两个通道特征图的 element-wise 相乘。

mk=xj⊗yim_k=x_j⊗y _i mk=xjyi
其中xj,yi分别表示X的第j个通道图,和Y的第i个通道图。
在这里插入图片描述

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

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

相关文章

关于Loss的简单总结

Dice Loss 参考:https://blog.csdn.net/l7H9JA4/article/details/108162188 Dice系数: 是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值范围为[0,1]。 s2∣X∩Y∣∣X∣∣Y∣s \frac{2|X ∩ Y|}{|X||Y|} s∣X∣∣Y…

SOLOv2论文简读

论文:SOLOv2: Dynamic, Faster and Stronger 代码:https://github.com/WXinlong/SOLO 摘要 主要提出了作者在SOLOv2中实现的优秀的实例分割方法,旨在创建一个简单、直接、快速的实例分割框架: 通过提出动态学习对象分割器的mas…

Ubuntu18.04 关于使用vnc的踩坑

由于种种原因,手上多了一台可使用的桌面版Ubuntu,正好用来测试代码,方便调试。因为只能远程,所以需要配置远程连接。因此就打算使用vnc进行远程连接,谁料一路坎坷,特此记录。 安装 设置桌面共享 需要注意…

App_Shell模型

App_Shell模型 App Shell 架构是构建 Progressive Web App 的一种方式,这种应用能可靠且即时地加载到您的用户屏幕上,与本机应用相似。 App shell是支持用户界面所需的最小的 HTML、CSS 和 JavaScript,如果离线缓存,可确保在用户重复访问时提供即时、可靠的良好性能。这意…

Jenkins自定义主题教程

Jenkins自定义主题 由于Jenkins自带的样式比较丑陋,所以有很多第三方的样式库,这里针对jenkins-material-theme样式库做一个安装教程。 下载样式库 下载连接 Select your color 选择一个你喜欢的主题颜色。Choose your company logo 上传你自定义的…

IndexedDB_Web 离线数据库

IndexedDB_Web 离线数据库 本文会从头剖析一下 IndexedDB 在前端里面的应用的发展。 indexedDB 目前在前端慢慢得到普及和应用。它正朝着前端离线数据库技术的步伐前进。以前一开始是 manifest、localStorage、cookie 再到 webSQL,现在 indexedDB 逐渐被各大浏览器认…

基于 Docker 的微服务架构

基于 Docker 的微服务架构-分布式企业级实践前言Microservice 和 Docker服务发现模式客户端发现模式Netflix-Eureka 服务端发现模式ConsulEtcdZookeeper 服务注册自注册模式 Self-registration pattern第三方注册模式 Third party registration pattern小结一 服务间的 IPC 机制…

funcode游戏实训,java及C/C++,网上整理

软件,常见错误都有。 所有资源可到公众号获取(源码也是),不再直接分享

swing皮肤包 substance

分享一下swing皮肤包substance 资源可到公众号获取

基于Android的聊天软件,Socket即时通信,实现用户在线聊天

基于Android的聊天软件,Socket即时通信,单聊,聊天室,可自行扩展功能,完善细节。 【实例功能】 1.运行程序,登录界面, 注册账号功能 2.进入主界面,有通讯录, 个人信息。 3.点击好友会话框&#…

Go实现简单的RESTful_API

Go实现简单的RESTful_API 何为RESTful API A RESTful API is an application program interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. A RESTful API – also referred to as a RESTful web service – is based on representational state t…

Weave Scope安装

Weave Scope安装 首先确保已经安装docker 实时了解Docker容器状态 查看容器基础设施的概况,或者专注于一个特殊的微服务。从而轻松发现并纠正问题,确保你的容器化应用的稳定与性能。 内部细节与深度链接 查看容器的指标、标签和元数据。 在一个可扩展…

MYSQL导入数据出现ERROR 1049 (42000): Unknown database 'n??;'

MYSQL导入数据出现ERROR 1049 (42000): Unknown database ‘n??;’ 背景 我需要将一个csv表中的数据导入数据库创建好的表中,产生的问题如下: 原因寻找 因为我并没有使用’n??;的数据库,所以很好奇这个错怎么来的,尝试如下…

SVG入门理解

SVG入门SVG 元素简单的形状rectcircleellipselinetextpath SVG 样式分层和绘图顺序透明度 SVG入门 当我们用SVG生成和操作一些炫酷的效果时,D3是最佳选择。使用div和其他原生HTML元素绘图也是可以的,但是太笨重,而且会受到不同浏览器的限制&#xff0c…

【哈佛幸福课笔记】【1】

【哈佛幸福课笔记】【1】 ​ ​ 一个月的时间看完了哈佛幸福课,正如Tal所说课程的结束才是学习的开始。对于课程观点的思考,对于个人习惯的培养,对于思维模式的转变还需要花大量的时间去练习。这个系列的帖子将作为我个人的读书笔记&#x…

RAID阵列基础知识

RAID阵列基础知识 独立硬盘冗余阵列 (RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。 RAID的种类 这里我们只介绍比较常用的RAID类型&am…

timeshift备份你的Linux系统

timeshift备份你的Linux系统 安装 打开终端(ctrl alt T)并逐个执行以下命令 sudo apt-add-repository -y ppa:teejee2008/ppa sudo apt-get update sudo apt-get install timeshift 创建 点击Create按钮 默认不能备份用户下的文件,所以…

Go语言vscode环境配置

Go语言vscode环境配置 此教程在GO已经安装成功的前提下。 安装vscode扩展 在vscode扩展里面搜索go,然后下载扩展。 安装go 插件 在$GOPATH目录下创建bin,pkg,src切换到$GOPATH/bin目录下,打开终端输入以下命令,不需要翻墙: go…

消息队列-Message Queue

消息队列-Message Queue 目前随着互联网的普及以及上网用户的增多,拥有一套 安全、稳定、低耦合、高性能的内部通信工具尤为重要。 什么是消息队列? 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线…

Angular 第一章 开始

第一章 开始 用 JavaScript 开发应用程序是一个很大的挑战。由于它的延展性和缺少类型检查,在 JavaScript 中构建一个适当大小的应用程序是很困难的。除此之外,我们对所有类型的处理都使用JavaScript,例如用户界面(UI),操作、客户端-服务器交互和业务处理/验证。因此,我们…