网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
特征图变大**(上采样)****。**将低分辨率的特征图样上采样到原始图像的分辨率大小,以给出原始图片的分割结果。
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对空洞卷积进行了深入的思考。目标检测中SSD与RFBNet,同样使用了空洞卷积。
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()))
结果展示:
五、深度可分离卷积
更详细请看笔者的博文:
组卷积和深度可分离卷积_caip12999203000的博客-CSDN博客
在计算资源受限制的移动端设备上,常规的卷积操作由于计算量大,经常难以满足实际运行速度的要求,这时深度可分离卷积(Depthwise Separable Convolution)就派上了用场。**深度可分离卷积是由Depthwise(DW)卷积与Pointwise(PW)卷积组成。该结构和常规卷积类似,可用来提取特征,但相比常规卷积,其参数量和运算成本较低,所以在一些轻量级网络中经常用到此结构,如MobileNet、**ShuffleNet。
1.逐通道卷积(Depthwise **Convolution即DW卷积)**
Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积,这个过程产生的Feature Map通道数和输入的通道数一样。
2.逐点卷积(Pointwise Convolution即PW卷积**)**
Pointwise Convolution的运算与常规卷积非常相似,它的卷积核大小****1x1xM,M为上一层的通道数,所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个Feature map,卷积核的shape即为:1 x 1 x 输入通道数 x 输出通道数)
**3.**深度可分离卷积的功能
可以看出运用深度可分离卷积比普通卷积减少了所需要的参数。重要的是深度可分离卷积将以往普通卷积操作同时考虑通道和区域改变成,卷积先只考虑区域,然后再考虑通道。实现了通道和区域的分离。
**4.**各个指标比较(参数量、计算量、感受野)
(输入的通道数为M,尺寸为DF x DF ,输出通道数为N, a为膨胀率,卷积核大小为DK x DK , n为卷积核的个数,忽略偏执b。)
5.深度可分离卷积用途
1)在一些轻量级网络中经常用到此结构,如MobileNet****、ShuffleNet、SqueezeNet等
- Xception**,** 基 于Inception系列网络结构的基础上,结合depthwise separable convolution, 就是Xception。(参考)
6**.**代码实现
Pytorch
import torch.nn as nn
import torch
import numpy as np
# 输入值
im = torch.randn(1, 4, 5, 5)
# 深度可分卷积使用
hidden_channel = 4 # 组数
out_channel = 1
# DW卷积
c1 = nn.Conv2d(hidden_channel, hidden_channel, kernel_size=2, stride=2, padding=2, groups=hidden_channel, bias=False)
# PW卷积
c2 = nn.Conv2d(hidden_channel, out_channel, kernel_size=1, bias=False)
output1 = c1(im)
output2 = c2(output1)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output2.shape)
print("卷积核参数:\n",list(c2.parameters()))
结果展示:
六、总结
上面是笔者对于前面几个博客关于卷积的总结,分别从概念、背景、原理、****参数量、计算量、感受野、各种卷积的优点以及在网络的应用展开讲解。如果您感觉有用的话,请点个👍,谢谢。
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!