改进YOLO系列 | CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子
Involution:超越卷积和自注意力的新型神经网络算子(中文综述)
简介
Involuton是CVPR 2021上提出的新型神经网络算子,旨在超越卷积和自注意力,提供更高效、更具表达力的特征提取能力。
Involution原理
Involution的核心思想是将卷积核分解为多个核点,并通过注意力机制对这些核点进行加权融合。 这使得Involution能够捕获更复杂的特征信息,同时保持较低的计算复杂度。
Involution应用场景
Involution可以应用于各种计算机视觉任务,例如图像分类、目标检测、语义分割等。 它可以作为卷积或自注意力的替代或补充,以提高模型性能。
Involution算法实现
Involution的实现主要包括以下步骤:
- 特征提取: 使用标准卷积层提取输入图像的特征。
- 核点分解: 将卷积核分解为多个核点。
- 注意力计算: 对每个核点计算注意力权重。
- 特征融合: 使用注意力权重对核点进行加权融合。
- 输出: 生成最终的输出特征。
Involution代码实现
Involution:完整代码实现(中文解释)
依赖库
首先,我们需要导入必要的库:
import torch
import torch.nn as nn
import torch.nn.functional as F
定义核点分解函数
Involution核心的第一步是将卷积核分解为多个核点。 以下代码定义了一个简单的核点分解函数:
def kernel_decompose(kernel):# 将卷积核分解为多个核点kernel_points = kernel.view(-1, 1, 1, 1) # 将卷积核展开为一维向量return kernel_points
定义注意力计算模块
Involution使用注意力机制对核点进行加权融合。 以下代码定义了一个简单的注意力计算模块:
class AttentionModule(nn.Module):def __init__(self, channels):super(AttentionModule, self).__init__()self.query_conv = nn.Conv2d(channels, channels // 2, kernel_size=1)self.key_conv = nn.Conv2d(channels, channels // 2, kernel_size=1)self.value_conv = nn.Conv2d(channels, channels, kernel_size=1)def forward(self, feature, kernel_points):# 计算注意力权重q = self.query_conv(feature)k = self.key_conv(feature)v = self.value_conv(feature)attention = torch.bmm(q, k.transpose(0, 1)) # 计算注意力矩阵attention = F.softmax(attention, dim=1) # 计算注意力权重# 加权融合核点out = torch.bmm(attention, v) * kernel_pointsreturn out
定义Involution层
Involution层继承自 nn.Module
类,并实现了Involution操作。
class InvolutionLayer(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0):super(InvolutionLayer, self).__init__()self.kernel_decompose = kernel_decompose # 核点分解函数self.attention_module = AttentionModule(in_channels) # 注意力计算模块self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)def forward(self, feature):# 卷积核分解kernel_points = self.kernel_decompose(self.conv.weight)# 注意力计算out = self.attention_module(feature, kernel_points)# 残差连接out += self.conv(feature)return out
完整示例代码
以下代码展示了如何使用Involution层进行图像分类:
import torch
import torch.nn as nn
import torch.nn.functional as F# 定义Involution层
involution_layer = InvolutionLayer(3, 64, 3)# 输入图像
image = torch.randn(1, 3, 224, 224)# Involution操作
out = involution_layer(image)print(out.shape) # 输出特征图形状
代码解释
- 导入必要的库:
torch
、torch.nn
、torch.nn.functional
。 - 定义核点分解函数
kernel_decompose
,将卷积核分解为多个核点。 - 定义注意力计算模块
AttentionModule
,使用注意力机制对核点进行加权融合。 - 定义Involution层
InvolutionLayer
,继承自nn.Module
类,并实现了Involution操作。 - 创建Involution层实例
involution_layer
,指定输入通道数、输出通道数、卷积核大小、步长和填充。 - 创建输入图像
image
。 - 使用Involution层进行Involution操作,并输出结果
out
。
注意
- 以上代码仅供参考,实际应用中需要根据任务和数据集进行调整。
- Involution是一种较为复杂的模型,需要有一定的深度学习基础才能理解和实现。
Involution部署测试
Involution的部署测试可以参考以下步骤:
- 模型训练: 使用训练数据集训练Involution模型。
- 模型评估: 使用测试数据集评估模型的性能。
- 模型部署: 将模型部署到生产环境。
文献材料链接
- Involution: Involutions for Efficient and Accurate Vision
应用示例产品
Involution可以应用于各种基于计算机视觉的应用,例如:
- 智能视频监控
- 自动驾驶
- 医学图像分析
总结
Involution是一种很有潜力的新型神经网络算子,它有望在各种计算机视觉任务中发挥重要作用。
影响
Involution的提出为神经网络架构设计提供了新的思路,并有可能引发后续研究的热潮。
未来扩展
Involution可以进一步扩展到其他深度学习任务,例如自然语言处理、语音识别等。
注意: 以上内容仅供参考,具体实现可能需要根据实际情况进行调整。
参考资料
- Involution: Involutions for Efficient and Accurate Vision
相关文章:
改进YOLO系列 | CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子
Involution:超越卷积和自注意力的新型神经网络算子(中文综述) 简介 Involuton是CVPR 2021上提出的新型神经网络算子,旨在超越卷积和自注意力,提供更高效、更具表达力的特征提取能力。 Involution原理 Involution的…...
落地速度与效果之争,通用VS垂直,我的观点和预测。
标题:AI大模型战场:通用VS垂直,谁将领跑落地新纪元? 摘要:随着人工智能技术的飞速发展,大模型的应用场景日益广泛。在这场竞赛中,通用大模型和垂直大模型各有优势,落地速度和可能性也…...
【Android面试八股文】在Android中,出现ClassNotFound的有可能的原因是什么?
在Android环境下类未找到的可能原因 在Android环境下,类未找到的可能原因包括但不限于以下几点: 类路径问题:Android应用使用的类通常存储在APK文件中。如果类所在的APK文件没有被正确加载,或者应用的类路径配置有误,就会导致类未找到的错误。 多DEX文件加载问题:在一些…...
模板引擎与 XSS 防御
在 View 层,可以解决 XSS 问题。在本书的“跨站脚本攻击”一章中,阐述了“输入检查” 与“输出编码”这两种方法在 XSS 防御效果上的差异。XSS 攻击是在用户的浏览器上执行的, 其形成过程则是在服务器端页面渲染时,注入了恶意的 H…...
vue3轮播图怎么做
先看效果 实现代码 <n-carouseleffect"card"dot-type"line"draggable:autoplay"!isHovered":current-index"currentIndex"prev-slide-style"transform: translateX(-150%) translateZ(-450px);opacity:1"next-slide-st…...
ubuntu中安装docker并换源
使用 Ubuntu 的仓库安装 Docker sudo apt update现在,你可以使用以下命令在 Ubuntu 中安装 Docker 以及 Docker Compose: sudo apt install docker.io docker-composeDocker 包被命名为 docker.io,因为在 Docker 出现之前就已经存在一个名为…...
HTML静态网页成品作业(HTML+CSS)—— 环保主题介绍网页(5个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…...
深入了解RSA加密算法
目录 前言 一、什么是RSA? 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代,信息的安全性成为了人们关注…...
github基础使用
前言 将用到的github指令记录下来,持续更新,方便随时查找学习。 一、github用到的指令 1、我们从github克隆下来的代码版本一般都是master主分支,我们要建立自己的分支进行修改: //git branch //查看目前的分支/* * master /…...
Docker使用心得
Docker使用心得 最近使用Docker比较频繁,特此想记录一下,方便后续查找。 Docker常用命令Docker如何配置使用GPU环境?如何使用Dockerfile构建镜像?如何使用docker compose 实例化容器? Docker如何配置使用GPU环境 参…...
QListWidget 插入 item,item显示自定义界面
代码示意: class ItemWidget_action_cfg_w(QWidget):... # 如下方法是在指定item下插入新的item def __do_add_item(self, item):# 获取当前item rowrow self.__list_w.indexFromItem(item).row()# 注意这里没有父类,解释见后面说明new_item QList…...
Python写一个ERP系统和agent智能体协同仓库和订单的案例
这是一个关于使用Python编写一个简单的ERP系统,并与Agent智能体协同完成仓库和订单管理的案例。在这个案例中,我们将使用Python的第三方库sqlite3进行数据库操作,以及discord库实现与Agent智能体的通信。 1. 首先,安装所需库&…...
【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确解决方法与示例五、注意事项 已解决“‘ping’ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错 一、问题分析背景 在Windows操作系统中,ping 命令是一个常用的网络诊断…...
Web前端学堂:深入探索前端开发的核心领域
Web前端学堂:深入探索前端开发的核心领域 在数字化时代的浪潮中,Web前端开发扮演着至关重要的角色。它不仅是连接用户与互联网世界的桥梁,更是创造丰富、互动网络体验的关键所在。本文将带领读者走进Web前端学堂,从四个方面、五个…...
Java数据结构与算法(0/1背包问题)
前言: 背包问题(Knapsack Problem)是组合优化问题中的一个经典问题,有多个变种。这里我们讨论的是 0/1 背包问题,这是最基本的一种形式。问题的描述如下: 给定 n 件物品,每件物品有一个重量 wi 和一个价值…...
LLVM 中 的 pass 及其管理机制
概述 LLVM 编译器框架的核心概念是任务调用和执行 编译器开发者将IR分解为不同的处理对象,并将其处理过程实现为单独的pass类型。在编译器初始化,pass被实例化,并被添加到pass管理中 pass 管理器(pass manager) 以流水线的方式将各个独立的…...
第 5 章 监控系统 | 入门案例 - 虚拟机监控
👉 本文目标:为 Linux 虚拟机/服务器安装 node_exporter,实现对虚拟机/服务器的监控。 👀 本文内容: 安装 Node Exporter,暴露 Linux 指标(比如 CPU、磁盘、IO 等)配置 Prometheus 抓取 Node Exporter 暴露的指标数据配置 Recording Rule,便于缓存/加速 Dashboard 频…...
教资认定报名照片要求小于190kb…
教资认定报名照片要求小于190kb…… 要求:文件小于190kb,宽度290-300,高度408-418 方法:vx搜随时照-教资认定 直接制作合规尺寸即可,还可以打印纸质版邮寄到家...
显示类控件——Calendar Widget
🐌博主主页:🐌倔强的大蜗牛🐌 📚专栏分类:QT ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、Calendar Widget介绍核心属性重要信号代码示例: 获取选中的日期 一、Calendar Widget 介绍 …...
system与excel族函数区别
1.system #include<stdlib.h> int system(const char *command); comand是命令的路径,一般我们用绝对路径 system函数会创建新的进程,新的进程执行完返回原来的进程,原来的进程则继续执行后面的代码段。 如我们创建一个sys.cpp文件…...
STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX
STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘,通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种非易失…...
jrt从量变到质变
又是一个加班的周末,上周把台式机代码和数据库环境弄好了,这周进行大数据测试,直接把标本、标本医嘱、报告、报告结果、药敏结果等数据插入到1亿的规模,跑了一天一夜插入了5000多万个标本,后面接着补剩下的到一亿。 演…...
NLP主流大模型如GPT3/chatGPT/T5/PaLM/LLaMA/GLM的原理和差异有哪些-详细解读
自然语言处理(NLP)领域的多个大型语言模型(如GPT-3、ChatGPT、T5、PaLM、LLaMA和GLM)在结构和功能上有显著差异。以下是对这些模型的原理和差异的深入分析: GPT-3 (Generative Pre-trained Transformer 3) 虽然GPT-4…...
从MySQL到NoSQL:分析传统关系型数据库与NoSQL数据库的协同
引言 数据库是一个系统,用来管理和存储数据的地方。数据在数据库中以一种结构化的方式组织,这样能更容易地查询和处理数据。 关系型数据库是基于关系模型的数据库,它将数据存储在不同的表中,每个表都有各自的独一无二的主键。表与表之间通过共享的数据项相互关联。像MySQ…...
三、树和割集
文章目录 1、树1.1 树的定义1.2 树的性质1.3 极小连通图1.4 树的中心1.5 生成树1.5.1 最小生成树 2、 割点和桥THE END 1、树 1.1 树的定义 \qquad 定义: 一个连通的无圈的图称为树。 \qquad 只有一个顶点的树叫做平凡树。 \qquad 树中度为1的节点称为叶子结点。…...
泛型中<>和()中的类型
尖括号 < > 中的类型参数定义了一组可以被替换的类型占位符,而圆括号 (...) 内的类型使用则是这些类型参数的具体应用场景,展示了这些类型变量如何参与到函数的参数和返回值类型定义中去。这样设计既保证了代码的灵活性,又保持了类型安…...
spark mllib 特征学习笔记 (一)
PySpark MLlib 特征处理详解 PySpark MLlib 提供了丰富的特征处理工具,帮助我们进行特征提取、转换和选择。以下是 PySpark MLlib 中常用的特征处理类及其简要介绍。 1. Binarizer Binarizer 是将连续特征二值化的转换器。 from pyspark.ml.feature import Bina…...
SQLite 日期 时间
SQLite 日期 & 时间 SQLite 是一种轻量级的数据库管理系统,广泛用于各种应用程序中。它支持标准的 SQL 语法,包括对日期和时间的处理。在 SQLite 中,日期和时间可以通过几种不同的方式来存储和操作。 日期和时间数据类型 SQLite 使用 …...
飞书API 2-1:如何通过 API 创建文件夹?
本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹,一般是放在共享空间,如果要放在个人空间,建议手动创建。 查看 API 文档 API 路径,可在飞书开放平台的服务端 API,依次查找云文档>云空间>文件…...
【APP移动端自动化测试】第一节.环境配置和adb调试工具
文章目录 前言一、Java环境搭建二、AndroidSDK环境搭建三、Android模拟器安装四、adb调试工具基本介绍 4.1 adb构成和基本原理 4.2 adb获取包名,界面名 4.3 adb文件传输 4.4 adb获取app启动时间 4.5 adb获取手机日志 4.6 adb其他有关…...
聊城集团网站建设费用/百度模拟点击软件判刑了
当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manife…...
深圳建网站兴田德润优秀/北京推广
Adobe Photoshop是目前最流行的平面设计软件之一。可以说,只要你接触平面设计,那么无论早晚,你都要和它打交道。关于Photoshop,要说的实在太多太多,但不论你想让它成为你的左膀右臂,或者仅仅是用它来做一些…...
帷客分享 wordpress/seo查询5118
以下为米尔科技工程师在使用DS-5过程中总结的经验步骤,一个简单的实用HelloWorld工程。虽然工程很简单,但是对于刚入门DS-5来说,可以起到一个指导的作用。如下:步骤:1、从开始菜单启动DS-5,可以看到DS-5的欢…...
服务器免费/中山seo关键词
目录1. Chrome DevTools功能简介2. 使用Elements调试DOM2.1 查看编辑HTML和DOM2.2 在Console中访问节点2.3 在DOM中断点调试3. 调试样式及CSS3.1 查看和编辑CSS3.2 在元素中动态添加类与伪类3.3 快速调试CSS数值及颜色图形动画等4. 使用 Console 和 Sources 调试 JavaScript4.1…...
网站开发架构mvc/优化推广方案
花火网消息,如果你有4000元左右的预算,你会选择什么国产手机呢?近年来一加和华为其实在海外市场都得难分难解,尤其是今年一加7TPro和华为mate30Pro,更是引发了北美市场消费者的抢购,那么究竟这两款手机谁更好一些呢?…...
大型网站频道的建设需多人协同开发/湖南企业竞价优化
文件 templets\style\dedecms.css (行 98) 把.header这个class的 width:100%改成960px; 增加margin:0 auto; 以下是修改好的 .header{ margin:0 auto; width:960px; padding-top:16px; overflow:hidden; }...