CPNet:Context Prior for Scene Segmentation(CVPR 2020)论文笔记

目录

论文解读(解读完毕,坚持才能胜利)

Abstract

Introduction

1、Affinity Loss(相似度损失)

2、Ideal Affifinity Map(理想的相似度图)

3、Context Prior Layer

4、Aggregation Module

Network Architecture

Experimental

网络结构

数据增强

优化器

推理阶段(预测阶段)

代码复现( tf 进行中)


论文解读

Abstract

识别上下文关系有助于场景理解,同一类别之间的相关性(类内上下文)和不同类别之间的差异性(类间上下文)使特征表示具有更强的鲁棒性,减少了可能类别的搜索空间。

在ADE20K上达到46.3%的mIoU,在PASCAL-Context上达到53.9%的mIoU,在Cityscapes城市景观的mIoU率为81.3%

Introduction

FCN提供的上下文信息不足,有很大的改进空间。现有的很多增强增强上下文信息的方法主要有两种:

  • 金字塔(Pyramid Method):捕获同类上下文关系,忽略不同类别的上下文相关性。在场景混淆时候就会出现捕捉信息不准确。
  • 注意力机制(Attention-based aggregation Method):捕获不同类之间的关系,聚合异构上下文信息。但是缺乏明确的规则化,对注意机制的关系描述不够清晰,在没有先验知识的情况下,无法有效区分混乱的空间信息,导致预测的准确率较低。比如桌子和床颜色一致的时候。
CPNet:Context Prior for Scene Segmentation(CVPR 2020)论文笔记_第1张图片 (b) 金字塔机制:用于捕捉类内关系,类间混淆容易出问题
(e) 注意力机制:用于捕捉类间关系,类内混淆容易出问题

确定的上下文依赖关系有助于网络理解场景,有助于网络理解场景信息。构建上下文先验(Context Prior)这个东东~来为类内和类间依赖关系建模,将上下文先验(the context prior)构造成一个二分类器,用于区分当前像素属于同一类别的像素,而反向的先验(the reversed prior)可以聚焦于不同类别的像素。具体操作:首先使用一个全卷积网络来生成两个Map:(a、feature map和b、相应的prior map)。其中,对于a、feature map中的每个像素,先验映射(prior map)可以有选择地突出属于同类的其他像素,从而聚合类内上下文;同时,反向先验(reversed prior)可以聚合类间上下文。为了把该模块嵌入网络中,采用包含有Affinity Loss(相似度损失)的Context Prior Layer(上下文先验层)来监督先验的学习。同时,上下文先验(Context Prior)也许需要空间信息来解释推理这些关系。为此,文章设计Aggregation Module(聚合模块),该模块采用完全可分离卷积(空间和深度维度都分离)来有效聚合空间信息。

为了证明上下文先验有效性,设计如上描述功能的全卷积网络,称其为:CPNet。如下图

CPNet:Context Prior for Scene Segmentation(CVPR 2020)论文笔记_第2张图片 Figure 2. CPNet总览
Aggregation ModuleI、deal Affinity Map、Context Prior Map、Affinity Loss( 相似度损失)
  • 1、Affinity Loss(相似度损失)

网络很难对孤立的像素点进行上下文信息建模。为了显式地规范化网络以建模类别之间的关系,我们引入了Affinity Loss(相似度损失)。对于图像中的每个像素,这种损失迫使网络考虑相同类别的像素(内上下文)和不同类别的像素(内上下文)。【注:这个loss需要其他map进行统一计算,在此先点明,相似度图描述时给出计算公式】

给定一个输入的ground truth,我们可以知道每个像素的“context prior”(即“上下文先验”)。哪些像素属于同一类别,哪些不属于同一类别)。因此,我们可以根据ground truth来引导网络学习上下文先验。为此,首先从ground truth作为监督构建一个Ideal Affifinity Map(理想的相似度图)。
  • 2、Ideal Affifinity Map(理想的相似度图

CPNet:Context Prior for Scene Segmentation(CVPR 2020)论文笔记_第3张图片 Figure 3

CPNet:Context Prior for Scene Segmentation(CVPR 2020)论文笔记_第4张图片

给定输入图像I和ground truth L,将输入图像I送入网络,获得大小为 H\times W 的特征图 X。如图3所示,首先down-sample(下采样)ground truth L 使其和特征图 X 有相同的尺寸,从而生成较小的 \widetilde{L}。然后使用 one-of-K 方案(one-hot编码)去编码 \widetilde{L} 中的每一类整数标签,从而获得一个 H\times W\times C 的矩阵 \widetilde{L}  ,C 是类别数。接下来,把经过编码了的ground truth 重塑成 N\times C 的大小,其中N = H \times W。最后,进行矩阵乘法:A =\widehat{L} \widehat{L}^{T}A 就是编码哪些像素属于同一类别的相似度图,它的形状是N\times N。我们使用Ideal Affifinity Map相似度图来监督Context Prior Map上下文先验映射的学习(生成)。

对于prior map先验图中的每一个像素,都是一个二值分类问题。解决这类问题的传统方法一般是使用二元交叉熵损失。给出一个尺寸为N\times N的预测先验图Prior Map:P,其中\left\{p_{n} \in \boldsymbol{P}, n \in\left[1, N^{2}\right]\right\}和理想相似度图Ideal Affifinity Map:A,其中\left\{a_{n} \in \boldsymbol{A}, n \in\left[1, N^{2}\right]\right\},二进制交叉熵损失可以表示如下:

\mathcal{L}_{u}=-\frac{1}{N^{2}} \sum_{n=1}^{N^{2}}\left(a_{n} \log p_{n}+\left(1-a_{n}\right) \log \left(1-p_{n}\right)\right)

然而,这样上面的一元损失仅考虑了先验图中的孤立像素,而忽略了与其他像素的语义相关性。先验图P 的每一行的像素对应于特征图 X 的像素。我们可以将它们分为类内像素和类间像素,它们之间的关系有助于推理语义相关性和场景结构。因此,可以将类内像素和类间像素视为两个整体分别编码关系。为此,基于二元互熵损失设计了一个全局项:

\begin{aligned} \mathcal{T}_{j}^{p} &=\log \frac{\sum_{i=1}^{N} a_{i j} p_{i j}}{\sum_{i=1}^{N} p_{i j}} \\ \mathcal{T}_{j}^{r} &=\log \frac{\sum_{i=1}^{N} a_{i j} p_{i j}}{\sum_{i=1}^{N} a_{i j}} \\ \mathcal{T}_{j}^{s} &=\log \frac{\sum_{i=1}^{N}\left(1-a_{i j}\right)\left(1-p_{i j}\right)}{\sum_{i=1}^{N}\left(1-a_{i j}\right)} \\ \mathcal{L}_{g} &=-\frac{1}{N} \sum_{j=1}^{N}\left(\mathcal{T}_{j}^{p}+\mathcal{T}_{j}^{r}+\mathcal{T}_{j}^{s}\right) \end{aligned} 其中,\mathcal{T}_{j}^{p}, \mathcal{T}_{j}^{r}, \mathcal{T}_{j}^{s}分别代表类内预测值(精度),类内正确率(召回率),P 的第j^{t h}行的类间正确率

最后,在一元项和全局项这两者的基础上,完整的affifinity loss相似度损失 \mathcal{L}_{p} 可以表示为:

\mathcal{L}_{p}=\lambda_{u} \mathcal{L}_{u}+\lambda_{g} \mathcal{L}_{g} 其中,\mathcal{L}_{p}\mathcal{L}_{u}\mathcal{L}_{g}分别表示
相似度损失 ,一元损失(二元交叉熵损失)和全局损失函数。 \lambda_{u}=1 \text { and } \lambda_{g}=1
  • 3、Context Prior Layer

CPNet:Context Prior for Scene Segmentation(CVPR 2020)论文笔记_第5张图片

上下文先验层考虑一个尺寸H \times W \times C_{0}为的特征图,如图2(copy在上),采用aggregation module\boldsymbol{X}H \times W \times C_{0})转\widehat{\boldsymbol{X}}H \times W \times C_{1}),给定\boldsymbol{X},经过1 \times 1conv、bn和sigmoid去学习尺寸为H \times W \times N(N=H \times W)的先验图P,在affinity loss的监督下,context prior map可以编码类间和类内像素间的关系。类内(intra-class)\boldsymbol{Y}=\boldsymbol{P} \tilde{\boldsymbol{X}},列间(inter-class)\overline{\boldsymbol{Y}}=(\mathbb{1}-\boldsymbol{P}) \widetilde{\boldsymbol{X}},1为同P尺寸的全1矩阵。最后,\mathcal{F}=\operatorname{Concat}(\boldsymbol{X}, \boldsymbol{Y}, \overrightarrow{\boldsymbol{Y}})

  • 4、Aggregation Module

上面提到的 Context Prior Layer 上下文先验层前面需要加入 aggregation module ,是为了通过该模块获取一些局部空间信息提供给Context Prior Layer用, aggregation module 该模块具有完全分离的卷积(在空间和深度维度上均独立),以聚合空间信息。 卷积可以聚合附近的空间信息。聚合更多空间信息的自然方法是使用较大的滤波器卷积。 但是,大滤波器带来很大的计算量。 因此,将标准卷积在空间上分解为两个不对称的卷积。对于k \times k卷积,我们可以用k \times 1卷积,然后用1 \times k卷积作为替代,称为空间可分离卷积。计算量减少k/2倍。

CPNet:Context Prior for Scene Segmentation(CVPR 2020)论文笔记_第6张图片 标题

Network Architecture

上下文先验网络(CPNet)是由骨干网和上下文先验层组成的全卷积网络。骨干网络是现成卷积网络,例如加入了空洞卷积的ResNet。在上下文先验层中,聚合模块有效地聚合一些空间信息。

同时,在backbone网络的阶段4(stage 4)还使用了辅助损失(auxiliary loss),也是一个交叉熵损失。所以,最终的损失函数为:

\mathcal{L}=\lambda_{s} \mathcal{L}_{s}+\lambda_{a} \mathcal{L}_{a}+\lambda_{p} \mathcal{L}_{p}

其中,

\mathcal{L}_{s}分割损失、\lambda_{s}=1

\mathcal{L}_{a}辅助损失auxiliary loss、\lambda_{a}=0.4

\mathcal{L}_{p}相似度损失affifinity loss、\lambda_{p}=1

Experimental

  • 网络结构

ResNet,使用空洞卷积的ResNet、8次up-sample结果计算分割损失\mathcal{L}_{s}、采用骨干网络的阶段4进行辅助损失计算、Aggregation Modules里面的可分离卷积采用11。

  • 数据增强

我们对输入图像采用均值减法、随机水平翻转和随机尺度(scale{0.5,0.75,1.0,1.5,1.75,2.0})来避免过拟合,最后,我们随机裁剪大的图像或填充小的图像到一个固定的大小进行训练。

  • 优化器

stochastic gradient descent (SGD):momentum=0.9、weight decay=5 \times 10^{-4}

learning rate=the “poly” learning rate\gamma=\gamma_{0} \times\left(1-\frac{N_{i t e r}}{N_{\text {total}}}\right)^{p},其中p=0.9\gamma_{0} = 2 \times 10^{-2}

batch_size=16

  • 推理阶段(预测阶段)

ADE20K and PASCAL-Context datasets:scales{0.5,0.75,1.0,1.5,1.75}

the Cityscapes dataset:{0.5,0.75,1,1.5}、

mIOU为评价指标

代码复现

 

你可能感兴趣的:(#,深度学习论文研读之分割)