UPSNet:A Unified Panoptic Segmentation Network
原文链接: https://blog.csdn.net/weixin_37142859/article/details/90204051
文章目录
论文: https://arxiv.org/pdf/1901.03784.pdf
代码: https://github.com/uber-research/UPSNet
UPSNet网络结构
UPSNet总体结构如下图所示,包含RPN、PymaridMaskTarget生成、Semantic Segmentatin Head、Instance Segmentation Head和Panoptic Segmentation Head。
- Backbone Network:特征提取采用ResNet-FPN
- RPN:判断Proposals是否为前景,并生成bbox的坐标变换系数
- PymaridMaskTarget生成:本部分不含计算参数,用于生成前景rois
- Semantic Segmentation Head:包含FCN-Head,语义分割分支
- Instance Segmenation Head:包含RCNN,Mask Branch,预测实例的mask
- Panoptic Segmentation Head:包含SegTerm和MaskTerm,处理整合语义预测和实例的预测
以下逐一介绍各个部件
1. ResNet-FPN
特征的提取采用ResNet后接FPN,FPN的使用充分利用了不同level特征。简图和详细的结构图如下。ResNet每个block的输出(记为 [ M a t h P r o c e s s i n g E r r o r ] P 2 P 2 [Math Processing Error]P2 P_2 [MathProcessingError]P2P2P5通过一个步长为2,size为1*1的最大池化得到。
整个模块的输出为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
5.Instance Segmentation Head
5.1. RCNN
RCNN分支用于预测512个rois(前后景)的类别和边框
- FPN的四个分支结合RPN生成的rois,使用多层次的RIAlign得到了
[
M
a
t
h
P
r
o
c
e
s
s
i
n
g
E
r
r
o
r
]
(
512
,
256
,
7
,
7
)
(
512
,
256
,
7
,
7
)
[Math Processing Error](512,256,7,7) (512,256,7,7)
[MathProcessingError](512,256,7,7)(512,256,7,7)ti表示第i个thing类
6.2 MaskTerm
本模块的作用是取出mask分支中每个检测到实例的logit
- mask大小为28*28,将其reshape成对应b-box的大小,将box内的值放到初始化为0的mask logit对应box位置处
如下图所示.
6.3 计算 panoptic logits
panoptic logits 由三项组成,语义分割部分seg-logits、实例分割部分inst_logits、和未知类预测部分void-logits。其中未知类是由gt-box中随机选出30%作为未知的类别,在本文所用的例子中,原本gt-box共有8个,现在有三个b-box被归为未知类.
void-logits
void-logits根据语义分割实例类部分logits(8,H/4,W/4)最大值减去5个b-box的logits(5,H/4,W/4)的最大值,得到(1, H/4, W/4).void-logits的计算代码如下:
void_logits = torch.max(fcn_output['fcn_score'][:, (config.dataset.num_seg_classes - config.dataset.num_classes + 1):, ...], dim=1, keepdim=True)[0] - torch.max(seg_inst_logits, dim=1, keepdim=True)[0]
- 1
inst-logits
inst-logtis则是将MaskTerm和SegTerm得到的mask-logits和seg-ins-logits直接相加。综合了两部分的预测,相当于做了一个模型融合。
inst_logits = seg_inst_logits + mask_logits
- 1
seg-logits
seg-logits则是语义分割部分stuffs部分的logtis
panoptic-logits
panoptic-logots直接将三个部分concat在一起。shape=(17, H/4, W/4), 17=11+5+1
panoptic_logits = torch.cat([seg_logits, inst_logits, void_logits], dim=1)
- 1
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
</div>