百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

轻松学Pytorch-详解Conv2D卷积处理

liuian 2025-05-08 19:40 60 浏览

Conv2D基本原理与相关函数

常见的图像卷积是二维卷积,而深度学习中Conv2D卷积是三维卷积,图示如下:

Pytroch中的Conv2D是构建卷积神经网络常用的函数,支持的输入数据是四维的tensor对象,格式为NCHW,其中N表示样本数目、C表示通道数目彩色图像为3,灰度图像为1、H跟W分别表示图像高与宽。它们的计算方法可以图示如下:

Conv2D在pytorch中有两个相关的API函数,分别如下:

torch.nn.Conv2d(
    in_channels, // 输入通道数
    out_channels, // 输出通道数
    kernel_size, // 卷积核大小
    stride=1, // 步长
    padding=0, // 填充
    dilation=1, // 空洞卷积支持
    groups=1, // 分组卷积支持
    bias=True, // 偏置
    padding_mode='zeros' // 填0
)


torch.nn.functional.conv2d(
    input, // 输入数据
    weight, // 卷积核
    bias=None, // 偏置
    stride=1, // 步长
    padding=0, // 填充
    dilation=1, // 空洞
    groups=1 // 分组
)

其中torch.nn.Conv2d主要是在各种组合的t.nn.Sequential中使用,构建CNN模型。
torch.nn.functional.conv2d更多是在各种自定义中使用,需要明确指出输入与权重filters参数。

Pytorch图像卷积处理

下面的代码演示如何使用
torch.nn.functional.conv2d实现图像的模糊、梯度、拉普拉斯等常见的图像卷积处理,代码实现与运行演示分别如下:

图像模糊(左侧为原图):

图像梯度(左侧为原图):

图像拉普拉斯(左侧为原图):

边缘提取(左侧为原图):

Pytoch也可以像OpenCV一样随意完成各种常规的图像卷积功能了!上面几个演示的源码如下所示:

import torch
import torch.nn.functional as F
import cv2 as cv
import numpy as np


def image_blur():
    image = cv.imread("D:/images/1024.png", cv.IMREAD_GRAYSCALE)
    h, w = image.shape
    print(h, w)
    cv.imshow("input", image)
    img = np.reshape(image, (1, 1, h, w))
    img = np.float32(img)
    k = torch.ones((1, 1, 7, 7), dtype=torch.float) / 49.0
    z = F.conv2d(torch.from_numpy(img), k, padding=3)
    result = z.numpy()
    print(result.shape)
    result = np.reshape(result, (h, w))
    cv.imshow("blur", np.uint8(result))
    cv.waitKey(0)
    cv.destroyAllWindows()


def image_gradient():
    image = cv.imread("D:/images/1024.png", cv.IMREAD_GRAYSCALE)
    h, w = image.shape
    print(h, w)
    cv.imshow("input", image)
    img = np.reshape(image, (1, 1, h, w))
    img = np.float32(img)
    k = torch.tensor([-1, -2, -1, 0, 0, 0, 1, 2, 2], dtype=torch.float)
    k = k.view(1, 1, 3, 3)
    print(k.size(), k)
    z = F.conv2d(torch.from_numpy(img), k, padding=1)
    result = z.numpy()
    print(result.shape)
    result = np.reshape(result, (h, w))
    cv.normalize(result, result, 0, 1.0, cv.NORM_MINMAX)
    cv.imshow("gradint", np.uint8(result*255))
    cv.waitKey(0)
    cv.destroyAllWindows()


def image_laplian():
    image = cv.imread("D:/images/1024.png", cv.IMREAD_GRAYSCALE)
    h, w = image.shape
    print(h, w)
    cv.imshow("input", image)
    img = np.reshape(image, (1, 1, h, w))
    img = np.float32(img)
    k = torch.tensor([-1, -1, -1, -1, 8, -1, -1, -1, -1], dtype=torch.float)
    k = k.view(1, 1, 3, 3)
    print(k.size(), k)
    z = F.conv2d(torch.from_numpy(img), k, padding=1)
    result = z.numpy()
    print(result.shape)
    result = np.reshape(result, (h, w))
    cv.normalize(result, result, 0, 1.0, cv.NORM_MINMAX)
    cv.imshow("reshape", np.uint8(result*255))
    cv.waitKey(0)
    cv.destroyAllWindows()


def image_edge():
    image = cv.imread("D:/images/1024.png", cv.IMREAD_GRAYSCALE)
    h, w = image.shape
    print(h, w)
    cv.imshow("input", image)
    img = np.reshape(image, (1, 1, h, w))
    img = np.float32(img)
    k = torch.tensor([-1, 0, 0, 1], dtype=torch.float)
    k = k.view(1, 1, 2, 2)
    print(k.size(), k)
    z = F.conv2d(torch.from_numpy(img), k, padding=0)
    result = z.numpy()
    print(result.shape)
    result = np.reshape(result, (h-1, w-1))
    cv.imshow("reshape", np.uint8(abs(result)))
    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == "__main__":
    image_edge()

相关推荐

苹果一体机双系统怎么切换(苹果一体机双系统怎么切换按哪个键)

苹果一体机双系统切换方法如下:1.在苹果电脑的桌面中点击左上角的苹果图标,等待弹出序列栏。2.在弹出的下拉选项中点击系统偏好设置进入,等待跳转页面。3.跳转页面之后,在系统偏好设置的页面中点击启动磁盘...

2025爱奇艺vip激活码(爱奇艺会员官方激活码)

2022爱奇艺腾讯优酷会员,要根据具体的需求来选择。喜欢青春偶像剧类型的可以选择爱奇艺视频;喜欢一些自制综艺和自制剧的优酷视频会员是不错的选择;腾讯视频定位就是主打大IP剧和一些热门综艺的转播,一...

安卓系统强制卸载工具(安卓 强制卸载)
  • 安卓系统强制卸载工具(安卓 强制卸载)
  • 安卓系统强制卸载工具(安卓 强制卸载)
  • 安卓系统强制卸载工具(安卓 强制卸载)
  • 安卓系统强制卸载工具(安卓 强制卸载)
ie浏览器手机版官网下载(ie游览器手机版下载)

如果您在使用IE浏览器时遇到无法下载的问题,以下是一些常见的解决办法:1.清除浏览器缓存:打开IE浏览器,依次点击工具(齿轮图标)->Internet选项->常规选项->...

office2003属于什么软件(word2003属于什么软件)

是一套Office2003专业版的精简版,包含常用的Word、Excel、PowerPoint三个应用,使用者甚多。楼主如果有需要,请上电脑在本帖下载我的附件。我见过最多的,是2013或者以上的(因为...

电脑鼠标设置在哪里调(电脑鼠标在哪里去调)

电脑点击开始,在菜单中找到“控制面板”,点击“控制面板”进入,找到“鼠标”点击进入在打开的窗口中选择“指针”,选择指针样式,可点击浏览,找到文件夹下,查看哪些指针可选择。可按路径把喜欢的图标放进去找到...

ie浏览器怎么下载到电脑桌面

工具/材料:电脑1、首先在电脑桌面里找到这台电脑,双击将它打开。2、打开之后,在里面找到吸C盘,双击将它打开。3、然后在C盘里面找到Programfiles这个文件,将此文件打开。4、打开之后,在里...

主板bios没有csm选项(主板没有csm怎么办)

对普通用户最大的区别是,符合标准的bootloader必须为UEFI保证二进制兼容。结果:32位UEFI固件只能启动32位操作系统。64位UEFI固件只能启动64位操作系统。由于历史因素、OEM政策,...

电脑中病毒了怎么解决(电脑中病毒了怎么解决方法)

电脑因为中毒而不能上网,解决办法如下:1、首先第一步就是杀毒,对一个菜鸟而言只能用杀毒软件来杀毒了,当然,因为病毒更新往往快于杀毒软件的更新速度,所以杀毒有时候是解决不了问题的额,也就是说很多毒是杀...

win10连接网络打印机(win10连接网络打印机成功后不打印)
  • win10连接网络打印机(win10连接网络打印机成功后不打印)
  • win10连接网络打印机(win10连接网络打印机成功后不打印)
  • win10连接网络打印机(win10连接网络打印机成功后不打印)
  • win10连接网络打印机(win10连接网络打印机成功后不打印)
电脑主机启动一下又灭一直反复

故障分析:电脑开机转一下就停然后再转这是由于电脑硬件接触不良,主板或后续硬件短路,电源故障等造成的。1、内存松了或者金手指氧化这种可能性最大,很多用户都是这种方法解决的。首先我们将内存取下,取下也十分...

如何设开机密码 电脑(如何设置开机电脑密码)

方法如下1.建立开机密码。进入BIOS系统界面,点击键盘的Del按键,点击选项中的设置用户密码。设置完毕进入高级设置,点击密码选项列表的系统密码,点击保存并推出即可;2.设置系统密码。进入系统界...

lenovo联想官方商城(联想电脑官方网站商城)

www.lenovo.com.cn联想集团(下称联想)是一家成立于中国、业务遍及180个市场的全球化科技公司。联想聚焦全球化发展,树立了行业领先的多元企业文化和运营模式典范,服务全球超过10亿用户。作...

我的世界国际版官网(我的世界国际版如何下载)

官网入口:https://www.lezhin.com/这是一款很多用户都在使用的观看各种漫画内容的软件,用户在使用的过程中能够快速了解到各种自己感兴趣的漫画。1可以通过搜索引擎找到植物大战僵尸2国...

我要qq号码免费申请(qq号申请免费申请号码官网)

你可以到腾讯官方网站,去免费注册一个QQ,可以不交费的,是有免费的账号和密码。操作方法:1.打开手机qq,用手指轻点qq图标即可。进入qq后,会进入登录或注册新用户页面。点击新用户,进入注册页面2....