torch 读取图像并进行卷积操作-torch.nn.Conv2d

import torch
import torch.nn as nn
import numpy as np
import cv2



img = cv2.imread('a.png', 1).astype(np.uint8)
img = cv2.resize(img, (380,380))
img = img / 255.
img = torch.from_numpy(img)
img = torch.tensor(img, dtype=torch.float32)
img = img.unsqueeze(0) #在第一维度上增加一个维度,作为batch size大小
img = img.permute(0, 3, 1, 2) # 将图像channel提到前面即 [batch size, width, height, channel]-> [batch size, channel, width, height]

embed_dim = 768
in_c = 3
patch_size = 32
patch_size = (patch_size, patch_size)
proj = nn.Conv2d(in_c, embed_dim, kernel_size=patch_size, stride=patch_size)
a = proj(img).flatten(2).transpose(1,2)

torch.nn.Conv2d(in_channelsout_channelskernel_sizestride=1padding=0dilation=1

groups=1bias=Truepadding_mode='zeros'device=Nonedtype=None)

  • in_channels:输入的通道数目    【必选】
  • out_channels: 输出的通道数目 【必选】
  • kernel_size:卷积核的大小          【必选】
  • stride: 卷积每次滑动的步长为多少,默认是 1 【可选】
  • padding: 设置在所有边界增加 值为 0 的边距的大小(也就是在feature map 外围增加几圈 0 ),例如当 padding =1 的时候,如果原来大小为 3 × 3 ,那么之后的大小为 5 × 5 。即在外围加了一圈 0 。【可选】
  • dilation:控制卷积核之间的间距 【可选】
  • groups:控制输入和输出之间的连接。【可选】

        举例来说:

        比如 groups 为1,那么所有的输入都会连接到所有输出

        当 groups 为 2的时候,相当于将输入分为两组,并排放置两层,每层看到一半的输入通道并

        产生一半的输出通道,并且两者都是串联在一起的。这也是参数字面的意思:“组” 的含义。

        需要注意的是,in_channels 和 out_channels 必须都可以整除 groups,否则会报错(因为要

        分成这么多组啊,除不开你让人家程序怎么办?)

  • bias: 是否将一个 学习到的 bias 增加输出中,默认是 True 。【可选】
  • padding_mode : 字符串类型,接收的字符串只有 “zeros” 和 “circular”。【可选】
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch中,可以使用`torch.nn.Conv2d()`模块对图像进行卷积操作。这个模块可以自动进行权重更新和梯度计算,是深度学习中常用的卷积操作模块之一。 下面是一个简单的Python代码示例,演示如何使用`torch.nn.Conv2d()`模块对图像进行卷积操作: ```python import torch import torch.nn as nn import numpy as np import cv2 # 读入图像 img = cv2.imread('image.jpg', 0).astype(np.float32) # 转换成Tensor,并添加一个维度 img_tensor = torch.from_numpy(img).unsqueeze(0).unsqueeze(0) # 定义卷积核 kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]).astype(np.float32) kernel_tensor = torch.from_numpy(kernel).unsqueeze(0).unsqueeze(0) # 定义卷积模型 conv = nn.Conv2d(1, 1, kernel_size=3, padding=1, bias=False) # 将卷积核赋值给模型的权重 conv.weight.data = kernel_tensor # 对图像进行卷积 output_tensor = conv(img_tensor) # 将输出Tensor转换为numpy数组 output = output_tensor.squeeze().detach().numpy() # 显示原始图像卷积后的图像 cv2.imshow('Original Image', img.astype(np.uint8)) cv2.imshow('Convolved Image', output.astype(np.uint8)) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,我们首先使用OpenCV库读入一张灰度图像,并将其转换为PyTorch Tensor类型。然后,我们定义一个3x3的卷积核,并将其转换为Tensor类型。接着,我们定义一个`nn.Conv2d()`模块,并将其权重设置为卷积核。最后,我们将输入图像Tensor传递给卷积模块,并将输出Tensor转换为numpy数组,最终显示原始图像卷积后的图像。 需要注意的是,`nn.Conv2d()`模块会自动处理输入和输出的通道数,因此需要在模块定义时指定输入和输出的通道数。在本例中,我们只使用了灰度图像,因此输入和输出通道数均为1。另外,我们还使用了`padding=1`参数来保持输出图像的大小与输入图像相同。你可以根据需要调整这些参数和卷积核的权重,以获得不同的卷积效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值