HRNet(v1,v2,v2p)论文语义分割笔记

原文:Deep high-resolution representation learning for visual recognition

论文链接: https://arxiv.org/abs/1908.07919v2

pytorch official code: https://github.com/HRNet

笔记时间:2020.11.22

文章最早发表在了CVRP2019,后面被顶刊TPAMI录用。

之所以要看这篇文章,是先看了OCR,看代码的过程中碰到backbone是HRNet,HRNet搭配OCR达到了很好的结果。

对目前所看到的语义分割相关的文章中可以发现,对于一个语义分割任务,首先会通过一个backbone获得一个分辨率较小的图(很多论文都会提到output stride,即输入图像尺寸经过一个网络后的尺寸的大小的比例),再对这个分辨率较小的图进行一些利用上下文语义信息的处理。

backbone的任务不仅仅适用于语义分割,最早适用于分类网路的,同时在各种计算机视觉的任务中都是基本操作。由此,诞生了一些重要的网络,例如残差的resnet,轻量级的googlenet,vgg等等,同时也包括这篇HRNet。对于上下文语义处理的步骤,最早也是出现了包括deeplab和pspnet两个经典的方法,后面也有利用注意力机制的no-local和ccnet等等。包括和HRNet搭配使用的这个OCR。

HRNet这是一篇SOTA的文章。对于视觉识别任务,包括姿态估计,语义分割等。一般的方法都是使用卷积神经网络进行不断地降采样,包括resnet和vggnet等,然后再恢复高分辨率。而HRnet的特点在于把串行的结构做成并行的,把降低分辨率的操作改成保持分辨率的操作。


Abstract

两个关键特点:

1.高分辨率和低分辨率并行连接,同步推进。

2.高低分辨率图之间不断地交换信息

高分辨率图的存在使得空间上更加精准,低分辨率图的存在使得语义上更充分。


Introduction

对于一般的分类网络来讲,通过卷积逐渐缩小图像的空间尺寸,进一步用于分类。

HRNet(v1,v2,v2p)论文语义分割笔记

对于位置敏感的计算机视觉任务是需要高分辨率表示的。hrnet在整个过程中保持高分辨率的表示。

HRNet(v1,v2,v2p)论文语义分割笔记

网络由四个阶段组成。第n个阶段包含对应于n个分辨率的n个流。通过反复的交换平行流中的信息来进行重复进行多分辨率的融合。

其他的高低分辨率融合都是通过融合low_level的高分率和低分辨率上采用获得的high_level高分辨率。而hrnet是在低分辨率的帮助下,多次融合高分辨率。

HRNetV1:只输出从高分辨率卷积流计算的高分辨率表示。

HRNetV2:结合了所有从高到底分辨率的并行流的表示。

HRNetV2p:从HRNetV2的高分辨率输出构建出multi-level representation。


Related work

学习低分辨表示:以FCN为代表,移除分类网络的全连接层。得到的低分辨率表示来获得粗略估计图,通过结合low_level的中分辨率层来达到相对精细的分割。之后的改进包括deeplab和pspnet。

恢复高分辨率表示:通过上采用过程来恢复高分辨率表示,segnet,unet,encoder-decoder,不对称上采样等等。

保持高分辨率表示

多尺度融合


Model

先通过2个3*3卷积降到1/4的resolution。

由几部分组成:

  • parallel multi-resolution convolutions
  • repeated multi-resolution fusions
  • representation head

1.parallel multi-resolution convolutions

用一个并行卷积流的方法,从第一阶段开始,逐步逐个添加高分辨到低分辨率的流。后一个阶段的并行流的分辨率由前一个阶段的分辨率和更低分辨率组成。

看论文这段话说的感觉复杂,其实看图可能更好理解一点。说白了就是有很多个阶段,越往后面,不同分辨的数量越多。在第一阶段就只有原尺寸的图,第二阶段就有两个不同分辨率图的并行继续,以此类推。

HRNet(v1,v2,v2p)论文语义分割笔记

上图中N32表示的就是第三阶段的第二个流的表示。

2.repeated multi-resolution fusions

重复融合多分辨率的模块,跨分辨率交换信息。

HRNet(v1,v2,v2p)论文语义分割笔记

这是一个融合三分辨率的例子。可以看出三个输出中的每一个输出都是与三个输入相关的,即 R r o = f 1 r ( R 1 i ) + f 2 r ( R 2 i ) + f 3 r ( R 3 i ) R^o_r= f_{1r}(R^i_1)+f_{2r}(R^i_2)+f_{3r}(R^i_3) Rro=f1r(R1i)+f2r(R2i)+f3r(R3i)

同时也会得到一个额外的输出, R 4 o = f 14 ( R 1 i ) + f 24 ( R 2 i ) + f 34 ( R 3 i ) R^o_4= f_{14}(R^i_1) + f_{24}(R^i_2) + f_{34}(R^i_3) R4o=f14(R1i)+f24(R2i)+f34(R3i)

这些个f就是一系列操作,也就是图中所示的卷积上采样等操作。对高分辨率到低分辨率,低分辨率到高分辨率,同分辨率到同分辨率,操作均不同,具体可见上图。

3.representation head

有三种不同的输出表示:

HRNet(v1,v2,v2p)论文语义分割笔记

对于最后的结果的四分辨率流,根据如何去利用这个流分成了三种不同的方式。

(a):只输出高分辨率 (人体姿态估计)

(b):拼接四个流的输出 (语义分割)

©:在b的基础上形成特征金字塔表示(对象检测)

4.组装起来

HRNet(v1,v2,v2p)论文语义分割笔记

再次回过头以完整和组装的视角来看这张图的时候,会更清晰一些。网络的机构体现了最初摘要中所说的并行的意思。有并行卷积流同步的向前推进。上图结构分为4个stage,每个stage的每个分辨率都要先经过四次残差卷积。一个stage中,通过3*3的卷积操作使得从高分辨率到低分辨率。分辨率越小越宽(channel数越多)。呈现2的指倍数增长,最小的分辨率的宽度是最大的八倍。


在语义分割中的应用

这个方法可以用在很多计算机视觉领域,我只看了语义分割的部分。

HRNet(v1,v2,v2p)论文语义分割笔记

就像上图所示,对四个分辨率的输出进行拼接。这就是就一个维度为15C(C是最大的那个分辨率的channel数,1+2+4+8=15)

对其进行softmax再上采样四倍得到与原图一样大小的分割图。

HRNet(v1,v2,v2p)论文语义分割笔记

HRNet(v1,v2,v2p)论文语义分割笔记

HRNet(v1,v2,v2p)论文语义分割笔记

HRNet(v1,v2,v2p)论文语义分割笔记

可见,在各大主流的数据集上都体现了HRNet+ORC的强势


Conclusions

作者总结了HRNet和其他的不同。高低分辨率是并联而不是串联,高分辨率是remain的而不是recover的,具有 strong position sensitivity(对位置敏感的任务好)。

将来的主要工作是希望将HRNet运用到各个计算机视觉的任务中。