分组卷积的思想神了
大家好啊,我是董董灿。
最近,分组卷积帮我解决了一个大忙,事情是这样的。
这几天遇到一个头疼的问题,就是要在某一芯片上完成一个神经网络的适配,这个神经网络中卷积居多,并且有一些卷积的通道数很大,比如2048个输入通道。
问题是,该芯片是专用芯片,所对应的硬件模块无法直接支持这种通道数很大的卷积运算。
于是开始了头脑风暴,因为芯片中有良好的向量指令集来支持内积运算,因此第一反应便是拿内积运算来拼凑出卷积。
但实验结果表明,利用内积指令来拼凑的卷积效果不如人意,主要在于内积指令调用次数过多,导致神经网络的整体性能太差。
就在一筹莫展时,一个声音传过来,“我们改图吧”。
改图,指的是改神经网络的结构,很多推理框架都具备这个能力,比如pytorch,tvm等。
这些推理框架可以针对性的适配某些专用AI芯片加速器,为此魔改一些神经网络结构,通过增加一些优化节点(pass),来使原本不支持的运算变为可支持的运算。
比如这个卷积的例子,可以将一个大卷积(指的是通道数很大),魔改为两个或多个小卷积,分别计算,计算完成后再将结果合并。
这就要提一下将卷积在通道维度分成多个卷积计算的操作——分组卷积(Group Convolution)了。
1、 什么是分组卷积
网上有很多关于分组卷积的资料。说的简单点,分组卷积是将卷积在channel 维度分组来计算,以达到将一个大卷积分成多个小卷积的目的。
为了清晰,我们将卷积操作简化为一次最简单的乘累加运算,channel维度只有2个数据,如下图。
正常的卷积操作,A和B的乘累加,计算的是 1x3 + 2x4 = 11。
而如果将其在channel维度分组(例子中channel维度只有两个数据,我们就分成两组),那么会是这样
第一组只计算channel 维度的前半部分,第二组只计算channel维度的后半部分。
分组的过程是不是很好理解。
2、为什么需要分组卷积
分组卷积最早由Alex等人在2012年的ImageNet图像分类竞赛中提出并使用,提出的初衷是为了解决卷积神经网络训练期间的计算和内存开销问题。
2012年的GPU不像现在的GPU内存那么大,当初GPU内存还很有限,一个channel通道数很大的卷积直接计算,放在整个网络中,是很耗费内存的。
于是,他们把大卷积在通道方向拆分成多个小卷积来分别计算,这样可以让拆分出来的多个小卷积分别运行在多张GPU卡上,达到一个模型多卡并行计算的目的,从而提高训练性能。
需要说明的是,论文中的分组卷积不仅将输入通道进行了分组,同时将输出通道进行了分组。
由此而来的分组卷积,在计算量上变为原来的1/G,G为分组的组数。
3、分组卷积和原始卷积在数学上等价吗?
细心的小伙伴可能会问这个问题。
如果仅仅说分组卷积,那么结果肯定和原始大卷积不等价,因为把channel维度给拆开了。
并且如果不做处理,还会影响最终的推理精度,对于这个问题,有个很好的解决办法。
我们知道,卷积算法的核心是特征提取和融合:5分钟理解什么是卷积的特征提取。
如果不进行其他操作,那么分组卷积仅仅进行了组内小卷积的特征融合,而缺少了分组间的特征融合,这样对于最终的训练推理结果会有影响。
为了解决这个问题,往往在分组卷积前在channle维度进行 shuffle 操作,也就是洗牌,使得特征可以随机的分配到每一个组内,能够更好的完成组间的特征融合。
4、“分组卷积“”的思想神了
回到上面我遇到的问题,我们需要在自己的需求下,利用分组卷积的思想,魔改大卷积运算。
如下示意图:一个输入channel 为 ci 的卷积,通过 split 在输入 channel 维度拆成两个 ci/2 的卷积,然后“分组”进行卷积操作,然后通过加法进行相加。
这里并没有对输出channel 进行分组,因为我们解决的问题不一样,内存对我们来说不是问题,问题仅仅在于输入channel太大。
而通过上面的魔改变换,便可以使得最终的结果和原始卷积计算一致,借用“分组卷积”的思想,可以很好的解决我遇到的问题。
相关文章:

分组卷积的思想神了
大家好啊,我是董董灿。 最近,分组卷积帮我解决了一个大忙,事情是这样的。 这几天遇到一个头疼的问题,就是要在某一芯片上完成一个神经网络的适配,这个神经网络中卷积居多,并且有一些卷积的通道数很大&…...

北邮22级信通院数电:Verilog-FPGA(7)第七周实验(2):BCD七段显示译码器(关注我的uu们加群咯~)
北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 关注作者的uu们可以进群啦~ 一.verilog代码 1.1 …...

LVS集群-DR模式
概念: LVS-DR模式,也是最常用的lVS负载方式,DR DIRECT ROUTING 直接路由模式 负载均衡器lVS调度器,只负责请求和转发到后端的真实服务器,但是影响结果,由后端服务器直接转发给客户端,不需要经…...

行为型模式-状态模式
在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 意图:允许对象在内部状态发生改变时改变它的行为࿰…...

html/css/javascript/js实现的简易打飞机游戏
源码下载地址 支持:远程部署/安装/调试、讲解、二次开发/修改/定制 视频浏览地址...

ubuntu 22.04安装百度网盘
百度网盘 客户端下载 (baidu.com) 下载地址 sudo dpkg -i baidunetdisk_4.17.7_amd64.deb...

关于路由转发
路由表的作用 路由表的作用:目标网络匹配路由表,从相应网络转发;不匹配路由表,丢弃或转发至默认路由器。 路由转发的原理 根据IP地址找到目标网络,由应路由器解封装查看目标网络是否可达,重新封装进行转…...

oradebug current_sql
CDB 或者PDB都可以,但是数据库sid不对找不到SQL TEXT ps -ef|grep 3485015 oracle 3485015 1 51 21:19 ? 00:01:10 oracle (LOCALNO) oracle 3489325 3488836 0 21:21 pts/0 00:00:00 grep --colorauto 3485015 . oraenv [oracle~]$ s SQL*…...

JSON(详解)
目录 什么是JSON? 哪里会用到JSON? JSON的特点 JSON的优点 JSON的缺点 JSON和cJSON的关系 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式来存储和表示…...

1-多媒体通信概述
文章目录 媒体和多媒体媒体多媒体VarityIntergrationInteraction 多媒体通信(MMC)业务类型 MMC主要问题和关键技术主要问题关键技术 MMC发展动向重要事件趋势 标准化组织 媒体和多媒体 媒体 承载信息的载体. 感知媒体, 表示媒体, 显示媒体, 存储媒体, 传输媒体. 多媒体 Var…...

k8s集群环境搭建
k8s环境集群搭建 1.简述2.k8s概述3.软硬件配置3.1 硬件配置3.2 软件配置4 环境配置4.1使用root权限4.2 节点ip配置4.3 设置系统主机名4.4 解析主机名4.5 关闭swap4.6 设置时间同步5 安装集群所需软件5.1 安装 docker5.2 安装cri-dockerd5.3 安装 Kubernetes6 K8s集群实例部署6.…...

Makefile 基础教程:从零开始学习
在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动构建程序,管理程序依赖关系,提高开发效率。本篇博客将从基础开始,介绍Makefile的相关知识,帮助大家快速掌握Makefile的使用方法 Makefil…...

绝对路径与相对路径
目录 一、绝对路径 二、相对路径 三、举例 一、绝对路径 绝对路径是指从根目录开始的完整路径,包括所有父目录的路径,直到目标文件或者目录 所在的位置。 全文件名全路径文件名绝对路经完整的路径 例如:在windows系统中,绝对路径通常以…...

电大搜题:开启智慧学习新时代
近年来,随着社会的发展和科技的迅猛进步,远程教育成为了广大学子继续教育的新选择。而在重庆,一所备受关注的远程教育学府——重庆开放大学,以其开放的教育理念和多元的学习方式,为广大学生提供了便捷而高效的学习平台…...

Android Studio 导出 jar
AS版本:Android Studio Giraffe | 2022.3.1 Patch 1 1、File——New Module——Android Library 2、mylibrary——main——新建功能类 3、mylibrary——build.gradle——android {}内复制以下代码——Sync Now //Copy类型 tasks.register(makeJar, Copy) { //删…...

【Leetcode】【每日一题】【中等】1465. 切割后面积最大的蛋糕
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/maximum-area-of-a-piece-of-cak…...

Ocelot简易教程目录
Ocelot简易教程目录 这里写目录标题 Ocelot简易教程目录 Ocelot简易教程(一)之Ocelot是什么Ocelot简易教程(二)之快速开始1Ocelot简易教程(二)之快速开始2Ocelot简易教程(三)之主要特…...

什么是可重入,什么是可重入锁? 它用来解决什么问题?
可重入 可重入是多线程并发编程里面一个比较重要的概念,简单来说,就是在运行的某个函数或者代码,因为抢占资源或者中断等原因导致函数或者代码的运行中断,等待中断程序执行结束后,重新进入到这个函数或者代码中运行&am…...

Unity报错:Microsoft Visual C# Compiler version
Unity报错:Microsoft Visual C# Compiler version 问题解决方案总结 问题 Microsoft Visual C# Compiler version 2.9.1.65535 (9d34608e) Copyright © Microsoft Corporation 切换版本或者使用老项目的时候可能会出现这个报错,这个报错就是项目设置的问题 …...

2023年下半年WSK-PETS5考试内容大纲及题型解析
国家公派留学人员全国外语水平考试(WSK-PETS5)成绩作为国家留学基金委(CSC)认可语言成绩证明,一直备受公派访问学者、博士后申请者的关注。随着下半年考试时间的临近,知识人网小编特整理出本次考试内容大纲…...

【24种设计模式】单例模式(Singleton Pattern)
当我们需要确保一个类只有一个实例时,可以使用单例模式。单例模式确保一个类只有一个实例,并提供一个全局访问点来获取该实例。 单例模式有多种实现方式,包括饿汉式、懒汉式和双重检查锁等。下面我们将分别介绍这些实现方式的特点和示例。 …...

shell算数运算指令、
1.shell算数运算的指令 (( )) $[ ] let expr expr的字符串运算 例子: 2.shell的if分支结构...

数字孪生与智慧城市:开启未来智慧生活
在数字时代的浪潮中,数字孪生技术和智慧城市的理念相互交织,共同塑造了一个更智能、更可持续、更宜居的未来。数字孪生是一项前沿技术,将虚拟世界与现实世界相融合,为城市管理者和市民带来了前所未有的机遇和便捷。 数字孪生模型是…...

jenkins实践篇(1)——基于分支的自动发布
问题背景 想起初来公司时,我们还是在发布机上直接执行发布脚本来运行和部署服务,并且正式环境和测试环境的脚本都在一起,直接手动操作脚本时存在比较大的风险就是将环境部署错误,并且当时脚本部署逻辑还没有检测机制,…...

Microsoft.Extensions 简介
Microsoft.Extensions 简介 一、Microsoft.Extensions 简介 .NET Extensions 是一套官方的、开源的、跨平台的 API 集合,提供了一些常用的编程模式和实用工具,例如依赖项注入、日志记录、缓存、Host以及配置等等。该项目的大多数 API 都被用在 .NET 平…...

k8s 金丝雀发布与声明式管理
Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后…...

百度Comate SaaS版本正式发布,助力开发者加速研发过程
百度Comate是基于文心大模型的智能代码助手,让开发者的编码更快、更好、更简单,为开发者自动生成完整的、且更符合实际研发场景的代码行或整个代码块,帮助每一位开发者轻松完成研发任务。10月17日召开的百度世界大会上,百度CTO王海…...

8类放球问题
放球问题简介 放球问题是一类很有意思的排列组合问题。通俗来说,就是把n个小球放到m个盒子里,问有几种放法。根据小球是否相同,盒子是否相同,是否允许有空盒,又可以把问题细分为8个具体的问题。其中有一些问题是非常简…...

【APP VTable】和市面上的 Table 组件一样,都是接收表格[] 以及数据源[]
博主:_LJaXi Or 東方幻想郷 专栏: uni-app | 小程序开发 开发工具:HBuilderX 这里写目录标题 表格组件USE 表格组件 <template><view class"scroll-table-wrapper"><view class"scroll-table-container"…...

深度学习 anaconda 安装问题
配置anaconda 在官网下载匹配版本的anaconda(官网下载可能时间比较长),可以选择清华镜像。 安装过程默认即可,或者根据情况进行修改。 旧版本是可以在安装的时候勾选添加路径到环境变量中的,但是我安装的是2023.9月…...