人工智能作业四——卷积
一、卷积概念
1.卷积:其本质上是一种互相关函数计算或者是图像处理中的空间滤波器
数学中卷积,主要是为了诸如信号处理、求两个随机变量和的分布等而定义的运算,所以需要“翻转”是根据问题的需要而确定的
卷积神经网络中“卷积”,是为了提取图像的特征,其实只借鉴了“加权求和”的特点
另外数学中的“卷积核”都是已知的或者给定的,卷积神经网络中“卷积核”本来不是给定的,是根据数据训练学习的。
2.卷积核
其实就是一个矩阵,它的作用就是提取特征,不同卷积核提取的特征不同,网络训练的目的就是提高卷积核提取特征的能力。
3.多通道
对多通道图像进行卷积需要使用与图像图像相同的卷积核进行卷积,卷积核的每个通道对应着图像中相应的通道图像,一对一卷积,最后将每个通道的卷积后图像对应位置的卷积值相加,得到一个1通道的特征图。
多通道卷积结果的通道数==卷积核数
4.特征图
卷积的到的结果就是特征图
5.特征选择
不同卷积核可用来刻画不同选择性,要根据想要提取的图像特征选择不同的卷积核。
二、代码
程序实现:
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 pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 #有中文出现的情况,需要u'内容file_path = '1.jpg'
im = Image.open(file_path).convert('L') # 读入一张灰度图的图片
im = np.array(im, dtype='float32') # 将其转换为一个矩阵
print(im.shape[0], im.shape[1])
plt.imshow(im.astype('uint8'), cmap='gray') # 可视化图片
plt.title('原图')
plt.show()im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))
conv1 = nn.Conv2d(1, 1, 3, bias=False) # 定义卷积sobel_kernel = np.array([[-1, -1, -1],[-1, 8, -1],[-1, -1, -1]], dtype='float32') # 定义轮廓检测算子
sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3)) # 适配卷积的输入输出
conv1.weight.data = torch.from_numpy(sobel_kernel) # 给卷积的 kernel 赋值edge1 = conv1(Variable(im)) # 作用在图片上x = edge1.data.squeeze().numpy()
print(x.shape) # 输出大小plt.imshow(x, cmap='gray')
plt.show()
原图:

边缘检测:

锐化:

模糊:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
