在标准卷积的基础上介绍组卷积, 深度可分离卷积, 空洞卷积.
标准卷积运算是这样地:
对于输入特征为 C ∗ H ∗ W C*H*W C∗H∗W, 卷积核大小为 K ∗ K K*K K∗K, 共 N 个卷积核. 则:
输入特征图与输出特征图的连接方式如下图所示:
最早出现分组卷积的是 AlexNet. 分组卷积, 顾名思义就是将原始卷积中的输入特征按照通道进行分组, 每个组卷积只对同组通道内的特征图执行卷积运算.
给定, 输入特征图为: C × H × W C×H×W C×H×W, 卷积核大小为 K × K K×K K×K, 卷积核共有 N 个. 我们按照通道数分为 g 个组, 一般来讲, g 应该可以被 N 整除. 则:
特点:
1. 分组卷积可以减小卷积参数的个数, 总参数量为 g ∗ ( N × C × K × K g 2 ) = N × C × K × K g g*(\frac{N×C×K×K}{g^2}) = \frac{N×C×K×K}{g} g∗(g2N×C×K×K)=gN×C×K×K.
2. 分组卷积可以看成是 structured sparse, 对上图所示的, N / g × C / g × K × K N/g×C/g×K×K N/g×C/g×K×K 卷积核可以看作 N / g × ( C − C / g ) × K × K N/g×(C-C/g)×K×K N/g×(C−C/g)×K×K 这部分卷积核的值为 0, 有时甚至可以在减少参数量的同时获得更好的效果 (起到类似正则化的作用) .
深度可分离卷积是在 mobileNet 和 Xception 中都有涉及的一个操作.
在分组卷积中, 我们考虑一种特殊情况, 如果输入特征图的尺寸等于输出特征图的尺寸 (H × W 不变) , 如果我们把输入特征图的通道数 C1 分成 C1个组, 也就是每个组都只有 1 个通道, 那么我们用 1 × 1 × K × K 的卷积核来对每组进行卷积, 同时拼接 C1 个组的结果, 得到输出特征图的通道仍为 C1 × H × W, 这其实就是深度可分离卷积.
对于可分离卷积, 我认为其可以分为两种形式, 一种是空间可分离卷积, 顾名思义, 空间可分离就是将一个大的卷积核变成两个小的卷积核, 也就是在 inception 系列中出现的把 3 × 3卷积分成对称的 1×3 与 3×1 的操作, 另一种就是深度可分离卷积, 深度可分离卷积也可分为两部分, 深度卷积+逐点卷积, 深度卷积就是在每个通道上执行卷积, 但是不整合所有对应通道上的结果 (没有通道级别对应的 add 操作) ; 逐点卷积其实就是 1x1 3D 卷积, 对所有通道进行融合.
图 (a) 代表标准卷积. 假设输入特征图尺寸为 M ∗ H ∗ W M*H*W M∗H∗W, 卷积核尺寸为 M ∗ D k ∗ D k M*D_{k}*D_{k} M∗Dk∗Dk , 共 N N N 个卷积核, 输出特征图尺寸为 N ∗ H ∗ W N*H*W N∗H∗W, 标准卷积层的参数量为: N ∗ M ∗ D k ∗ D k N*M*D_{k}*D_{k} N∗M∗Dk∗Dk.
图 (b) 就是深度卷积, 把输入特征图上的每一个通道单独执行卷积操作, 也就是用 M M M 个 1 ∗ D k ∗ D k 1*D_{k}*D_{k} 1∗Dk∗Dk 的卷积核对输入特征图上的每一个通道执行卷积操作, 最终得到的输出特征图的尺寸仍然为 M ∗ H ∗ W M*H*W M∗H∗W, 参数数量为 M ∗ D k ∗ D k M*D_{k}*D_{k} M∗Dk∗Dk.
图 为逐点卷积, 也就是常规的 1 × 1 1×1 1×1 卷积操作, 输入特征图为 M ∗ H ∗ W M*H*W M∗H∗W, 卷积核的尺寸为 M ∗ 1 ∗ 1 M*1*1 M∗1∗1 , 共 N N N 个卷积核, 输出特征图尺寸为 N ∗ H ∗ W N*H*W N∗H∗W. 参数数量为 N ∗ M N*M N∗M.
那么图 (b) 与图 的操作结合之后就是深度可分离卷积. 深度可分离卷积的作用就是降参, 我们来对比一下标准卷积与深度可分离卷积的参数个数:
( M ∗ D k ∗ D k + N ∗ M ) N ∗ M ∗ D k ∗ D k = 1 N + 1 D k 2 \frac{ (M*D_{k}*D_{k}+N*M)}{N*M*D_{k}*D_{k}}=\frac{1}{N}+\frac{1}{D_{k}^{2}} N∗M∗Dk∗Dk(M∗Dk∗Dk+N∗M)=N1+Dk21
如果我们用 3 ∗ 3 3*3 3∗3 的卷积, 那么相当于我们大约可以减少 10 倍的参数计算量.
深度可分离卷积与标准卷积相比, MobileNet1 在 ImageNet 上降低了约 1% 的精度.
扩张卷积又名空洞卷积 (atrous convolutions), 通过向卷积层引入了一个称为 "扩张率 (dilation rate) " 的参数, 该参数定义了卷积核处理数据时各值的间距.
直观地感受一下空洞卷积的计算方式:
其公式表示为:
y [ i ] = ∑ k = 0 K − 1 x [ i + r ∗ k ] ⋅ w [ k ] y[i] = \sum_{k = 0}^{K-1}x[i+r*k] \cdot w[k] y[i]=k=0∑K−1x[i+r∗k]⋅w[k]
其中,
换句话说, 与标准卷积相比, 扩张卷积多了一个超参数 (扩张率), 其指定了 kernel 各点之间的间隔的点数. 因此, 标准卷积的扩张率为 1.
[1]. 理解分组卷积与深度可分离卷积
[2]. Group Convolution组卷积
[3]. 如何理解空洞卷积 (dilated convolution)?
文章浏览阅读452次。$ ssh-keygen -t rsa -C "github账号"$ cd ~/.sshcat id_rsa 复制内容 黏贴到gethub中_github 项目配置key
文章浏览阅读2.3w次。首先说明这就是一个坑。配好了js安全域名,调试时仍然报invalid url domain,查看官方文档说是域名绑定不成功。谷歌之后才发现很多人也遇到这个问题。下面给出解决方案:如果调用js的域名是二级域名,而在JS接口安全域名里面没有配置该二级域名,那么可以直接配置成主域名。比如二级域名是weixin.test.com,那么JS接口安全域名可以配置成test.com._已配置了安全域名 仍然提示 url域名不在安全域名列表中
文章浏览阅读3.5w次,点赞22次,收藏26次。org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memoryMonitor' defined in URL [jar:file:/usr/local/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-2.0.1.jar!/com/alibaba/nacos/config/server/monitor/_error creating bean with name 'memorymonitor' defined in url
文章浏览阅读9.8k次。今天在整理文件包的时候,由于冗余文件太多,大概有3660多个,但我实际需要的只有43个,怎么通过批量操作把这43个文件找出来呢?天呢,一个个的挑出来忒难为人了,索性还是使用脚本吧,自己动手,丰衣足食。明确目标首先,你应该知道你需要哪些文件吧,把他们整合到一个文件中,这里命名txt:binutils-2*x86_64*glibc-2*x86_64*glibc-devel-2*x86_64*准备材料_shell移动前100个文件
文章浏览阅读1.2k次。Oracle9i通过引入列表分区(List Partition),使得当前共有4种分区数据的方法,具体列出如下: 第一种 范围分区 1 对表进行单列的范围分区: 这使最为常用也是最简单的方法,具体例子如下: create table emp (empno number(4), ename varchar2(30), sal number) partition ..._oracle partition用法
文章浏览阅读2.1k次。原文转自:http://blog.csdn.net/tianlesoftware/article/details/5728097这篇资料主要讲到了如下内容:1. Rman 的维护2. 恢复目录的维护3. 备份恢复目录4. RMAN 存储脚本5. 删除数据库 一. RMAN 的维护1.1 交叉效验RM_rman session
文章浏览阅读1.1k次,点赞2次,收藏3次。安装依赖插件依赖的字体和 Chrome 安装//依赖的字体和Chrome安装yum install -y ttf-wqy-zenhei fonts-wqy-microhei chromium安装 puppeteer//安装puppeteeryum install -y nodejs-legacy npm//设置npm加速//阿里云npm config set registry https://registry.npm.taobao.org --globalnpm config_mindoc 二次开发
文章浏览阅读614次。古人云:“橘生淮南则为橘,生于淮北则为枳”“龙生九子,子子不同”,说明即使基因相同,但非DNA序列的变化也会导致遗传性状的改变,这就是表观遗传修饰在“起作用”。随着测序成本的不断降低以及测序技术的更新迭代,对表观遗传学研究逐步深入,表观组学在科学研究尤其是临床研究中发挥着越来越重要的作用。今天给大家分享的就是一篇使用oxBS-seq技术对复杂疾病预后相关的潜在表观遗传标志物研究,该研究成果刚刚发表在Clinical & Translational Medicine期刊上。首先,先了解下oxB_橘逾准为枳表观遗传
文章浏览阅读3.1k次,点赞5次,收藏11次。前几天有个朋友去面试字节跳动,面试官问了他一道链表相关的算法题,不过他一时之间没做出来,就来问了我一下,感觉这道题还不错,拿来讲一讲。题目这其实是一道变形的链表反转题,大致描述如下给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间为一组进行逆序,并且从链表的尾部开始组起,头部剩余节点数量不够一组的不需要逆序。(不能使用队列或者栈作为辅助)例如:链表:1->..._字节跳动核心算法
文章浏览阅读1.2k次。POP3邮件接收telnet mail.tp-corp.com 110USER test01PASS test01STAT 查看邮箱状态LIST 邮件列表TOP 254 0 查看指定邮件的邮件头RETR 254 获取指定邮件 DELE 254 删除第254封邮件 SMPT发送邮件telnet mail.tp-corp.com 25HELO mail.tp-corp.comEHLO mail.tp-corp.comauth login用户名 dGVzdD_pop3命令 rcpt
文章浏览阅读4.8k次。android.graphics.Path允许使用线段,二次曲线,三次曲线构成路径(类似SVG),Canvas缺省绘制Path时为单色细实线,但在例Drawable->ShapeDrawable 的固定链接" href="http://www.imobilebbs.com/wordpress/?p=1486" rel="bookmark">Android ApiDemos示例解析(65):Grap_android apidemos 分析
文章浏览阅读829次。目录第1部分 嵌入式开发必备基础第1章 软件开发基础 11.1 嵌入式环境下的C语言使用技巧 11.1.1 重要的位(bit)操作 11.1.2 正确使用数据指针 21.1.3 函数等价于指令的集合 31.1.4 操作有限的存储空间 41.1.5 理解栈空间(Stack)和堆空间(Heap) 51.1.6 关键词const的使用 61.1.7 关键词vola_嵌入式开发章节目录