卷积
卷积(Convolution)是数学和计算机科学中的一个重要概念,特别在信号处理和图像处理中应用广泛。在信号处理领域,卷积是两个函数之间的一种数学操作,它表示两个函数的重叠部分的积分量。
在图像处理中,卷积通常用于图像滤波和特征提取。卷积操作通过将一个函数(通常是一个图像)与另一个函数(通常是一个小的滤波器或内核)进行卷积运算来生成一个新的函数(通常是一个处理后的图像)。这个滤波器或内核在输入图像上滑动,并与输入图像的局部区域进行卷积操作,从而对图像进行平滑、边缘检测、特征增强等处理。
卷积在深度学习和神经网络中也起到了重要作用。在卷积神经网络(Convolutional Neural Networks,CNNs)中,卷积层使用可学习的卷积核来提取图像的特征,从而实现图像分类、目标检测等任务。通过在网络中堆叠多个卷积层,可以逐渐提取出更加抽象和高级的特征,使网络能够对输入的图像进行更加复杂的分析和理解。
卷积在pytorch中有两种实现方式:
torch.nn.Conv2d()
torch.nn.functional.conv2d()
输入要求:
torch.autograd.Variable()
的类型:
大小是(batch, channel, H, W)
batch------一批数据的数量
channel------输入的通道数(彩色3,灰度1,卷积网络中通道数可达几十到几百个)
H------图像的高度
W------图像的宽度
实例
图像准备:
将图像放在代码相同文件夹中
加载图像并显示
python库准备:
- numpy
- torch
- matplotlib
代码:
import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
import torch.nn.functional as F
from PIL import Image
import matplotlib.pyplot as plt
im = Image.open('./cat.png').convert('L') # 打开图像文件,并将图像转换为灰度图
im = np.array(im, dtype='float32') # 将图像转换为numpy数组,数据类型是32位浮点数
# plt.imshow(im.astype('uint8'), cmap='gray') # 显示,转换为无符号8位整型
# plt.show() # 让图像窗口保持打开状态
执行代码得到小猫灰度图:
定义卷积算子进行轮廓检测:
-用 torch.nn.Conv2d()
对图像进行操作:
import numpy