一篇文章给你讲清楚正常卷积与深度可分离卷积

news2024/9/23 0:42:20

文章目录

  • 正常卷积
  • 深度可分离卷积
    • 深度卷积
    • 逐点卷积
  • 对比
  • 代码实现查看(torch实现)
    • 结果

正常卷积

也就是我们平常用的比较普遍的卷积:
请添加图片描述
它的参数量是:112,即: ( 卷积核大小) ∗ 输入通道 ∗ 输出通道 + 偏置 (卷积核大小)*输入通道*输出通道+偏置 (卷积核大小)输入通道输出通道+偏置

深度可分离卷积

等于: 深度卷积 + 逐点卷积 深度卷积+逐点卷积 深度卷积+逐点卷积
还是上面的例子,由于输入通道为3,所以我们设置group=3

深度卷积

请添加图片描述
它的参数量是:30,即: ( 卷积核大小) ∗ 输入通道 ∗ 输出通道 ∗ g r o u p 数 + 偏置 (卷积核大小)*输入通道*输出通道*group数+偏置 (卷积核大小)输入通道输出通道group+偏置

逐点卷积

就是用卷积核大小为1的卷积核,做正常卷积,此时卷积核个数为输出通道数,即4。
请添加图片描述
它的参数量是:16,即: ( 卷积核大小) ∗ 输入通道 ∗ 输出通道 + 偏置 (卷积核大小)*输入通道*输出通道+偏置 (卷积核大小)输入通道输出通道+偏置

对比

正常卷积参数量: 112 112 112
深度可分离卷积参数量: 30 + 16 = 46 30+16=46 30+16=46
很明显,这么一个简单的卷积,就减少了一半多的参数,所以会很快。

代码实现查看(torch实现)

from torch import nn
import torch
import torchsummary
import torchviz

class Model_1(nn.Module):
    def __init__(self,in_channels, out_channels, groups) 
        super(Model_1, self).__init__()

        self.conv = nn.Conv2d(in_channels=in_channels,out_channels=out_channels,groups=groups,kernel_size=3, padding=1)

    def forward(self, x):
        y = self.conv(x)
        return y

class Model_2(nn.Module):
    def __init__(self, in_channels, out_channels, groups):
        super(Model_2, self).__init__()

        self.conv_1 = nn.Conv2d(in_channels=in_channels,out_channels=in_channels,groups=in_channels,kernel_size=3, padding=1)
        self.conv_2 = nn.Conv2d(in_channels=in_channels,out_channels=out_channels,kernel_size=1)
    
    def forward(self, x):
        x = self.conv_1(x)
        y = self.conv_2(x)
        return y


if __name__ == '__main__':    

    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model = Model_1(3,4,1).to(device)
    torchsummary.summary(model,input_size=(3,224,224))

    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model = Model_2(3,4,1).to(device)
    torchsummary.summary(model,input_size=(3,224,224))

结果

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1          [-1, 4, 224, 224]             112
================================================================
Total params: 112
Trainable params: 112
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 1.53
Params size (MB): 0.00
Estimated Total Size (MB): 2.11
----------------------------------------------------------------
----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1          [-1, 3, 224, 224]              30
            Conv2d-2          [-1, 4, 224, 224]              16
================================================================
Total params: 46
Trainable params: 46
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 2.68
Params size (MB): 0.00
Estimated Total Size (MB): 3.25
----------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1545736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【随笔】Git -- 常用命令(四)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

【python】flask模板渲染引擎Jinja2,使得前后端交互更加便捷

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

2010年之前电脑ubuntu安装nvidia驱动黑屏处理

装好驱动 仿真fps直接到60Hz 陈旧设备 都是非常老旧的电脑,没钱换新电脑,就这么穷…… 电脑详细配置: 冲动 想装显卡驱动提升一下性能,结果……黑了 黑习惯了也无所谓,几分钟就能解决,关键还是太穷&…

【C】盛最多水的容器(双指针)

盛最多水的容器 原题目链接:点击跳转 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和(i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说…

数据结构-树-006

1二叉树 1.1目标二叉树 前序遍历:ABDHIEJCFKG 中序遍历:HDIBEJAFKCG 后序遍历:HIDJEBKFGCA 层序遍历:ABCDEFGHIJK运行结果: 运行结果符合目标二叉树的深度优先(前序遍历,中序遍历,…

【c++】【STL】stack类、queue类、deque类详解及模拟

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今日主菜:stack和queue,deque类 主厨:邪王真眼 所属专栏:c专栏 主厨的主页:Chef‘s blog 这可是…

Endnote(作者,年份)文中引用显示‘and etal‘与‘和 等‘

软件版本:Endnote X9.1,样式:Harvard,其余使用(作者,年份)的样式均可,GBT7714就有作者年份类型 本教程适用于X系列~ Endnote20及以上版本请移步另一条博文,指路:(我还没…

“双碳”目标下资源环境中的可计算一般均衡(CGE)模型教程

原文链接:“双碳”目标下资源环境中的可计算一般均衡(CGE)模型https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599079&idx4&sn82ea6c6f506cd20d1e0cd590faaa0611&chksmfa820200cdf58b16dc5b79746901cc9a4048b46db5…

《自动机理论、语言和计算导论》阅读笔记:p5-p27

《自动机理论、语言和计算导论》学习第2天,p5-p27总结,总计23页。 一、技术总结 1.集合 (1)commutative law of union. (2)distribute law of union. 2.归纳法(induction) & 演绎法(deduction) (1)归纳法:从许多个别的事实或原理中…

【zlm】问题记录:chrome更新引起的拉不出webrtc; 证书校验引起的放几秒中断

目录 chrome更新引起的拉不出webrtc 证书校验引起的放几秒中断 chrome更新引起的拉不出webrtc 【zlm】最新的chrome版本中的报错: 我有个问题event.js:8 [RTCPusherPlayer] DOMException: Failed to execute setRemoteDescription on RTCPeerConnection: Failed …

LabVIEW焓差试验室流量计现场自动校准系统

LabVIEW焓差试验室流量计现场自动校准系统 在现代工业和科研领域,流量计的准确性对于保证生产过程的质量和效率非常重要。开发了一种基于LabVIEW的焓差试验室流量计现场自动校准系统,通过提高流量计校准的准确性和效率。 在空调器空气焓值法能效测量装…

hololens 2 投屏 报错

使用Microsoft HoloLens投屏时,ip地址填对了,但是仍然报错,说hololens 2没有打开, 首先检查 开发人员选项 都打开,设备门户也打开 然后检查系统–体验共享,把共享都打开就可以了

【k8s】kubeasz 3.6.3 + virtualbox 搭建本地虚拟机openeuler 22.03 三节点集群 离线方案

kubeasz项目源码地址 GitHub - easzlab/kubeasz: 使用Ansible脚本安装K8S集群,介绍组件交互原理,方便直接,不受国内网络环境影响 拉取代码,并切换到最近发布的分支 git clone https://github.com/easzlab/kubeasz cd kubeasz gi…

C++细节

背景知识: 面向对象的编程中,类(Class)是创建对象的蓝图或模板,它包含了数据(通常称为属性或变量)和行为(通常称为方法或函数)。将数据封装为私有(private&am…

【Java】:类和对象

1.面向对象的初步认知 1.1 什么是面向对象 Java是一门面向对象的语言,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知…

CDNS PCIe VIP debug info

1. TLP payload的顺序是反向的,即大小端反的,比如下面的denalirc打印的信息看,pl是我们发TLP时的配置,Cfg才是真正的data顺序。 而seq写的时候如下:可以看到payload[2]时第三个8bit payload,但是我们是想配…

JS加密解密之应用如何保存到桌面书签

前言 事情起因是这样的,有个客户解密了一个js,然后又看不懂里边的一些逻辑,想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的,以及如何下载应用的。继而诞生了这篇文章,讲解一下他的基本原理。 渐进式Web应用…

UE5学习日记——蓝图节点前缀关键字整理

一、起因 节点如海,中英文翻译的时候还是有差别的,比如: 同一个中文,可能在英文里完全不同,连出现位置可能都不一样 附加 Attach Actor To Component(将Actor附加到组件)Append Array&#xf…

【竞技宝】DOTA2-PGL联赛:niu神无解 LGD2-0轻松击败DH

北京时间2024年3月26日,PGL联赛中国区的比赛在昨日正式打响,首日共进行了四场胜者组首轮的比赛,第四场比赛由LGD对阵DH。本场比赛,DH两局都在前中期和LGD有来有回,但niu的中期节奏完全摧毁了DH,最终LGD2-0轻松击败DH。以下是本场比赛的详细战报。 第一局: 首局比赛,LGD在天辉方…

Python Flask框架 -- flask-migrate迁移ORM模型

# 之前使用的这个db.create_all()很有局限性,它不能把在class里修改的东西同步上数据库,所以不用了 # with app.app_context(): # 请求应用上下文 # db.create_all() # 把所有的表同步到数据库中去 例如,在User类中增加一个email字段&…