Gated-SCNN: Gated Shape CNNs for Semantic Segmentation

代码:https://github.com/nv-tlabs/GSCNN/blob/master/network/gscnn.py
论文:ICCV_2019
翻译:论文阅读笔记

如何将知识分离出来?

作者在论文中argue到,CNN在设计的过程中有一个固有的无效性,因为他们会将color,shape和纹理信息一起处理(感觉可以找个时间介绍一些,图像中的color,shape或者texture信息对于图像的特征提取有哪些帮助作用)。但是实际上这些不同的信息,比如color或者shape,texture对于识别来说的话,应该是包含不同的数量的信息的。作者举了一个例子,一个人刚开始看一个物体的时候,需要看到完整地,细节地物体的边界,从而能够得到具有辨别性的shape编码。但是color和texture就相对包含一些low-level的信息,意思是,对于物体的识别就没有轮廓那么重要。这种思路实际上可以解释为什么resnet需要residual skip来提升网络的性能,或者是dense connection。以你为,通过添加这种additional connectivity能够帮助不同类型的信息通过不同scale的深度进行融合流通(个人感觉这个说服力对于解释为什么resnet work比较有说服力)。

这篇文章做了啥?

作者说到,在这篇文章中,他们提出了一个新的,two-stream CNN,能够显式的讲shape information独立成一个processing branch。两个stream,分别是传统cnn的stream,另外一个是shape stream,能够并行的处理信息。除了非常顶层的layer,作者说不允许两个stream信息的融合。
作者说到这篇文章的主要核心就是用一个门来控制两路信息的交互。具体来讲就是,作者利用传统cnn stream的high-level的information来denoise前几层shape stream的activations。这么一操作,shape stream能够有效的处理相关的信息。而且只使用比较浅的网络。为了能够使得shape information,作者在shape stream上添加了语义边界loss。我们更进一步的利用了一个新的loss function,来使得segmentation result和gt进行对齐。
并且作者还说道,他们的GSCNN是plug-and-play的,可以用在任何cnn上。作者做了大量的实验,比deep lab-v3的结果在miou指标上高了1.5个百分点,在f-boundary指标上高了4%个百分点。而且作者说他们的实验结果在一些很小的物体上的表现性能会更好,比如电线杆,交通标识或者交通灯等。

相关工作的介绍

语义分割进展

作者貌似说文献6已经有人用边界信息来refine实验结果,但是和他们不一样的是,作者是inject the learned boundary information到cnn的中间层,而不是最终的结果。作者还指出,之前文献42也用了two stream network,但是他们是恢复由pooling降低的高分辨率的feature。文献15,35,48提出了用于学习结构信息pixel级别的仿射信息,他们主要用来学习一个特定信息传播模块,作者提出的是学习高质量的shape information。

multitask learning

有一些工作是用来提出互补任务的学习。作者的目标并不是训练一个多任务的网络,而是能够通过利用分割和边界对偶性质来加强结构化信息的表示。文献12,4能够同时学习分割和边界检测的结果。31和40能够学习intermediate的表示来辅助分割结果。但是这些工作对于边界的约束只在loss function上,作者直接将边界信息注入到网络的中间层去,并且提出了一个对偶任务loss来同时refine 分割的mask和边界预测的结果。

gated convolution

最近的在语言模型上的研究表明卷积上的gating mechanism是有效果的,比如文献14提出了取代循环网络中的循环connection的gated temporal convolution。文献53提出了一个soft-gating的图像不全的机制。文献46提出了gated pixelcnn来做图像生成。这里作者用gated covolution opreator来做语义分割以及控制两个stream信息之间的流动。

Gated Shape CNN

相当于是作者把shape这一个分支独立出来,因为考虑到shape对于分割而言是非常具有意义的,其实对于很多任务而言都是具有意义的,比如双目深度估计或者是单目深度估计,都是比较有意义的。作者整体的pipline如下

GSCNN 结构
Gated Convolutional Layer结构

loss

作者定义了四个loss,对于分割或者是edge检测的结果,分别定义了cross entropy loss。然后还定义了对偶loss,关于对偶loss,作者的两个对偶loss分别定义如下


另外一个对偶loss,作者说探究了边界以及分割的结果,也并没有看太懂,但是一个值得学习的点就是作者用一个可微的函数替代了argmax操作,感觉这个还是挺值得学习的。

你可能感兴趣的:(Gated-SCNN: Gated Shape CNNs for Semantic Segmentation)