当前位置: 首页 > news >正文

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),即可运行开始训练:

相关文章:

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

基础知识储备: 一、深度可分离卷积(Depthwise Separable Convolution) MobileNet的核心是深度可分离卷积(Depthwise Separable Convolution),深度可分离卷积是卷积神经网络(CNN&#xf…...

报表系统-连接数据库操作

本专栏用于解析自己开源的项目代码,作为复盘和学习使用。欢迎大家一起交流 本样例说明源码开源在: ruoyi-reoprt gitee仓库 ruoyi-report github仓库 欢迎大家到到项目中多给点star支持,对项目有建议或者有想要了解的欢迎一起讨论 连接数据库…...

[计算机网络] 常见端口号

前言 ​ 常见的端口号是指互联网协议(如TCP/IP)中预留给特定服务使用的数字范围。它们主要用于标识网络应用程序和服务,并帮助数据包在网络中找到正确的接收方。 按协议类型划分 TCP协议端口: 21:FTP文件传输协议2…...

Linux系统块存储子系统分析记录

1 Linux存储栈 通过网址Linux Storage Stack Diagram - Thomas-Krenn-Wiki-en,可以获取多个linux内核版本下的存储栈概略图,下面是kernel-4.0的存储栈概略图: 2 存储接口、传输速度 和 协议 2.1 硬盘 《深入浅出SSD:固态存储核心…...

大数据——本地威胁检测的全球方法

大数据似乎是众多专业人士关注的话题,从在自然灾害发生时帮助挽救生命,到帮助营销团队设计更有针对性的策略以接触新客户。 对于安全工程师来说,大数据分析被证明是抵御不断演变的网络入侵的有效防御手段,这得益于基于大量不同网…...

使用postman接口测试

一 、postman断言 1、什么是断言 postman 断言借助JavaScript -js 语言编写代码,自动判断预期结果与实际结果是否一致。 断言代码写在 Tests 的标签中。(新版本在Scripts标签中) 2、断言工作原理 3、常用断言 断言响应状态码 // 断言响应状态码 是否为 200 pm.…...

Ubuntu24.04双系统安装(Linux/windows共存一文打通)

他向远方望去,无法看到高山背后的矮山,只能看到一座座更高的山峰。 目录 ​编辑 一.前言 二.虚拟机和双系统比较 三.Windows/Linux双系统安装 1.Rufus-制作U盘启动盘系统工具安装 2.Ubuntu24.04下载 3.Ubuntu-u盘启动盘制作 4.压缩磁盘留足安装空…...

C++ - deque

博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ 文章目录 💡双端队列简介1. 基本特性2. 与其他容器的比较与 vector与 list 3. 中控数组的设计4. 优缺点优点缺点 5. 应用场景6. 结论 💡双端队列简…...

国产!瑞芯微米尔RK357核心板革新AIoT设备,8核6T高算力

随着科技的快速发展,AIoT智能终端对嵌入式模块的末端计算能力、数据处理能力等要求日益提高。近日,米尔电子发布了一款基于瑞芯微RK3576核心板和开发板。核心板提供4GB/8GB LPDDR4X、32GB/64GB eMMC等多个型号供选择。瑞芯微RK3576核心优势主要包括高性能…...

中国人寿财险青岛市分公司践行绿色金融,助力可持续发展

中国人寿财险青岛市分公司积极响应国家绿色发展战略,大力推进绿色金融实践。在保险产品创新方面,推出一系列绿色保险产品。如新能源汽车保险,为新能源汽车产业发展提供风险保障,促进交通领域的节能减排。环境污染责任保险则助力企…...

ajax 读取文件

DOMException: Failed to read the responseXML property from XMLHttpRequest: The value is only accessible if the objects responseType is or document (was blob). at XMLHttpRequest.r ( $.ajax({ url: 未来之窗_服务, method: GET, …...

火语言RPA流程组件介绍--开始监听网络请求

🚩【组件功能】:开始监听内置浏览器网络请求(提示:本组件仅适用于火语言内置浏览器) 配置预览 配置说明 匹配网址 可以添加一个或者多个匹配规则用于筛选需要保存的网络请求. 输入输出 输入类型 万能对象类型(Sy…...

CSS综合案例——新闻详情

一、知识点 1、文字颜色 属性名:color 属性值: 颜色表示方式属性值说明使用场景颜色关键字颜色英文单词red,green,blue学习测试rgb表示法rg(r,g,b)r,g,b表示红绿蓝三原色,取值0-255了解rgba表示法rgba(r,g,b,a)a表示透明度,取…...

【【自动驾驶】车辆运动学模型】

【自动驾驶】车辆运动学模型 1. 引言2. 以车辆重心为中心的单车模型2.1 模型介绍2.2 滑移角 β \beta β 的推导2.2 航向角 ψ \psi ψ推导过程:2.3 滑移角 β \beta β2.3 Python代码实现2.4 C代码实现 3. 前轮驱动的单车模型3.1 模型介绍3.3 Python代码实现3.4 …...

叉尖避障新科技:因泰立科技ILS-T52三维深度成像激光雷达

ILS-T52三维深度成像激光雷达是一款高性能的纯固态式激光雷达,采用激光时间飞行法,提供出色的三维图像成像和深度感知功能。特别适用于无人叉车领域,为叉尖避障提供卓越的三维成像和深度感知功能。它的高精度、自适应自动曝光、小尺寸、低功耗…...

精华帖分享 | 低估值还能涨多久?

本文来源于量化小论坛策略分享会板块精华帖,作者为亮子,发布于2024年3月19日。 这两年,A股给我们的感觉就是成长股坍塌,高股息低估值的股票扛起大旗。表现出来就是中国神华、中海油这样的垄断型央国企大涨,包括移动联通…...

如何制作一个自己的网站?

在今天的互联网时代,网站展示已经是一个很基础的营销工具。不管是企业、还是个人,如何制作一个自己的网站?本文将会提供一个全面的基础制作网页教程,教你如何从零开始制作网页。 网页制作的基础知识:HTML、CSS和JavaS…...

torch报错

The Kernel crashed while executing code in the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details. 从日志中可以看出,内…...

深入探索卷积神经网络(CNN):图像分类的利器

深入探索卷积神经网络(CNN):图像分类的利器 前言CNN的崛起:为何我们需要它?图像卷积:CNN的基石轮廓过滤器:捕捉边缘特征 图像池化:降低维度的利器CNN的组成:卷积层、池化…...

网站建设中需要注意哪些安全问题?----雷池社区版

服务器与应用安全指南 1. 服务器安全 1.1 操作系统安全 及时更新补丁:确保操作系统始终安装最新补丁,以防范系统漏洞。例如,Windows Server 定期推送安全更新,修复如远程代码执行等潜在威胁。优化系统服务配置:关闭不…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

HTML版英语学习系统

HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具,使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章,系统朗读帮助练习听力和发音,适合跟读练习,模仿学习;实时词典查询 - 双…...