深度学习基础 2D卷积(1)

news2024/10/6 16:21:19

什么是2D卷积

2D参数量怎么计算

以pytorch为例子,2D卷积在设置的时候具有以下参数,具有输入通道的多少(这个决定了卷积核的通道数量),滤波器数量,这个是有多少个滤波器,越多提取的特征就越有用,kernel_size,这个是卷积核的大小,相当于一个观测器的大小,越大参数越大其实是越强。

import torch
import torch.nn as nn

# 创建一个输入张量,假设是一张3通道的4x4图像
# 输入通道数为3
input_tensor = torch.randn(1, 3, 4, 4)  # (batch_size, in_channels, height, width)

# 创建卷积层
# 输入通道数为3,输出通道数为16,卷积核大小为3x3,步幅为1,无填充
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=0)

# 执行卷积操作
output_tensor = conv_layer(input_tensor)

# 查看输出张量的形状
print("输出张量的形状:", output_tensor.shape)
Param # = (input_channels * output_channels * kernel_height * kernel_width) + output_channels
数字图像处理中的2D卷积与自己设计的2D卷积的区别
代码如下
import cv2
import numpy as np
import torch
import torch.nn as nn
import matplotlib.pyplot as plt

# 创建一个随机的灰度图像
gray_image = np.random.rand(64, 64) * 255  # 生成0到255之间的随机灰度值
gray_image=cv2.imread("7.jpg",0)


# 将灰度图像复制到RGB通道,创建彩色图像
color_image = cv2.cvtColor(gray_image.astype(np.uint8), cv2.COLOR_GRAY2RGB)

# 定义一个锐化卷积核
# kernel = np.array([[-1, -1, -1],
#           [-1, 9, -1],
#           [-1, -1, -1]])/2 # 平均滤波器

kernel = np.array([[ 0 , 1 , 0],
          [ 1 ,-4 , 1],
          [ 0 , 1 , 0]])*128 # 平均滤波器


kernel = np.array([[ 1 , 1 , 1],
          [ 1 ,1 , 1],
          [ 1 , 1 , 1]])/9 # 平均滤波器          

# 进行基本卷积操作、OpenCV卷积操作和锐化卷积操作
basic_result = cv2.filter2D(gray_image, -1, kernel)
opencv_conv_result = cv2.filter2D(gray_image, -1, kernel)
sharpened_image = cv2.filter2D(gray_image, -1, kernel)

# 将灰度图像转换为PyTorch张量
gray_image_tensor = torch.from_numpy(gray_image).unsqueeze(0).unsqueeze(0).float() / 255.0

# 创建一个卷积层,使用相同的卷积核
conv2d_layer = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, padding=1, bias=False)
conv2d_layer.weight.data = torch.from_numpy(kernel).unsqueeze(0).unsqueeze(0).float()

# 进行PyTorch的Conv2d卷积操作
pytorch_conv_result = conv2d_layer(gray_image_tensor).squeeze().detach().numpy()


# 显示原始灰度图像、基本卷积结果、OpenCV卷积结果、锐化卷积结果和PyTorch卷积结果
plt.figure(figsize=(25, 5))
plt.subplot(1, 5, 1)
plt.title("Original Gray Image")
plt.imshow(gray_image, cmap='gray', vmin=0, vmax=255)

plt.subplot(1, 5, 2)
plt.title("Basic Convolution")
plt.imshow(basic_result, cmap='gray', vmin=0, vmax=255)

plt.subplot(1, 5, 3)
plt.title("OpenCV Convolution")
plt.imshow(opencv_conv_result, cmap='gray', vmin=0, vmax=255)

# plt.subplot(1, 5, 4)
# plt.title("Sharpened Gray Image")
# plt.imshow(sharpened_image, cmap='gray', vmin=0, vmax=255)

plt.subplot(1, 5, 4)
plt.title("PyTorch Convolution")
plt.imshow(pytorch_conv_result, cmap='gray', vmin=0, vmax=1)

plt.show()

均值滤波结果如下

采用边缘检测算法结果如下

结果如下

从结果来看卷积似乎有些区别但是功能一致具体问题处在哪,以后再尝试

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

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

相关文章

如何使用 LeiaPix 让照片动起来

在过去,想要让照片动起来,需要使用专业的软件和技巧。但是,随着科技的发展,现在只需使用一个简单的工具,就可以轻松地让照片动起来。 LeiaPix 是一个免费的在线工具,可以将静态照片转换为动画。该工具使用…

六、【常用工具组】

文章目录 移动工具组移动工具画板工具: 路径选择工具组抓手工具组 移动工具组 移动工具 在不同图层中选择时,先点击对应图层,然后按住control键,再使用鼠标拖拽即可移动图层 按CtrlT选中图层,然后右键即可进行置入、…

好工具分享:阿里云价格计算器_一键计算精准报价

阿里云服务器价格计算器,鼠标选择云服务器ECS实例规格、地域、系统盘、带宽及购买时长即可一键计算出精准报价,阿里云服务器网分享阿里云服务器价格计算器链接地址: 阿里云服务器价格计算器 先打开阿里云服务器ECS页面 aliyunfuwuqi.com/go…

阿里云服务器IP地址查询方法(公网IP和私网IP)

阿里云服务器IP地址在哪查看?在云服务器ECS管理控制台即可查看,阿里云服务器IP地址包括公网IP和私有IP地址,阿里云百科分享阿里云服务器IP地址查询方法: 目录 阿里云服务器IP地址查询 阿里云服务器IP地址查询 1、登录到阿里云服…

常见的软件脱壳思路

单步跟踪法 1.本方法采用OD载入。 2.跟踪F8,实现向下的跳。 3.遇到程序回跳按F4。 4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现! 5.刚载入程序有一个CALL的,我们就F7跟进去,不然程序很容…

【C++】一文带你走入vector

文章目录 一、vector的介绍二、vector的常用接口说明2.1 vector的使用2.2 vector iterator的使用2.3 vector空间增长问题2.4 vector 增删查改 三、总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ" 一、vector的介绍 vector…

selenium自动化测试环境安装教程

0X00前言: Selenium是一个广泛应用于Web应用程序测试的工具。它提供了一组功能强大的API,用于模拟用户与Web浏览器的交互。以下是对Selenium的简要介绍: 功能:Selenium能够自动化执行各种Web浏览器上的操作,如点击、输…

qml保姆级教程五:视图组件

💂 个人主页:pp不会算法v 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 QML系列教程 QML教程一:布局组件 文章目录 列表视图ListVi…

API基础————包

什么是包,package实际上就是一个文件夹,便于程序员更好的管理维护自己的代码。它可以使得一个项目结构更加清晰明了。 Java也有20年历史了,这么多年有这么多程序员写了无数行代码,其中有大量重复的,为了更加便捷省时地…

十天学完基础数据结构-第九天(堆(Heap))

堆的基本概念 堆是一种特殊的树形数据结构,通常用于实现优先级队列。堆具有以下两个主要特点: 父节点的值始终大于或等于其子节点的值(最大堆),或者父节点的值始终小于或等于其子节点的值(最小堆&#xff…

【2023年11月第四版教材】第18章《项目绩效域》(合集篇)

第18章《项目绩效域》(合集篇) 1 章节内容2 干系人绩效域2.1 绩效要点2.2 执行效果检查2.3 与其他绩效域的相互作用 3 团队绩效域3.1 绩效要点3.2 与其他绩效域的相互作用3.3 执行效果检查3.4 开发方法和生命周期绩效域 4 绩效要点4.1 与其他绩效域的相互…

深入了解 PostgreSQL:功能、特性和部署

PostgreSQL,通常简称为Postgres,是一款强大且开源的关系型数据库管理系统(RDBMS),它在数据存储和处理方面提供了广泛的功能和灵活性。本文将详细介绍 PostgreSQL 的功能、特性以及如何部署和使用它。 什么是 PostgreSQ…

C#,数值计算——完全VEGAS编码的蒙特·卡洛计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Complete VEGAS Code /// adaptive/recursive Monte Carlo /// </summary> public abstract class VEGAS { const int NDMX 50; const int …

【HCIE】跨域MPLS-VPN Option C 方式一

实验目的&#xff1a;R5与R7私网互通&#xff1b;R6与R8私网互通 说明&#xff1a;R1PE1&#xff1b;R2ASBR1&#xff1b;R3-ASBR2&#xff1b;R4PE2&#xff1b;R5/R6/R7/R8CE 方式一图谱 步骤1&#xff1a;给R1 R9 R2 R3 R4 配置接口IP与环回IP &#xff08;略&#xff09; …

互联网Java工程师面试题·Elasticsearch 篇·第二弹

12、详细描述一下 Elasticsearch 索引文档的过程。 协调节点默认使用文档 ID 参与计算&#xff08;也支持通过 routing &#xff09;&#xff0c;以便为路由提供合适的分片。 shard hash(document_id) % (num_of_primary_shards) 1 、当分片所在的节点接收到来自协调节点…

阿里云服务器价格计算器(一键计算精准报价)

阿里云服务器价格计算器&#xff0c;鼠标选择云服务器ECS实例规格、地域、系统盘、带宽及购买时长即可一键计算出精准报价&#xff0c;阿里云服务器网分享阿里云服务器价格计算器链接地址&#xff1a; 目录 阿里云服务器价格计算器 阿里云服务器价格计算器 先打开阿里云服务…

【Java】猫和狗接口版本思路分析

目录 猫&#x1f431;和狗&#x1f415;&#xff08;接口版本&#xff09; 画图分析 案例代码 猫&#x1f431;和狗&#x1f415;&#xff08;接口版本&#xff09; 需求&#xff1a;对猫和狗进行训练&#xff0c;它们就可以跳高了&#xff0c;这里加入了跳高功能&#xff0…

Dubbo3应用开发—Dubbo注册中心引言

Dubbo注册中心引言 什么是Dubbo注册中心 Dubbo的注册中心&#xff0c;是Dubbo服务治理的⼀个重要的概念&#xff0c;他主要用于 RPC服务集群实例的管理。 注册中心的运行流程 使用注册中心的好处 可以有效的管理RPC集群的健康情况&#xff0c;动态的上线或者下线服务。让我…

计算机网络——计算机网络的性能指标(上)-速率、带宽、吞吐量、时延

目录 速率 比特 速率 例1 带宽 带宽在模拟信号系统中的意义 带宽在计算机网络中的意义 吞吐量 时延 发送时延 传播时延 处理时延 例2 例3 速率 了解速率之前&#xff0c;先详细了解一下比特&#xff1a; 比特 计算机中数据量的单位&#xff0c;也是信息论中信…

Elasticsearch数据操作原理

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎&#xff0c;设计用于云计算环境中&#xff0c;能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性&#xff0c;可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…