python实现卷积运算

article/2025/10/23 10:27:00
 

 一、卷积定义与朴素计算方法:

                                                        图1 卷积定义与计算方法

二、 Python代码实现

结合伪代码实现python代码如下(因为我是先写的代码,后才发现上面的伪代码,所以循环次序略有不同): 

import torch.nn as nn
import torchdef myConv2d(images, in_channels, out_channels, kernel_size, stride, padding, weights=None, bias=None):if weights is None:weights = torch.rand(out_channels, in_channels, kernel_size[0], kernel_size[1])if bias is None:bias = torch.zeros(out_channels)n, c, w, h = images.shape# 给原始图片加上padding# new_image = torch.zeros(n, c, w + 2 * padding, h + 2 * padding)images = images.clone()images = torch.cat((torch.zeros(n, c, padding, h), images), 2)images = torch.cat((images, torch.zeros(n, c, padding, h)), 2)images = torch.cat((torch.zeros(n, c, w + 2 * padding, padding), images), 3)images = torch.cat((images, torch.zeros(n, c, w + 2 * padding, padding)), 3)n, c, w, h = images.shapeoutput = []# 循环batch_sizefor i, im in enumerate(images):imout = []# 循环feature map count, 也就是输出通道数for j in range(out_channels):feature_map = []row = 0# 下面两层循环为使用kernel滑动窗口遍历输入图片while row + kernel_size[0] <= h:row_feat_map = []col = 0while col + kernel_size[1] <= w:# 卷积计算每个点的值,此处为了方便理解定义了channels,其实可以直接定义point=0,然后进行累加,最后再加上偏置channels = [0 for x in range(c)]for ch in range(c):for y in range(kernel_size[0]):for x in range(kernel_size[1]):channels[ch] += im[ch][row + y][col + x] * weights[j][ch][y][x]point = sum(channels) + bias[j]row_feat_map.append(point)col += stride[1]feature_map.append(row_feat_map)row += stride[0]imout.append(feature_map)output.append(imout)return torch.Tensor(output)if __name__ == "__main__":# 测试参数image_w, image_h = 7,7in_channels = 1out_channels = 1kernel_size = (2, 3)stride = (2,3)padding = 1# 输入图片与网络权重image = torch.rand(1, in_channels, image_w, image_h)weights = torch.rand(out_channels, in_channels, kernel_size[0], kernel_size[1])bias = torch.ones(out_channels)# pytorch运算结果net = nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, stride=stride, padding=padding, bias=True)net.weight = nn.Parameter(weights)net.bias = nn.Parameter(bias)net.eval()output = net(image)print(output)# 自己实现的结果output = myConv2d(image, in_channels, out_channels, kernel_size=kernel_size, stride=stride, padding=padding, weights=weights, bias=bias)print(output)

三、卷积运算图示

下图展示了padding=1, stride=(1,1), 不使用偏置bias的情况下,使用3*3的卷积核在的两个通道的5*5图片上的计算过程,其中卷积核权重为[[1,0,1], [-1,1,0], [0,-1,0]]. 

四、卷积运算分析

假设输入图片大小为W * H * C,  卷积核为F * Kw * Kh * C。

输出层大小:Osize = F * Ow * Oh

Ow = (W + Padding * 2 - Kw)

Oh = (H + Padding * 2 - Kh) 

卷积层参数个数:F * C * Kw * Kh

卷积层运算量FLOPs:  2 * C * Kw * Kh * Ow * Oh * F

其中最内层循环计算每个点的计算量是2 * C * Kw * Kh, 2指的是最内层一次浮点乘和一次浮点加。

参考链接:

封面图: 
https://www.tianqiweiqi.com/wp-content/uploads/2019/04/5.2%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C.png

图1: conv.pdf (wordpress.com)

图2:https://res-static.hc-cdn.cn/fms/img/ca0daa6b1f2db7f3ce1535b3c96d53e51603798731316.gif


http://chatgpt.dhexx.cn/article/cqE6svpp.shtml

相关文章

卷积运算

卷积层 卷积的本质是用卷积核的参数来提取数据的特征&#xff0c;通过矩阵点乘运算与求和运算来得到结果。 下面给出一个基本的二维卷积的运算过程&#xff0c;即 y ω x b y \omega x b yωxb 特征图 ( x x x) 的大小为 1 x 5 x 5, 输入的通道数为 1.卷积核 ( ω \omeg…

深入浅出理解卷积运算

提起卷积运算相信大家都不陌生&#xff0c;这是一种很常见的运算。我们在学习《信号与系统》时就一直在和卷积打交道&#xff0c;在后来的一些课程中也有卷积运算的身影&#xff0c;比如《自动控制原理现代部分》中的卷积定理等。 在学习《信号与系统》时我们知道了卷积的定义&…

卷积计算——1. 关于卷积的基本概念

文章目录 卷积的基本概念卷积运算公式交换律分配律结合律数乘结合律 卷积核代码的基本框架 卷积的基本概念 卷积&#xff0c;是一个强有力的数学工具&#xff0c;在计算机领域中有很多非常不错的运用&#xff0c;能产生很多意想不到的效果和输出。 数学上&#xff0c;其连续函…

数(3)相关运算和卷积运算

目录 相关运算 卷积运算 连续信号 离散信号 卷积性质 卷积定理 &#xff08;参考其他多篇博客&#xff0c;学习自用&#xff0c;侵删&#xff09; 相关运算 相关运算是两个序列的相似性比较的一种数学运算。 公式里面的序列&#xff0c;可能是实数&#xff0c;可能是复数…

各种卷积方式的最全讲解

文章目录 一&#xff1a;卷积的定义二&#xff1a;标准卷积1.1D卷积Ⅰ&#xff1a;一维Full卷积Ⅱ&#xff1a;一维Same卷积Ⅲ&#xff1a;一维Valid卷积Ⅳ&#xff1a;三种一维卷积的相互关系 2.2D卷积3.3D卷积 三&#xff1a;转置卷积四&#xff1a;Separable卷积五&#xff…

深度学习(一):卷积运算

一、卷积核与池化&#xff1a; 1.1 卷积核&#xff08;Convolutional&#xff09;&#xff1a; 将输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素&#xff0c;其中权值由一个函数定义&#xff0c;这个函数称为卷积核(滤波器)。 一般可以看作对某个局部的…

深度学习-图解卷积运算

卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;针对全连接网络 的局限做出了修正&#xff0c;加入了卷积层&#xff08;Convolution层&#xff09;和池化层&#xff08;Pooling 知 层&#xff09;。 CNN被广泛应用于图像识别、语音识别等各…

【svg文字路径动画,让文字沿着路径动起来】

最近项目里面用到了这个文字路径动画&#xff0c;不得不说确实挺好玩的&#xff0c;如果有需要的小伙伴可以参考&#xff01; 代码片段 由于公司之前项目里也用到过&#xff0c;但是我是第一次写&#xff0c;所以第一时间还是先看看前辈是怎么处理的&#xff0c;借鉴一下长长…

Qml路径动画-PathAnimation

Qml中的PathAnimation可以让目标沿着一个指定路径运行。 PathAnimation的属性 anchorPoint&#xff1a;使用"x,y"来指定运动的锚定点。orientation&#xff1a;指定控制目标对象沿着路径运动的旋转策略。path属性的类型为Path&#xff0c;选择你要构造的路径。 sta…

dotween路径移动_Unity---DOTween插件学习(3)---获取数据、协程、路径动画

[Toc] 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注**Andy老师** 10、获取数据 类方法 返回所有暂停的动画&#xff0c;没有则返回null var list DOTween.PausedTweens(); 返回所有真正播放的动画&#xff0c;没有则返回null var list DOTween.PlayingTweens(); 获取…

houdini:固定朝向的路径动画

涉及节点&#xff1a;follow path 一、模型准备 路径、朝向的物体&#xff0c;以及运动的物体&#xff0c;一共三个 二、follow path 节点 原来xxxx是一个属性&#xff0c;现在好像必须在创建路径动画的时候就选择xxx了 下面请紧跟我的步骤 steep1&#xff1a;点击follow p…

Dotween运动曲线与路径动画

Dotween运动曲线与路径动画 Dotween--运动曲线内置的运动曲线AnimationCurve Dotween--路径动画一:设置一个数组存放位置坐标二:直接写出自己想要到的坐标 Dotween–运动曲线 想要理解Dotwenn的运动曲线&#xff0c;最重要的一步就是要理解坐标的的含义&#xff0c;这里看图讲…

AE路径动画

动画效果预览 一、AI跑道汽车 注&#xff1a;绘制完成后&#xff0c;给需要作动效的部位进行单独新建图层并命名&#xff1b; ctrl c&#xff0c;ctrlf原位粘贴 二、导入AE 具体导入方法请查看此文&#xff1a; AE动画导入/导出_TING糖的博客-CSDN博客AE导入/导出方式http…

Cinemachine教程 | Unity中如何制作路径动画?

摘要&#xff1a;在Unity中制作路径动画是有挺多方式的&#xff0c;基于Cinemachine的Dolly Path是一个简单便捷的方法&#xff0c;咱们来快速的学习一下吧&#xff01; 洪流学堂&#xff0c;让你快人几步。你好&#xff0c;我是跟着大智(VX: zhz11235)学Unity的萌新&#xff0…

Android实现 曲线路径动画

本文参考 https://www.jianshu.com/p/fea4d1f6512a 概述 近期碰到曲线动画的实现问题&#xff0c;写本文记录下。 动画类似“剑与远征”游戏的金币动画&#xff0c;动画路径如下图&#xff1a; 思路 通过贝塞尔曲线计算出x和y的位置&#xff08;各个点的位置需要自己微调&am…

WPF实现路径动画

让目标沿着一条给定的路径移动&#xff0c;使用DoubleAnimationUsingPath类实现。实现如下。 点击鼠标移动 实现代码如下&#xff1a;界面XAML <Grid x:Name"LayoutRoot"> <Grid.Resources> <PathGeometry x:Key"movingPath…

Houdini:最小白的路径动画

涉及节点&#xff1a;curve、constraints、follow path 涉及知识&#xff1a;路径动画、约束 提一嘴maya的路径动画&#xff1a;在constrain-->motion paths -->attach motion path中 一、模型准备 一个模型和一个curve曲线&#xff0c;分别在两个geometry里面&#…

UE5蓝图时间轴摄影机路径动画

1. 新建蓝图类Actor 2. 蓝图里添加Spline和Camera组件&#xff0c;另外添加一个Scene场景组件&#xff0c;可以把Camera拖到Scene的子级&#xff0c;这样做可以让Camera在沿着路径运动的时候自由更改旋转方向 3. 打开关卡蓝图&#xff0c;首先按键获取MovingLine的Camera视角&a…

html5 路径运动,探秘神奇的运动路径动画 Motion Path

CSS 中有一个非常有意思的模块 -- CSS Motion Path Module Level 1,翻译过来也就是运动路径。本文将对 motion path 一探究竟,通过本文,你可以了解到:什么是 CSS motion path 使用 CSS motion path 制作简单路径动画 使用 CSS motion path 制作复杂路径动画 什么是 CSS Mot…

canvas绘制折线路径动画

最近有读者加我微信咨询这个问题&#xff1a; 其中的效果是一个折线路径动画效果&#xff0c;如下图所示&#xff1a; 要实现以上路径动画&#xff0c;一般可以使用svg的动画功能。或者使用canvas绘制&#xff0c;结合路径数学计算来实现。 如果用canvas来绘制&#xff0c…