深度之眼Pytorch打卡(十四):Pytorch卷积神经网络部件——卷积操作与卷积层(对卷积操作超细致动图分析,卷积转矩阵乘法分析)

前言


  人每天处理的信号中,有超过70%的是视觉信号,所以视觉问题,包括分类,检测,分割、风格转换等等占了深度学习任务中的很大部分。而卷积神经网络是计算机视觉领域当之无愧的霸主。卷积神经网络是稀疏连接,并且权值共享的,参数比全连接要少非常多,所以完完全全可以用图像全像素作为输入,并且它比全连接网络更容易训练,且能做得更深。另外,卷积神经网络,浅层卷积提取简单特征,深层卷积提取复杂特征,还有感受野等设计都在一定程度上受大脑视觉皮层结构的启发1 ,所以它比较适合视觉任务。这篇笔记主要学习卷积神经网络的核心——卷积操作和Pytorch的卷积层。本笔记的知识框架主要来源于深度之眼,并依此作了内容的丰富拓展,拓展内容主要源自对torch文档的翻译,对孙玉林等著的PyTorch深度学习入门与实战的参考和自己的粗浅理解,所用数据来源于网络。发现有人在其他平台照搬笔者笔记,不仅不注明出处,有甚者更将其作为收费文章,因此笔者将在文中任意位置插入识别标志。

  张量转图片可视化见:深度之眼Pytorch打卡(十):Pytorch数据预处理——数据统一与数据增强(上)
  全连接网络部件见:深度之眼Pytorch打卡(十三):Pytorch全连接神经网络部件——线性层、非线性激活层与Dropout层(即全连接层、常用激活函数与失活 )


卷进操作(convolution)


  第一次接触到卷积是在信号与系统中,把一个信号送入一个系统,在时域内输出信号就是输入信号与系统函数的卷积。它其实那就是一个相乘和相加操作,即线性运算,那里的卷积有四个步骤:翻转,移位,相乘和相加。每一次的移位都会有一个相乘求和结果,它的大小可以衡量此位置翻转后的系统函数与输入信号的相似性,数值越大,在该位置信号与系统函数的相似性就越高。深度学习或者是图像处理里的卷积,类似于信号处理里相关,没有翻转的操作,只有移位和相乘相加,它的输出结果是卷积核或者滤波器与其覆盖区域的相似性,激活值越大,代表覆盖区域与卷积核或者滤波器有越相近的特征。Pytorch的卷积操作,有一维卷积,二维卷积和三维卷积和空洞卷积等。其中二维卷积,尤其是二维卷积中的多通道卷积最为常用,因为图像本身就是二维多通道的

  • 一维卷积

  一维卷积示意图如图1所示,其摘自国外的一篇文章:Reading Minds with Deep Learning,卷积核在一个维度上,即一条线移动。图中非常明确的展现了一维卷积的过程——移位,相乘,相加。每次移位的元素个数称为步长stride,图中stride=1,由于没有拓展两端即Padding=0,所以卷积后的输出长度变短了。

在这里插入图片描述
  输出尺寸w1与输入尺寸w,卷积核大小f,拓展大小p和步长s之间的关系如式(1),图中输入尺度w=6,卷积核尺度f=3,步长s=1,拓展宽度p=0,带入即可的w1=4
一维卷积

图1.一维卷积示意图
  • 二维单通道卷积

  二维单通道的示意图如图2所示,其摘自国外的一篇文章:Convolutional Neural Networks - Basics,卷积核在两个维度上,即平面上移动,图中用的3*3的卷积核,熟悉图像处理的朋友应该能发现它是检测水平线的Sobel算子。图中展现的也是二维卷积核在二维输入上移位、相乘相加的过程。步长、拓展和输出计算同一维卷积,由图可见,其stride=1Padding=0
二维单通道卷积

图2.二维单通道卷积
  • 二维多通道卷积

  二维多通道卷积示意图如图3所示,其摘自这里,虽然它的输入和卷积核都是多维的,但它只是二维单通道卷积的拓展,本质上还是二维卷积。从图中可以看出输入通道数为3,所以对应的卷积核通道数也为3,即两者应该同深度。图中只有1个卷积核,所以输出的通道数是1,或者输出特征图数是1,又或者输出深度是1。对于这样的多通道卷积,它的操作过程与单通道一样,只是输出是卷积核各通道分别与输入的对应通道做卷积,然后将各通道卷积输出相加,再加上偏置的结果。 图中stride=1Padding=1

二维三(多)通道卷积

图3.二维三(多)通道卷积
  • 三维单通道卷积

  三维单通道卷积示意图如图4所示,其摘自国外的一篇博客:3D Convolutional Networks for Traffic Forecasting。三维卷积平常见的很少,卷积核在一个三维空间上移动,每移动一次都进行一次相乘相加操作。它与二维多通道卷积很像,尤其是它的输入和卷积核深度都是3时连运算过程本质上都是一样,但二维卷积不论有多少个通道,卷积核都只是在一个平面上移动,而不是三维卷积中的空间上移动。
(CSDN意疏原创笔记:https://blog.csdn.net/sinat_35907936/article/details/107833112)

三维卷积

图4.三维卷积
  • 空洞卷积

  空洞卷积示意图如图5所示,其摘自国外的一篇博客:An Introduction to different Types of Convolutions in Deep Learning。空洞卷积的卷积核中某些特定位置值被置成了0,即空洞。空洞卷积可以提升感受野,毕竟图中用3*3卷积核的参数就有了5*5大小卷积核的感受野,虽然可能会丢失一些细节信息,但是每一个输出的确关联到了输入中更大的范围。空洞卷积多应用与分割任务。

空洞卷积

图5.空洞卷积
  • 稀疏连接与权值共享

  卷积神经网络稀疏连接示意图如图6所示,由卷积过程,我们可以知道,一个输出神经元只与卷积核覆盖区域的若干输入神经元相连(有运算关系),而不是像全连接网络那样与全部的输入神经元相连,所以卷积神经网络神经元与神经元之间的连接是稀疏的。另外,由于特征的位置不变性,所以检测同一个特征时无论它出现在图像或者特征图的哪一个位置,用来检测提取它的卷积核都是一样的,所以输出同一幅特征图时是共用一组权值的,即同一个卷积核。这两个特点使得卷积神经网络可以做得比较深,而且更容易训练。
(CSDN意疏原创笔记:https://blog.csdn.net/sinat_35907936/article/details/107833112)

卷积神经网络的稀疏连接或者局部连接

图6.稀疏连接或者局部连接

Pytorch卷积层(conv layer)


  Pytorch的卷积层主要有nn.Conv1d()、nn.Conv2d(),nn.Conv3d()等,它们的操作与参数都是相同的,所以下面只单独学习最最常用的二维卷积nn.Conv2d()

CLASS torch.nn.Conv2d(in_channels: int, 
                      out_channels: int, 
                      kernel_size: Union[int, Tuple[int, int]], 
                      stride: Union[int, Tuple[int, int]] = 1, 
                      padding: Union[int, Tuple[int, int]] = 0, 
                      dilation: Union[int, Tuple[
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值