当前位置: 首页 > news >正文

Pytorch之卷积操作

卷积是一种基本的数学操作,常用于信号处理和图像处理领域。在计算机视觉中,卷积操作是一种重要的技术,用于提取图像的特征并进行图像处理。

卷积操作基于一个卷积核(也称为滤波器或权重),它是一个小的矩阵或张量。卷积操作通过将卷积核与输入数据进行点乘,并将结果求和来计算输出数据的每个元素。

在二维图像处理中,卷积操作可以理解为在图像上滑动卷积核,并在每个位置上执行一系列乘法和求和操作。卷积核的大小和形状决定了卷积操作的感知范围和特征提取能力。

卷积操作具有以下特点和应用:

1. 特征提取:卷积操作可以通过学习适当的卷积核来提取图像的不同特征,例如边缘、纹理和形状等。不同的卷积核可以捕捉不同的特征。

2. 参数共享:在卷积神经网络中,卷积层的卷积核在整个图像上共享参数。这种参数共享的特点使得网络可以更有效地学习和表示图像的特征。

3. 尺寸缩减:卷积操作可以通过选择适当的步幅(stride)和填充(padding)来控制输出特征图的尺寸。步幅定义了卷积核在输入上滑动的距离,而填充可以在输入周围添加额外的像素,以控制输出的尺寸。

4. 图像处理:卷积操作在图像处理中有广泛的应用,例如边缘检测、模糊、锐化和纹理分析等。通过选择不同的卷积核,可以实现各种图像处理效果。

在Pytorch 中使用卷积操作:

import torch
import torch.nn.functional as F
#输入图像
input=torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]])
#卷积核
kernel=torch.tensor([[1,2,1],[0,1,0],[2,1,0]])
#首先查看输入图像和卷积核的尺寸
print(input.shape)
print(kernel.shape)
#输出结果为:
#torch.Size([5, 5])
#torch.Size([3, 3])
#注意:此尺寸是不符合要求的,因此要做一些尺寸变换:
input=torch.reshape(input,(1,1,5,5))
kernel=torch.reshape(kernel,(1,1,3,3))
print(input.shape)
print(kernel.shape)#调用卷积层
#torch.nn.Conv2d(in_channels, out_channels, kernel_size(卷积核), stride=1, padding=0(扩充),
#                dilation=1, groups=1(常为一), bias=True(偏置), padding_mode='zeros', device=None, dtype=None)
output1=F.conv2d(input,kernel,stride=1)#import torch.nn.functional as F
#stride=1 步长为1,包括左右上下
print(output1)
#stride=2 步长为2
output2=F.conv2d(input,kernel,stride=2)
print(output2)#padding=1的使用:扩充,上下左右扩充1
output3=F.conv2d(input,kernel,stride=1,padding=1)
print(output3)

output1的输出结果:

tensor([[[[10, 12, 12],
          [18, 16, 16],
          [13,  9,  3]]]])

output2的输出结果:

tensor([[[[10, 12],
          [13,  3]]]])

output3的输出结果:

tensor([[[[ 1,  3,  4, 10,  8],
          [ 5, 10, 12, 12,  6],
          [ 7, 18, 16, 16,  8],
          [11, 13,  9,  3,  4],
          [14, 13,  9,  7,  4]]]])

请注意,PyTorch中的卷积操作默认使用CPU进行计算。如果希望在GPU上执行卷积操作以加快计算速度,可以将输入图像和卷积层对象移动到GPU上,如下所示:

# 将输入图像和卷积层对象移动到GPU上
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
image = image.to(device)
conv_layer = conv_layer.to(device)# 执行卷积操作
output = conv_layer(image)

上述代码中,首先检查是否有可用的GPU设备。如果有,将创建一个cuda设备对象,否则使用cpu设备。然后,使用to方法将输入图像和卷积层对象移动到相应的设备上。最后,执行卷积操作,并将结果存储在output中。

http://www.lryc.cn/news/311516.html

相关文章:

  • 2024年春招小红书前端实习面试题分享
  • 软件测试--性能测试工具JMeter
  • c++/c图的邻近矩阵表示
  • cocos-lua定时器用法
  • 激活函数Swish(ICLR 2018)
  • 【C++ 标准流,文件流】
  • 【排序】详解冒泡排序
  • 什么是Docker容器?
  • (C++练习)选择题+编程题
  • 【鸿蒙开发】第十五章 ArkTS基础类库-并发
  • 华为数通方向HCIP-DataCom H12-821题库(多选题:21-40)
  • 【简单模拟】第十三届蓝桥杯省赛C++ B组《刷题统计》(c++)
  • IO-DAY3
  • python实现常见一元随机变量的概率分布
  • 微服务学习
  • 【.NET Core】深入理解IO - 读取器和编写器
  • 【Java项目介绍和界面搭建】拼图小游戏——添加图片
  • 「MySQL」基本操作类型
  • Android 14 权限
  • Springboot整合SSE实现实时消息推送
  • 在pytorch中利用GPU训练神经网络时代码的执行顺序并提高训练效率
  • vue3学习
  • 毫秒生成的时间戳如何转化成东八区具体时间
  • 02. Nginx入门-Nginx安装
  • leetcode73. 矩阵置零
  • 【中间件】RabbitMQ入门
  • rtt的io设备框架面向对象学习-电阻屏LCD设备
  • 商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景
  • 蓝桥杯刷题--python-16
  • 闰年计算中的计算机Bug