13_旷视轻量化网络--ShuffleNet V2
回顾一下ShuffleNetV1:08_旷视轻量化网络--ShuffleNet V1-CSDN博客
1.1 简介
ShuffleNet V2是在2018年由旷视科技的研究团队提出的一种深度学习模型,主要用于图像分类和目标检测等计算机视觉任务。它是ShuffleNet V1的后续版本,重点在于提供更高效的模型设计,同时保持或提升模型的准确性。
核心设计理念:
-
高效性与准确性并重:ShuffleNet V2的设计初衷是解决深度学习模型在移动端和嵌入式设备上部署时面临的效率与准确性之间的权衡问题。它旨在以最少的计算资源和内存占用,达到尽可能高的分类或检测准确率。
-
通道重排(Channel Shuffle):这一特性从ShuffleNet V1继承而来,通过随机打乱不同组内的通道,促进特征的混合,增加模型的表达能力。这有助于模型学习到更加丰富的特征组合,从而提升性能。
主要创新点:
-
分层结构优化:不同于V1,V2版本通过引入更复杂的块(blocks)设计来优化网络结构。每个块可能包含多个路径,每个路径具有不同的功能,如特征提取、特征重组等,这样的设计能更高效地利用计算资源。
-
均衡通道宽度:研究发现,保持每层网络的通道数相对均衡可以减少内存访问的开销,并且对模型性能影响不大。因此,ShuffleNet V2采用了所有层通道数相等的设计原则,这有助于模型在移动设备上更快运行。
-
组卷积的改进应用:虽然组卷积能有效减少计算量,但过度分组会导致模型性能下降。V2通过精细调整组的数量和结构,找到了计算效率和模型性能之间的最佳平衡点。
-
直接面向实际运行速度的优化:在设计过程中,除了理论上的计算量(FLOPs)外,研究者还直接考虑了模型在实际硬件上的运行速度。这意味着在设计决策中融入了对实际部署环境的考量,包括CPU和GPU的特定性能特征。
-
计算和内存访问成本的细致优化:通过对模型内部的元素级操作(如ReLU、Addition)进行深入分析和优化,减少了不必要的计算负担和内存访问,进一步提升了模型的运行效率。
ShuffleNet V2由于其出色的效率和性能,在移动设备、智能安防、自动驾驶以及各种IoT设备上的视觉应用中得到了广泛应用。它的设计原则和优化思路也为后来的轻量化网络设计提供了宝贵的经验和指导,推动了深度学习模型在实际应用中的普及和发展。
shuffleNet出自论文《ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design》,下面我们来学习一下这篇论文。
1.2 四条轻量化网络设计原则

准则一和准则二:
对于V2,用了大量的分组1x1卷积。





准则三:(碎片化指分支多,网络较宽)

准则四:(尽量回避主元素操作)



1.3 V2的模型结构
ShuffleNet V2相比V1有几项关键改进和特点,这些改进主要是为了进一步提升模型的效率和准确性,特别是在移动端和嵌入式设备上的表现。以下是ShuffleNet V2相较于V1的一些主要特点:
- 更高效的结构设计:
- V2放弃了V1中的基于瓶颈模块的设计,转而采用一种新的结构,称为“ShuffleNet块”。这种设计通过重新安排层的顺序和结构,减少了计算成本,同时保持了模型的表达能力。
- 均衡的通道宽度:
- V2提出了一种“均衡通道宽度”的设计理念,即网络中所有层的通道数保持一致或接近。这与V1中通道数随深度增加而增加的做法不同。实验表明,这种设计能降低内存访问成本(MAC),提升运行效率,且对准确性影响较小。
- 优化的组卷积策略:
- 在V2中,对组卷积(group convolution)的使用进行了优化,避免了过量分组可能带来的性能下降。通过合理设置组数,V2在减少计算量的同时,确保了模型的表达能力不受太大影响。
- 直接优化实际运行速度:
- 设计时不仅考虑理论上的计算复杂度(FLOPs),更侧重于模型在实际设备上的运行速度。这意味着V2在设计时充分考虑了硬件特性,如内存带宽和计算单元的利用率。
- 减少元素级操作:
- 为了避免element-wise操作(如加法)造成的额外计算负担,V2中使用concatenation(连接操作)代替了部分element-wise操作,减少了计算成本,提升了运行效率。
- 通道重排的改进位置:
- 相对于V1中channel shuffle的位置,V2将其放置在block的不同位置,以更好地适应新的结构设计,进一步促进了特征的混合和信息的流通。
- 新增操作:
- 在全局平均池化(Global Average Pooling, GAP)之前添加了一个额外的卷积层(conv5),这是V2相比于V1的一个显著区别,旨在进一步提炼特征,提升模型的分类性能。
右侧是V2的结构。我们先看基本模块。V2在基本模块采用了一个“channel Split”操作,就是把一半的通道数走左边的路,另一半通道数走右边的路,且注意:V2的1x1卷积并不是像V1那样是分组1x1卷积。然后采用concat(摞在一起连接)操作而不是逐元素相加(ADD)的操作

可以看到V2是满足轻量化网络的四条设计原则的。
V2的模型结构如下图:

和DenseNet的特征复用相比较,类似的地方:
ShuffleNetV2通过模型的结构实现了不同层之前模型的共享和复用。这种效果和DenseNet相比是很类似的。
1.4 V2的性能

图为ShuffleNetV2与部分其他轻量化的网络比较:

2.pytorch模型复现
马上更新
相关文章:
13_旷视轻量化网络--ShuffleNet V2
回顾一下ShuffleNetV1:08_旷视轻量化网络--ShuffleNet V1-CSDN博客 1.1 简介 ShuffleNet V2是在2018年由旷视科技的研究团队提出的一种深度学习模型,主要用于图像分类和目标检测等计算机视觉任务。它是ShuffleNet V1的后续版本,重点在于提供更高效的模…...
Linux系统编程--进程间通信
目录 1. 介绍 1.1 进程间通信的目的 1.2 进程间通信的分类 2. 管道 2.1 什么是管道 2.2 匿名管道 2.2.1 接口 2.2.2 步骤--以父子进程通信为例 2.2.3 站在文件描述符角度-深度理解 2.2.4 管道代码 2.2.5 读写特征 2.2.6 管道特征 2.3 命名管道 2.3.1 接口 2.3.2…...
docker-本地部署-后端
前置条件 后端文件 这边是一个简单项目的后端文件目录 docker服务 镜像文件打包 #命令行 docker build -t author/chatgpt-ai-app:1.0 -f ./Dockerfile .红框是docker所在文件夹 author:docker用户名chatgpt-ai-app:打包的镜像文件名字:1.0 &#…...
TLS + OpenSSL + Engine + PKCS#11 + softhsm2 安全通信
引擎库路径只有在 /lib 下才能被 "LOAD" 识别到,OpenSSL的ReadMe给的示例在/lib,大概是在构建OpenSSL时默认的configure指定了lib路径 // #define PKCS11_ENGINE_PATH "/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so" #define …...
Unity实现简单的MVC架构
文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中,MVC(Model-View-Controller)框架是一种架构模式,用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构,提高代码的可维护性…...
【简单讲解下OneFlow深度学习框架】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
FastGPT 调用Qwen 测试Hello world
Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录, 点击右上角的 新建 点击 这里,配置AI使用本地 ollama跑的qwen模型 问题:树上有3只鸟,开了一枪&#…...
Golang-GMP
GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的,为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的,为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率,但多进程、多线程都存在局限性。比如多进程通过时…...
【PythonWeb开发】Flask自定义模板路径和静态资源路径
在大型的 Flask 项目中,确实可能会有多个子应用(Blueprints),每个子应用可能都有自己的静态文件和模板。为了更好地管理和组织这些资源,可以使用static_folder 和template_folder 属性来统一管理。必须同时设置好主应用…...
Java对象创建过程
在日常开发中,我们常常需要创建对象,那么通过new关键字创建对象的执行中涉及到哪些流程呢?本文主要围绕这个问题来展开。 类的加载 创建对象时我们常常使用new关键字。如下 ObjectA o new ObjectA();对虚拟机来讲首先需要判断ObjectA类的…...
Does a vector database maintain pre-vector chunked data for RAG systems?
题意:一个向量数据库是否为RAG系统维护预向量化分块数据? 问题背景: I believe that when using an LLM with a Retrieval-Augmented Generation (RAG) approach, the results retrieved from a vector search must ultimately be presented…...
Rust-11-错误处理
Rust 将错误分为两大类:可恢复的(recoverable)和 不可恢复的(unrecoverable)错误。对于一个可恢复的错误,比如文件未找到的错误,我们很可能只想向用户报告问题并重试操作。不可恢复的错误总是 b…...
自动化测试:使用Postman进行接口测试与脚本编写
Postman 是一种流行的 API 测试工具,广泛应用于开发和测试过程中。它不仅可以用于手动测试,还支持自动化测试和脚本编写,以确保 API 的可靠性和性能。本文将详细介绍如何使用 Postman 进行接口测试与脚本编写,帮助你更高效地进行自…...
ONLYOFFICE 8.1 桌面编辑器测评:引领数字化办公新潮流
目录 前言 下载安装 新功能概述 1.PDF 编辑器的改进 2. 演示文稿中的幻灯片版式 3.语言支持的改进 4. 隐藏“连接到云”板块 5. 页面颜色设置和配色方案 界面设计:简洁大方,操作便捷 性能评测:稳定流畅,高效运行 办公环…...
基于大语言模型LangChain框架:知识库问答系统实践
ChatGPT 所取得的巨大成功,使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括 API 集成、交互逻辑、数据存储等…...
解锁Transformer的鲁棒性:深入分析与实践指南
🛡️ 解锁Transformer的鲁棒性:深入分析与实践指南 Transformer模型自从由Vaswani等人在2017年提出以来,已经成为自然语言处理(NLP)领域的明星模型。然而,模型的鲁棒性——即模型在面对异常、恶意或不寻常…...
mybatis#号和$区别
在MyBatis中,#{}和${}都是用于实现动态SQL的占位符,但它们在使用场景和安全性上有明显的区别: 用途区别: #{}主要用于传递接口传输过来的具体数据,如参数值,它可以防止SQL注入,因为MyBatis会…...
AI绘画 Stable Diffusion【实战进阶】:图片的创成式填充,竖图秒变横屏壁纸!想怎么扩就怎么扩!
大家好,我是向阳。 所谓图片的创成式填充,就是基于原有图片进行扩展或延展,在保证图片合理性的同时实现与原图片的高度契合。是目前图像处理中常见应用之一。之前大部分都是通过PS工具来处理的。今天我们来看看在AI绘画工具 Stable Diffusio…...
Linux内核 -- 汇编结合ko案例之PMU获取cpu cycle技术
ARMv7汇编实现周期计数读取与清空 本文档详细描述了如何在ARMv7平台上使用汇编语言编写周期计数器读取与清空函数,如何在内核模块中导出这些函数供其他模块调用,以及如何使用Netlink接口供用户态程序进行调用。 1. 汇编函数实现 首先,编写…...
探索 Symfony 框架:工作原理、特点及技术选型
目录 1. 概述 2. Symfony 的工作原理 2.1 MVC 架构 2.2 前端控制器模式 2.3 路由机制 2.4 依赖注入容器 2.5 事件驱动架构 3. Symfony 的特点 3.1 高度可扩展性 3.2 强大的社区支持和生态系统 3.3 优秀的性能和可伸缩性 3.4 严格的代码规范和最佳实践 4. Symfony …...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
