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…...

报表系统-连接数据库操作
本专栏用于解析自己开源的项目代码,作为复盘和学习使用。欢迎大家一起交流 本样例说明源码开源在: 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 定期推送安全更新,修复如远程代码执行等潜在威胁。优化系统服务配置:关闭不…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
Angular中Webpack与ngx-build-plus 浅学
Webpack 在 Angular 中的概念 Webpack 是一个模块打包工具,用于将多个模块和资源打包成一个或多个文件。在 Angular 项目中,Webpack 负责将 TypeScript、HTML、CSS 等文件打包成浏览器可以理解的 JavaScript 文件。Angular CLI 默认使用 Webpack 进行项目…...