什么是卷积?

卷积是指在滑动中提取特征的过程,可以形象地理解为用放大镜把每步都放大并且拍下来,再把拍下来的图片拼接成一个新的大图片的过程。


一、普通卷积**:“卷积”就是“加权求和”)**

更详细请看笔者的博文:矩阵乘法实现卷积运算_caip12999203000的博客-CSDN博客_矩阵乘法实现卷积

**1.**以2D卷积为例,2D卷积是一个相当简单的操作

在这里插入图片描述

我们先从一个小小的权重矩阵,也就是 卷积核(kernel 开始,让它逐步在二维输入数据上“扫描”。卷积核“滑动”的同时,计算权重矩阵和扫描所得的数据矩阵的乘积,然后把结果汇总成一个输出像素。

这里原理上使用的是滑动窗口,但也可以有更多高效的方法,例如:笔者的另外一篇文章,使用的是矩阵乘法实现的卷积运算。

**2.**卷积后的尺寸大小转换公式

(其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,W2为输出的矩阵大小)

**3.**功能

特征图大小不变或缩小。根据公式通过调整P和S参数可实现特征图大小不变以及缩小。

4**.各个指标比较(参数量、计算量、感受野)**

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N,卷积核大小为DK  x DK ,忽略偏执b。)

**5.**代码实现

Pytorch**(参考)**

import torch.nn as nn
import torch
# 输入值
im = torch.randn(1, 1, 5, 5)
# 普通卷积使用
c = nn.Conv2d(1, 1, kernel_size=2, stride=2, padding=1)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))

结果展示:


二、**转置****卷积(**Convolution Transposed,又叫反卷积、解卷积

更详细请看笔者的博文:转置卷积(Convolution Transposed又叫反卷积、解卷积)_caip12999203000的博客-CSDN博客

1.概念或背景

在这里插入图片描述

通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,叫做 上采样 (Upsample)****。

**2.**卷积后的尺寸大小转换公式

(其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,W2为输出的矩阵大小)

**3.**功能

特征图变大**(上采样)****。**将低分辨率的特征图样上采样到原始图像的分辨率大小,以给出原始图片的分割结果。

4.各个指标比较(参数量、计算量、感受野)

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N,卷积核大小为DK  x DK ,忽略偏执b。)

**5.**转置卷积用途

**1)** DCGAN,生成器将随机值转变为一个全尺寸图片,此时需用到转置卷积。

2**)**在语义分割中,会在编码器中用卷积层提取特征,然后在解码器中恢复原先尺寸,从而对原图中的每个像素分类。该过程同样需用转置卷积。经典方法有 FCN U-net

3)CNN 可视化:通过转置卷积将 CNN 的特征图还原到像素空间,以观察特定特征图对哪些模式的图像敏感。

6**.**代码实现

Pytorch**(参考)**

import torch.nn as nn
import torch
# 输入值
im = torch.randn(1, 1, 5, 5)
# 转置卷积使用
c = nn.ConvTranspose2d(1, 1, kernel_size=2, bias=False)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))

结果展示


三、膨胀卷积( Dilated Convolution,又叫空洞卷积、扩张卷积

更详细请看笔者的博文:

膨胀卷积(Dilated convolutions)(又成空洞卷积、扩张卷积)_caip12999203000的博客-CSDN博客

1.概念或背景

在这里插入图片描述

膨胀卷积是在标准卷积的Convolution map的基础上注入空洞,以此来增加感受野(reception field)。因此,膨胀卷积在标准卷积的基础上又多了一个超参数(hyper-parameter)称之为膨胀率(dilation rate),该超参数指的是kernel的间隔数量。膨胀卷积是****为解决语义分割任务而提出的。

**2.**卷积后的尺寸大小转换公式

(其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,a为膨胀率,W2为输出的矩阵大小)

**3.**功能

增大感受野,卷积核中间填充0。在于普通卷积相同的计算条件下的情况下,该卷积可以增大特征图的感受野。另外,通过修改padding的大小,可以保证输入输出特征图的shape不变。

4.各个指标比较(参数量、计算量、感受野)

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N, a为膨胀率,卷积核大小为DK  x DK ,忽略偏执b。)

**5.**膨胀卷积用途

1)膨胀卷积**(Dilated Convolution**),广泛应用于语义分割与目标检测等任务中,语义分割中经典的deeplab系列与DUC对空洞卷积进行了深入的思考。目标检测中SSDRFBNet,同样使用了空洞卷积。

2)ESPNet**,** ESP模块模块包含point-wise****卷积空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相比于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高。(参考

**6.**代码实现

Pytorch**(参考)**

膨胀卷积中,padding与dilation所使用的因子需要是相同的,否则,可能会导致图像的尺寸会发生变化,就不是膨胀卷积了。

import torch.nn as nn
import torch
# 输入值
im = torch.randn(1, 1, 5, 5)
# 膨胀卷积使用
dilation=2 # 膨胀率
c=nn.Conv2d(1, 1, kernel_size=2, stride=2,
                    padding=dilation, bias=False, dilation=dilation)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))

结果展示:


四、分组卷积(Group Convolution)

更详细请看笔者的博文:

组卷积和深度可分离卷积_caip12999203000的博客-CSDN博客

1.概念或背景

分组卷积(Group Convolution)顾名思义,在对特征图进行卷积的时候,首先对特征图分组再卷积。

**2.**卷积后的尺寸大小转换公式

(其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,W2为输出的矩阵大小)

**3.**功能

**1)**减少参数量,分成G组,则该层的参数量减为原来的1/G。
2)分组卷积可以看做是对原来的特征图进行了一个dropout,有正则的效果

4.各个指标比较(参数量、计算量、感受野)

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N,卷积核大小为DK  x DK ,g为组数,忽略偏执b。)

**5.**分组卷积用途

**1)**分组卷积,最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处理,最有把多个GPU的结果进行融合。

2) IGCV1**,**   简单通道的分组,都是只有一个分组,而以IGCV(Interleaved Group Convolutions交替组卷积)系列为代表的模型采用了多个分组卷积结构级联的形式。(参考

6**.**代码实现

Pytorch**(参考)**

import torch.nn as nn
import torch
import numpy as np
# 输入值
im = torch.randn(1, 4, 5, 5)
# 分组卷积使用
groups = 2 # 组数
c=nn.Conv2d(4, 2, kernel_size=2, stride=2,
                     padding=2, groups=groups, bias=False)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))


![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)

最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐