APP下载

CNN中的一些高阶技术(空洞卷积/显著图/反折积)

消息来源:baojiabao.com 作者: 发布时间:2024-05-04

报价宝综合消息CNN中的一些高阶技术(空洞卷积/显著图/反折积)

卷积神经网络是影象识别领域最重要的深度学习技术。也可以说是是本轮深度学习浪潮开始点。本文总结了CNN的三种高阶技巧,分别是空洞卷积、显著图和反卷积技术。原文释出在Medium(翻译完发现网上也有了近似的版本,

不过他们全文翻译了,内容太多不相关的,我这里反正也翻译了,不发也浪费了。看过的客官也可以跳过了,手动[无奈])。

一、CNN的概述二、感受野和空洞卷积(Receptive Field and Dilated Convolutions)三、显著图(Saliency Maps)四、反卷积(Transposed Convolution)

一、CNN的概述

CNN的独特方面如下:

引数(权重和偏差)比全连线网络少物件检测的不变性 - 它们不依赖于特征的位置可以容忍影象中的一些失真。能够泛化和学习特征。需要网格输入。卷积层由滤波器(filters),特征对映(feature maps)和启用函式(activation function)组成。

如果输入的维度已知,我们可以确定卷积块的输出的维度。这个计算方法可以参考《深度学习卷积操作的维度计算》。

池化层用于减少过拟合。全连线的层用于将空间和通道特征混合在一起。每个滤波层都和feature map抽取的影象对应,这就是提取特征的方式。

知道输入和输出层的数量很重要,因为这决定了构成神经网络引数的权重和偏差的数量。 网络中的引数越多,需要训练的引数越多,导致训练时间越长。训练时间对于深度学习非常重要,因为它是一个限制因素,除非您可以访问强大的计算资源,如计算丛集。

下面是一个示例网络,我们将为其计算引数总数。

在这个网络中,我们在卷积滤波器上有250个权重和10个偏差项。 我们在max-pooling层上没有权重。 在最大池化层之后,我们有13×13×10 = 1,690个输出元素。 我们有一个200节点的完全连线层,在完全连线层中总共产生1,690×200 = 338,000个权重和200个偏置项。 因此,我们在网络中共有338,460个引数需要接受训练。 我们可以看到大多数训练的引数出现在完全连线的输出层。

每个CNN层都学习越来越复杂的滤波器。 第一层学习基本特征检测滤波器,例如边缘和角落。 中间层学习检测物件部分的滤波器 - 对于面部,他们可能学会对眼睛和鼻子做出反应。 最后的图层具有更高的表示形式:它们学习识别不同形状和位置的完整物件。

二、感受野和空洞卷积(Receptive Field and Dilated Convolutions)

感受野被定义为输入空间中特定CNN的特征正在观察(即受其影响)的区域。 在5×5输入对映上应用核心大小为k = 3×3,填充大小为p = 1×1,步长s = 2×2的卷积C,我们将得到一个3×3输出特征对映(绿色对映)。

在3×3特征图之上应用相同的卷积,我们将得到2×2特征图(橙色图)。

让我们再次以一维方式看待感受野,没有填充,步长为1,核心大小为3×1。

我们可以跳过其中一些连线以建立空洞卷积(Dilated Convolutions),如下所示。

空洞卷积以与正常卷积类似的方式工作,主要区别在于感受野不再由连续画素组成,而是由其他画素分开的各个画素组成。 扩散卷积层应用于影象的方式如下图所示。

下图显示了二维资料的空洞卷积。 红点是过滤器的输入,其为3×3,绿色区域是由这些输入中的每一个捕获的感受野。 感受野是每个输入(单位)到下一层的初始输入上捕获的隐含区域。

使用空洞卷积背后的动机是:

通过处理更高分辨率的输入来检测精细细节。更广泛的视角,用于捕获更多上下文资讯。执行时间更短,引数更少在下一节中,我们将讨论使用显著性对映来检查卷积网络的效能。

三、显著图(Saliency Maps)

显著图是资料科学家用于检查卷积网络的有用技术。 它们可用于研究神经元的启用模式,以检视影象的哪些特定部分对于特定特征是重要的。

让我们想象一下,你会得到一张狗的影象并要求对它进行分类。 这对于人类来说非常简单,但是,深度学习网络可能不像你那么聪明,而是可能将其归类为猫或狮子。 为什么这样做?

网络可能错误分类影象的两个主要原因:

训练资料中的偏差没有正则化我们想要了解是什么让网络将某个类作为输出 - 这样做的一种方法是使用显著图。 显著图是一种测量给定影象中特定类的空间支援的方法。

“当我通过我的网络传输影象时,找到负责C类分数S(C)的画素”。

我们怎么做? 我们使用区别(differentiate)! 对于任何函式f(x,y,z),我们可以通过在该点找到关于这些变数的偏导数,找到变数x,y,z对任何特定点(x 1,y 1,z 1)的影响。 类似地,为了找到负责的画素,我们对C类取分数函式S,并对每个画素取偏导数。

这很难自己实现,但幸运的是,auto-grad可以做到这一点! 该程式的工作原理如下:

正向通过网络传递影象。计算每个类的分数。对于除C类之外的所有类,在最后一层强制计算得分S的导数为0。对于C,将其设定为1。通过网络反向传播这个导数。渲染它们,你就有了显著图。注意:在步骤#2中,我们将其转换为二进位制分类并使用概率,而不是执行softmax。

以下是显著性图的一些示例。

我们如何处理彩色影象? 获取每个通道的显著图,并采用最大值,平均值或使用所有3个通道的方式显示。

概述显著图的功能的两篇好文章是:

Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps

Attention-based Extraction of Structured Information from Street View Imagery

有一个与本文相关的GitHub库,其中我将展示如何生成显著图(可以在此处找到库)。

四、反卷积(Transposed Convolution)

到目前为止,我们所看到的卷积要么保持其输入的大小,要么使其变小。 我们可以使用相同的技术使输入张量更大。 此过程称为upsampling。 当我们在卷积步骤中进行时,它被称为反卷积(transposed convolution)或微步卷积(fractional striding)。

注意:有些作者在使用反卷积时会称之为upsampling,但该名称已经采用了以下文章中概述的不同概念:

https://arxiv.org/pdf/1311.2901.pdf

为了说明反卷积的工作原理,我们将看一些卷积的例子。

第一个是没有填充的典型卷积层的示例,作用于大小为5×5的影象。在卷积之后,我们最终得到3×3影象。

现在我们看一个填充为1的卷积层。原始影象是5×5,卷积后的输出影象也是5×5。

现在我们看一个填充为2的卷积层。原始影象是3×3,卷积后的输出影象也是5×5。

当在Keras中使用时,例如在变分自动编码器的开发中,这些是使用upsampling层实现的。

2019-10-31 05:55:00

相关文章