解卷积解析

Deconvolution Networks(论文解析)


作者:elfin   资料来源:deconvolution论文



1、简介

Deconvolution Networks是在AI领域第一次使用Deconvolution的先驱,但是它并没有提出解卷积层的概念,而是再其下一篇文章中提出(参考其他论文)。两篇文章的资源参考:


Top  ---  Bottom

2、摘要

​ 除了边缘原语之外,构建健壮的中低层图像表示是一个长期存在的目标。许多现有的特征检测器在空间上聚集边缘信息,破坏边缘交叉、平行和对称等线索。我们提出了一个学习框架,其中捕捉这些中级线索的特征会自发地从图像数据中出现。我们的方法是基于稀疏约束下的卷积分解,并且是完全无监督的。通过建立这种分解的层次结构,我们可以学习丰富的特征集,这些特征集对于图像的分析和合成都是一种健壮的图像表示。


Top  ---  Bottom

3、模型

​ 我们首先考虑应用于图像的单个解卷积网络层。解卷积层的输入为特征图\(y^{i}\),由\(K_{0}\)个通道组成,分别为通道:\(y_{1}^{i}、y_{2}^{i}、\cdots、y_{K_{0}}^{i}\) 。我们使用\(K_{1}\)个隐特征图\(z_{k}^{i}\)与过滤器\(f_{k,c}\)的线性和表示这个特征图的一个通道\(c\)

\[\sum_{k=1}^{K_{1}}z_{k}^{i}\bigoplus f_{k,c}=y_{c}^{i}\qquad(1) \]

此后,除非另有说明,否则符号对应于矩阵。如果\(y_{c}^{i}\)是一个\(N_{r} \times N_{c}\) 图且过滤器为\(H \times H\) ,则这个隐特征图的size为\(\left ( N_{r} + H -1 \right )\times \left ( N_{c} + H -1 \right )\) 。但是上面的公式\((1)\)是一个没有证明的系统,为了得到一个唯一的解,我们在\(z_{k}^{i}\)上引入了一个正则化项来鼓励潜在隐特征图中的稀疏性。这让我们得到一个如下的总体损失函数形式:

\[C_{1}\left ( y^{i} \right )=\frac{\lambda }{2}\sum_{c=1}^{K_{0}}\left \| \sum_{k=1}^{K_{1}}z_{k}^{i}\bigoplus f_{k,c} - y_{c}^{i} \right \|_{2}^{2} + \sum_{k=1}^{K_{1}} \left | z_{k}^{i} \right |^{p}\qquad(2) \]

其中,我们假设重建项为高斯噪声,正则化项为\(p\)范数。\(\lambda\)是平衡的一个超参数。请注意,我们的模型本质上是自顶向下的:给定潜在的特征映射,我们可以合成一幅图像。

注:

  • 自顶向下是指由低分辨率向高分辨率变换的模型,这种结构可以重现源图的图像轮廓、主要特征;
  • 自底向上是指由高分辨率向低分辨率变化的模型,这种模型可以提取特征,特征的感受野越来越大。

许多方法侧重于自底向上推理,但我们致力于获得高质量的潜在表征。

在第3.2节描述的学习中,我们使用一组图像\(y=\left \{ y^{1},\cdots ,y^{I} \right \}\),求\(\mathop{\arg\min}_{f,z}C_{1}\left ( y \right )^{2}\),每个图像的潜在特征图和滤波器。请注意,每个图像都有自己的一组特征图,而过滤器对所有图像都是公用的。


Top  ---  Bottom

3.1 体系构建

上述架构从多通道输入图像产生稀疏特征图。通过处理特征图,可以很容易地将其堆叠起来形成层次结构。第\(l\)层的损失函数可以推出为如下的形式:

\[C_{l}\left ( y \right )=\frac{\lambda }{2}\sum_{i=1}^{I}\sum_{c=1}^{K_{l-1}}\left \| \sum_{k=1}^{K_{l}}g_{k,c}^{l}\left (z_{k,l}^{i}\bigoplus f_{k,c}^{l} \right ) -z_{c,l-1}^{i}\right \|_{2}^{2} + \sum_{i=1}^{I}\sum_{k=1}^{K_{l}} \left | z_{k,l}^{i} \right |^{p}\qquad(3) \]

其中:

  • \(z_{c,l-1}^{i}\)是上一层的特征图;

  • \(g_{k,c}^{l}\)是一个固定的二进制矩阵,它决定了特征图之间的复杂度;

  • 如下图所示,我们由\(l-1\)层得到很多新的特征图,并由此稀疏化得到高分辨率的\(l\)层特征图;

    我们不在层之间执行任何池、子采样或分裂规范化操作,尽管它们很容易合并。


Top  ---  Bottom

3.2 学习过滤器

为了学习过滤器,我们首先固定过滤器的值,最小化当前层的损失\(C_{l}\left ( y \right )\),然后固定特征图最小化\(C_{l}\left ( y \right )\)得到过滤器。这个过程实际上就是神经网络的前向传播与后向传播。

特征图推导:

给定\(l\)层输入与过滤器,我们可以得到\(l\)层的特征图。关于\(l\)层的特征图估计我们可以使用:

\[\hat{C}_{l}\left ( y \right )=\frac{\lambda }{2}\sum_{i=1}^{I}\sum_{c=1}^{K_{l-1}}\left \| \sum_{k=1}^{K_{l}}g_{k,c}^{l}\left (z_{k,l}^{i}\bigoplus f_{k,c}^{l} \right ) -z_{c,l-1}^{i}\right \|_{2}^{2} + \frac{\beta}{2} \sum_{i=1}^{I}\sum_{k=1}^{K_{l}}\left \| z_{k,l}^{i} - x_{k,l}^{i} \right \|_{2}^{2} + \sum_{i=1}^{I}\sum_{k=1}^{K_{l}} \left | x_{k,l}^{i} \right |^{p} \qquad(4) \]

特征图的偏导:

\[\frac{\partial \hat{C}_{l}\left ( y \right )}{\partial z_{k,l}^{i}}=\lambda \sum_{c=1}^{K_{l-1}}F_{k,c}^{l^{T}}\left ( \sum_{\tilde{k}=1}^{K} F_{\tilde{k},c}^{l}z_{k,l}^{i} - z_{c,l-1}^{i}\right ) + \beta\left ( z_{k,l}^{i} - x_{k,l}^{i} \right ) \qquad(5) \]

注意这里的\(c\)可以理解为通道指标。

上面的公式我们可以使用矩阵乘法的形式给出:

\[A\begin{pmatrix} z_{1,l}^{i}\\ \cdots \\ z_{K_{l},l}^{i} \end{pmatrix}=\begin{pmatrix} \sum_{c=1}^{K_{l-1}}F_{1,c}^{l^{T}}z_{c,l-1}^{i} + \frac{\beta }{\lambda }x_{1,l}^{i}\\ \cdots \\ \sum_{c=1}^{K_{l-1}}F_{K,c}^{l^{T}}z_{c,l-1}^{i} + \frac{\beta }{\lambda }x_{K_{l},l}^{i} \end{pmatrix} \qquad(6) \]

关于矩阵\(A\)的解我们可以显示地给出:

\[A=\begin{pmatrix} \sum_{c=1}^{K_{l-1}}F_{1,c}^{l^{T}}F_{1,c}^{l} + \frac{\beta }{\lambda }I & \cdots & \sum_{c=1}^{K_{l-1}}F_{1,c}^{l}F_{K_{l},c}^{l^{T}}\\ \cdots & \cdots & \cdots \\ \sum_{c=1}^{K_{l-1}}F_{1,c}^{l}F_{K_{l},c}^{l^{T}} & \cdots & \sum_{c=1}^{K_{l-1}}F_{K_{l},c}^{l^{T}}F_{K_{l},c}^{l} + \frac{\beta }{\lambda }I \end{pmatrix} \qquad(7) \]

另一方面关于\(x_{k,l}^{i}\)我们可以由如下公式取值得到:

\[x_{k,l}^{i} = max\left ( \left | z_{k,l}^{i} \right |-\frac{1}{\beta },0 \right )\frac{z_{k,l}^{i}}{\left | z_{k,l}^{i} \right |} \qquad(8) \]

过滤器的偏导:

\[\frac{\partial \hat{C}_{l}\left ( y \right )}{\partial f_{k,c}^{l}} = \lambda \sum_{i=1}^{I}\sum_{\tilde{c}=1}^{K_{l-1}} Z_{k,l}^{i^{T}}\left ( \sum_{\tilde{k}=1}^{K_{l}}g_{\tilde{k},c}^{l} Z_{\tilde{k},l}^{i} f_{\tilde{k},\tilde{c}}^{l} - z_{\tilde{c},l-1}^{i} \right ) \qquad(9) \]

根据上面的偏导公式我们就可以实现对参数进行更新迭代了。

下面是算法的整个过程:

有特征图与卷积核之后,要重构“图像”实际就是实现高分辨率、高超分辨率的特征图,这个正是解卷积网络层的主要功能。关于解卷积建议参考https://www.cnblogs.com/dan-baishucaizi/p/14397940.html。


Top  ---  Bottom

4、小结

​ 由上面的公式与参考文章https://www.cnblogs.com/dan-baishucaizi/p/14397940.html,我们大概可以get到其本质,那么作者到底是怎么定义它的?

​ 在文献Adaptive Deconvolutional Networks for Mid and High Level Feature Learning中,首先我们知道解卷积的主要作用是重构图像,注意这个重构的图像是抽象的高级语义。下面的图片有效地展示了其功能:

明显随着模型框架的层数堆叠,对象的主要轮廓信息被学习到并重构可视化!

重构这种图像有什么用,实际上在语义分割、实例分割等方向上,这非常有用,因为我们知道在高分辨率下能够重构实例,那么分割也不是问题。换句话说,计算机只需要寻找上面图片中的轮廓即可,而计算机重构这张图片难道不整数利用了这种位置信息吗?所以这可以证明其实现分割不是难事!


Top  ---  Bottom

5、deconvolution正式提出

​ 解卷积一词在深度学习领域的正式提出,是在Adaptive Deconvolutional Networks for Mid and High Level Feature Learning中。

5.1 作者提出的可视化框架

这里有卷积层、池化层组成!

5.2 接卷积定义

如上图所示,输出的重构\(\hat{y}_{1}\)(c是通道索引)是可以由上一层的2D特征图(单通道)与过滤器卷积后求和得到:

\[\hat{y}_{1}^{c}=\sum_{k=1}^{K_{1}}z_{k,1}\ast f_{k,1}^{c} \qquad(10) \]

星号表示2D卷积操作。上面的公式到底是什么?下面是我的白话解释:

  • 解卷积层的输出的每一通道都是由\(K_{1}\)个过滤器与解卷积层的输入进行卷积后,再求和生成的!
  • 注意这里的求和一般不是简单的数值相加,而是将卷积操作(下采样)后的特征图进行稀疏化再合并(实现上采样的效果)!

为了简洁起见,我们将层\(l\)的卷积和求和操作合并到一个卷积矩阵\(F_{l}\),并将2D特征图\(z_{k,l}\)合并为3D特征图\(z_{l}\) 。则有:

\[\hat{y}_{1} = F_{1}z_{1} \qquad(11) \]


Top  ---  Bottom

完!

posted @ 2021-02-12 18:25  巴蜀秀才  阅读(1044)  评论(0编辑  收藏  举报