深度学习_卷积

news2025/5/24 15:44:07

卷积

卷积(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 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位浮点数
im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))
# 将numpy数组转换为pytorch张量,并将其形状调整为(1,1,im.shape[0], im.shape[1])即卷积层期望输入具有四个维度:(batch_size, channels, height, width)
conv1 = nn.Conv2d(1, 1, 3, bias=False)
# 输入通道数1表示灰度图像,输出通道数1表示生成的特征图的数量。卷积核大小为 3,表示一个 3x3 的卷积核。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))  # Sobel边缘检测卷积核,并将其形状调整为(1, 1, 3, 3)
conv1.weight.data = torch.from_numpy(sobel_kernel)
edge1 = conv1(Variable(im))  # 张量 im 传递给卷积层,得到了输出张量 edge1
edge1 = edge1.data.squeeze().numpy()  # 张量中提取NumPy数组,并使用.squeeze()去除维度为1的尺寸
plt.imshow(edge1, cmap='gray')
plt.show()

结果:
在这里插入图片描述

torch.nn.functional.conv2d() 对图像进行操作:

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位浮点数
im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))
sobel_kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')
sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3))
weight = Variable(torch.from_numpy(sobel_kernel))
edge2 = F.conv2d(Variable(im), weight)
edge2 = edge2.data.squeeze().numpy()
plt.imshow(edge2, cmap='gray')
plt.show()

结果图:
在这里插入图片描述

  • 可以看到上面两种方法所得结果相同,那么区别是什么呢?

分析

在PyTorch中,torch.nn.Conv2d()torch.nn.functional.conv2d()都是用于进行二维卷积操作的函数,区别在于:

  1. 模块(Module)与函数(Function):

    • torch.nn.Conv2d()是一个模块(Module),属于PyTorch的神经网络模块之一。这意味着它是一个具有状态的对象,可以在神经网络中被实例化、调用,并且具有可学习的参数。
    • torch.nn.functional.conv2d()是一个函数(Function),属于PyTorch的函数式接口。这意味着它是一个纯函数,不包含任何可学习的参数,通常在用户需要更大的灵活性时使用。
  2. 使用方式:

    • torch.nn.Conv2d()通常与其他模块一起使用,例如在构建神经网络时作为网络的一部分。它被实例化为一个对象,可以通过调用该对象进行卷积操作,并且包含了可学习的卷积核参数。
    • torch.nn.functional.conv2d()通常在用户需要在神经网络的前向传播中进行卷积操作时使用。由于它是一个函数,可以直接调用该函数进行卷积操作,但需要手动传递卷积核参数。
  3. 参数传递:

    • 在使用torch.nn.Conv2d()时,通常需要将输入数据和卷积核参数传递给该对象的实例,并且可以通过调用实例进行卷积操作。
    • 在使用torch.nn.functional.conv2d()时,需要手动传递输入数据、卷积核参数以及其他参数,如步幅(stride)、填充(padding)等。

总的来说,torch.nn.Conv2d()提供了更加面向对象的使用方式,适用于构建神经网络模型;
torch.nn.functional.conv2d()则更加灵活,适用于需要在自定义的前向传播函数中进行卷积操作的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1528502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KKVIEW远程: TODESK退出了还能远程吗

Todesk退出了还能远程吗 当我们谈论Todesk或其他远程桌面软件时,一个经常被提及的问题是:当我退出Todesk后,是否仍然可以远程访问我的计算机?为了回答这个问题,我们首先需要了解Todesk的工作原理和远程访问的基本条件…

WhatsApp商业推广有哪些推广技巧?

在现代化商业,与用户创造紧密、良好的互动体验,建立强大的品牌形象以及找到最佳的推广途径,变得尤为重要。而WhatsApp作为全球使用最广泛的即时通讯应用之一,成为无数企业选择优选的推广平台。那么,在WhatsApp商业推广…

图书推荐|西门子S7-1200 PLC编程与应用实例

一线资深工程师的全彩版PLC实战教程,软硬件及编程全方位详解(配视频教学) 本书内容 《西门子S7-1200 PLC编程与应用实例》对西门子S7-1200 PLC的硬件和编程软件的功能进行详细讲解,内容包括PLC编程基础、博途TIA软件入门、指令介…

使用OCC进行切割操作

OCC中切割操作以一个平面作为切割面,对物体进行切割操作 //要操作的图形 TopoDS_Shape shape getHanleShape(); //构造切割面 TopoDS_Shape faceShape getSplitterFace(); //切割操作 BOPAlgo_Splitter splitter; splitter.AddArgument(shape); splitter.AddTool(…

13.Python从入门到精通—Python 集合操作与方法概览

13.Python从入门到精通—Python 集合操作与方法概览 Python 集合集合的基本操作1、添加元素2、移除元素3、计算集合元素个数4、清空集合5、判断元素是否在集合中存在 集合内置方法完整列表 Python 集合 在Python中,集合是一种无序、不重复的数据类型。集合通常用于…

unicloud快速上手,unicloud项目创建以及项目创建注意事项

uniCloud快速上手 本项目地址https://gitee.com/qayrup/unicloud-demo 创建unicloud项目 新建一个uni项目,并选择启用unicloud,选择阿里云或腾讯云 阿里云和支付宝云都支持一个月免费的云,如果只想体验啥的,可以选择这两个, 但是需要注意,支付宝云需要配置跨域,否则很多云函…

0基础学习VR全景平台篇第145篇:图层控件功能

大家好,欢迎观看蛙色VR官方——后台使用系列课程!这期,我们将为大家介绍如何使用图层控件功能。 一.如何使用图层控件功能? 进入作品编辑页面,点击左边的控件后就可以在右边进行相应设置。 二.图层控件有哪些功能&am…

C++有关内存的那些事

个人主页:PingdiGuo_guo 收录转栏:C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数…

英语广场杂志英语广场杂志社英语广场编辑部2024年第3期目录

英语翻译理论与实践 浅析钱钟书“化境论”与文言文英译的适配度 冯睿;姚锦宁;李佳彧; 3-6《英语广场》投稿:cn7kantougao163.com 目的论视角下《写作、阅读和演讲的艺术》的翻译分析报告 张俊怡; 7-10 新加坡籍译者温宏文翻译行为研究 周梦; 11-14 …

CVE-2024-24112 XMall后台管理系统 SQL 注入漏洞分析

------作者本科毕业设计项目 基于 Spring Boot Vue 开发而成...... [Affected Component] /item/list /item/listSearch /sys/log /order/list /member/list (need time-based blind injection) /member/list/remove 项目下载地址 Exrick/xmall: 基于SOA架构的分布式…

百年难遇:3款良心好用的国产软件,常被误以为是外国佬开发

许多出色的国产软件,但由于某些特殊原因,我们常常错过了它们。 今天,笔者将向大家推荐三款电脑必备的软件,每一款都堪称神器。 Teamind Teamind是一款功能强大的在线白板工具,支持多人协作,成为众多居家…

收银软件多少钱一套?亿发全面解析超市收银系统软件价位

当超市经营达到一定规模时,商户通常会选择配置收银系统软件,以提升收银效率和为顾客提供更完善的购物体验。然而,人们常问:收银系统软件一套需要多少钱?安装一个收银系统又需要多少费用呢?了解收银系统软件…

JDK1.8安装环境变量配置检测是否安装成功

前言 目前市面上最常用的还是java1.8和Mysql5.7(企业)2024 安装包 已上传CSDN,审核中 JDK安装细节 注:如果怕麻烦就直接安装在C盘(默认) 环境变量配置 Win10打开左下角图标点击系统,下滑点…

ET框架新起一个服务及实现服务之间的消息通讯

ET框架是熊猫大大写的双端框架,游戏客户端和服务端都是用C#语言来编写 新起一个服务名比如叫做Activity 1.配置文件StartSceneConfig 2. SceneFactory switch (scene.SceneType) {case SceneType.Activity:break; } 定义SceneType枚举类型 public enum SceneTyp…

计算机网络——物理层(物理传输介质和物理层的设备)

计算机网络——物理层(物理传输介质和物理层的设备 物理传输介质导向性传输介质双绞线同轴电缆光纤 非导向性传输介质无线电波多径效应 微波地面微波通信ISM 频段 卫星通信 物理层设备中继器集线器中继器和集线器的区别 我们今天进入物理层的物理传输介质和物理层的…

【原创】手动安装open-webui,非官方docker安装方法,可汉化ui

open-webui是一个为LLMs(大型语言模型)设计的友好型Web用户界面,支持Ollama和OpenAI兼容的API。它提供了直观的聊天界面、响应式设计、快速响应性能、简易安装、代码语法高亮、Markdown和LaTeX支持、本地RAG集成、Web浏览能力、提示预设支持、…

Vue 中使用事件总线来进行组件间通信($emit()、$on() 和 $off())

使用场景: 上一篇文章中写到的: echarts图表左击显示自定义弹框,右击取消自定义弹框 结构图:(removet修改为remove) 假设这个echarts图表是子组件B页面中。而父页面A的自定义弹框标签里调用了子组件B&am…

如何使用生成式AI来制定SEO内容策略?

SEO内容策略是一系列旨在优化网站内容以提高其在搜索引擎中排名的行动计划,从而增加网站流量并提升品牌影响力。在当今互联网信息海量的情况下,优秀的SEO内容策略可以帮助您的网站脱颖而出,吸引更多目标用户。 背景知识 SEO(搜索…

基于Java中的SSM框架实现任务发布接收系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现任务发布接收系统演示 摘要 在如今的互联网发展的时代,互联网成了时代的主角,是这个时代的超级呈现家。在互联网的大家族中,任务发布永远是一个关键点。因为我们所有人离不开任务的发布与任务的管理,因为…

【经验分享】如何在IDEA中快速学习|审查|复习代码工程?

在IDEA中快速学习或审查工程 必要性 提高代码质量和可维护性熟悉项目结构和逻辑发现优化机会知识共享和传承规范团队实践 常用操作 快速浏览工程结构,类,方法,确定位置:“Structure” 查看类、方法或变量的所有引用位置&#…