关于ShuffleNetV1中的channel shuffle操作【代码分析】

1. 官方给出的代码 

旷视科技在自己的开源GitHub上给出的channel shuffle相关代码如下图所示:

      分析上图中的代码,旷视科技将channel shuffle这个操作视为一个函数,函数传入的参数是输入张量x,x的shape为(batchsize, num_channels, height, width)。
      首先对输入张量x使用data.size() 方法进行解包,从输入张量 x 中提取批量大小、通道数、高度和宽度。
      使用assert函数检查 group【分组个数】是否能够整除num_channels,若不能够整除,则函数运行到此处抛出AssertionError 异常;若能够整除,则正常运行。
      每个小组的通道数group_channels 为总体通道数num_channels除分组个数group。
接下来的三行代码均对x操作,我们一步一步来剖析:
首先经过:

x = x.reshape(batchsize, group_channels, self.group, height, width)

      这表示x需要经过reshape操作,将num_channels分为group个组,每个组中的通道数为group_channels。

在经过如下操作:

x = x.permute(0, 2, 1, 3, 4)

      这表示要将x的第1个维度与第2个维度进行互换,也就是说,可以理解为在这里对x经历了转置操作。

  • 重新排列维度,使得维度的顺序变为:
    • 维度 0:批量大小保持不变。
    • 维度 2:将组的维度移到第二位。
    • 维度 1:将每组的通道维度移到后面。
    • 维度 3 和 4:高度和宽度保持不变。
  • 这一步的作用是将不同组的通道位置互换,从而实现通道间的信息交互。

然后再经过如下操作:

x = x.reshape(batchsize, num_channels, height, width)

将重排后的张量重塑回 (batchsize, num_channels, height, width) 原始形状。
最后借助 return x 返回channel shuffle后的张量。

总结 

该方法实现了channel shuffle的过程,通过将通道分组、重排和恢复形状来增强通道间的信息交互,通常用于提升轻量级网络的性能。channel shuffle有助于使模型更好地利用特征共享,提高整体表现。 

 2. 喂入测试张量进行测试【图例分析】

假设输入张量的shape为:(1, 12, 1, 1)  group=3
首先通过以下代码构建输入张量,使用unsqueeze函数是为了给一维张量进行扩维,使之符合输入张量的shape。

对官方代码小修小改,得到独立可运行的channel_shuffle函数,如下图所示:

以图说明上述代码:

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[ComfyUI]Flux:完美平衡!更适合F1反推模型!30秒速率1G低显存CLIP和T5双通道提示反推和标注皆可用

大家好我是安琪!!! 在数字艺术领域,AI绘画技术已经逐渐成为艺术创作的新趋势。现在,ComfyUI的Flux功能结合F1反推模型,为用户提供了完美的平衡,让你在创作中更加得心应手。 Florence2PromptGen…

国庆出行新宠:南卡Pro5骨传导耳机,让旅途不再孤单

国庆长假即将来临,对于热爱旅行和户外运动的朋友们来说,一款适合旅行使用的耳机无疑是提升旅途体验的神器。今天,我要向大家推荐一款特别适合国庆出行的耳机——南卡Runner Pro5骨传导耳机。作为一名热爱旅游的体验者,我强烈推荐南…

docker:docker-compose容器编排

docker-compose容器编排 安装docker-compose 下载链接:https://github.com/docker/compose/releases/下载这个版本 [rootc1-10-66 ~]# ls anaconda-ks.cfg docker-compose-linux-x86_64_2 gpu-burn## 改个名字 [rootc1-10-66 ~]# mv docker-compose-linux-x86…

C++标准库类——string类

引言 在c中,string类的引用极大地简化了字符串的操作和管理,相比 C 风格字符串(char*或cahr[]),std::string 提供了更高效和更安全的字符串操作。接下来让我们一起来深入学习string类吧! 1.string 的构造…

blender设置背景图怎么添加?blender云渲染选择

Blender是一款功能强大的3D建模软件,它以流畅的操作体验和直观的用户界面而闻名。使用Blender,你可以轻松地为你的3D模型添加背景图片。 以下是具体的操作步骤: 1、启动Blender:首先,打开Blender软件。访问添加菜单&a…

Ansible流程控制-条件_循环_错误处理_包含导入_块异常处理

文章目录 Ansible流程控制介绍1. 条件判断2. 循环3. 循环控制4. 错误处理5. 包含和导入6. 块和异常处理7. 角色的流程控制*include_tasks、import_tasks_include之间的区别 条件语句再细说且、或、非、是模糊条件when指令的详细使用方法 循环语句再细说如何使用使用item变量结合…

Protobuf:基本概念与使用流程

Protobuf:基本概念与使用流程 基本概念Linux 安装使用流程.proto文件编译使用 运行机制 基本概念 在进行网络编程时,经常需要进行数据传输,只有双方主机都保证数据格式的一致性,才能保证数据被正常解析。这个过程称为序列化与反序…

肺结节检测-目标检测数据集(包括VOC格式、YOLO格式)

肺结节检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1hz3Y6WgWoS3Gubsw_83WnA?pwdaon1 提取码:aon1 数据集信息介绍: 共有 1180 张图像和一一对应的标注文件 标注…

【**倒计时,人工智能的ASI时代几年内将至-samaltman深夜发文预言**】

在未来的几十年里,我们将能够做到我们的祖辈认为像魔术一样的事情。 这是Sama Ltman博文的第一句话。技术进步加速:随着时间的推移,人类的能力显著提高,我们能够完成前人认为不可能的事情。他认为: 我们的能力增强不…

数据结构-2.9.双链表

一.双链表与单链表的对比&#xff1a; 二.双链表的初始化(带头结点)&#xff1a; 1.图解&#xff1a; 2.代码演示&#xff1a; #include<stdio.h> #include<stdlib.h> ​ //定义双链表结构体 typedef struct DNode {int data;struct DNode *prior;//前驱指针即指…

数据结构~二叉搜索树

文章目录 一、二叉树搜索的概念二、二叉树搜索的结构二叉树搜索的性能分析二叉树搜索的插入二叉树搜索的查找二叉树搜索的删除 三、二叉搜索树key和key/value使用场景四、二叉树搜索的练习将二叉搜索树就地转化为已排序的双向循环链表从前序与中序遍历序列构造二叉树二叉树的前…

2024最新盘点:90%的工厂都在用的仓库管理系统有哪些?

有很多老板看见同行都在用仓库管理系统来管理库存、采购等工作&#xff0c;也想入手一个&#xff0c;但是不知从何下手&#xff0c;又很苦恼怎么才能选择适合自己企业的系统。 不用担心&#xff0c;本篇文章将会从市面上很多老板都在用的WMS系统&#xff0c;从适用范围、核心功…

智能密码、指纹锁语音芯片ic方案 可存放40s语音内容 NVD语音芯片

随着科技的飞速发展&#xff0c;智能家居安全领域迎来了前所未有的变革。智能密码与指纹锁作为现代家庭安全防护的重要一环&#xff0c;其背后的语音芯片IC开发更是这一变革中的关键技术突破。 智能密码、指纹锁语音芯片ic方案 选型与简介&#xff1a; NVD语音芯片是一款低成…

《ESP32调试异常集锦》之:程序编译失败,提示undefined reference to `dedic_gpio_bundle_write‘

项目场景&#xff1a; 硬件&#xff1a;ESP32-LyraT-Mini V1.2开发板&#xff0c;使用的是ESP32-WROVER-E 模组。 程序&#xff1a;基于soft_i2c示例程序修改协议内容实现与TM1640通信测试 问题描述 编译失败&#xff0c;"full clean"后重新编译依旧失败。没有语法…

EasyGBD国标GB28181设备端,支持GB28181-2016、GB28181-2022

功能概要&#xff1a; 功能概述&#xff1a;EasyGBD是GB/T28181 Device的简称&#xff0c;指国标GB28181协议的设备端。EasyGBD功能组件支持Windows、Linux、Android、iOS、ARM等所有平台&#xff0c;可兼容国标GB28181-2011、GB28181-2016的全部功能。 操作系统&#xff1a;任…

SOMEIP_ETS_127: SD_Multicast_FindService

测试目的&#xff1a; 验证DUT能够对10个多播FindService消息做出响应&#xff0c;这些消息每100ms发送一次&#xff0c;请求有效的服务/实例ID&#xff08;取决于DUT&#xff09;&#xff0c;DUT需要使用单播OfferService消息来回答。 描述 本测试用例旨在确保DUT能够正确处…

爆火南卡开放式耳机,音质性能霸榜TOP1,行业唯一达专业HiFi级音质标准!

爆火南卡开放式耳机&#xff0c;音质性能霸榜TOP1&#xff0c;行业唯一达专业HiFi级音质标准&#xff01; 随着科技的不断进步&#xff0c;耳机市场迎来了又一次革命性的创新。南卡&#xff08;NANK&#xff09;品牌近日宣布&#xff0c;其最新力作——南卡Ultra耳夹开放式耳机…

阿里发电预测模型:FusionSF

论文《FusionSF: Fuse Heterogeneous Modalities in a Vector Quantized Framework for Robust Solar Power Forecasting》 目前的研究主要依赖于历史太阳能数据或单模态格式的数值天气预报&#xff0c;忽略了不同模态提供的补充信息。 本文提出一个多模态融合框架&#xff0…

element下拉框联动 或 多选 回显数据后页面操作不生效问题解决

第一种:多选回显不生效 解决方式: 代码: <el-form-item label"系统" prop"Key"> <el-select v-model"addForm.Key" multiple placeholder"请选择" change"$forceUpdate()"> <el-option v-for"item …

史上最详细泛微Ecology9安装教程及安装包(含注册)

在现代企业中&#xff0c;泛微Ecology9 已成为高效的办公自动化管理系统之一&#xff0c;帮助企业在流程管理、信息协同等方面实现快速发展。本篇文章将为您详细介绍泛微Ecology9的安装过程&#xff0c;并提供最新的安装包下载&#xff0c;包含完整的注册信息&#xff0c;助您快…