[调研] 通用实例分割方法[通俗易懂]

[调研] 通用实例分割方法[通俗易懂]目前的实例分割方法可分为3类:top-down,也叫做detect-then-segment,顾名思义,先检测后分割,如FCIS,Mask-RCNN,PANet,MaskScoringR-CNN;bottom-up,也叫Embedding-cluster,将每个实例看成一个类别;然后按照聚类的思路,最大类间距,最小类内距,对每个像素做embedding,最后做grouping分出不同的instance。Grouping的方法:learnedassociativeembedding,A


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目前的实例分割方法可分为3类:

  • top-down,也叫做 detect-then-segment,顾名思义,先检测后分割,如FCIS, Mask-RCNN, PANet, Mask Scoring R-CNN;
  • bottom-up,也叫Embedding-cluster,将每个实例看成一个类别;然后按照聚类的思路,最大类间距,最小类内距,对每个像素做embedding,最后做grouping分出不同的instance。Grouping的方法:learned associative embedding,A discriminative loss function,SGN,SSAP. 一般bottom-up效果差于top-down;
  • direct的方法。不同与上述两类方法,直接得到实例分割结果,如SOLO。

Deep Snake for Real-Time Instance Segmentation [2001]

物体轮廓用循环卷积来学习特征确定offset

文章提出two-stage、real-time的instance segmentation方法:1、得到初始的目标轮廓;2、轮廓迭代变形,以得到最终精准的目标边界;

不同于CornerNet、ExtremeNet等方法直接回归目标边界上的点,受到传统snake算法的启发,Deep Snake 通过迭代变形一个初始轮廓来得到最终的目标边界;文章使用循环卷积来学习目标轮廓的结构特征;对512×512大小的图片在1080Ti上达到32.3 fps
在这里插入图片描述
在这里插入图片描述
先得到检测框,再得到diamond框,学习offset得到四个极点,得到octagon 轮廓; 输入到 deep snake,学习边缘;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PointRend: Image Segmentation as Rendering [1912]

在这里插入图片描述
方法:对输出的coarse mask 和 fine-grained 特征选部分点进行学习,用提出的subdivision mask rendering算法迭代,得到不确定边界区域的mask

Render方法:subdivision 、adaptive sampling、 ray-tracing
Subdivision: 只在(与周围区域十分不同的)区域计算;其他区域直接插值;
如何选点:将coarse mask 上采样X2;选择p接近0.5的N个点;用MLP得到这N个点预测值;一直迭代,直到到达某一分辨率;
在这里插入图片描述
但训练阶段,不采用迭代的方式训练;而是使用随机采样

在这里插入图片描述
在这里插入图片描述

SOLO: Segmenting Objects by Locations [1912]

现有方法分为两类:
top-down,也叫做 detect-then-segment,顾名思义,先检测后分割,如FCIS, Mask-RCNN, PANet, Mask Scoring R-CNN、TensorMask
bottom-up,也叫Embedding-cluster,将每个实例看成一个类别;然后按照聚类的思路,最大类间距,最小类内距,对每个像素做embedding,最后做grouping分出不同的instance。Grouping的方法:learned associative embedding,A discriminative loss function,SGN,SSAP. 一般bottom-up效果差于top-down。

但这些方法是two-step而且indirect。我们思考12,不同的instance的真正区别是什么,我们的答案是 location 和 object size。

Location:将图像分成S*S个cell,就形成了S^2个location类别;网络输出的一个channel就代表了一个location类别;相应的这个channel map就输出属于这个location类别的instance。
将每个像素分类到不同的location class,等价于对每个像素的中心位置做回归;相比起回归;用分类来做对位置预测的任务,更加直观,且用固定的channel能预测不同数量的instance。且不需要grouping或者embedding的后处理。

Size:FPN做不同大小的类别,不同的level预测不同的大小
在这里插入图片描述
传统卷积是spatial invariant,但这里需要position sensitive.受CoordConv启发,直接把归一化坐标信息与特征拼接(简单易行)。
最后接NMS后输出实例分割结果。
FPN-backbone + prediction head –{ semantic category
———————————————- { instance mask

在这里插入图片描述
为验证方法有效性,选择了不同backbone+head+loss来进行试验。
标签赋值:Center sampling (在FCOS2019, Beyond anchor-based中都有使用)
中心区域定义:(cx, cy, εw, εh) ,ε=0.2,平均有3个positive sample

损失函数:category的focal 分类损失+ mask的分割损失(DICE)
在MS-COCO上与其他方法对比结果:

在这里插入图片描述
用FPN比直接设置grid num效果好很多✅
在这里插入图片描述
FPN各level的grid num
在这里插入图片描述
COORDCONV作用:
在这里插入图片描述
Decoupled方法
在这里插入图片描述
GPU显存更少
在这里插入图片描述
速度:
SOLO – RESNET-50 Speed 12FPS ON V100

FCOS: Fully Convolutional One-Stage Object Detection [1904]

Method:不预测检测框;而是直接预测点距离四个边的距离
在这里插入图片描述
Centerness:一个branch抑制离中心点远的低质量proposal;训练时,计算;(l,t,r,b)为该点距离四个边的距离;不同level使用同一head对性能不太好,添加一个可学习的参数s用于回归,使得性能略微上升
在这里插入图片描述
CE作为loss;测试时,nms抑制低的得分。
同一点对应不同目标,可以用FPN解决;不同level预测不同scale
在这里插入图片描述
在这里插入图片描述

TensorMask: A Foundation for Dense Object Segmentation [1903]

滑动窗目标检测;dense sliding-window instance segmentation network
利用滑窗来寻找物体,是CV中古老又传统的方法。
Insight:
Faster-rcnn、mask-rcnn都是用滑窗检测出候选框,再用refinement net来进一步挑选;
SSD和RetinaNet舍弃了refinement,直接用滑窗得到检测结果。然而目前这类方法没有拓展到instance 分割上。本文即填补这个gap
方法:
定义 nature representation 与 aligned representation
在这里插入图片描述

方法总结:精度比不过mask rcnn,而且还慢3倍;

Hybrid Task Cascade for Instance Segmentation [1901]

Insight:充分利用detection与segmentation的相互(reciprocal)关系设计级联方式

现有方法粗略分为两类:
detection-based:detector先产生bbox或region proposal,再在区域内预测mask;
segmentation-based:

method:
交织进行bbox 回归与mask预测,而非并行
Mask brainch,上阶段信息直接输入到当前;
加入了额外的语义分割branch,并融入到bbox与mask branch中
这些改进改善了stage以及task的信息流

在这里插入图片描述
速度、性能比较:
在这里插入图片描述
CASCADE R-CNN: iou=0.5 ,FP多,iou升高,性能下降;原因:1、由于指数消失的正样本导致过拟合;2、训练与测试的mismatch(即在train上取得最佳的IOU阈值对inference时产生的proposal并不能很好地进行回归)
方法:级连不同iou的detector;iou逐渐升高;

在这里插入图片描述
在这里插入图片描述

Path Aggregation Network for Instance Segmentation [1803]

PANET CVPR2018
关键词:information flow
1st place in the COCO 2017 Challenge Instance Segmentation task
Method:bottom-up path + adaptive feature pooling + mask branch中 添加了 fc;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Mask R-CNN [1703]

FPN + FPN + ROI Align + 3 branch (class, mask , box )
FCIS缺点:重叠instance、虚假边缘
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

实验:cityscape + coco
在这里插入图片描述

Fully Convolutional Instance-aware Semantic Segmentation [1611]

FCIS. : 首个端到端的实例分割网路;CVPR2017 spotlight
检测与分割同时进行. 用RPN代替sliding window。
此前的技术分为三步:1、FCN提取特征;2、将每个ROI pooling成相同尺寸的特征图;3、全连接层输出ROI mask。 注意:translation-variant在fc上引入。
缺点如下:1、ROIpooling损失空间细节;2、使用fc层参数量过多;3、最后一步每个ROI之间的计算不共享;
Method:
position-sensitive score map
joint mask prediction and classification
RPN得到的检测框,直接在score map上裁剪,特征图一半(inside)做softmax得到实例分割图;特征图另一半(outside)max + avg Pooling + softmax,判断是否为instance
inside score:像素在目标内 segment+
outside score:像素在目标外 segment-
在这里插入图片描述

总共有3个loss, C+1类的检测loss,分割loss以及bbox的回归loss
实验:pascal+coco

Deep Watershed Transform for Instance Segmentation [1611]

需要好的语义分割图像(由PSPNet得到);
优点:适合学习相互连接的物体
缺点:遮挡、重叠;学不到实例类别;性能比mask-rcnn差很多
方法:网络学习分水岭变换;得到能量图,再根据能量图,直接得到每个实例:DN net (梯度图,单位向量,得到2维)+ WT net (能量图)

在这里插入图片描述

[调研] 通用实例分割方法[通俗易懂]

InstanceCut: from Edges to Instances with MultiCut [1611]

方法:输出语义分割图+所有instance的边界— 之后用MultiCut来分割最终的instance; instance-aware;
ituition : Semantic seg 的中间特征可以用来 学习edge
数据:cityscape,8个类别;2975 images for training, 500 for validation and 1525 for testing
在这里插入图片描述
在这里插入图片描述

Instance-sensitive Fully Convolutional Networks [1603]

ECCV2016
优点:普通卷积有平移不变形,同一位置,响应总是一样,这阻碍了实例分割;为此文章引入instance-sensitive score map,同一个像素,因为相对位置发生了变化,选择了不同的score map的值,因此有了translation-variant。
缺点:1、非端到端的实例分割;因为无法判断instance分割的语义类别;2、 固定的224大小滑窗+ image pyramid scanning,十分耗费时间;
细节:测试训练都使用多尺度

基于像素的相对位置来进行分类,从而产生一些instance-sensitive的score map,后续通过一个简单的assembling module来得到最终的instance分割结果

在这里插入图片描述
在这里插入图片描述

具体实现上,特征提取使用VGG16网络,输出特征(H/8,W/8);第一个分支,经过两个卷积,先输出K^2个score map (K=5),用mXm的滑动窗用assemble 得到instance,再从得到的instance里面随机抽样256个,这些instance 和instance的分割gt计算loss;

第二个分支,预测分支一得到256个instance是真正的instance 的概率,计算loss;
在这里插入图片描述
在这里插入图片描述
测试阶段:
对分支一上sliding window得到的instance score map,先二值化,再用分支二的概率以及instance的box的iou来做NMS,最后选择top-N作为最终结果。

预处理上,scale jittering在多篇文章中大量运用;

SGN: Sequential Grouping Networks for Instance Segmentation [16XX]

ICCV17 ; 内容过于繁琐,且无开源代码
Insight:点成线;线成面
Method:一串子网络逐渐完成任务;
子网络1:水平以及垂直预测breakpoints;产生线的分割
子网络2:将线分割连成 联通的区域; 将对pixel的分类 降维成 对 线的分类;RNN网络 LineNet(很小);输入为9个通道
子网络3:连通区域形成最后instance; MergerNet(很小)
在这里插入图片描述
1、每个像素额外标注成background,interior,starting point,termination point
2、水平、垂直两个方向成线
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172426.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • netty权威指南读书笔记——走进java nio

    netty权威指南读书笔记——走进java nio一、linux网络IO模型:linux将所有外部设备都当作文件处理,对一个文件的读写操作通过调用内核命令执行,返回一个filedescriptor(fd文件描述符),而对于一个socket也有对应的socketFD,描述符是一个数字,指向内核中的一个结构体(文件路径,数据区属性等)。1、unix提供了5种I/O模型:a、阻塞I/O模型(默认模型):应用进程调用recvfrom后,系统调…

    2022年10月2日
  • 最短路径:Dijkstra算法(求单源最短路径)Floyd算法(求各顶点之间最短路径)[通俗易懂]

    最短路径:Dijkstra算法(求单源最短路径)Floyd算法(求各顶点之间最短路径)[通俗易懂]最短路径:在一个带权图中,顶点V0到图中任意一个顶点Vi的一条路径所经过边上的权值之和,定义为该路径的带权路径长度,把带权路径最短的那条路径称为最短路径。DiskStra算法:求单源最短路径,即求一个顶点到任意顶点的最短路径,其时间复杂度为O(V*V)如图所示:求顶点0到各顶点之间的最短路径代码实现:#include<stdio.h>#include&l…

    2022年6月22日
  • servlet到底是什么[通俗易懂]

    servlet到底是什么[通俗易懂]servlet到底是什么?对于这个问题一直云里雾里的,今天打算刨根问底。一、Servlet简介  Servlet是sun公司提供的一门用于开发动态web资源的技术。  Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:  1、编写一个Java类,实现servlet接口。  2、把开发好的Java类部署…

    2022年6月15日
  • oracle里面concat函数用法,oracle wm_concat函数用法-Oracle

    oracle里面concat函数用法,oracle wm_concat函数用法-Oraclewmsys.wm_concat函数,它的作用是以’,’链接字符例子如下:SQL>createtableidtable(idnumber,namevarchar2(30));TablecreatedSQL>insertintoidtablevalues(10,’ab’);1rowinsertedSQL>insertintoidtablevalues…

    2022年5月18日
  • 自学java心路历程(学了半年。。。直到更久。。。。。)[通俗易懂]

    自学java心路历程(学了半年。。。直到更久。。。。。)[通俗易懂]自学背景环境:我是91年的。之前在小贷行业,混了快四年,经历过3家公司倒闭,在找工作发现没什么特技,太难。毕业都近4年了。但是我觉得必须要有所改变,要学。然后听了朋友的意见,不去培训学校自己自学。自学过程:自学的是java,18年三月份的时候因为大学学过2级C语言。java基础部分是在网上找到,大概都能看懂进去,一天看个7,8个小时都OK,但是比较少敲代码,主要学的是javase。java基…

    2022年6月13日
  • Java堆结构PriorityQueue完全解析

    Java堆结构PriorityQueue完全解析在堆排序这篇文章中千辛万苦的实现了堆的结构和排序,其实在Java1.5版本后就提供了一个具备了小根堆性质的数据结构也就是优先队列PriorityQueue。下面详细了解一下PriorityQueue到底是如何实现小顶堆的,然后利用PriorityQueue实现大顶堆。PriorityQueue的数据结构PriorityQueue的逻辑结构是一棵完全二叉树,存储结构其实是一个数组。逻辑结构层次遍历的

    2022年4月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号