从公众号推广里了解到的这篇论文,对现有的语义分割网络进行模块添加(分辨率处理)后就能提升最终的性能。
看完整篇后,个人理解是(不一定正确,若有错误请指出),作者在原有语义分割模型后面,又加了一层反卷积得到更大的mask图像,利用SISR模块进行高维卷积后的图像高精度表达——其实类似于图像高精度还原技术(本篇使用post-上采样)。两者因为都是反卷积生成的,可能存在很大的差异,这里就用FA进行相似度比对(主要是让SSSR模块参考SISR产生的较为精准的位置信息,从而提升语义分割的性能)来达到稳定协调的作用。
个人总结来说,其实也就是对一些网络中未充分利用的信息(这里主要强调是位置信息——pixel之间的关系等),进行一个补充输入参考,从而能提升性能。
2020 CVPR 论文:
Dual Super-Resolution Learning for Semantic Segmentation 学习
题目译为:语义分割的双重超分辨率学习,即其主要技术是针对输入图像的分辨率的处理。
源码也公开在github上,链接是:GitHub - Xilinx/DSRL
突出贡献:
1.提出两条流的超分辨率学习框架,维持高分辨率表示;在保持运行速度(inference speed)的同时提高性能。
2.DSRL是一个通用性框架,可以扩展到其他需要高分辨率表示的任务中,如人体姿态估计。
3.证明该方法在语义分割和人体姿态估计上的有效性;可以提高准确度或者降低 计算FLOPs
总体结构
一、摘要
本文描述了一种可以提高输入图片分辨率的方法,并通过实验证明,在现有的语义分割网络的基础上使用该模块,网络的性能都能得到一定的提升。
作者考虑语义分割的输入均为高分辨率的图像,导致应用时需要高额资源,并产生大量的计算成本。由此考虑设计一种简单灵活的 two-stream framework,将之称为DSRL(Dual Super-Resolution Learning)。效果为:提高分割准确度而不产生额外的计算代价。
DSRL分为三个部分来阐述:SSSR(Semantic Segmentation Super-Resolution)、SISR(Single Image Super-Resolution)、FA(Feature Affinity)。(语义分割超分辨率,单图像超分辨率,特征关联)
——在低分辨率输入情况下,用DSRL维持高分辨率表示,同时降低模型计算复杂度;易推广到其他任务如人体姿态估计(human pose estimation)。
优点总结就是:我是一个很轻便的小插件(添加后的计算负担很低),有了我,网络要不就是提高准确性(计算成本一样时);要不就降低计算成本(准确性一样时)。
二、背景
目前,有两种主流方式来维持高分辨率表示:
1.像DeepLabs一样,使用atrous卷积取代Strided 卷积。
(题外话:atrous卷积指:atrous卷积就是dilated 卷积,即空洞卷积
strided卷积指:跨步卷积,即设有步长的卷积)
2.像Unet一样的编码器-解码器框架,通过结合自上而下的路径和横向连接,产生高分辨率特征图。
以上方法均产生很大的计算成本(expensive computation cost);输入为高分辨率图像——进一步增加计算负担。
一般情况下,使用低分辨率的输入图像会降低网络的准确度:文中用图像表示使用ESPNetv2和DeepLabv3+;将输入图像从 512x1024 降到 256x512 ,准确度(accuracy)不止降了10%。
本文中,作者就考虑说,我能不能设计一个框架,满足在输入图像是低分辨率的情况下,实现在网络中保持高分辨率表示。这样一方面就能降低计算复杂度,一方面还能提高性能。
这样一个DSRL是一个双流框架(two-stream framework),包含SSSR、SISIR、FA三个模块。
基于监督式深度学习的SISR方法主要有(4):
1、pre-上采样 SR:应用传统上采样操作(如双线性bilinear、双三次插值bicubic),然后用深度卷积网络进行细化(refine)。
该框架需要较高计算成本,因为都在高维空间中运行。
2、post-上采样 SR:将上采样层放到model末端,可以大大减少计算复杂度。
3、渐进上采样 SR(progressive):以post上采样为基础,通过逐步重建高分辨率图像来降低学习难度,满足多尺度SISR需求
4、上下迭代 SR(Iterative up-and-down):利用迭代上采样和下采样层来生成中间图像,然后将他们结合起来重建最终的高分辨率图像。
本文中使用post-上采样方法。
本文中使用的多任务学习的不同点:如姿态估计和动作识别、目标检测和语义分割,这些领域中大多数的多任务模型,通常在训练和测试阶段平等对待多个任务。
而本文中:将语义分割设定为主要任务,SISR作为辅助任务,且在推理阶段(inference stage)中移除图像高分辨率分支的任务,不会产生额外的计算成本。
三、网络架构及设计
在语义分割的传统编码解码结构中,一般通过添加一个双线性上采样层,或者设计一个简单的子网络(如DeepLabv3+中采用了两个连续的上采样层来细化分割结果),可以得到与输入图像相等或稍微小一点的图像。
但本文想创造的是:比 输入图像 更高分辨率的 图像。接下来介绍核心模块。
Dual Super-Resolution Learning
如上述所说的,DSRL模块不需要计算或内存的overload就能提高性能,尤其是在输入图像为低分辨率的情况。
DSRL模块分为以下三个部分:
a.SSSR: Semantic Segmentation Super-Resolution.
对语义分割额外添加一个上采样模块来生成最终的预测掩模,整个过程被称为语义分割超分辨率(SSSR)
借用原文中描述图,本文的SSSR层由一堆反卷积层后跟BatchNorm和ReLU层实现,只需要很少的参数。
b.SISR: Single Image Super-Resolution
SISR的目标是通过低分辨率输入建立高分辨率图像。这意味着SISR可以有效重构图像的细粒度结构信息,有助于语义分割。由上图可见,SISR包含了更完整的对象结构。虽然这些结构没有明确的标出,但可以根据像素之间或区域之间的关系,有效地对它们进行分组。——这些关系可以隐式传递语义信息,从而有利于语义分割任务。故使用SISR中恢复的高分辨率特征来指导SSSR的学习,而这些细节可以通过内部像素之间的相关性或者关系来建模。
对于SISR分治,它与SSSR共享特征提取器。整个SISR分支在原始图像的监督下训练且在推理阶段自由删除。而SISR的设计也借鉴亚像素卷积[29]以减少计算量并产生高质量结果。
([29].Wenzhe Shi, Jose Caballero, Ferenc Huszár, Johannes Totz, Andrew P Aitken, Rob Bishop, Daniel Rueckert, and Zehan Wang. Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network. In CVPR, 2016. 2, 4)
在实验阶段,使用Peak Single-to-Noise Ratio(PSNR)来衡量图像重建质量,用Structural Similarity Index(SSIM)来衡量输出通向和ground truth的相似度。在CityScapes上分别实现了0.35/0.78(PSNR/SSIM)
c.FA: Feature Affinity Learning
引入FA来指导SSSR学习高分辨率表示。实际上对图像子采样成1/8大小后再进行像素的相似度匹配。
此外,在使用FA loss之前,在SSSR分支上添加一个特征转换模块(包含一个1x1卷积层后接BatchNorm和ReLU层)——减少SSSR和SISR分支中由特征分布不一致导致的训练不稳定性。
其中S^seg和S^sr分别指语义分割和SISR的相似矩阵。p和q用于规范化特征达到稳定效果。设p=2;q=1.
所以,整个网络的目标函数为
其中
,
四、实验(语义分割)
这里只大致说一些实验结果,具体可以自己看论文了解。
本文中共用两个数据集,一个是CityScapes,另一个是CamVid。本文主要对两种具有代表性的分割网络进行了消融实验:ESPNetv2和DeepLabv3+。其他一些网络也证明了该方法的有效性:PSPNet, BiseNet,DABNet(后两者为轻量级模型)。
实验使用Pytorch,且均使用小批随机梯度下降模型(mini-batch stochastic gradient descent),
momentum设为0.9,weight decay设为0.0005。学习率初始化为0.01,并使用power 为0.9的poly learning rate 策略
(LearningRate = InitialLearningRate*(1 - iter/max_iter) ^ (power) ——公式来自Keras中poly学习策略的实现_poly学习率-CSDN博客)
消融实验结果如下图:
不同分辨率输入对应准确度对比(为了证明DSRL方法在不同分辨率下均有效)
总结
本文提出了一个DSRL模型,其中SISR模块可以一定程度上恢复一些高分辨率的表达,从而辅助提高语义分割的准确性(在推理阶段,SISR模块不参与,所以不会造成计算负担)。FA模块通过详细的结构信息帮助增强高分辨率表达。效果来说,至少在作者部署的几个网络中(DeepLabv3和ESPNetv2),均能看到在相同计算量的情况下,准确度至少能提升1-2个点。
文章中也陈述过,该方法在人体姿态估计模型的性能提升上,也具有一定的效果,这里不进行陈述,想了解的还是一样,自己看论文来的快。
作者的源码还没放到github上,但有其他等不及的大佬实现了下,效果可能没到作者说的那个程度,而且存在一些疑问,但整个模块添加上后,是会提高一些准确度的。
其他人实现版本: GitHub - Dootmaan/DSRL: Implementation of CVPR 2020 Dual Super-Resolution Learning for Semantic Segmentation
(PS:本篇博客中所有的图片均截图自原paper)