CVPR 2020 DSRL、HANet、SPNet、CPNet

笔记笔记笔记

DSRL

Dual Super-Resolution Learning for Semantic Segmentation
超分辨率+语义分割,用超分辨率图来指导语义分割任务(不止是语义分割任务,对其他视觉相关的任务也具有效果提高)
现有的语义分割方法往往使用空洞卷积或encoder-decoder的结构来保持高分辨率表示,会丢失一些信息,同时也会增加更多的计算成本,一旦降低数据的分辨率,网络的准确率会变低。
本文提出了一种双超分辨率学习模型DSRL,在以低分辨率图像为输入的情况下,依旧能够保持较高的准确率,且不会有额外的计算成本。该模型包括语义分割超分辨率SSSR,单图像超分辨率SISR和特征相似性FA3个模块。

Structure

在这里插入图片描述

  • SSSR
    在传统语义分割模型的最后额外增加一层上采样模块,最后将输出2倍原图大小的语义分割图
  • SISR
    该模块的目的是根据低分辨率的输入重建高分辨率图像,在inference的时候会将整个模块移除。该模块的encoder部分与SSSR是共享的,decoder部分采用了ESPCN的设计。最后的输出与SSSR的输出尺寸一致。
  • FA
    由于SISR比SSSR包含更完整的结构信息,因此引入特征相似性学习来指导SSSR学习高分辨率表示。语义分割图与超分辨率图之间的相似性计算:seg特征图上每两个像素位置对应的特征向量之间的相似度,以及sr图上对应两像素位置的特征向量之间的相似度的2范式的均值。
    L f a = 1 W ′ 2 H ′ 2 ∑ i = 1 W ′ H ′ ∑ j = 1 W ′ H ′ ∥ S i j s e g − S i j s r ∥ q S i j = ( F i ∥ F i ∥ p ) T ⋅ ( F j ∥ F j ∥ p ) \begin{array}{c} L_{f a}=\frac{1}{W^{\prime 2} H^{\prime 2}} \sum_{i=1}^{W^{\prime} H^{\prime}} \sum_{j=1}^{W^{\prime} H^{\prime}}\left\|S_{i j}^{s e g}-S_{i j}^{s r}\right\|_{q} \\ S_{i j}=\left(\frac{F_{i}}{\left\|F_{i}\right\|_{p}}\right)^{T} \cdot\left(\frac{F_{j}}{\left\|F_{j}\right\|_{p}}\right) \end{array} Lfa=W2H21i=1WHj=1WHSijsegSijsrqSij=(FipFi)T(FjpFj)

Loss Function

​ 损失函数共包含三个部分, L c e L_{ce} Lce为网络生成的语义分割图的交叉熵损失, L m s e L_{mse} Lmse为SISR生成的超分辨率图的mse损失, L f a L_{fa} Lfa为FA模块计算的特征相似性. 由于内存开销较大,fa损失在原图输入的1/8特征图上计算。
L = L c e + w 1 L m s e + w 2 L f a \begin{array}{c} L=L_{c e}+w_{1} L_{m s e}+w_{2} L_{f a} \end{array} L=Lce+w1Lmse+w2Lfa

L c e = 1 N ∑ i = 1 N − y i log ⁡ ( p i ) L_{c e}=\frac{1}{N} \sum_{i=1}^{N}-y_{i} \log \left(p_{i}\right) Lce=N1i=1Nyilog(pi)

L m s e = 1 N ∑ i = 1 N ∥ S I S R ( X i ) − Y i ∥ 2 L_{m s e}=\frac{1}{N} \sum_{i=1}^{N}\left\|S I S R\left(X_{i}\right)-Y_{i}\right\|^{2} Lmse=N1i=1NSISR(Xi)Yi2

HANet

Cars Can’t Fly up in the Sky: Improving Urban-Scene Segmentation Height-driven Attention Networkst
城市道路场景中不同高度的语义类别具有很大的差异性,经过统计可以发现,汽车、道路、行人等语义类别只有在较低的位置会出现,其余的语义类别的分布情况如下图。
相较于考虑每两个像素之间关系的基于注意力的方法,HANet更加轻量化,与channel-wise attention的方法相比,考虑了更多的信息。
在这里插入图片描述

Structure

在已有语义分割网络的基础上添加一条支路,用于计算Attention Map,Attention Map的计算需要经过如图所示的(a)Width-wise pooling、(b)Interpolation for coarse attention 、©computing height-driven attention map、(d)computing height-driven、(e)adding positional encoding。
在得到Attention Map A A A后,将 A A A在水平方向上复制 W h W_h Wh份,然后对语义分割主干网络得到的特征图 X h X_h Xh进行加权。
X ~ h = F HANet  ( X ℓ ) ⊙ X h = A ⊙ X h \tilde{\mathbf{X}}_{h}=\mathrm{F}_{\text {HANet }}\left(\mathbf{X}_{\ell}\right) \odot \mathbf{X}_{h}=\mathbf{A} \odot \mathbf{X}_{h} X~h=FHANet (X)Xh=AXh
在这里插入图片描述

  • Width-wise pooling
    对不同高度位置的数据进行池化(mean/max)
    Z : , h = [ 1 W ∑ i = 1 W X 1 , h , i ; … ; 1 W ∑ i = 1 W X C , h , i ] \mathbf{Z}_{:, h}=\left[\frac{1}{W} \sum_{i=1}^{W} \mathbf{X}_{1, h, i} ; \ldots ; \frac{1}{W} \sum_{i=1}^{W} \mathbf{X}_{C, h, i}\right] Z:,h=[W1i=1WX1,h,i;;W1i=1WXC,h,i]

  • Interpolation for coarse attention
    为了简化attention map的计算,通过下采样将 Z Z Z插值到 Z ^ \hat Z Z^中,粗化注意力矩阵。

  • Computation of height-driven attention map
    A = G u p ( σ ( G C o n v N ( ⋯ δ ( G C o n v 1 ( Z ^ ) ) ) ) ) \mathbf{A}={\mathbf{G}}_{\mathrm{up}}\left(\sigma\left({\mathbf{G}}_{\mathrm{Conv}}^{N}\left(\cdots \delta\left({\mathrm{G}}_{\mathrm{Conv}}^{1}(\hat{\mathbf{Z}})\right)\right)\right)\right) A=Gup(σ(GConvN(δ(GConv1(Z^)))))
    其中, σ \sigma σ为sigmoid函数, δ \delta δ为ReLU, G C o n v i \mathrm{G}_{\mathrm{Conv}}^{i} GConvi为第 i i i个一维卷积层,原文网络中共有3层卷积操作, G C o n v 1 ( Z ^ ) = Q 1 ∈ R C ℓ r × H ^ \mathrm{G}_{\mathrm{Conv}}^{1}(\hat{\mathbf{Z}})=\mathrm{Q}^{1} \in \mathbb{R}^{\frac{C_{\ell}}{r} \times \hat{H}} GConv1(Z^)=Q1RrC×H^ 用于减少通道数, G Conv  2 ( δ ( Q 1 ) ) = Q 2 ∈ R 2 ⋅ C ℓ r × H ^ \mathrm{G}_{\text {Conv }}^{2}\left(\delta\left(\mathbf{Q}^{1}\right)\right)=\mathbf{Q}^{2} \in \mathbb{R}^{2 \cdot \frac{C_{\ell}}{r} \times \hat{H}} GConv 2(δ(Q1))=Q2R2rC×H^ G Conv  3 ( δ ( Q 2 ) ) = A ^ ∈ R C h × H ^ \mathrm{G}_{\text {Conv }}^{3}\left(\delta\left(\mathbf{Q}^{2}\right)\right)=\hat{\mathbf{A}} \in \mathbb{R}^{C_{h} \times \hat{H}} GConv 3(δ(Q2))=A^RCh×H^ 用于生成attention map. r r r 为缩减系数

  • Computation of height-driven attention map
    计算attention map时,采用了位置编码
    P E ( p , 2 i ) = sin ⁡ ( p / 10 0 2 i / C ) P E ( p , 2 i + 1 ) = cos ⁡ ( p / 10 0 2 i / C ) P E_{(p, 2 i)} =\sin \left(p / 100^{2 i / C}\right) \\ P E_{(p, 2 i+1)} =\cos \left(p / 100^{2 i / C}\right) PE(p,2i)=sin(p/1002i/C)PE(p,2i+1)=cos(p/1002i/C)

    p = 1 , 2 , . . . H ^ − 1 p=1,2,...\hat H-1 p=1,2,...H^1 C C C为通道数, i = 1 , 2 , . . . C i=1,2,...C i=1,2,...C
    Q ~ = Q ⊕ P E \tilde{Q}=Q \oplus P E Q~=QPE

DeepLab V3+HANet

实现细节
在这里插入图片描述在这里插入图片描述

SPNet

Strip Pooling: Rethinking Spatial Pooling for Scene Parsing
空间池化在语义分割任务中发挥着重要的作用,传统的池化层使用的核大小往往是 k × k k\times k k×k的,本文在此基础上提出了使用 k × 1 k\times 1 k×1 1 × k 1\times k 1×k这样的狭长的核进行特征池化的方法,strip pooling,并提出了SPNet,比较了strip pooling与传统池化层的作用。
现有的语义分割方法大多通过叠加局部卷积和池化等操作来实现,但受限于有效感受野的大小,很难学习复杂的场景。目前,提高网络远程依赖关系建模能力的方法有:self-attention机制、non-local模块、空洞卷积、全局/金字塔池化等,但这些通常会消耗大量的存储空间。作者认为方形的核区域会加入不相干区域的特征,不利于网络的学习。
strip pooling的核相比于传统的方形核能够捕获更多的远程特征信息,减少无关信息的干扰。基于strip pooling的Strip Pooling Module (SPM) 首先对水平特征和垂直特征分别进行编码,然后进一步细化。

Structure

  • strip pooling
    与传统的二维池化不同的是,strip pooling每次会求每行或每列所有元素的均值。得益于strip pooling狭长的特征,更利于学习长距离特征,捕获细节特征
    y i h = 1 W ∑ 0 ≤ j < W x i , j , y j v = 1 H ∑ 0 ≤ i < H x i , j y_{i}^{h}=\frac{1}{W} \sum_{0 \leq j<W} x_{i, j}, y_{j}^{v}=\frac{1}{H} \sum_{0 \leq i<H} x_{i, j} yih=W10j<Wxi,jyjv=H10i<Hxi,j
  • Strip Pooling Module
    通过核大小为 H × 1 H\times 1 H×1 1 × W 1\times W 1×W分别得到 y h ∈ R C × H \mathbf{y}^{h} \in \mathbb{R}^{C \times H} yhRC×H y w ∈ R C × v \mathbf{y}^{w} \in \mathbb{R}^{C \times v} ywRC×v后,使用kernel size为3的一维卷积操作结合相邻位置的信息进一步提取特征,随后通过下式融合两个特征图 y h \mathbf{y}^{h} yh y v \mathbf{y}^{v} yv
    y c , i , j = y c , i h + y c , j v y_{c,i,j}=y^h_{c,i}+y^v_{c,j} yc,i,j=yc,ih+yc,jv
    最后通过如下操作得到output:
    z = s c a l e ( x , σ ( f ( y ) ) ) z=scale(x,\sigma(f(y))) z=scale(x,σ(f(y)))
    在这里插入图片描述
  • Mixed Pooling Module
    传统的卷积核用于学习近距离特征,strip pooling用于学习远距离特征(上采样时使用双线性插值)
    在这里插入图片描述

ResNet+MPM

​ 在实现语义分割任务时,以resnet-50为backbone的网络为例,在resnet每一个block中的 3 × 3 3\times 3 3×3卷积操作后加入了SPM,并在最后一个stage的基础上使用一层 1 × 1 1\times1 1×1的卷积操作调整通道,之后加入了两层MPM(实现细节如下图),最后添加了一层卷积操作用来得到语义分割图。
在这里插入图片描述

Visualize

在这里插入图片描述

CPNet

Context Prior for Scene Segmentation
上下文依赖在场景理解中起着非常重要的作用,大多数利用上下文相关性的来改进语义分割的方法,没有考虑到不同类型的上下文相关性,在没有明确区分上下文信息的类内类间情况下,直接将上下文信息进行融合,这将会导致不同上下文关系对分割效果的影响。
本文提出了Context Prior用于建模同类像素点之间的关系,设计了Context Prior Network,并提出了 Affinity Loss 来指导网络对上下文关系和语义分割的学习。
在这里插入图片描述

  • Affinity Loss
    根据已知的标签信息学习上下文先验。为了便于网络的学习,首先根据已知的标签信息构建亲和力图affinity map。
    将ground truth L L L下采样为与输入图像 I I I得到的 H × W H\times W H×W的特征图 X X X相同大小的 L ~ \tilde L L~,然后使用one-hot编码 L ~ \tilde L L~得到 L ^ \hat L L^,大小为 ( H × W × C ) (H\times W\times C) (H×W×C) C C C为语义类别数,然后将 L ^ \hat L L^reshape为 N × C N\times C N×C,亲和力矩阵可以表示为 A = L ^ L ^ T A=\hat L \hat L ^T A=L^L^T A A A编码了哪些像素是同一类别,如果原图中第 i i i个像素与第 j j j个像素同一类别 A A A中第 i i i行,第 j j j列的值为1。
    对于先验矩阵中的每一个像素都是一个二分类问题,设预测得到的先验矩阵为 P P P
    L u = − 1 N 2 ∑ n = 1 N 2 ( a n l o g p n + ( 1 − a n ) l o g ( 1 − p n ) ) \mathcal{L}_u=-\frac{1}{N^2}\sum^{N^2}_{n=1}(a_nlogp_n+(1-a_n)log(1-p_n)) Lu=N21n=1N2(anlogpn+(1an)log(1pn))
    上式只考虑了孤立像素的情况,本文将类内像素和类间像素视为两个整体来分别对关系进行编码,基于二元交叉熵损失设计了全局项:全局损失:
    T j p = l o g ∑ i = 1 N a i j p i j ∑ i = 1 N p i j T j r = l o g ∑ i = 1 N a i j p i j ∑ i = 1 N a i j T j s = l o g ∑ i = 1 N ( 1 − a i j ) ( 1 − p i j ) ∑ i = 1 N ( 1 − a i j ) L g = − 1 N ∑ j = 1 N ( T j p + T j r + T j s ) \mathcal{T}^p_j=log\frac{\sum^N_{i=1}a_{ij}p_{ij}}{\sum^N_{i=1}p_{ij}}\\ \mathcal{T}^r_j=log\frac{\sum^N_{i=1}a_{ij}p_{ij}}{\sum^N_{i=1}a_{ij}}\\ \mathcal{T}^s_j=log\frac{\sum^N_{i=1}(1-a_{ij})(1-p_{ij})}{\sum^N_{i=1}(1-a_{ij})}\\ \mathcal{L}_g=-\frac{1}{N}\sum_{j=1}^N(\mathcal{T}^p_j+\mathcal{T}^r_j+\mathcal{T}^s_j) Tjp=logi=1Npiji=1NaijpijTjr=logi=1Naiji=1NaijpijTjs=logi=1N(1aij)i=1N(1aij)(1pij)Lg=N1j=1N(Tjp+Tjr+Tjs)
    其中, T j p \mathcal{T}^p_j Tjp, T j r \mathcal{T}^r_j Tjr, T j s \mathcal{T}^s_j Tjs分别表示类内预测值(精度),第 j j j行的真实类内率(召回率)和真实类间率(特殊性),完整的亲和力损失定义如下:
    L p = λ u L u + λ g L g \mathcal{L}_p=\lambda_u\mathcal{L}_u+\lambda_g\mathcal{L}_g Lp=λuLu+λgLg
    其中, L p \mathcal{L}_p Lp L u \mathcal{L}_u Lu L g \mathcal{L}_g Lg分别表示亲和力损失、一元损失和全局损失,根据经验设 λ u = λ g = 1 \lambda_u=\lambda_g=1 λu=λg=1.
    在这里插入图片描述
  • Context Prior Layer
    对于输入特征 X X X通过聚集模块得到 X ~ \tilde X X~ X ~ \tilde X X~通过 c o n v 1 × 1 + b n + s i g m o i d conv1\times 1+bn+sigmoid conv1×1+bn+sigmoid学习到先验矩阵 P P P,在Affinity Loss的监督下,学习到的 P P P可以编码类内关系和类间关系,类内像素可以由 Y = P X ~ Y=P\tilde X Y=PX~得到,类间像素可以由 Y ‾ = ( 1 − P ) X ~ \overline Y=(\mathcal{1}-P)\tilde X Y=(1P)X~得到,最终,将类内、类间及输入特征concatenate到一起 F = C o n c a t ( X , Y , Y ‾ ) \mathcal{F}=Concat(X,Y,\overline Y) F=Concat(X,Y,Y)
  • Aggregation Module
    上下文先验矩阵需要一些局部空间特征来辅助学习语义类别,该模块设计了一个在空间和深度上都可以分离的卷积操作,fully separable convolution。
    空间分离:使用大卷积核是学习更多空间特征的方法之一,但大卷积核的计算成本高,因此使用 k × 1 k\times 1 k×1 1 × k 1\times k 1×k来代替 k × k k\times k k×k卷积。
    深度分离:不同的卷积核负责不同的通道
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值