NNDL 作业5:卷积

作业1

编程实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 图1使用卷积核(-1 +1),输出特征图

  2. 图1使用卷积核(-1,+1)T,输出特征图

  3. 图2使用卷积核(-1 +1),输出特征图

  4. 图2使用卷积核(-1,+1)T,输出特征图

  5. 图3使用卷积核(-1,+1)T,(-1 +1),在这里插入图片描述
    输出特征图
    代码

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 = np.array([[0,0,0,255,255,255],
               [0,0,0,255,255,255],
               [0,0,0,255,255,255],
               [0,0,0,255,255,255],
               [0,0,0,255,255,255],
               [0,0,0,255,255,255],
               [0,0,0,255,255,255]], 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, (1,2), bias=False)  # 定义卷积

sobel_kernel = np.array([[-1,1]], dtype='float32')  # 定义轮廓检测算子
sobel_kernel = sobel_kernel.reshape((1, 1, 1, 2))  # 适配卷积的输入输出
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()

在这里插入图片描述
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述
在这里插入图片描述
4.
在这里插入图片描述
5.
在这里插入图片描述
(-1 +1):
在这里插入图片描述
(-1 +1)T:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

作业2

一、概念

以下仅仅是我个人为了方便理解的认识,不一定对。
卷积:
通过函数提取一部分数据获得信息的操作。
卷积核:
卷积操作使用的函数。
特征图:
一个图像经过卷积操作后得到的具有图像特征的图。
特征选择:
百度:特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )。是指从已有的M个特征(Feature)中选择N个特征使得系统的特定指标最优化,是从原始特征中选择出一些最有效特征以降低数据集维度的过程,是提高学习算法性能的一个重要手段,也是模式识别中关键的数据预处理步骤。对于一个学习算法来说,好的学习样本是训练模型的关键。
我的理解就是将特征中自己需要的特征突出出来。
步长:
每过几个像素点进行一次卷积,步长就是确定像素点的个数。
填充:
卷积后图像会比之前小,填充就是把小了的地方填充,使卷积后和卷积前的图像大小相同。
感受野:
在卷积神经网络中,感受野的定义是卷积神经网络每一层输出的特征图上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域。

二、探究不同卷积核的作用

参考:Image Kernels explained visually (setosa.io)
在这里插入图片描述
模糊核不再强调相邻像素值的差异。
在这里插入图片描述
sobel 核用于仅显示特定方向上相邻像素值的差异。
在这里插入图片描述
浮雕核(类似于sobel核,有时被称为相同的意思)通过强调给定方向上像素的差异来产生深度的错觉。在本例中,沿从左上角到右下角的一条线的方向行驶。
在这里插入图片描述
缩进内核使映像保持不变。
在这里插入图片描述
sobel 核用于仅显示特定方向上相邻像素值的差异。
在这里插入图片描述
轮廓核(也称为“边缘”核)用于突出显示像素值的巨大差异。在新图像中,强度接近的相邻像素旁边的像素将显示为黑色,而相邻像素旁边的像素将显示为白色。
在这里插入图片描述
sobel 核用于仅显示特定方向上相邻像素值的差异。
在这里插入图片描述
锐化内核强调相邻像素值的差异。这使得图像看起来更生动。
在这里插入图片描述
sobel 核用于仅显示特定方向上相邻像素值的差异。

三、编程实现

以下用的图片是网上下载的。(好看,所以用一下)

1.实现灰度图的边缘检测、锐化、模糊。(必做)

在这里插入图片描述
模糊:
在这里插入图片描述
锐化:
在这里插入图片描述

边缘检测
在这里插入图片描述

2.调整卷积核参数,测试并总结。(必做)

这里用锐化
步长为3:
在这里插入图片描述
步长为5:
在这里插入图片描述
步长为10:
在这里插入图片描述
步长越长,图像越模糊,图像的特征可能有损失。

3.使用不同尺寸图片,测试并总结。(必做)

尺寸变小:

在这里插入图片描述
模糊
在这里插入图片描述
锐化
在这里插入图片描述
边缘检测
在这里插入图片描述
总结:
图像像素越低,效果越明显。

4.探索更多类型卷积核。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

这次作业更深入的了解了卷积的概念和特点,了解到不同的卷积核对图像的影响和作用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值