代码: https://github.com/davyneven/SpatialEmbeddings
代码运行环境:python3.6.8+cuda10.1+torch1.1.0+liunx
数据集下载:https://zhuanlan.zhihu.com/p/265535566
结果:

                             Instance Segmentation by Jointly Optimizing Spatial Embeddings and Clustering Bandwidth通过联合优化空间嵌入和聚类带宽进行实例分割

提出问题:目前先进的实例分割方法不适应于实时应用,如自动驾驶,它需要快速的执行时间和高精度。基于proposal的方法具有高准确度但是它的速度很慢,并且是在固定且低分辨率下生成mask,相比之下基于proposal-free的方法可以生成高分辨率mask,而且通常速度也很快,但是在精度上达不到基于proposal方法相同的精度。

解决方法:作者提出了一种新的聚类损失函数,用于proposal-free实例分割。该损失函数将属于同一实例的像素的空间嵌入聚集到一起,并且共同学习特定实例的聚类带宽,从而最大化的提高产生实例mask的交并比。当在实时情况下,该网络可以在保持高准确率的同时执行实例分割。【基于Proposal方法:有候选框。基于Proposal-free方法:无候选框】

介绍:
语义实例分割是定位图像中的所有对象,将每个对象分配到特定的类别,并且为每个对象生成完美的像素掩码,这样才能描绘出它们的形状。这与标准的bounding-box检测方法形成了对比,在标准proposal方法中,每个对象都用一个bounding box表示。但是在许多应用中,比如自动驾驶和机器人应用到照片编辑/分析应用,有的对象需要用二进制掩码,因此实例分割仍然很重要。
【anchor boxes和bounding box的区别:https://blog.csdn.net/hjl_heart/article/details/109389619】
目前,用于实例分割的主要方法基于检测和分割方法,其中使用bounding-box检测方法检测对象,然后为每个对象生成二进制掩码。尽管在过去进行了很多尝试,Mask R-CNN框架是第一个在许多基准(bench-marks)测试中取得出色结果的框架,并且现在仍然是最常用的实例分割方法。虽然这种方法准确度很高,但它生成的低分辨率掩码并不总是好的,还有一点,由于运行在较低的帧率使得它不适合实时应用程序。
实例分割的另一个方法是proposal-free,这些方法大多基于嵌入损失函数或者像素相似度学习(pixel affinity learning)。这些方法依赖于密集预测网络(dense-prediction networks),它们生成的实例掩码可以有很高的分辨率。另外,proposal-free方法通常比proposal-based方法运行速度更快。尽管proposal-free这类方法很有前途,但是它们的表现不如上面提到的检测和分割方法,如Mask R-CNN。
在这篇论文里,作者提出了一种新的损失函数,用于proposal-free实例分割,结合了两方面的优势:准确度,实时性能的高分辨率掩码。方法原理:像素可以通过指向对象的中心与该对象关联。与之前的对所有像素应用标准回归损失,迫使它们直接指向对象中心的工作不同,作者用了一种新的损失函数,用于优化每个对象掩码的交并比。因此,这种损失函数将直接强制对象像素指向对象中心周围的最佳区域。对于大的物体,网络会学习的这个区域更大,从而减轻离物体中心更远的像素的损失。如图一

图一:作者构建的损失函数激励像素指向对象中心周围的区域,让每个对象掩码的交并比最大化。对于一个大的物体,这个区域将更大,因为边缘像素离中心更远,以减少边缘像素的损失。左下角显示学习的偏移向量,用颜色来编码。右下角显示移位的像素,用学习到的偏移向量移位。用学习到的最优聚类区域围绕每个中心聚类,以恢复实例。

总结:1、提出了一种新的损失函数,通过将像素拉入到最优的、特定对象的聚类区域来直接优化每个实例的交并比。2.在数据集Cityscapes 上达到最优的性能。

方法
作者把实例分割视为一个像素分配的问题,想把像素和正确的对象关联起来。为此,需要学习每个像素指向其对象的中心的偏移向量。还学习了每个对象的最佳聚类区域,这样做可以缓解远离中心的像素的损失。为了定位对象中心,需要学习每个语义类别的种子映射(seed map)。

如图:实例分割流程图。
a)每个像素的sigma值,它直接转换为每个对象的聚类边界,越大的物体越蓝,表示的边缘就越大,而越小的物体越黄,表示的边缘越小。
b)每个像素的偏移向量,指向注意力中心(center of attraction),并使用颜色编码显示,其中颜色表示向量的角度。
c)预测每个语义类别的种子映射(seed map)。高值表示该像素的偏移向量直接指向对象中心。因此对于边界像素的值很低,因为它们很难知道指向那个中心。
像素嵌入(偏移向量+坐标向量)和根据预测的sigma计算的边距也会显示出来,聚类中心是从种子映射(seed map)中导出的。

3.1回归到实例质心
实例分割的目标是聚类一组像素X = {x0,x1,x2,…,xn},将x作为二维坐标向量,放入到一组实例S = {S0,S1,S2,…Sk}中。
通常方法是将像素赋值到它们对应的实例质心Ck。这是通过学习每个像素Xi的偏移向量Oi来实现的,因此空间嵌入结果ei = xi+oi指向其相对应的实例质心。通常这个偏移向量是通过直接监督的回归损失函数Lregr来学习的。


然而,这个方法在推理时提出了两个问题。一是必须确定实例质心的位置,二是必须将像素分配给特定的实例质心。过往的解决方法依赖于基于密度的聚类算法,首先是定位一组质心 C = {C0,C1,C2,…,Ck},然后根据最小质心距离将像素赋给特定的质心:

由于后续步骤(中心定位和聚类)没有集成到损失函数里,因此无法对网络进行端到端优化(例如分割),从而导致较差的结果。

3.2可学习的边缘
通过将标准的回归损失函数替换为合页损失变量(a hinge loss variant),将像素赋值给实例质心,强制像素位于实例质心周围的指定边缘(margin)δ (合页边缘)内:

【hinge loss:https://blog.csdn.net/lz_peter/article/details/79614556 对训练样本数目的依赖大大减少,而且提高了训练效率】
在测试阶段,通过围绕质心使用此固定边缘(margin)进行聚类,用这个方法将像素分配到一个质心:

然而这种方法存在一个缺点,必须根据最小的对象选择边缘δ,以确保如果两个小对象相邻,它们却仍可以聚集到两个不同的实例中。如果数据集同时包含大对象和小对象,则此约束会对大对象的精度产生负面影响,因为远离质心的像素将无法指向质心周围的这个小区域。尽管使用合页损失函数将聚类纳入损失函数,但是考虑到上述的缺点,它在实践中是不可行的。

为了解决这个问题,作者提出学习一个实例特定的边缘。对于小的对象应用小的边缘,大的对象使用大的边缘。通过这种方式可以减轻离实例质心更远的像素的损失,因为它们不再被迫精准地指向实例质心。
为此提出对每一个实例Sk使用一个高斯函数φk,该函数将嵌入的(空间)像素ei = xi+oi与实例质心Ck之间的距离转换为属于该实例的概率:

概率大表明该嵌入像素ei接近实例质心,很可能属于该实例,而低概率表示该像素可能属于背景(或者另外一个实例)。具体来说如果φ(ei)>0.5,则位置xi的那个像素被赋予给实例K。
因此,通过修改映射函数的sigma参数,可以控制实例边缘:

【σ是希腊字母,英文表达sigma,汉语译音为“西格玛”。术语σ用来描述任一过程参数的平均值的分布或离散程度】
边缘的大小由sigma数值的大小来决定,数值越大边缘越大,数值越小边缘越小。这还需要网络在每个像素位置输出一个σi,作者定义σk是实例K中所有σi的平均值:

由于对于每个实例K高斯输出一个前景/背景概率分布图,这可以通过使用二进制分类损失与每个实例的二进制前景/背景图作为真值来优化。这和标准的交叉熵损失函数相反,作者在这里使用Lovasz-hing 损失函数。因为这个损失函数是一个凸函数,它直接优化了每个实例的交并比。因此就不需要解释前景和背景的类不平衡问题了。
需要注意的是在这里没有对网络的sigma和偏移向量的输出直接监督(标准回归损失就是这样),取而代之的是,它们被共同优化,以用来最大化每个实例掩码的交并比,通过Lovasz-hing损失函数和高斯函数反向传播接受梯度。

3.3直觉
作者先考虑高斯函数的sigma(边缘)保持不变的情况,与上面解释的标准回归损失相比,作者并没有将实例像素拉倒实例质心的显示损失项。相反,通过最小化二进制损失,实例像素现在被间接的强制放置在实例质心周围的区域,背景像素被强制指向该区域之外。当sigma不是固定的,而是可学习的参数时,网络现在也可以修改sigma以更有效的最小化损失。除了在实例质心周围的(通常很小的)区域内拖动实例像素并将背景像素推到该区域之外,它现在还可以修改sigma,以便该区域的大小更适合该特定实例。直观的说,这意味着对于大对象,它将采用sigma使质心周围的区域变大,以便更多的实例像素可以指向该区域内部,对于小对象,它将选择更小的区域,以便背景像素更容易指向该区域外部。

3.4损失的扩展
椭圆边缘 在上面的高斯函数公式中,作者用了一个标量值来表示,这将导致一个圆形边缘。作者通过修改映射函数,使用一个二维的sigma:

通过这样做,网络也有可能学习椭圆边缘,这可能更适合长物体,如行人或者火车。需要注意在这种情况网络需要输出两个sigma图,一个是σx,一个是σy。

可学习的注意力中心 对高斯函数的中心还可以有其他修改,目前,作者在每个实例的质心Ck都设计一个高斯函数。这么做,像素嵌入就会被拉入实例质心。但是作者也想让网络学习一个更优的注意力中心。这可以通过定义为实例k的嵌入的平均值来实现。这样,网络可以通过改变嵌入的位置来影响注意力中心的位置。

作者将在消融实验中测试这一块。

3.5 seed map
在推理时,作者需要围绕每个对象的中心进行聚类。因为上面的损失函数迫使像素嵌入靠近对象的中心,所以作者采用一个好的像素嵌入,并将该位置用作实例中心。因此,对于每个像素嵌入,我们学习了它距离实例中心有多远,离实例中心的像素嵌入越近,在seed map上得分就越高。因此,在推断时,作者选择一个在seed map上得分高的像素嵌入,这表明嵌入将非常接近对象的中心。
事实上,像素嵌入的seeding 分数应该等于高斯函数的输出,因为它将嵌入和实例中心之间的距离转换为接近(closeness) 得分。嵌入越靠近中心,输出越接近1。
因此,作者用回归损失函数来训练seed map,背景像素回归到0,前景像素回归到高斯输出。作者为每个语义类别训练一个seed map,其损失函数如下:

像素i的网络seed 输出为si。注意作者认为φk()是一个标量:只计算si的梯度。

3.6后期处理
在推理时,作者对每个特定类别的seed map采用顺序聚类的方法。Seed map中数值最高的像素表示离实例中心最接近。这个过程是对具有最高seed 数值的嵌入进行采样,并使用该位置作为实例中心Ck。在同一位置,取sigma值为σk。通过使用这个中心和伴随的sigma,作者将像素嵌入聚类到实例Sk中:

然后掩码seed map中所有聚类像素,并继续采样直到所有的seed都被mask。对所有类别重复这个过程。
为了确保在采样时^σk≈σk≈
,作者在总损失的基础上添加每个实例的平滑项:

4.1实验
作者在Cityscapes数据集上评估自己的实例分割性能。为了找到损失函数的最佳设置,作者先分析消融实验中的不同方面。由于作者的方法是对速度上进行优化的实例分割,因此也报告了与其他实例分割在时间上的比较。
4.1实现细节
网络结构 base-network使用的是ERFNet结构。它是一个为实时语义分割而优化的密集预测编码器网络。作者将模型转换为一个2分支网络,通过共享编码器部分和有两个独立的解码器。第一个分支预测sigma和偏移量,根据sigma(σ vs σxy)有三个或者四个输出通道。另一个分支输出N个seed map,每个语义类别对应一个seed map。使用tanh激活函数将偏移值限制在-1到1之间,使用指数激活函数使sigma严格为正,有效的让网络预测log(1/2σ^2)。

坐标图 由于Cityscapes图片尺寸为2048*1024,作者构建一个像素坐标映射,使得x坐标在[0,2]范围内,y坐标在[0,1]范围内。这样,两个相邻像素在x和y方向上的坐标差都是1/1024.因为便宜向量的值可以在[-1,1]之间,所以每个像素距离当前位置最多可以指向1024个像素。

训练过程 首先在500500的crops上预训练作者的模型,从原始的20481024的训练图像中提取,并围绕一个对象为中心,进行200epochs、每个batch-size为12。这样,作者就不用在没有任何实例的背景patches上花费太多的计算时间。之后,作者在batch-size为2的10241024crops对网络进行了50次微调,以提高无法完全适应500500crop的较大对象的性能,在此阶段,作者保持批处理规范化(batch normalization)不变。作者使用Adam优化器和多项式学习率衰减。在预训练阶段,作者使用5e-4的初始化学习率,作者将其降低到5e-5已进行微调。在1080Ti GPU上训练大约12h。除了随机裁剪(croping)之外,作者也应用随机水平镜像来作为数据增强。

【评估标准:P:precision,预测正确的个数/测试总个数
AP:average precision,每一类别P值的平均值
MAP:mean average precision,对所有类别的AP取均值】

4.2数据集
Cityscapes dataset是高质量的城市场景数据集。它由5000张2048*1024像素的精细注释图像和20000张仅带有语义注释的粗糙注释图片。
实例分割任务包括检测8个不同语义类别,并为每个对象生成一个二进制掩码。在区域水平上用average precision(AP)标准来评估性能,并在不同类别上取平均值。PA50%表示重叠50%,AP100m和AP50m表示对象分别限制在100m和50m范围内。
在实验中,作者只使用fine训练集训练模型,它由以下类别和它们各自的类别数量组成:

其中有些类别(truck卡车,bus公共汽车,train火车)的代表率非常低,这将对模型在这些特定类上的测试性能产生负面影响。
4.3消融实验
这部分主要评估作者在验证集上的损失函数中不同参数的影响:调查可学习参数sigmaσ、使用实例质心或者一个可学习的中心来做作为注意力中心、使用一个标量或者2维sigmaσ的差别。由于作者想要测量实例部分的效果,作者通过使用真值注释来定位对象并分配正确的语义类,将对象检测和对象分类部分从方程中删除,这在表中表现为APgt。

其他实验结果:

总结:在这项工作中,作者提出了一种新的用于实例分割的聚类损失函数。通过使用高斯函数将像素嵌入转换为前景/背景概率,可以直接优化每个对象掩码的交并比,并学习最佳的、特定于对象的聚类边界。作者表明,当应用于实时、密集的预测网络时,在Cityscapes基准上以10 fps以上的速度取得了最好的结果,使作者的方法成为第一种proposal-free、实时、高精度的实例分割方法。

SpatialEmbeddings-master相关推荐

  1. git 创建分支并合并到master 上

    1 创建一个dev的分支 git branch dev 2 切换到dev 分支上 git checkout dev (创建并切换是git checkout -b 分支名) -------------- ...

  2. 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

    在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...

  3. git ssh创建分支_Git(2):在gitlab中创建开发用户,以及master分支的安全管理

    一.创建用户 1.创建管理gitlab的开发人员的用户 2.配置用户信息 3.将用户添加到java-daem组中 4.用户登录成功后,在用户界面为用户添加ssh认证 5.在linux主机中将maste ...

  4. Blender程序性纹理学习教程大师班 Creative Shrimp – Procedural Texturing Blender Master Class

    标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率. 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量, ...

  5. c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D

    c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+机译中 ...

  6. Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020

    Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 ...

  7. 新建本地仓库,同步远程仓场景,出现git branch --set-upstream-to=origin/master master 解决方法...

    1.本地创建一个本地仓库  2.关联远程端: git remote add origin git@github.com:用户名/远程库名.git 3.同步远程仓库到本地 git pull 这个时候会报 ...

  8. 完全隐藏Master Page Site Actions菜单只有管理员才可以看见

    1. 在Master Page Head 增加下面的Style <style type="text/css"> .ms-cui-tt { visibility:hidd ...

  9. SQL Server 中master..spt_values的应用

    今天在做数据分析报表的时候遇到一个这样的问题. 表结构如下. 部门编码.部门名称.部门人员ID(中间用逗号分割) 我想通过和人员表链接,查询出一个新的数据集,查询出的结果集格式如下: 人员信息(ID或 ...

  10. ASP.NET 2.0 中配合 Master Page 使用的优化 CSS 模型

    ASP.NET 2.0 中增加了内建的 MasterPage 的支持,这对我们来说是一个很大的便利.然而经过一段时间的使用,我发现 MasterPage 并不是那么完美:嵌套的 MasterPage ...

最新文章

  1. Linux问题分析或解决_samba无法连接
  2. MPEG-2TS码流编辑的原理及其应用(转载
  3. 计算机寄存器端口,CPU和外设之间的数据传送方式有哪几种
  4. 无限极 php算法,无限极分类算法,对你一定有帮助
  5. JavaScript流程分支结构(1)
  6. 推荐一个管理微信好友及微信群的微信机器人管理软件
  7. PorterLB使用手册
  8. excel如何自动填充123456……
  9. 计算机网络安全实训课程,计算机网络安全课程实验教学实践研究
  10. 爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术
  11. 终于修改了EXE的图标罗
  12. 解决双击tomcat startup.bat的弹框一闪而过的问题,以及如何配置 jre_home 和 java_home
  13. Jmeter入参POST data乱码传入‘--VRES...SER--’的问题
  14. Pytorch(GPU)配环境原理:cuda+cudnn+pytorch配环境的每一步到底干了些什么?
  15. 11.Unity ShaderGraph实例(LWRP+PBRMaster节点制作全息效果的精灵)
  16. 阿里巴巴2015校招电面
  17. 图数据库Neo4j技术原理探秘
  18. 树莓派安装Linux操作系统
  19. syntax和semantics的区别
  20. 郑州大学c语言考试系统,郑州大学c语言考试机真题.doc

热门文章

  1. JAVA微信公众号开发入门
  2. [乱七八糟]沉默是金
  3. js css 特效网站收藏
  4. 做硬件产品经理的困惑
  5. All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tool
  6. Navicat之服务器监控,进行查询进程监控
  7. Java类静态方法的mock实现
  8. 802.11信道划分
  9. 用9张图片,完整的理解三极管的开关功能
  10. OCP-V13-687