矩阵乘法实现卷积运算

2023-11-08

利用Matrix Multiplication实现Convolutions

在这里插入图片描述
以feature map : channel=1,stride=1,padding=0为例,解决:1、如何将feature map和 filter kernel进行unfold ;2、如何进行卷积运算的问题。

import numpy as np
from numpy import zeros
#将feature map unfold
def unfold_matrix(X, k):
    n, m = X.shape[0:2]
    xx = zeros(((n - k + 1) * (m - k + 1), k**2))
    row_num = 0
    def make_row(x):
        return x.flatten()

    for i in range(n- k+ 1):
        for j in range(m - k + 1):
            #collect block of m*m elements and convert to row
            xx[row_num,:] = make_row(X[i:i+k, j:j+k])
            row_num = row_num + 1

    return xx

w = np.array([[1, 2, 3], [4, 5, 6], [-1, -2, -3]], np.float32)
#x = np.random.randn(5,5)
x = np.array([[-0.21556299, -0.11002319, -0.3499612,   1.49290769, -0.50435978],
 [ 0.06348409,  0.66873375,  0.14251138, -1.6414004 , -0.91561852],
 [-2.52451962, -1.97544675, -0.24609529, -1.11489934, -1.44793437],
 [ 1.26260575, -0.62047366,  0.12274525,  0.25200227, -0.83925847],
 [-1.54336488, -0.05100702,  0.36608208,  0.51712927, -0.97133877],
[-1.54336488, -0.05100702, 0.36608208, 0.51712927, -0.97133877]])

n, m = x.shape[0:2]
k = w.shape[0]

x_unfolded = unfold_matrix(x, k)
w_flat = w.flatten()
yy = np.matmul(x_unfolded, w_flat)
yy = yy.reshape((n-k+1, m-k+1))
print(yy)

卷积运算方式发展史

CuDNN v1.0 released in Aug 2014使用矩阵乘法实现卷积运算,因为大量优化矩阵运算的库,使得这种方式已经能高效的实现卷积的运算。但这种方式不是最高效的,更高效的实现方式有Fast Fourier Transform (FFT) and the Winograd transformation等。一般来说,Fast Fourier Transform (FFT)适合于大尺度的filter sizes,而Winograd更适合与小尺度的filter sizes(3×3 or 5×5)。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵乘法实现卷积运算 的相关文章

  • 基于面部视觉的疲劳检测-哈欠

    基于视觉的疲劳检测可以认为大致分为三个部分 点头 哈欠 眨眼 分别为姿态 嘴部特征 眼部特征 本文主要介绍哈欠的测定方法 首先研究了陈博士 基于可拓学与面部视觉 一文 他提出一种基于特征点曲线拟合的嘴唇内轮廓检测方法 先对嘴巴进行粗定位 然
  • 【vision transformer】LETR论文解读及代码实战(一)

    LETR Line Segment Detection Using Transformers without Edges 基于vision transformer DETR 提取wireframe的网络框架 截止日前实现了sota性能 论文
  • SIFT特征提取分析

    SIFT Scale invariant feature transform 是一种检测局部特征的算法 该算法通过求一幅图中的特征点 interest points or corner points 及其有关scale 和 orientat
  • 自动火焰识别项目总结

    步骤分为图像获取 gt 图像预处理 gt 火焰图像分割 gt 火焰图像特征提取 gt 火焰识别 1 图像获取 视频或图片 2 图像预处理 预处理过程一般有数字化 几何变换 归一化 平滑 复原和增强等步骤 图像变换 图像增强 图像去噪 图像压
  • 国外机器视觉解决方案供应商Top 10

    由制造行业的杂志 Manufacturing Tech Insights 2016年评选的机器视觉解决方案供应商Top 10名单如下 Cognex 提供强大的机器视觉软件解决方案 高效的设备防错与故障检测监测供应商 Datalogic 为了
  • OpenCV灰度图像平移和旋转算法(平面内)

    旋转重心为图像中心 为简化计算 旋转角度为int值 单位为度 DIM SAMPLE POINTS X DIM SAMPLE POINTS Y 为图像大小 建议为相等 图像的x轴与实际坐标相等 而y轴方向相反 因此shift y之前有个负号
  • DetNet: A Backbone network for Object Detection 笔记

    Face 的lizeming大神注意到了现有Detection Network的两大通病 借用原本为了class而设计的network 牵强地附加上其他辅助结构来实现Detection 下采样能带来大感受野 从而提升class任务精度 但下
  • 深度网络架构的设计技巧<一>:Can CNNs Be More Robust Than Transformers?

    导读 启发于Transformer结构 作者将三种设计引入到CNN中 加强后的CNN取得比ViT更强的鲁棒性 这三种设计 实现简单 仅仅几行代码就能实现高效的CNN结构设计 ArXiv https arxiv org abs 2206 03
  • 什么是I帧,P帧,B帧

    视频压缩中 每帧代表一幅静止的图像 而在实际压缩时 会采取各种算法减少数据的容量 其中IPB就是最常见的 简单地说 I帧是关键帧 属于帧内压缩 就是和AVI的压缩是一样的 P是向前搜索的意思 B是双向搜索 他们都是基于I帧来压缩数据 I帧表
  • OpenCV自带函数实现灰度图像平移和旋转算法(平面内)

    float shift and rot test opencv cv Mat des Vector2f shift int rot float center x DIM SAMPLE POINTS X 1 2 0 float center
  • 基于OpenCV-Python实现的人脸识别

    在初步学习了数字图像处理的相关知识并在Matlab进行了初步的模拟后 我将学习的中重点转向了Python环境下的OpenCV库的学习 以此博客记录一下学习的进程 本文章代码主要参考OpenCV库源代码 刘波译的 OpenCV3计算机视觉Py
  • 【vision transformer】DETR原理及代码详解(四)

    本节是 DETR流程及 构建backbone和position embedding 相关部分的代码解析 一 DETR代码流程 STEP 1 Create model and criterion 构建模型和标准 STEP 2 Create t
  • ICP算法(Iterative Closest Point迭代最近点算法)

    最近在做点云匹配 需要用c 实现ICP算法 下面是简单理解 期待高手指正 ICP算法能够使不同的坐标下的点云数据合并到同一个坐标系统中 首先是找到一个可用的变换 配准操作实际是要找到从坐标系1到坐标系2的一个刚性变换 ICP算法本质上是基于
  • SIFT特征提取-应用篇

    SIFT特征具有缩放 旋转特征不变性 下载了大牛的matlab版SIFT特征提取代码 解释如下 1 调用方法 将文件加入matlab目录后 在主程序中有两种操作 op1 寻找图像中的Sift特征 image descrips locs si
  • 深度网络架构的设计技巧(三)之ConvNeXt:打破Transformer垄断的纯CNN架构

    单位 FAIR DenseNet共同一作 曾获CVPR2017 best paper UC伯克利 ArXiv https arxiv org abs 2201 03545 Github https github com facebookre
  • M-estimator M估计法 用于几何模型建立

    M estimators是一类广泛估计函数 定义为所给数据上的最小和函数 最小平方估计和极大似然估计都是M估计法 M估计法由鲁棒的数据作为运行保证 一般地 一个M estimation定义为一个估计函数为0的情况 这个估计函数经常是一些统计
  • 光流法( Optical Flow Method)

    在计算机视觉中 光流法即可用于运动目标检测 也可以用于目标跟踪 本文主要介绍光流法在运动目标检测和目标跟踪中的区别与联系 1 光流与光流场 光流的概念最初是由 Gibson 于 1950 年首先提出来的 当人的眼睛观察运动物体时 物体的景象
  • OPENCV角点检测和亚像素级检测

    首先进行粗检测 函数goodFeaturesToTrack 存储进入corners中 然后cornerSubPix函数进行亚像素精确匹配 设置结束条件 由于实际应用中线条较粗 因此 CORNER BLOCKSIZE 9 CORNER QUA
  • Kmeans K均值聚类,OpenCV实现

    Clustering 聚类 kmeans k均值聚类 Finds centers of clusters and groups input samples around the clusters 寻找clusters的中心 并且将输入的样本
  • 什么是深度学习的无监督学习与有监督学习

    无监督学习 深度学习中的无监督学习方法是一种训练算法 它在没有标注输出的情况下从输入数据中学习模式和特征 这种方法的核心是探索和理解数据的内在结构和分布 而不是通过已知的输出来指导学习过程 无监督学习在深度学习领域有许多不同的形式和应用 以

随机推荐

  • 99_好题整理1—鸡兔同笼

    F 鸡兔同笼 内存限制 128 MiB 时间限制 3000 ms标准输入输出 题目描述 已知鸡和兔的总数量为n 总腿数为m 输入n和m 依次输出鸡和兔的数目 如果无解 则输出 No answer 不要引号 输入格式 第一行输入一个数据a 代
  • 实用 SQL 语句收藏这篇就够了

    前言 文章沿着设计一个假想的应用 awesome app 为主线 从零创建修改数据库 表格 字段属性 索引 字符集 默认值 自增 增删改查 多表查询 内置函数等实用 SQL 语句 收藏此文 告别零散又低效地搜索经常使用的 SQL 语句 所有
  • STM32程序卡死HardFault_Handler

    在工作过程中移植部分功能程序后发现程序经常性莫名卡死 然后就一直在HardFault Handler中断卡死 解决如下 1 首先去网上查询了出现HardFault Handler是由于什么原因造成 1 堆栈溢出 这个可能性不大 2 数组越界
  • Scrapy+bs4爬取京东商品对应的评论信息

    Scrapy bs4爬取京东商品对应的评论信息 spiders comm py coding utf 8 import json import jsonpath import scrapy from bs4 import Beautiful
  • tomcat端口介绍以及配置启用https

    一 tomcat 默认端口
  • 步进电动机 - 特征篇(一)

    第1章 步进电动机特征篇 1 1 步进电动机特征 步进电动机是如同时钟的秒针一般 每次旋转一定角度的电动机 首先 介绍一下步进电动机的特征 链接 https www orientalmotor com cn web seminar stki
  • 添加区块到区块链当中003

    package main import crypto sha256 fmt 0 定义结构 创建前哈希值 创建当前哈希值 和数据 type Block struct Prevhash byte 前哈希 Hash byte 当前哈希 TODO
  • 【三维重建】【深度学习】NeRF_Pytorch代码--预备基础知识

    三维重建 深度学习 NeRF Pytorch代码 预备基础知识 给定一个场景的多视角的图像 神经辐射场 NeRF 通过图像重建误差优化一个神经场景表征 优化后可以实现逼真的新视角合成效果 NeRF最先是应用在新视点合成方向 由于其超强的隐式
  • 面试/笔试第三弹 —— 数据库面试问题集锦

    写在前面 找工作告一段落 期间经历了很多事情 也思考了许多问题 最后也收获了一些沉甸甸的东西 成长和一些来自阿里 百度 京东 sp 华为等厂的Offer 好在一切又回到正轨 接下来要好好总结一番才不枉这段经历 遂将此过程中笔者的一些笔试 面
  • 【JAVASCRIPT】javascript随机生成颜色8种方法

    实现1 JavaScript代码 var getRandomColor function return function color return color 0123456789abcdef Math floor Math random
  • FFMPEG常用命令

    FFmpeg编码和支持 FFmpeg源代码中包含的编码格式很多 常见不常见的都可以在编译皮质列表中见到 可以通过的编译配置命令 configure list encoders 常见的编码器的格式有 AAC AC3 H 264 H 265 M
  • Qt中连接两个字符串,并在其中添加换行符

    Qt中连接两个字符串 并在其中添加换行符 在Qt中想要将两个字符串连接在一起 只需要在两个字符串之间加入 即可 输出显示即为两个字符串连在一起 如果想在字符串后面加入换行符 然后再连接另一个字符串 直接在字符串后面添加 n 是行不通的 这里
  • SMIL 直播协议

    Synchronized Multimedia Integration Language SMIL sma l is a World Wide Web Consortium recommended Extensible Markup Lan
  • js实现表格排序

    用js实现表格排序 第一点击以降序排列 第二次点击以升序排列 html代码 table border 1 tr th 学号 th th 名字 th th 成绩 th tr tr td 100 td tr table
  • 自建minio实现doris的快速备份与恢复

    一 概述 doris支持通过腾讯云bos 阿里云oss hdfs实现备份与恢复 但是我们公司doris部署在线下机房 如采用oss bos 大数据备份与恢复比较慢 会占用一定的带宽 如采用hdfs 担心小文件太多影响现有的hadoop集群
  • java基础总结——java面向对象讲解

    Java面向对象 对象的概念及面向对象的三个基本特征 对象的概念 Java 是面向对象的编程语言 对象就是面向对象程序设计的核心 所谓对象就是真实世界中的实体 对象与实体是一一对应的 也就是说现实世界中每一个实体都是一个对象 它是一种具体的
  • Python 进阶知识

    初级选手 Python 基础知识 Aimin20210819的博客 CSDN博客 python动态实例化对象 目录 1 Python简写法 2 Python三元运算符 3 Python获取路径和重名文件
  • 编程式事务

    Resource private TransactionTemplate transactionTemplate transactionTemplate execute transactionStatus gt List
  • Ubuntu安装Redis

    安装环境 Ubuntu 18 04 64位 一 安装 1 1 更新仓库 非必须 sudo apt update 1 2 使用 apt 从官方 Ubuntu 存储库来安装 Redis sudo apt get install redis se
  • 矩阵乘法实现卷积运算

    利用Matrix Multiplication实现Convolutions 以feature map channel 1 stride 1 padding 0为例 解决 1 如何将feature map和 filter kernel进行un