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

文章目录

  • 正常卷积
  • 深度可分离卷积
    • 深度卷积
    • 逐点卷积
  • 对比
  • 代码实现查看(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
----------------------------------------------------------------

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】_Spring MVC项目获取URL中的参数

目录 1. 单参数 2. 多参数 1. 单参数 .java文件如下: package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*;import java.util.Arrays; import java.util.List;RequestMapping("/Para&…

MFC 打开类向导中方法时提示对com组件的调用返回了错误 HRESULT E_FAIL

解决:头文件中要分类,把virtual和afx_msg等放在一起,不要交叉错开。 MFC(Microsoft Foundation Class)中的virtual关键字用于声明虚函数。虚函数是C中实现多态的一种机制,它允许派生类重新定义基类中的虚函…

FreeRtos学习笔记(12)systemView 分析任务调度情况

FreeRtos学习笔记(12)systemView 分析任务调度情况 使用stm32f429 freertosV10.5.1 systemView 3.5 keil AC5 systemView 移植 从官网下载 systemView 软件 将下面文件添加到工程中 freertos 修改 systemView 需要 FreeRTOSConfig.h 开启如下宏, …

UE小:CesiumForUnreal使用教程

联网模式(需要翻墙) 直接打开工程并点击Cesium插件图标然后点击connect to Cesium ion进行账号注册即可使用 见到如界面后点击Allow并返回UE编辑器(如果无法打开认证界面请先访问https://ion.cesium.com/并且不要关闭,再次点击co…

Fendi Club啤酒:畅享时尚的味蕾之旅

在这个追求个性与品味的时代,Fendi Club啤酒以其时尚的魅力,领着时尚潮流与味蕾的完善结合。它不仅是一款啤酒,更是一种生活态度的象征,让我们一起踏上这场畅享时尚的味蕾之旅。 Fendi Club啤酒的特别之处在于它对品质的别致追求。…

SQL映射文件

一、SQL映射的xml文件 1.1 mapper元素 二、select 三、别名与Java映射 四、resultMap 啊

专题一_双指针(2)

目录 LCR 179. 查找总价格为目标值的两个商品 解析 题解 15. 三数之和 解析 题解 18. 四数之和 解析 题解 LCR 179. 查找总价格为目标值的两个商品 LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode) 解析 题解 class Solution { publi…

软件架构复用相关知识总结

一、软件产品线 软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需求,是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理、复用、集成新的系统。采用产品线能够提…

前端学习-HTML基础

一、简介 1.介绍 网页就是html文件,前端编写代码->浏览器解析代码->呈现网页 谷歌浏览器Blink内核最好 2.Web标准 让网页设计排版更统一规范 结构:对网页元素进行整理和分类,html 表现:设置网页元素的板式、颜色、大小等外…

工作中总结的30个常用Linux指令,实在记不住就别硬记了,看这篇就够了

写在开头 最近发现自己记忆力严重下滑,很多sql命令,linux命令都记不住,特别是linux命令,很多命令参数很多,一段时间不用,再去使用就需要从网上重查了,很烦人,为此花了一些时间把之前…

初始化hive数据库问题记录

1、问题复现:完成了初始化hive数据库后没有看到生成的表格 2、检查后发现是NaviCat连接时主机号写错了,写成了localhost,这里修改为node01的主机号 3、修改后再次刷新就看到之前初始化后自动生成好的数据库表格了

C++之模板和可变模板参数

目录 一、为什么要定义模板 模板的优点: 二、模板的定义 三、模板的类型 3.1、函数模板 3.1.1、实例化:隐式实例化与显示实例化 3.1.2、函数模板、普通函数间的关系 3.1.2.1易错点: 3.1.2.2重载例子: 3.1.2.3优先级与执行顺序: 3.1.3、模板头文件与实现文…

vue3+threejs新手从零开发卡牌游戏(十四):调整卡组位置,添加玩家生命值HP和法力值Mana信息

由于之前的卡组位置占了玩家信息的位置,所以这里将它调整到site区域: 修改game/site/p1.vue,在site右下角添加一个卡组区域: // 初始化己方战域 const init () > {let sitePlane scene.getObjectByName("己方战域Plan…

【工具-MobaXterm】

MobaXterm ■ MobaXterm简介■ MobaXterm下载安装■ MobaXterm主要功能■ 创建SSH session■ 创建串口session■ 远程文件传输和下载■ 运行图形应用程序■ Unix 命令集(GNU/ Cygwin)工具箱功能 ■ MobaXterm配置■ 设置黑色主题■ 设置终端字体■ 右键粘贴■ 右键复制■ 文件保…

【干货】Apache DolphinScheduler2.0升级3.0版本方案

升级背景 因项目需要使用数据质量模块功能,可以为数仓提供良好的数据质量监控功能。故要对已有2.0版本升级到3.0版本以上,此次选择测试了3.0.1 和 3.1.1 两个版本,对进行同数据等任务调度暂停等操作测试,最后选择3.0.1 版本 原因…

【每日力扣】70. 爬楼梯与746. 使用最小花费爬楼梯

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢…

Java基础入门day21

day21 思考:构造方法能否实现重写 引申出来三个问题: 一个类是否可以继承它自身 一个类是否可以继承它的同名类 构造方法能否实现重写 结论: 一个类如果继承了自己,会出现递归构造调用 一个类可以继承它的同名类,必…

ESCTF-逆向赛题WP

ESCTF_reverse题解 逆吧腻吧babypybabypolyreeasy_rere1你是个好孩子完结撒花 Q_W_Q 逆吧腻吧 下载副本后无壳,直接拖入ida分析分析函数逻辑:ida打开如下:提取出全局变量res的数据后,编写异或脚本进行解密: a[0xBF, …

matlab和stm32的安装环境。能要求与时俱进吗,en.stm32cubeprg-win64_v2-6-0.zip下载太慢了

STM32CubeMX 6.4.0 Download STM32CubeProgrammer 2.6.0 Download 版本都更新到6.10了,matlab还需要6.4,除了st.com其他地方都没有下载的,com.cn也没有。曹 还需要那么多固件安装。matlab要求制定固件位置,然后从cubemx中也指定…

python3游戏GUI--开心打地鼠游戏By:PyQt5(附下载地址)

文章目录 一.前言二.游戏预览1.启动2.开始游戏3.游戏结束4.排行榜 三.游戏思路四.总结 一.前言 第一次用PyQt做游戏,有点小紧张呢。本次使用PyQt5制作一款简单的打地鼠游戏,支持基本游戏玩法、…