6、 SegNet
用于语义分割的网络通常是将用于分类的网络进行全卷积化而来的,这带来了空间分辨率下降(网络存在降采样)的问题,从而生成较为粗糙的分割结果。此外,还需要将低分辨率的结果上采样到原图大小,这个还原的过程即解码过程。大部分的用于分割的网络都有相同或相似的encoder network,之所以会产生不同精度的分割结果,关键在于decoder network的不同。作者分析一些网络的解码过程,提出了SegNet。SegNet的encoder network为VGG16(移除了全连接层),在decoder network里依靠encoder network的max pooling层所产生的最大值位置索引对输入进行upsample(无需学习),得到稀疏的feature maps,然后对稀疏的feature maps进行卷积致密。每个decoder对应一个encoder。最后接一个softmax分类器。
图7 SegNet结构图示。没有全连接层。解码器使用编码器传输的池化指数对其输入进行上采样,以产生一个或多个稀疏的特征图。然后,它与一个可训练的滤波器组进行卷积,使特征图密集化。最终的解码器输出的特征图送入一个softmax分类器进行像素级分类
图7是SegNet的网络结构,其中蓝色代表卷积+Batch Normalization+ReLU,绿色代表max-pooling,红色代表上采样,黄色是Softmax。SegNet与FCN的对应结构相比体量要小很多,这主要得益于SegNet中为了权衡计算量而采取的操作:用记录的池化过程的位置信息替代直接的反卷积操作。具体如图8所示。图8中左侧是SegNet使用的解码方式,右侧是FCN对应的解码方式。可以看到,SegNet的做法是先根据位置信息生成稀疏的特征图,再利用后续的卷积计算恢复密集特征图。而FCN则直接利用反卷积操作求得上采样后的特征图,再将其与编码器特征图相加。
图8 SegNet和FCN解码器说明。a、b、c、d对应于特征图中的数值。SegNet使用最大集合指数对特征图进行上采样(无需学习),并与可训练的解码器滤波器组进行融合。FCN通过学习对输入的特征图进行上采样,并添加相应的编码器特征图以产生解码器输出。这个特征图是相应编码器的max-pooling层(包括子采样)的输出
当前SOTA!平台收录SegNet共6个模型实现。
项目 | SOTA!平台项目详情页 |
SegNet | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/segnet |
7、 Instance-Aware Segmentation
本文的出发点是做Instance-aware Semantic Segmentation,具体的,作者将其分为三个子任务来做:1) Differentiating instances 实例区分;2) Estimating masks 掩码估计;3) Categorizing objects分类目标。通过这种分解,作者提出了如下的多任务学习框架,即:Multi-task Network Cascades (MNCs),示意流程如图9。
图9 用于实例感知的语义分割的多任务网络级联。右上角是一个简化的图示
Regressing Box-level Instances
第一阶段,回归出object的bbox(bounding box),这一阶段的网络结构和loss都参照Region Proposal Networks (RPNs),RPNs通过全卷积网络预测object的bbox和置信度,在feature map后紧跟两个1x1卷积用于回归bbox以及判定是否为前景。具体损失函数如下:
B是这个阶段的网络输出,代表一系列的bbox :
Regressing Mask-level Instances
第二阶段,将共享的features和第一阶段的bbox作为输入,为每个bbox输出像素级的mask。通过RoI pooling将每个bbox的特征提取成14x14的固定大小特征,再加两个全连接层,第一个全连接层将维度减小到256层,第二个全连接层回归出像素级的mask,其结果由一个m x m的二维向量表示。损失函数如下:
该阶段的输出M代表该阶段的网络输出,表示一系列mask,M={M_i},M_i是用sigmoid回归到[0,1]的m^2 维的逻辑回归输出。
Categorizing Instances
第三阶段,将共享的features和第一阶段的bbox、第二阶段的mask作为输入,为每个实例输出类别置信度。第一阶段给定预选框并用RoI pooling提取feature,第二阶段预测实例的mask,导致feature专注于预测mask的前景,像素级masked feature 计算公式如下:
M_i为本阶段输出的Mask。将mask-based和box-based的pathway连接之后用softmax对N个object类别和1个背景类进行分类。损失函数如下:
整个模型的级联的损失函数为:
最后,作者将级联模型扩展到MNC更多阶段。增加了一个4(N+1)-d fc层,用于回归class-wise bounding boxes,它与分类器层是同级关系。在推理过程中,首先运行完整3阶段的网络,并在第3阶段获得回归的box。然后,这些boxes被视为新的建议。第2和第3阶段在这些建议上第二次执行。这实际上包括了5个阶段的推理。五阶段过程如图10所示。第4和第5阶段与第2和第3阶段的结构相同,只是它们使用第3阶段的bounding box作为新的建议。
图10 5阶段的级联。在第三阶段,由box回归层更新的bounding box被用作第四阶段的输入
当前SOTA!平台收录Instance-Aware Segmentation共1个模型实现。
项目 | SOTA!平台项目详情页 |
Instance-Aware Segmentation | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/instance-aware-segmentation |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。