A Weakly Supervised Convolutional Network for Change Segmentation and Classification(对于变化检测的弱监督卷积网络)
A Weakly Supervised Convolutional Network for Change Segmentation and Classification
弱监督学习:监督学习、半监督学习、无监督学习指的是是否有标签,比如监督学习就是已知数据与一一对应的标签,训练算法使其能够将数据映射到标签的过程。半监督是指数据一部分有标签,无监督是数据没有标签,都是通过别的方法(按照一定的偏好:所谓的按照一定的偏好,是比如特征空间距离最近,等人们认为属于一类的事物应具有的一些特点。举个例子,猪和鸵鸟混杂在一起,算法会测量高度,发现动物们主要集中在两个高度,一类动物身高一米左右,另一类动物身高半米左右,那么算法按照就近原则,75厘米以上的就是高的那类也就是鸵鸟,矮的那类是第二类也就是猪,当然这里也会出现身材矮小的鸵鸟和身高爆表的猪会被错误的分类。)进行学习。
弱监督学习包含不完全监督、不确切监督、不精确监督。像半监督这种可以归纳于不完全监督。
本文中所指的应该是不确切监督,比如像素级的标签是细粒度标签或者说强标签,而图片级的标签是粗粒度标签或者弱标签。例如:如果我们知道一幅图,告诉你图上有一只猪,然后需要你把猪在哪里,猪和背景的分界在哪里找出来,那么这就是一个已知弱标签,去学习强标签的弱监督学习问题。
摘要
全监督的变化检测方法需要难以获取的像素级标签,而弱监督方法可以被图像级别的标签训练。但是大部分这些方法需要变化图像和不变图像的组合对进行训练。因此这些方法不能直接用于只有变化图像对的数据集。(动机)
所以我们提出了W-CDNet,弱监督变化检测网络,可以被图像级别的语义标签训练。此外,W-CDNet能被两种类型的数据集训练,仅仅包含变化图像对的数据集或者是变化和不变图像对的混合数据集。由于我们使用图像级语义标签进行训练,因此我们同时创建了一个变化掩码,并为单标签图像标记更改后的标签。W-CDNet使用W形孪生U-net从图像对中提取特征图,然后对其进行比较以创建原始的更改掩码。模型的核心部分是变化分割分类模块(CSC),通过自定义重映射模块在隐层学习一个精确的变化mask,然后使用变化mask分割当前输入图像。分割后的图像用于预测图像级别的语义标签。当且仅当变化mask实际标记了相关变化才能预测正确的标签。这迫使模型学习一个准确的变化掩码。在AICD和hrscd、两个公共航空影像变化检测数据集和一个食物垃圾变化检测数据集上,我们展示了该方法的分割和分类性能,并取得了最优结果。
介绍
从噪声中区分两个时间上不同的图像之间的相关变化以及与之相关的语义变化。一个图像对可能属于两类:“变化”表示两张图片之间存在相关的变化,“不变”表示没有变换或者没有相关的改变。用户必须预先定义什么是相关的更改。(变化的图像对表示每个图像对都至少有一定程度的相关变化)
基于U-Net的w型simese网络,U-net是共享权值的特征提取器。一组自定义比较模块来比较来自于w型simese网路的特征图,并创建一个高分辨特征图,其包含关于两幅图像之间的差异信息。然后CSC模块重映射这些特征,以创建一个有意义的mask用来分割当前的输入图像。分割后的图像被编码,与残差块出来的特征向量一起送进分类器预测图像级别的标签。
相关工作
全监督变化检测
许多方法都经过像素级标签的全面监督训练,以获得良好的分割效果。 根据确切的任务,使用二进制变化掩码或语义变化掩码
弱监督和无监督变化检测
…
本文方法
1.W-CDNet概览
解释:首先是该结构的两边为网络的输入,一张previous image与一张current image。input进入的接口是U-Net(VGG16为主干),并且每个尺度的特征图都进入了comparison block。这个比较模块最后的输出是 Raw change mask,其将会被CSC模块处理。CSC后面会单独描述。
U-Net
2 . Siamese Network
3. Comprison Block
这个模块用来比较来自于两个U-Net的特征图。它突出了两幅图像之间相关特征的差异。
上图是一个比较模块的结构:
1.输入是来自两边的U-Net;
2.做差;
3.来自上一层的Comprison Block的输出与2中的做差结果进行concat;
4、5 Conv+ReLU;
6.上采样;
7.Conv+ReLU;
8.输出
本文是使用了6个该模块,用于比较U-Net不同层的特征。这允许模型同时使用高级和低级信息来创建change mask。来自最后一个块的特征图经过3个卷积层与ReLU**处理,然后输出一个单通道原始change mask。
4. CSC module
CSC模块是W-CDNet的核心。它被分成两个独立的分支,一个分支由一个单独的ResBlock构成,用来提取有助于确定图像对是否包含任何相关变化的特征。另一个分支在Remapping Block中进一步处理原始的change mask,它假设highest mask activation总是对应于相关的更改,而与图像对中实际上是否存在相关更改无关。Remapping Block创建一个change mask被CEF-RNN层精炼(细化)。最终产生的change mask 用于分割当前输入图像也就是current image。接着被分割图像再被VGG16编码。最后的Fusion Block concat来自于两个分支的特征向量并且预测图像级别的标签。该模型必须突出显示相关的更改,否则Fusion Block将无法预测正确的图像级标签。
Remapping Block
Remapping Block接收来自于Comprison Block的原始change mask。假设具有较高**率的change mask像素(相对于其他像素)标记了相关更改。这由以下公式强制执行:
X
^
m
a
p
=
(
X
^
−
m
i
n
(
X
^
)
m
a
x
(
X
^
)
−
m
i
n
(
X
^
)
⋅
α
)
−
α
2
(
1
)
\hat{X}_{map}=(\frac{\hat{X}-min(\hat{X})}{max(\hat{X})-min(\hat{X})}\cdot\alpha)-\frac{\alpha}{2} \quad \quad \quad (1)
X^map=(max(X^)−min(X^)X^−min(X^)⋅α)−2α(1)
Y ^ = s i g ( X ^ m a p ) ( 2 ) \hat{Y}=sig(\hat{X}_{map})\quad \quad \quad (2) Y^=sig(X^map)(2)
其中, X ^ \hat{X} X^是原始的change mask,其可能包含来自区间 [ 0 , ∞ ] [0,\infin] [0,∞]的值; α \alpha α是超参数,sig是sigmoid**函数; Y ^ \hat{Y} Y^是中间预测change mask,该mask现在包含来自区间[0,1]的值。
(1)式展示了重映射过程的中间结果。与输入的范围无关, X ^ m a p \hat{X}_{map} X^map的值全都在区间 [ − α 2 , α 2 ] [-\frac\alpha2,\frac\alpha2] [−2α,2α]。由于这些值被送进随后的sigmoid**函数,所以超参数 α \alpha α影响的是标记相关变化的值域标记无变化的值的分离的强烈程度。更小的 α \alpha α,mask的值更平滑。不使用CRF-RNN层的时候我们设置 α \alpha α为32,使用的时候设为16。
现在,中间change mask可以被CRF-RNN细化。然后,最终的change mask与cuurent image做元素相乘,生成仅仅有相关变化区域可见的图片。这一步与上面的解释的重映射过程结合,迫使模型学习一个准确的change mask。被分割的图像送入VGG16模型,该模型会创建一个描述被change mask 标记的区域的特征向量。
Residual Block
当重映射模块假定这里的两幅图片总是有一些相关改变的,而残差块用来判断并决定这里是否确实有change。为此,“残差块”将原始change mask作为输入并创建一个特征向量,该特征向量可帮助模型区分已更改和未更改的图像对。如果没有ResidualBlock,则由于Remapping Block,该模型将无法执行此区分。然而,当只接受图像变化训练时,它仍然可以学习分割变化。
Fusion Block
来自于VGG16模型和残差块的特征向量由Fusion Block进行concat,并且把他们分成N类(N-1是描述变化的目标,还有一个是不变的类)。
5. Model Variations
W-CDNet能够被变化和不变的图片对的组合训练。把残差块移除,也可以仅仅使用变化的图片对进行训练模型。这样的话,Fusion Block只有一个输入并且其也就是个简单的分类器。也有可能去训练我们的模型通过全监督(在一个多任务学习设定下)。在这种情况下, 使用change mask 和图片级别的标签作为模型的输出。
6.Training
为了提高训练速度,我们采用迁移学习,使用可获得的U-Net的预训练权重。VGG16使用的是imagenet预训练的权重;其他权重由正态分布初始化。模型训练有两步:
**(1)Training:**CRF-RNN层被移除。**模型需要学会正确的给图像对贴标签(图片级别的)。**在这个过程中,模型学会在隐层创建一个没有细化的change mask,变更对象的边界还没有准确的分割。
**(2)Finetuning:**第二步,CRF-RNN层被插入模型,并且第一步中所有其他层的权重被加载。模型再进行一次端到端的训练,只不过学习率降低一些。这一步之后,由于CRF-RNN层的细化,变化目标被分割的更加准确。
Loss Function. 我们使用分类交叉熵损失来训练我们的弱监督模型。对于全监督训练我们结合两个loss:分类交叉熵损失用于图片级别的语义label L I L \mathcal L_{IL} LIL和一个自定义的状态(条件)损失 L C M \mathcal L_{CM} LCM对于像素级别的change mask。如果 m a x ( Y ) > 0 max(Y)>0 max(Y)>0,则 L C M \mathcal L_{CM} LCM采取标准的二进制交叉熵损失的形式,否则将其设置为0。Y是GT的change mask。由于模型分支(预测更改掩码)假定图像对中始终至少存在一些相关更改,因此需要有状态(条件)的损失。因此,如果图像对不包含任何变化,我们不希望对change mask引入任何损失,而只希望对图像级语义标签引入损失。 L I L \mathcal L_{IL} LIL和 L C M \mathcal L_{CM} LCM合计为最终损失 L \mathcal L L。
效果评估
a v e r a g e p r e c i s i o n ( A P ) = ∑ n ( R n − R n − 1 ) P n , a c c u r a c y = T N average precision(AP)=\sum_n(R_n-R_{n-1})P_n, \quad accuracy=\frac{T}{N} averageprecision(AP)=n∑(Rn−Rn−1)Pn,accuracy=NT
P n P_n Pn和 R n R_n Rn分别是在第n次七点的precision和recall,T是正确预测的数量,N是样本总数量。
对于变化分割的效果我们使用如下标准:
m
I
o
U
=
m
e
a
n
(
T
P
T
P
+
F
P
+
F
N
)
,
K
a
p
p
a
=
p
o
−
p
e
1
−
p
e
,
D
i
c
e
=
2
⋅
T
P
2
⋅
T
P
+
F
P
+
F
N
,
T
o
t
a
l
a
c
c
u
r
a
c
y
=
T
P
+
T
N
T
P
+
T
N
+
F
P
+
F
N
mIoU=mean(\frac{TP}{TP+FP+FN}),\quad \quad Kappa=\frac{p_o-p_e}{1-p_e},\\ Dice=\frac{2\cdot TP}{2\cdot TP+FP+FN},\quad \quad Totalaccuracy=\frac{TP+TN}{TP+TN+FP+FN}
mIoU=mean(TP+FP+FNTP),Kappa=1−pepo−pe,Dice=2⋅TP+FP+FN2⋅TP,Totalaccuracy=TP+TN+FP+FNTP+TN
TP-true positive,TN-true negative, FP-false positive,FN-false negative。
p o p_o po-观察到的GT与预测之间的一致性; p e p_e pe-给定类别分布,GT与预测之间的预期一致性。
CRF、效果评估
CRF-RNN
这玩意三言两语很难讲清,建议先把概率论以及随机过程的基本知识了解了再去看周志华的西瓜书,然后再看李航的统计学习方法加深了解(对于CRF条件随机场)。然后再通过论文、博客等了解CRF使用RNN的方法嵌入到网络模型里面。