动手实现卷积层以及卷积图像的可视化

简介: 动手实现卷积层以及卷积图像的可视化

前言


 在卷积神经网络中不可避免的就是卷积层了,卷积层作为卷积神经网络中及其重要的一环,在本章中将着重介绍卷积层以及卷积图像的可视化。



What is Conv


  卷积可以看作是输入核卷积核之间的内积运算,是两个实值函数之间的一种数学运算。在卷积运算中,通常使用卷积核将输入数据进行运算得到输出作为特征映射。


大家详细的具体运算法则可参考大学数学教材中介绍卷积一章中内容,这里不再重复叙述。


  卷积神经网络中通过输入卷积核来进行卷积操作,使输入单元(图像或特征映射)和输出单元(特征映射)之间的连接是稀疏的,这样能够减少需要训练参数的数量,从而加快网络的计算速度。


  卷积操作的参数共享特点,主要体现在模型中同-组参数可以被多 个函数或操作共同使用。在卷积神经网络中,针对不同的输入会利用同样的卷积核来获得相应的输出。这种参数共享的特点是只需要训练一个 参数集,而不需对每个位置学习一个参数集合。


由于卷积核尺寸可以远远小于输人尺寸,即减少需要学习的参数的数量,并且针对每个卷积层可以使用多个卷积核获取输人的特征映射,对数据(尤其是图像)具有很强的特征提取和表示能力,并且在卷积运算之后,使得卷积神经网络结构对输人的图像具有平移不变的性质。




How to use Conv


   在Pytorch中针对不同场景,分别有不同的卷积类,在torch.nn模块中供大家调用。


功能
torch.nn.Conv1d() 对输入的一维信号进行1D卷积
torch.nn.Conv2d() 对输入的二维信号进行2D卷积
torch.nn.Conv3d() 对输入的三维信号进行3D卷积
torch.nn.ConvTranspose1d() 对输入的一维信号进行1D转置卷积
torch.nn.ConvTranspose2d() 对输入的一维信号进行2D转置卷积
torch.nn.ConvTranspose3d() 对输入的一维信号进行3D转置卷积

  


处理图像中常用的为torch.nn.Conv2d(),内部参数排列注释如下:


in_channels: 输入图像的通道数(整数)


out_channels: 输出特征映射的数量


kernel_size: 卷积核大小


stride: 卷积的步长(默认为1)


padding: 输入两边填充(默认为0,可更改)


dilation: 步幅(该参数可调控卷积大小,默认为1)


groups: 输入到输出的阻塞连接数


bias: True:添加偏置;否则不添加\




Example


程序流程:


  1. 读取图像


  1. 转为灰度图


  1. 转为Numpy


  1. 将数组转化为张量


  1. 构造一个卷积结构


  1. 对灰度图进行卷积操作


  1. 对卷积图像进行压缩



原图:

image.png卷积后图

image.png

image.png



Demo


import cv2
import numpy
import numpy as np
import torch
import torch.nn as nn
MyImage = cv2.imread("3.jpg")
MyImage_gray = cv2.cvtColor(MyImage, cv2.COLOR_BGR2GRAY)
MyImage_gray_np = np.array(MyImage_gray, dtype=np.float32)
image_h, image_w = MyImage_gray_np.shape
MyImage_gray_re = MyImage_gray.reshape(1, 1, image_h, image_w)
MyImage_gray_t = torch.tensor(MyImage_gray_re, dtype=torch.float32)
print(MyImage_gray_t.shape)
kersize = 5
ker = torch.ones(kersize, kersize, dtype=torch.float32) * -1
ker[2, 2] = 24
ker = ker.reshape((1, 1, kersize, kersize))
conv2d = nn.Conv2d(1, 2, (kersize, kersize), bias=False)
conv2d.weight.data[0] = ker
image_conv2d_out = conv2d(MyImage_gray_t)
image_conv2d_out_img = image_conv2d_out.data.squeeze()
out_img = numpy.array(image_conv2d_out_img, dtype=np.float32)
cv2.imshow("out_img", out_img[1])
cv2.waitKey(0)





相关文章
解决GO安装gin框架(go get -u github.com/gin-gonic/gin)超时问题
解决GO安装gin框架(go get -u github.com/gin-gonic/gin)超时问题
解决GO安装gin框架(go get -u github.com/gin-gonic/gin)超时问题
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
4199 0
Pytorch学习笔记(二):nn.Conv2d()函数详解
|
11月前
|
并行计算 PyTorch 算法框架/工具
74_调试技巧:OOM与性能瓶颈
在大型语言模型(LLM)的开发与部署过程中,内存溢出(Out of Memory,简称OOM)错误和性能瓶颈问题是开发者经常面临的两大挑战。随着模型规模的不断扩大(从最初的BERT、GPT-2到现在的GPT-4、Claude 3等千亿甚至万亿参数的模型),这些问题变得更加突出。据2025年最新的开发者调查报告显示,超过78%的LLM开发者在模型训练或推理过程中遇到过OOM错误,而性能瓶颈则影响了约65%的生产环境部署。
903 0
|
机器学习/深度学习
一文看懂卷积运算(convolution)与互相关运算(cross-correlation)的区别
一文看懂卷积运算(convolution)与互相关运算(cross-correlation)的区别
|
机器学习/深度学习 存储 人工智能
【AI系统】卷积操作原理
本文详细介绍了卷积的数学原理及其在卷积神经网络(CNN)中的应用。卷积作为一种特殊的线性运算,是CNN处理图像任务的核心。文章从卷积的数学定义出发,通过信号处理的例子解释了卷积的过程,随后介绍了CNN中卷积计算的细节,包括卷积核、步长、填充等概念。文中还探讨了卷积的物理意义、性质及优化手段,如张量运算和内存布局优化。最后,提供了基于PyTorch的卷积实现示例,帮助读者理解和实现卷积计算。
2078 31
【AI系统】卷积操作原理
|
机器学习/深度学习 数据挖掘
这7大经典回归模型,你用过几个?
这7大经典回归模型,你用过几个?
2146 1
这7大经典回归模型,你用过几个?
|
机器学习/深度学习 算法 PyTorch
PyTorch Lightning:简化深度学习研究与开发
【8月更文第27天】PyTorch Lightning 是一个用于简化 PyTorch 开发流程的轻量级封装库。它的目标是让研究人员和开发者能够更加专注于算法和模型的设计,而不是被训练循环和各种低级细节所困扰。通过使用 PyTorch Lightning,开发者可以更容易地进行实验、调试和复现结果,从而加速研究与开发的过程。
849 1
|
机器学习/深度学习 数据采集 人工智能
数据驱动的AI技术:如何通过深度学习提升图像识别精度
【10月更文挑战第18天】 数据驱动的AI技术:如何通过深度学习提升图像识别精度
713 0
|
监控 网络协议 安全
Socks5协议原理分析及实现对比与问题排查实践
这篇文章《socks5协议原理分析及实现对比与问题排查实践》将深入探讨Socks5协议的工作原理,并对其与其他网络协议的实现进行详细比较。作者还将分享在实际应用过程中所遇到的问题及排查方法。对于想要提高系统安全性和性能的开发人员,本文提供了丰富的案例分析与实践经验。 在这篇文章中,读者将了解Socks5协议的基本概念、工作原理、具体实现方式以及常见问题与解决方案。这不仅有助于开发人员更好地理解Socks5协议,还能增强他们在开发与部署中应对复杂网络环境的能力,让我们一同探讨这些关键技术。
1209 0
Socks5协议原理分析及实现对比与问题排查实践
|
SQL 消息中间件 存储
小象超市(原美团买菜) 的大屏图表
小象超市(原美团买菜) 的大屏图表
1575 0