🐳图像卷积
2021-11-30
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 

DNN局限性

DNN十分适合处理表格数据,其中行对应样本,列对应特征。 对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是不能预先假设任何与特征交互相关的先验结构。 此时,DNN可能是最好的选择,然而对于高维感知数据,这种缺少结构的网络可能会变得不实用。
假设有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。 即使将隐藏层维度降低到1000,这个全连接层也将有 个参数。 想要训练这个模型将不可实现,因为需要有大量的GPU、分布式优化训练的经验和超乎常人的耐心。此外,拟合如此多的参数还需要收集大量的数据。 然而,如今人类和机器都能很好地区分猫和狗:这是因为图像中本就拥有丰富的结构,而这些结构可以被人类和机器学习模型使用。 卷积神经网络是机器学习利用自然图像中一些已知结构的创造性方法。
 

空间不变性

想象一下,假设你想从一张图片中找到某个物体。 合理的假设是:无论哪种方法找到这个物体,都应该和物体的位置无关。 理想情况下,系统应该能够利用常识:猪通常不在天上飞,飞机通常不在水里游泳。 但是,如果一只猪出现在图片顶部,我们还是应该认出它。
                                                       沃尔多游戏示例图
沃尔多游戏示例图
可以从儿童游戏”沃尔多在哪里”中得到灵感: 在这个游戏中包含了许多充斥着活动的混乱场景,而沃尔多通常潜伏在一些不太可能的位置,我们的目标就是找出他。 尽管沃尔多的装扮很有特点,但是在眼花缭乱的场景中找到他也如大海捞针。 然而沃尔多的样子并不取决于他潜藏的地方,因此可以使用一个“沃尔多检测器”扫描图像。 该检测器将图像分割成多个区域,并为每个区域包含沃尔多的可能性打分。 卷积神经网络正是将空间不变性(spatial invariance)的这一概念系统化,从而基于这个模型使用较少的参数来学习有用的表示。
 
将上述想法总结一下,从而帮助我们设计适合于计算机视觉的神经网络架构:
  • 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”
    • 二维图像输入DNN, ,但这样的平移会导致 的平移
      既然不应该依赖于,做个替换: ,那么,这就是二维交叉相关
  • 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测
    • ,评估时不应该用远离 的参数,所以当时, 使得
      所以,这是一个卷积层
 

初识卷积

微积分中卷积的表达式为:
离散形式是:
这个式子如果用矩阵表示可以为: 星号表示卷积
如果是二维的卷积,则表示式为:
 
在CNN中,虽然也是说卷积,但是我们的卷积公式和严格意义数学中的定义稍有不同,比如对于二维的卷积,定义为:
虽然这个式子从数学上讲不是严格意义上的卷积——它所表达的运算其实是互相关运算(cross-correlation),但是大牛们都这么叫了,那我们也跟着这么叫了。
其中, 为卷积核,而则为输入。如果 是一个二维输入的矩阵,而 也是一个二维的矩阵。但是如果是多维张量,那么也是一个多维的张量。
 

互相关运算

卷积窗口从输入张量的左上角开始,从左到右、从上到下滑动。 当卷积窗口滑动到新一个位置时,包含在该窗口中的部分张量与卷积核张量进行按元素相乘,得到的张量再求和得到一个单一的标量值,由此得出了这一位置的输出张量值。
notion image
notion image
 
notion image
notion image
notion image
 
注意,输出大小略小于输入大小。这是因为卷积核的宽度和高度大于1, 而卷积核只与图像中每个大小完全适合的位置进行互相关运算。 所以,输出大小等于输入大小 减去卷积核大小 即:
notion image
 
 
 

卷积层

  • 输入
  • 偏差
  • 输出
  • 是可学习的参数
卷积层对输入和卷积核权重进行互相关运算,并在添加标量偏置之后产生输出。 所以,卷积层中的两个被训练的参数是卷积核权重和标量偏置。 就像我们之前随机初始化全连接层一样,在训练基于卷积层的模型时,我们也随机初始化卷积核权重。
基于上面定义的corr2d函数实现二维卷积层。在__init__构造函数中,将weightbias声明为两个模型参数。前向传播函数调用corr2d函数并添加偏置。

目标的边缘检测

一个简单应用:通过找到像素变化的位置,来检测图像中不同颜色的边缘
notion image
notion image
 
 

学习卷积核

如果只需寻找黑白边缘,那么以上[1, -1]的边缘检测器足以。然而,当有了更复杂数值的卷积核,或者连续的卷积层时,我们不可能手动设计滤波器。那么是否可以学习由X生成Y的卷积核呢?
构造一个卷积层,并将其卷积核初始化为随机张量。接下来,在每次迭代中,比较Y与卷积层输出的平方误差,然后计算梯度来更新卷积核。为了简单起见,在此使用内置的二维卷积层,并忽略偏置。
学习到的卷积核权重非常接近之前定义的卷积核K
 
 

特征映射和感受野

输出的卷积层有时被称为特征映射(feature map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。 在卷积神经网络中,对于某一层的任意元素,其感受野(receptive field)是指在前向传播期间可能影响计算的所有元素(来自所有先前层),当一个特征图中的任意元素需要检测更广区域的输入特征时,可以构建一个更深的网络。
  • PyTorch
  • 硬件填充和步幅
    目录