pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备:

一、深度可分离卷积(Depthwise Separable Convolution)       

        MobileNet的核心是深度可分离卷积(Depthwise Separable Convolution),深度可分离卷积是卷积神经网络(CNN)中一种高效的卷积操作,主要用于降低计算复杂度和模型参数数量。它由两个独立的步骤组成:深度卷积和逐点卷积。这种方法是 MobileNet、Xception 等轻量级神经网络架构的核心组成部分。
下面是对深度可分离卷积的详细解析。
1. 标准卷积回顾
        在标准卷积中,卷积操作涉及到同时对所有输入通道进行卷积,输出为每个通道的加权和。假设输入特征图有 C_in个通道,输出特征图有 C_out 个通道,卷积核大小为 (K),则计算的复杂度为:
FLOPs (Floating Point Operations):浮点运算次数
FLOPs = H*W* K*K*C_in*C_out 
其中 (H) 和 (W) 是输入特征图的高度和宽度。
2. 深度卷积(Depthwise Convolution)
        深度卷积对每个输入通道单独进行卷积操作,即对于每个输入通道,单独使用一个卷积核。对于深度卷积,每个输入通道使用一个独立的卷积核进行卷积,亦即使用 C_in个的卷积核处理 C_in个输入通道,卷积核大小为K*K,由于输入是 H*W像素,有C_in 个通道,所以:
FLOPs = H*W* K*K*C_in 
3. 逐点卷积(Pointwise Convolution)
        逐点卷积是用 (1*1) 的卷积核对深度卷积的输出进行处理,结合所有的通道信息。逐点卷积的输入是深度卷积的输出,输出是设置的输出通道数。
逐点卷积的 FLOPs = H*W* 1*1*C_in*C_out
4. 深度可分离卷积的整合
        深度可分离卷积就是将上述两个步骤整合在一起。首先通过深度卷积进行特征提取,然后通过逐点卷积进行通道的融合。这种方法在保留大部分信息的同时,极大地减少了计算负担和模型参数。深度可分离卷积与标准卷积的网络结构对比图:


5. 计算复杂度比较
        例如,有一个卷积层H=10,W=10,K=3,C_in=3, C_out=10,
        那么标准卷积的FLOPs = H*W* K*K*C_in*C_out=10*10*3*3*3*10=27000 。这表示在这个卷积层中大约需要进行 27000 次浮点运算。
        深度可分离卷积的FLOPs分为两部分:深度卷积的 FLOPs和逐点卷积的 FLOPs。
        深度卷积的 FLOPs = H*W* K*K*C_in=10*10*3*3*3=2700
        逐点卷积的 FLOPs = H*W* 1*1*C_in*C_out=10*10*1*1*3*10=3000
        深度可分离卷积的总的FLOPs = 2700+3000=5700
        简而言之,深度可分离卷积的计算复杂度显著低于标准卷积。
6. 结论
        深度可分离卷积是一种高效的卷积操作,能够在确保分类准确率的同时,显著减少计算量和模型大小。这使得它在移动端和嵌入式设备上的应用极具吸引力,是许多现代轻量级神经网络的基础。

二、MobileNet

        MobileNet是一种深度学习模型,专门设计用于在移动设备和嵌入式设备上进行高效的图像分类和目标检测。它是在2017年由 Google 提出的,旨在在保持较高准确率的同时,减少计算资源消耗和模型大小,从而实现快速的推理。

1. 设计背景
        移动设备的需求:随着机器学习的普及,特别是在移动设备上的应用,需要一种轻量级的神经网络,以便在处理能力有限的设备上执行模型。
准确性与效率的权衡:MobileNet V1 试图在模型大小、速度和准确率之间找到一个良好的平衡点。
2. 主要构建模块
        MobileNet V1 的核心思想是使用深度可分离卷积(Depthwise Separable Convolution),这一操作把标准卷积分解为两步:
深度卷积(Depthwise Convolution):对每个输入通道单独执行卷积操作。
逐点卷积(Pointwise Convolution):使用 1x1 卷积来结合深度卷积的输出。
这种方法大大减少了计算量和参数数量,从而提高了模型的效率。
3. 模型架构
        MobileNet V1 的基本结构如下:
        输入层:接收输入图像,通常为 224x224 像素大小及 RGB 通道。
        标准卷积层:初始的标准卷积层,用于提取基础特征。
        深度可分离卷积层:多个 stacked layers,通过大量的深度可分离卷积层进行特征提取,每层由深度卷积和逐点卷积组成。
        全局平均池化:在最后一层以全局平均池化来减少模型的大小。
        全连接层:最后的全连接层,用于分类。
4. 计算复杂度
        MobileNet V1 通过引入深度可分离卷积显著降低了模型的计算复杂度。
FLOPs(每秒浮点运算次数):在输入为 224x224x3 图像时,MobileNet V1 的 FLOPs 约为 569 万,显著低于许多其他主流模型。MobileNet V1 的参数数量也相对较少,约在 4-6 百万之间,具体取决于使用的宽度乘子(Width Multiplier)。
5. 应用领域
        MobileNet V1 已经广泛应用于各种计算机视觉任务,包括:
        图像分类
        物体检测(与 SSD 等方法结合使用)
        实时图像分析
        视频处理
6. 结论
        MobileNet V1 为在计算资源有限的环境中应用深度学习提供了一种有效的解决方案。其引入的深度可分离卷积成为了轻量级网络设计中的一项重要技术,并极大地影响了后续轻量级模型的设计,如 MobileNet V2 和 MobileNet V3。

代码实现:

新建mobileNet.py

import torch
import torch.nn as nn
import torch.nn.functional as Fclass MobileNet(nn.Module):def conv_dw(self, in_channels, out_channels, stride):  # 定义深度可分离卷积return nn.Sequential(  # Sequential是一个容器,它可以包含一系列的神经网络层(layers),并按顺序执行它们nn.Conv2d(in_channels, in_channels, kernel_size=3,  # 定义深度卷积stride=stride, padding=1, groups=in_channels, bias=False),nn.BatchNorm2d(in_channels),nn.ReLU(),nn.Conv2d(in_channels, out_channels, kernel_size=1,  # 定义逐点卷积,卷积核是1*1stride=1, padding=0, bias=False),nn.BatchNorm2d(out_channels),nn.ReLU())def __init__(self, num_classes=10):super(MobileNet, self).__init__()self.conv1 = nn.Sequential(  # 定义第1个卷积层nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1),  # 输入通道为3,输出通道为32,卷积核大小为3x3,步长为1,填充为1nn.BatchNorm2d(32),  # 批量归一化nn.ReLU()  # 激活函数)self.conv2_1 = self.conv_dw(32, 32, 1)  # 定义第2个卷积层的第一次卷积self.conv2_2 = self.conv_dw(32, 64, 2)  # 定义第2个卷积层的第二次卷积self.conv2_3 = self.conv_dw(64, 64, 1)  # 定义第2个卷积层的第三次卷积self.conv2_4 = self.conv_dw(64, 128, 2)  # 定义第2个卷积层的第四次卷积self.conv2_5 = self.conv_dw(128, 128, 1)  # 定义第2个卷积层的第五次卷积self.conv2_6 = self.conv_dw(128, 256, 2)  # 定义第2个卷积层的第六次卷积self.conv2_7 = self.conv_dw(256, 256, 1)  # 定义第2个卷积层的第七次卷积self.conv2_8 = self.conv_dw(256, 512, 2)  # 定义第2个卷积层的第八次卷积self.fc = nn.Linear(512, num_classes)  # 全连接层def forward(self, x):  # 定义前向传播out = self.conv1(x)  # 第1个卷积层out = self.conv2_1(out)  # 第2个卷积层的第一次卷积out = self.conv2_2(out)  # 第2个卷积层的第二次卷积out = self.conv2_3(out)  # 第2个卷积层的第三次卷积out = self.conv2_4(out)  # 第2个卷积层的第四次卷积out = self.conv2_5(out)  # 第2个卷积层的第五次卷积out = self.conv2_6(out)  # 第2个卷积层的第六次卷积out = self.conv2_7(out)  # 第2个卷积层的第七次卷积out = self.conv2_8(out)  # 第2个卷积层的第八次卷积out = F.avg_pool2d(out, 2)  # 最大池化,池化核大小为2,out2,步长为2out = out.view(-1, 512)  # 将特征图展开out = self.fc(out)  # 全连接层return outdef mobilenetv1_small():return MobileNet()if __name__ == '__main__':net = MobileNet()print(net)input = torch.randn(1, 3, 32, 32)out = net(input)print(out.size())

用新建的MobileNet网络进行训练 

        同样的,将之前的train.py脚本中的
        net = resnet().to(device),改为:
        net =mobilenetv1_small().to(device),即可运行开始训练:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 基于 poi 和 itextpdf 实现 excel 转 pdf

目录 问题 实现思路 pom Excel2PDFUtil Excel2PDFUtilTest 输出结果 问题 工作中遇到一个需求,需要实现 excel 文件的预览,实现的思路就是将 excel 转成 pdf 文件,上传到文件服务器上得到文件地址,预览时只需要返回 pdf 预…

UHF机械高频头的知识和待学习的疑问

电路图如上所示: 实物开盖清晰图如下: 待学习和弄懂的知识: 这是一个四腔的短路线谐振。分别是输入调谐,放大调谐,变频调谐和本振 第一个原理图输入为75欧(应该是面向有同轴线的天线了)如下图…

【vue+leaflet】自定义控件(五)

老规矩, 一健三连, 先赞后看 先看效果图 自定义控件: 支持和自带控件有相同的增删改查功能, 处理与自带控件来回切换,互相使用的部分问题 新建一个组件 imgControl.vue 1, html 没什么东西,就一个div盒子装leaflet图层 <template><div class"imgBox">…

Java | Leetcode Java题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; class Solution {public int findBottomLeftValue(TreeNode root) {int ret 0;Queue<TreeNode> queue new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {TreeNode p queue.poll();if (p.right ! nu…

Cursor的composer和chat的应用

提到 Cursor 就不得不提及它的 Composer 功能。“Composer” 的中文释义为 “作曲家”&#xff0c;在此处它有着特定的含义。 Cursor 提供了两种人机对话方式。一种是 Chat&#xff0c;它与 ChatGPT 之类的工具差别不大。另一种则是强大的 Compose。 在编写程序时&#xff0c…

基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 削峰填谷的基本概念与意义 4.2 GA优化 5.完整工程文件 1.课题概述 基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真。通过遗传算法优化风光储微电网的充放电控制过程&#xff0c;然后…

配置smaba (Linux与windows通信)

在Ubuntu上安装Samba是一个简单的过程。以下是详细的步骤&#xff0c;帮助你从安装到基本配置。 步骤1&#xff1a;更新软件包列表 首先&#xff0c;打开终端&#xff0c;确保你的软件包列表是最新的&#xff1a; sudo apt update 步骤2&#xff1a;安装 Samba 接下来…

项目部署 —— 前端、后端

一、 前端 ● 二号标题 在命令框里输入 npm run build 打包成功&#xff1a; 项目就会出现一个 dist 文件夹 将Linux的nginx文件夹中&#xff0c;重命名为 news 二、 后端 ● 通过maven打包后端程序 最终会在项目中生成一个 target 文件夹&#xff0c;将 news-1.0-SNAPSHOT.…

汇编语言

前言 汇编语言是各种CPU提供的机器指令的助记符的集合&#xff0c;可以通过汇编语言直接控制硬件系统进行工作&#xff1b; Q&#xff1a;为什么说汇编语言可以直接操作硬件&#xff1f;那么汇编过程还有什么意义呢&#xff1f; A&#xff1a;汇编语言利用助记符代替机器指令的…

Python数据分析——Numpy

纯个人python的一个小回忆笔记&#xff0c;当时假期花两天学的python&#xff0c;确实时隔几个月快忘光了&#xff0c;为了应付作业才回忆起来&#xff0c;不涉及太多基础&#xff0c;适用于有一定编程基础的参考回忆。 这一篇笔记来源于下面哔哩哔哩up主的视频&#xff1a; 一…

反编译华为-研究功耗联网监控日志

摘要 待机功耗中联网目前已知的盲点&#xff1a;App自己都不知道的push类型的被动联网、app下载场景所需时长、组播联网、路由器打醒AP。 竞品 策略 华为 灭屏使用handler定时检测&#xff08;若灭屏30分钟内则周期1分钟&#xff0c;否则为2分钟&#xff09;&#xff0c;检…

基于知识图谱的紧急事故决策辅助系统

现代社会紧急事故频发&#xff0c;而处理这些突发事件的效率直接决定了后续影响的大小。这时候&#xff0c;数据智能的解决方案会显得尤为重要&#xff01;今天为大家分享一个用【知识图谱】技术驱动的紧急事故决策辅助系统&#xff0c;不仅能帮助你快速处理事故信息&#xff0…

HarmonyOS Next API12最新版 端云一体化开发-云函数篇

一、新建一个端云一体化项目 见文章&#xff1a; HarmonyOS NEXT API12最新版 端云一体化开发-创建端云一体化项目流程_鸿蒙appapi-CSDN博客 二、官方文档 使用限制-云函数 - 华为HarmonyOS开发者 (huawei.com) Cloud Foundation Kit简介-Cloud Foundation Kit&#xff0…

1通道10GSPS或2通道5G 14 bit数字化仪

ADQ7DC是一款高端14位数据采集平台&#xff0c;旨在满足最具挑战性的测量环境。ADQ7DC特性: 单通道和双通道操作 单通道10GSPS或双通道5GSPS 7 GByte/s持续数据传输速率开放式FPGA支持实时DSP 脉冲检测固件选项波形平均固件选项 ADQ7DC数据手册 特征 单通道和双通道工作模式…

javaScript整数反转

function _reverse(number) { // 补全代码 return (number ).split().reverse().join(); } number &#xff1a;首先&#xff0c;将数字 number 转换为字符串。在 JavaScript 中&#xff0c;当你将一个数字与一个字符串相加时&#xff0c;JavaScript 会自动将数字转换为字符串…

Ajax:跨域 JSONP

Ajax&#xff1a;跨域 & JSONP 同源与跨域同源跨域 JSONPjQuery发送JSONP 同源与跨域 同源 如果两个页面的协议、域名、端口号都相同&#xff0c;则两个页面同源 例如&#xff1a; http://www.test.com/index.html与其同源的网页&#xff1a; http://www.test.com/other…

MySql中表的复合查询

复合查询 ​ 本篇开始将介绍在MySql中进行复合查询的操作。平时在开发过程中只对一张表进行查询的操作是远远不够的&#xff0c;更多的都是多张表一起查询&#xff0c;所以本篇将介绍多张表中的复合查询&#xff0c;主要介绍多表查询、自连接以及子查询。 文章目录 复合查询导…

Discourse 是否可以简化文本操作

当下的文本处理很多都在慢慢转换到 MD。 有一段时间&#xff0c;论坛都会使用默认的 BBCode&#xff0c;包括 Discuz 现在也是这样的。 MD 文件有一定的入门使用门槛&#xff0c;但习惯了还好。 我们这里用得最多的就是标题和图片&#xff0c;其他的排版用得比较少&#xff…

如何找到适合的工程管理系统?9款对比

本文推荐的9款精选工程项目综合管理系统有: 1. Worktile&#xff1b;2. 广联达&#xff1b;3. 斯维尔&#xff1b;4. 品茗工程管理软件&#xff1b;5. 明源云&#xff1b;6. 泛微OA&#xff1b;7. Microsoft Project&#xff1b;8. Procore&#xff1b;9. Buildertrend。 在管理…

安卓在windows连不上fastboot问题记录

fastboot在windows连不上fastboot 前提是android studio安装 google usb driver 搜索设备管理器 插拔几次找安卓设备 在其他设备 或者串行总线设备会出现安卓 右键更新驱动 下一步下一步然后可以了