10-卷积神经网络

导论

卷积主要用于进行空间变换;卷积神经网络的用途是为了自动提取特征。

image-20210305150600626

对图像进行卷积操作,本质上是对图像的某块的所有频道(即一个Batch)进行操作。操作会改变图像的$c,w,h$值。

在这里插入图片描述

通道

单通道

用Kernel阵遍历输入阵,对应进行数值乘法再求和,得到输出阵的一个元素。

图中的红色框称为“窗口”,而其特性就是滑动;进行卷积对应相乘运算并求得均值后,滑动窗便开始向右边滑动并根据步长的不同选择滑动幅度。

image-20210305152846105
image-20210305152953900

$\cdots$

image-20210305153012840

3通道

本质上是将单通道的卷积累加。需要注意的是,输入Kernel的通道数要和输入的通道数相等。该操作将3通道的输入转化成1通道的输出。

image-20210305153940018
image-20210305154933113

n通道

image-20210305155851329

如果需要得到$m$通道的输出,则要准备$m$份的卷积阵。此时对应的权值是 $m_n_k_{width}*k_{height}$的四维量。

image-20210305155949583

卷积层

image-20210305162243312
image-20210305162900318

输出的维度:$n_{in}-kernel+1$

特征图

经过一系列卷积对应相乘,求均值运算后,把一张完整的feature map填满。

img

feature map是每一个feature从原始图像中提取出来的“特征”。其中的值,越接近为1表示对应位置和feature的匹配越完整,越是接近-1,表示对应位置和feature的反面匹配越完整,而值接近0的表示对应位置没有任何匹配或者说没有什么关联

一个feature作用于图片产生一张feature map,对这张图来说,用的是3个feature,因此最终产生3个 feature map。

preview

padding

padding,即边缘填充,可以分为四类:零填充常数填充镜像填充重复填充

image-20210305164802953

以低光照增强任务为例,最终对比效果如下图。零填充会产生边缘伪影,而镜像填充很好地缓解了这一效应。

img

步长

也就是窗口移动的步福,比如设置步长为2:

image-20210305170448674
image-20210305170455973
image-20210305170545745

池化层

卷积操作后,得到了一张张有着不同值的feature map,尽管数据量比原图少了很多,但还是过于庞大(比较深度学习动不动就几十万张训练图片),因此接下来的池化操作就可以发挥作用了,它最大的目标就是减少数据量。

池化分为两种:Max Pooling 最大池化Average Pooling平均池化。顾名思义,最大池化就是取最大值,平均池化就是取平均值。

  • Max Pooling Layer

image-20210305170737309

pytorchMaxPool2d中的stride默认值为2。

  • Average Pooling Layer

一个简单的卷积神经网络

image-20210305171348397

将全连接神经网络改写成卷积神经网络:

image-20210306102612730

如何使用GPU

迁移模型到GPU

用来选择设备

将模型数据迁移到GPU上

迁移张量到GPU

通过使用.to(device)将数据迁移到GPU上

作业1

image-20210311093631326

高级篇

回顾

image-20210311133027368

image-20210311133644444

在这张图片会发现很多重复的,在构造时很复杂,为了减少代码冗余,可以定义为函数或者类。

image-20210311172748130
  • Inception Module:类似于套娃,重复使用的部分定义为一个模型。

Inception Module

image-20210311134359271

初衷是由于kernel_size不知道定义多少合适,于是把全部需要的kernel_size都定义了,类似于一个权重选取。其中Concatenate是将这些模块沿着通道拼接在一起。

什么是1X1 convolution

image-20210311161223028

$1\times 1$卷积能够跨越不同通道,进行信息融合。

image-20210311161456790

使用$1\times 1$的卷积能够降低运算量。

Inception module

image-20210311164058391
image-20210311164312991

使用Inception Module

其中,self.linear = torch.nn.Linear(1408,10)的1408可以通过代码计算,先跑一遍,计算x的大小即可。

结果

深残余学习

image-20210311190108114

在神经网络中,由于深度学习可能会设置很多层,这样可能会导致梯度消失,为了避免这种情况,一般采用relu激活函数。

Residual Network

image-20210311191639524

简单的残差网络

image-20210311191758841
  • 定义残差网络

image-20210311192006799
  • 定义网络

  • 配置参数

  • 训练与测试

作业2

  • 复现论文1

论文:Identity Mappings in Deep Residual Networks.

  • 复现论文2

论文:Densely Connected Convolutional Networks[J].

学习目标

  1. 扩充理论知识,比如“圣经”

  2. 阅读pytorch文档,便于写代码

  3. 复现经典工作(写代码与读代码是一个循环,跑代码只是证明环境配置成功了)

  4. 扩充视野

扩展阅读

  • CNN:https://zhuanlan.zhihu.com/p/27908027

最后更新于

这有帮助吗?