卷积常用于特征提取
实验过程中注意认真体会“特征提取”,弄清楚为什么卷积能够提取特征。
目录
作业1
编程实现
卷积神经网络工作原理的直观理解_superdont的博客-CSDN博客
1. 图1使用卷积核,输出特征图
2. 图1使用卷积核,输出特征图
3. 图2使用卷积核,输出特征图
4. 图2使用卷积核,输出特征图
5. 图3使用卷积核,, ,输出特征图
作业2
一、概念
用自己的语言描述“卷积、卷积核、特征图、特征选择、步长、填充、感受野”。
二、探究不同卷积核的作用
参考:Image Kernels explained visually (setosa.io)
三、编程实现
- 实现灰度图的边缘检测、锐化、模糊。(必做)
- 调整卷积核参数,测试并总结。(必做)
- 使用不同尺寸图片,测试并总结。(必做)
- 探索更多类型卷积核。(选做)
- 尝试彩色图片边缘检测。(选做)
总结
本次作业的心得体会,重点谈谈卷积能够提取特征的原理。
参考代码
import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
from PIL import Image
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 #有中文出现的情况,需要u'内容
# https://blog.csdn.net/weixin_40123108/article/details/83510592
file_path = 'deer.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()
参考链接
【2021-2022 春学期】人工智能-作业4:CNN - 卷积_HBU_David的博客-CSDN博客
6.2. 图像卷积 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)