赞
踩
一般来说,一维卷积用于文本数据,二维卷积用于图像数据,对宽度和高度都进行卷积,三维卷积用于视频及3D图像处理领域(检测动作及人物行为),对立方体的三个面进行卷积 。二维卷积的用处范围最广,在计算机视觉中广泛应用。
一维卷积最简单,实质是对一个词向量做卷积,如下所示:
Pytorch中nn.Conv1d卷积运算要求输入源是3维,输入源的三个维度分别是:第一个维度代表每个序列的个数即样本数,第二个维度代表每一个序列的通道数,第三个维度代表这个词向量序列,如下所示:
import torch
import torch.nn as nn
# 输入源:1个样本,16个通道,8个数据
a = torch.randn(1,16,8)
# 卷积:输入通道为16,输出通道为1,卷积核大小 5*5
conv = nn.Conv1d(16, 1, 5)
c = conv(a)
print('a:', a.size())
print('c:', c.size())
output
a: torch.Size([1, 16, 8])
c: torch.Size([1, 1, 4])
二维卷积是最常见、用途最广泛的卷积。先假定卷积核(过滤器)数量为1,图片通道数为1,卷积操作如下:
14×14
,卷积核数量为1,图片通道数为18−5+1=4
,即4×4
这是最简单的二维卷积的场景,现在重点来了,假定图片通道数为3,卷积核的数量为1,则卷积操作如下:
6*6*3
(图片大小6*6
,三个通道),卷积核大小3*3
,filters(卷积核数量)=1,即权重矩阵是3*3*3*1
,得到的结果4*4*1
(图片大小4*4
,一个通道)3*3
的卷积核分别对图片的三个通道做卷积,然后把结果相加得到一个4*4
的图片。所以,这里卷积核w的参数个数是(3*3*3+1)*1
,(输入通道3
,卷积核大小3*3
,一个偏置,输出通道1)nn.Conv2d(3,1,kernel_size=(3,3),stride=1)
到这里可能有人会问,卷积核大小为3*3,为什么变成3*3*3了?
可以细想一下,图片的大小是6*6*3
(图片大小6*6,三个通道),也就是三维的图片,二维的卷积是肯定不能对其操作的,所以卷积核的维度会随着图片的输入通道改变,如果图片的输入通道是3,那么卷积核的维度也是3,如果图片的输入通道是1,那么卷积核的维度也是1,这也就是为什么Pytorch中nn.Conv2d的输入通道要与图片的输入通道保持一致的原因,否则无法进行卷积操作。
现在,假定图片通道数为3,卷积核的数量为2,则卷积操作如下:
6*6*3
(图片大小6*6
,三个通道),卷积核大小3*3
,filters=2,即权重矩阵是3*3*3*2
,得到的结果4*4*2
(3*3*3+1)*2
nn.Conv2d(3,2,kernel_size=(3,3),stride=2)
计算图如下所示:
二维卷积常用于计算机视觉、图像处理领域。
Pytorch中nn.Conv2d卷积运算要求输入源是4维,输入源的四个维度分别是:第一个维度代表图片的个数即样本数,第二个维度代表每一张图片的通道数,后面二个维度代表图片的像素矩阵,如下所示:
import torch
import torch.nn as nn
a = torch.Tensor(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。