概要:这篇文章是动态卷积的改进版,最近研究了下官方代码。
下文所述,如有错误,欢迎指正。


代码并不长,但是想看懂也不是那么容易。论文里讲的是动态卷积的改进,即

结构图示如下:

初看代码,大概率会错误的以为就是单纯实现了W(x),但是卷积不应该是W(x)*x吗,这步操作代码怎么没体现呢?
第一个关键点,实际上代码是将W(x)*x分解为了许多小步,分别在代码里实现。
第二个关键点,对于卷积核的加权,作者并不是直接对卷积核参数加权,而是对标准卷积核卷积之后的结果加权,(wx+b)*p=p*wx+p*b

具体解析见代码段。

class conv_dy(nn.Module):def __init__(self, inplanes, planes, kernel_size, stride, padding):super(conv_dy, self).__init__()self.conv = nn.Conv2d(inplanes, planes, kernel_size=kernel_size, stride=stride, padding=padding, bias=False)self.dim = int(math.sqrt(inplanes))squeeze = max(inplanes, self.dim ** 2) // 16self.q = nn.Conv2d(inplanes, self.dim, 1, stride, 0, bias=False)self.p = nn.Conv2d(self.dim, planes, 1, 1, 0, bias=False)self.bn1 = nn.BatchNorm2d(self.dim)self.bn2 = nn.BatchNorm1d(self.dim)self.avg_pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Sequential(nn.Linear(inplanes, squeeze, bias=False),SEModule_small(squeeze),)self.fc_phi = nn.Linear(squeeze, self.dim ** 2, bias=False)self.fc_scale = nn.Linear(squeeze, planes, bias=False)self.hs = Hsigmoid()def forward(self, x):r = self.conv(x)#先进行卷积,后对卷积结果加权b, c, _, _ = x.size()#获得batchsize和通道数y = self.avg_pool(x).view(b, c)#平均池化,self.avg_pool(x)尺寸为[b,c,1,1],故加viewy = self.fc(y)#fc层phi = self.fc_phi(y).view(b, self.dim, self.dim)#phi 即φ,这一步即为φ(x)scale = self.hs(self.fc_scale(y)).view(b, -1, 1, 1)#hs 即Hsigmoid()激活函数r = scale.expand_as(r) * r#这里就是加权操作,从公式来看这里应该是A*W0#实际上这里是 A*W0*x,即把参数的获取和参数计算融合到一块out = self.bn1(self.q(x))#q的话就是压缩通道数_, _, h, w = out.size()out = out.view(b, self.dim, -1)out = self.bn2(torch.matmul(phi, out)) + out#这里为什么加out呢,看论文像是设计成#残差块?这里不太确定。out = out.view(b, -1, h, w)out = self.p(out) + r#p是把通道拓展到输出空间,为什么要压缩再拓展,减少参数量return out

REVISITING DYNAMIC CONVOLUTION VIA MATRIXDECOMPOSITION 官方代码解析心得相关推荐

  1. 番外篇15:libevent简单理解(附libevent官方代码解析,和跨平台服务器、客户端链接代码)

    文章目录 一.事件event和事件管理器event_base介绍 二.libevent流程简介(注册->检测->分派) 三.libevent的好处 四.代码比较 4.1 原来reactor ...

  2. 输出分组_通过分组卷积的思想,巧妙的代码实现动态卷积(Dynamic Convolution)

    论文的题目为<Dynamic Convolution: Attention over Convolution Kernels> paper的地址https://arxiv.org/pdf/ ...

  3. 【论文笔记】Dynamic Convolution: Attention over Convolution Kernels

    Dynamic Convolution: Attention over Convolution Kernels,CVPR2020 论文地址:https://openaccess.thecvf.com/ ...

  4. ViTAE论文阅读与官方代码讲解

    论文名称: ViTAE: Vision Transformer Advanced by Exploring Intrinsic Inductive Bias arxiv网址: https://arxi ...

  5. G-GhostNet(IJCV 2022)原理与代码解析

    paper:GhostNets on Heterogeneous Devices via Cheap Operations code:https://github.com/huawei-noah/Ef ...

  6. 【Netty】入门Netty官方例子解析(二)Time Server

    本文承接上文<[Netty]入门Netty官方例子解析(一)写个 Discard Server> ,接下来讲解官网文档中Netty入门官方例子第二个例子 Time Server 原文这个章 ...

  7. ORB-SLAM / ORB-SLAM2原理解读+代码解析(汇总了资料,方便大家学习)

    注释:本文非原创,初学搜集了很多资料附上链接,方便初学者学习,避免盲目搜索浪费时间. 目录 官方代码链接 代码框架思维导图 参考解读 参考链接- -一步步带你看懂orbslam2源码 ORB-SLAM ...

  8. AXI-IIC官方示例解析

    AXI-IIC官方示例解析 说明:本文是作者自己对Xilinx的AXI-IIC的官方示例的解析,如有错误望各位指正. 文章目录 AXI-IIC官方示例解析 前言 xiic_eeprom_example ...

  9. PX4代码解析(1)

    前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳 ...

最新文章

  1. emacs参考资料整理
  2. java基础 多维数组_java基础:3.2 多维数组
  3. caffe-gpu ubuntu 安装_如何在Linux中安装vnStat和vnStati监视网络流量
  4. java把信息存到文件里,Java 如何将字符串信息直接写保存到文本文件?
  5. java课程设计总结迷宫_Java课程设计走迷宫详解.doc
  6. P7405-[JOI 2021 Final]雪玉【二分】
  7. 外部函数获取内部函数变量_一维随机变量的分布函数
  8. 国外问答网站Quora数据的爬虫 Java
  9. 模板方法模式(Template Method Pattern)
  10. 某些error page不加载_细说So动态库的加载流程
  11. 理解全概率公式与贝叶斯公式
  12. 仇保兴:城市的交通应该尊重什么样的发展战略?
  13. GAMES101-现代计算机图形学入门-闫令琪——Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering) 学习笔记
  14. 程序收到一段如下文本
  15. Cortex-M3/M4(1)-处理器概述
  16. 火爆全网的动态曲线图是怎么做的?
  17. win7计算机搜索功能没有了,win7搜索功能不能用了怎么办|win7搜索功能不见了怎么解决? - 学无忧...
  18. arm-3-中断体系结构
  19. 博后招募 | 香港大学蒋海波齐晓娟教授联合招收AI4Science方向博士后/RA
  20. 为什么选择分布式垂直架构

热门文章

  1. Android系统操作的50个实用技巧
  2. 种花问题(Java)
  3. 计算机学院新年祝福语,春节祝福语-湖北工业大学工程技术学院校报电子版《成长》...
  4. 飞桨领航团AI达人创造营4-在Jetson Nano上基于python部署Paddle Inference(硬件部署)
  5. jsp连接sql server数据库
  6. QML 使用资源系统
  7. 物料-零部件分类属性
  8. zend studio 9 字体,颜色,自动格式化文件相关设置
  9. 几个好玩的在线编程网站
  10. startuml动态模型工具_StarUML建模工具