笔记笔记笔记
文章目录
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=W′2H′21∑i=1W′H′∑j=1W′H′∥∥Sijseg−Sijsr∥∥qSij=(∥Fi∥pFi)T⋅(∥Fj∥pFj)
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=1∑N−yilog(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=1∑N∥SISR(Xi)−Yi∥2
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=A⊙Xh
-
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=1∑WX1,h,i;…;W1i=1∑WXC,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^)=Q1∈RrCℓ×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))=Q2∈R2⋅rCℓ×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~=Q⊕PE
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=W10≤j<W∑xi,j,yjv=H10≤i<H∑xi,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} yh∈RC×H和 y w ∈ R C × v \mathbf{y}^{w} \in \mathbb{R}^{C \times v} yw∈RC×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=1∑N2(anlogpn+(1−an)log(1−pn))
上式只考虑了孤立像素的情况,本文将类内像素和类间像素视为两个整体来分别对关系进行编码,基于二元交叉熵损失设计了全局项:全局损失:
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=log∑i=1Npij∑i=1NaijpijTjr=log∑i=1Naij∑i=1NaijpijTjs=log∑i=1N(1−aij)∑i=1N(1−aij)(1−pij)Lg=−N1j=1∑N(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=(1−P)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卷积。
深度分离:不同的卷积核负责不同的通道