从零构建深度学习推理框架-8 卷积算子实现
其实这一次课还蛮好理解的:

首先将kernel展平:
for (uint32_t g = 0; g < groups; ++g) {std::vector<arma::fmat> kernel_matrix_arr(kernel_count_group);arma::fmat kernel_matrix_c(1, row_len * input_c_group);for (uint32_t k = 0; k < kernel_count_group; ++k) {const std::shared_ptr<Tensor<float>> &kernel =weights.at(k + g * kernel_count_group);for (uint32_t ic = 0; ic < input_c_group; ++ic) {memcpy(kernel_matrix_c.memptr() + row_len * ic,kernel->at(ic).memptr(), row_len * sizeof(float));}LOG(INFO) << "kernel展开后: " << "\n" << kernel_matrix_c;kernel_matrix_arr.at(k) = kernel_matrix_c;}
将原来的kernel放到kernel_matrix_c里面,之后如果是多个channel,也就是input_c有多个,那就按照rowlen*ic依次存放到里面。
将输入input展平:
//按照上面的图就是input = 3*9 ,4的这样一个空间arma::fmat input_matrix(input_c_group * row_len, col_len);for (uint32_t ic = 0; ic < input_c_group; ++ic) {const arma::fmat &input_channel = input_->at(ic + g * input_c_group);int current_col = 0;
//下面是以窗口滑动的顺序选取for (uint32_t w = 0; w < input_w - kernel_w + 1; w += stride_w) {for (uint32_t r = 0; r < input_h - kernel_h + 1; r += stride_h) {float *input_matrix_c_ptr =input_matrix.colptr(current_col) + ic * row_len;//对准窗口位置,比如对第一个就是对准红色, 黄色, 绿色current_col += 1;for (uint32_t kw = 0; kw < kernel_w; ++kw) {const float *region_ptr = input_channel.colptr(w + kw) + r;memcpy(input_matrix_c_ptr, region_ptr, kernel_h * sizeof(float));input_matrix_c_ptr += kernel_h;}}}}LOG(INFO) << "input展开后: " << "\n" << input_matrix;
对于:
for (uint32_t kw = 0; kw < kernel_w; ++kw) {const float *region_ptr = input_channel.colptr(w + kw) + r;memcpy(input_matrix_c_ptr, region_ptr, kernel_h * sizeof(float));input_matrix_c_ptr += kernel_h;}
w+kw指向的是窗口的列,r指向的是窗口的行

然后对于每个窗口的以kernel的列为标准复制过去。
最后两个矩阵相乘就可以得到结果
相关文章:
从零构建深度学习推理框架-8 卷积算子实现
其实这一次课还蛮好理解的: 首先将kernel展平: for (uint32_t g 0; g < groups; g) {std::vector<arma::fmat> kernel_matrix_arr(kernel_count_group);arma::fmat kernel_matrix_c(1, row_len * input_c_group);for (uint32_t k 0; k < k…...
【Spring Boot】JdbcTemplate数据连接模板 — JdbcTemplate入门
JdbcTemplate入门 本节从基础的部分开始介绍什么是JDBC、什么是JdbcTemplate,然后介绍Spring Boot项目如何使用JdbcTemplate操作数据库。 1.JdbcTemplate简介 1.1 什么是JDBC JDBC(Java Data Base Connectivity,Java数据库连接࿰…...
视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?
安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…...
从今天起,重新出发
2017年的时候,我还是一名在校大学生,当时为了准备实习面试写下了第一篇学习笔记。 2018年我开始工作,简单记录了使用 Airflow 的踩坑记录。 一直到今天我已经是一个工作了五年的社畜,但是很遗憾没有把工作中的成长记录下来。 当…...
Java多态详解(1)
多态 多态的概念 所谓多态,通俗地讲,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 比如: 这一时间爆火的“现代纪录片”中,麦克阿瑟总是对各种“名人”有不同的评价&…...
optee读取Arm系统寄存器的模板
先写一个通用的内联函数模板,然后再通过宏控来定义各种读写函数。 (core/arch/arm/include/arm64.h)/** Templates for register read/write functions based on mrs/msr*/#define DEFINE_REG_READ_FUNC_(reg, type, asmreg) \ sta...
VSCode 使用总结
快捷键 在 Visual Studio Code (VSCode) 中,有许多常用的快捷键可以提高编程效率。以下是一些常见的 VSCode 编程项目快捷键: 编辑器操作: 撤销:Ctrl Z重做:Ctrl Shift Z复制:Ctrl C剪切:C…...
GuLi商城-前端基础Vue-使用Vue脚手架进行模块化开发
自己亲自实践: mac安装webpack webpack 简介Webpack 是一个非常流行的前端构建工具,它可以将多个模块(包括CSS、JavaScript、图片等)打包成一个或多个静态资源文件(bundle),以便用于部署到生产…...
LeetCode450. 删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点 文章目录 [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)一、题目二、题解方法一:递归(一种麻烦的方法)方法二:优化后的递归 一、题目 给定一个二叉搜索树的根…...
Java动态调试技术原理及实践
文章目录 Java动态调试技术原理及实践引言故事场景一:开发调试动态调试技术简介Java Instrumentation简介动态调试技术实践案例分析场景二:线上问题排查动态调试技术实践案例分析总结Java动态调试技术原理及实践 引言 在日常的软件开发过程中,调试是一个非常重要的环节。当…...
Lua + Redis 实战代码
--[[luarocks install luasocket module socket not foundhttps://github.com/nrk/redis-lua最历害的是,用redis 去跑lua,分布式锁,限流,]]--local redis require("redis");local config{host"127.0.0.1&…...
类的访问限定符,实例化,对象存储方式,this指针
目录 类的定义 类的两种定义方式: 访问限定符 类的实例化 类对象的存储方式 this指针 C语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语…...
《Linux从练气到飞升》No.15 Linux 环境变量
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...
Spring Boot 重启命令
Spring Boot 重启命令 本文描述了一个重启Spring Boot命令执行过程和示例 本文利用kill -9 关闭进程,不优雅,会突然中断程序,可能导致数据和逻辑异常 搜索微信小程序【亚特技术】在资源中搜索【优雅】可得到Spring Boot如何优化重启 1. 过…...
pdf怎么合并在一起?这几个合并方法了解一下
pdf怎么合并在一起?在日常工作、学习和生活中,我们常常会遇到需要将多个PDF文件合并成一个文件的情况。比如,在学术论文写作中,我们可能需要将多篇论文合并成一个文件进行打印和提交。在工作中,我们可能需要将多个报告…...
【仿写tomcat】七、项目结构优化以及代码开源
仿写tomcat 项目结构开源地址 项目结构 到目前为止,博主的仿写tomcat就告一段落了,后续有时间了还会继续补充功能,现在的项目结构如下。 在保证功能的前提下作出的改动有: 将各个类中的参数统一成了Config类,通过对…...
泛微E8配置自定义触发流程失败
在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引,在测试环境配置之后、要触发的流程可以手工提交,但是触发一直不成功。简单记录下业务场景和其他处理信息,以供参考。 应用版本 目前使用了泛微 E8 ࿰…...
Springboot整合Mybatis调用Oracle存储过程
1、配置说明 Oracel11g+springboot2.7.14+mybatis3.5.13 目标:springboot整合mybatis访问oracle中的存储过程,存储过程返回游标信息。 mybatis调用oracle中的存储过程方式 2、工程结构 3、具体实现 3.1、在Oracle中创建测试数据库表 具体数据可自行添加 create table s…...
【java安全】Log4j反序列化漏洞
文章目录 【java安全】Log4j反序列化漏洞关于Apache Log4j漏洞成因CVE-2017-5645漏洞版本复现环境漏洞复现漏洞分析 CVE-2019-17571漏洞版本漏洞复现漏洞分析 参考 【java安全】Log4j反序列化漏洞 关于Apache Log4j Log4j是Apache的开源项目,可以实现对System.out…...
[mars3d 打包]vue3+vite,打包后mars3d找不到
前提 : vue3vite开发框架;使用 官网 方式3获取sdk,引入mars3d; 问题:开发时一切正常,打包之后,页面白屏,没有渲染; 相关的mars3d的相关方法会报错;但是mars3d的打印日志是有的&…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
