2024.3.31 机器学习周报

引言

Abstract

文献阅读

1、题目

Lite-HRNet: A Lightweight High-Resolution Network

2、引言

我们提出了一个高效的高分辨率网络,Lite-HRNet,用于人体姿态估计。首先,我们简单地将Shuf Chronenet中的高效shuffle块应用于HRNet(高分辨率网络),从而获得比流行的轻量级网络(如MobileNet,Shuf Chronenet和Small HRNet)更强的性能。我们发现,大量使用的逐点(1 × 1)卷积在shuffle块成为计算瓶颈。我们引入了一个轻量级的单元,条件信道加权,以取代昂贵的逐点(1 × 1)卷积在shuf?信道加权的复杂度与信道数成线性关系,低于逐点卷积的二次时间复杂度。我们的解决方案从所有通道和多个分辨率中学习权重,这些权重在HRNet的并行分支中很容易获得。它使用权重作为跨通道和分辨率交换信息的桥梁,补偿逐点(1 × 1)卷积所扮演的角色。Lite-HRNet在人体姿态估计方面表现出优于流行的轻量级网络的上级结果。此外,Lite-HRNet可以以同样的轻量级方式轻松应用于语义分割任务。

3、创新点

  • 在Lite-HRNet中,通过使用轻量级的条件通道加权操作替代1×1卷积,提高了网络的性能并减少了计算复杂度。
  • 通过引入空间权重和多分辨率权重,有效地提高了网络的性能,尤其是在COCO和MPII数据集上取得了显著的AP提升。
  • Lite-HRNet通过交叉分辨率权重计算,实现了跨通道和分辨率的信息交换,进一步提升了网络的容量和性能

4、Motivation

人体姿态估计一般比较依赖于高分辨率的特征表示以获得较好的性能,基于对模型性能日益增长的需求,本文研究了在计算资源有限的情况下开发高效高分辨率模型的问题。HRNet有很强的表示能力,很适用于对位置敏感的应用,比如语义分割、人体姿态估计和目标检测。通过简单地将ShuffleNet中的Shuffle Block应用于Small HRNet,即可得到一个轻量级的HRNet,并且可以获得超越ShuffleNet、MobileNet的性能。Naive Lite-HRNet的shuffle block存在的大量的 1×1 卷积操作成为了计算瓶颈,因此,如何能替换掉成本较高的 1×1 Conv并且保持甚至取得超越其性能是本文要解决的核心问题。为此,作者提出名为 Lite-HRNet 的网络,在Lite-HRNet中使用conditional channel weighting模块替代1×1卷积,以进一步提高网络的计算效率。

5、naive Lite-HRNet

Shuffle blocks. ShuffleNet V2 中的 shuffle block 首先将通道分成两个分区。一个分区经过一个(1×1卷积、3×3 depthwise 卷积和1×1卷积)序列,其输出与另一个分区连接。最后,串接的通道被 shuffled,如下图 (a) 所示

HRNet. HRNet 从一个高分辨率卷积 stem 作为 first stage 开始,逐步添加一个高到低分辨率的 stream 作为新的 stage。多分辨率流是并行连接的。主体main body 由一系列 stage 组成。在每个stage,跨分辨率的信息都会反复交换。我们遵循 Small HRNet 的设计,使用更少的层和更小的宽度来形成我们的网络。Small HRNet 的 stem 由两个 stride=2 的 3×3 卷积组成。主体中的每个 stage 包含一系列残差块和一个多分辨率融合。下图显示了Small HRNet 的结构。

Simple combination. 将 shuffle block 替换 Small HRNet 主干中的第二个3×3卷积,并替换所有残差块(由两个3×3卷积形成)。多分辨率融合中的一般卷积被可分离卷积所取代,从而形成一个 naive Lite-HRNet。 

6、Lite-HRNet

(1) 1×1convolution is costly.

1×1卷积在每个位置执行矩阵向量乘法:

其中 X 和 Y 是输入和输出 map,W 是1×1卷积kernel。因为shuffle操作和depthwise卷积不做跨通道的信息交换,所以1×1卷积在跨通道交换信息方面起关键作用。

C个通道的1×1卷积具有二次时间复杂度 ( O(C^{2}) ) ,3×3 depthwise 卷积具有线性时间复杂度 ( O(9C)^{3}) 。在 shuffle block 中,两个1×1卷积的复杂度远高于深度卷积:O(C^{2}) > O(9C),通常情况下 C > 5 。表2表示了1×1卷积和depthwise卷积之间的复杂性的比较。

(2) Conditional channel weighting

为了进一步降低计算的复杂度,作者提出使用element-wise multiplication operation即Conditional channel weighting来代替 1×1 卷积,此网络命名为 Lite-HRNet。

对于Lite-HRNet中的第 s 个分支,conditional channel weighting可以表示为:

其中, W_{s} 是 W_{s}\times H_{s}\times C_{s} 的矩阵,表示weight map,会从不同分辨率的feature map中计算得到,可以起到一个跨通道、跨分辨率的特征交互的作用权重矩阵,它由Cross-resolution Weight Computation和Spatial Weight Computation这两种方法进行计算。⊙表示元素乘法操作。 

Conditional Channel Weighting的时间复杂度为 O(C),远低于1×1卷积。

使用Conditional Channel Weighting操作替换掉1×1卷积后的Shuffle Block结构如下图 (b) 所示:

(3) Cross-resolution weight computation

在网络的第 s 个Stage中有 s 个平行分支,每个分支的feature map分辨率不同,共有 s 个weight map分别与这些分支对应,将这 s 个weight map记作 W_{1},W_{2},...,W_{s}。 

使用 X_{1},X_{2},...,X_{s} 表示 s 个分支的feature map,X_{1} 表示分辨率最高的feature map,相应地,X_{s} 表示第 s 个分辨率的feature map,则有:

其中,H_{s} 是一个轻量级的函数,它的具体实现过程为:

首先对 X_{1},X_{2},...,X_{s-1} 进行Adaptive Average Pooling(AAP)操作,输出的feature map尺寸为 W_{s}\times H_{s} ,即:

将 AAP 操作得到的{ {X}'_{1},{X}'_{2},...{X}'_{s-1} }和特征 X_{s} 进行Concat操作,得到 ({X}'_{1},{X}'_{2},...{X}'_{s}) ; 

({X}'_{1},{X}'_{2},...{X}'_{s}) 依次进行1×1卷积、ReLU、1×1卷积、sigmoid操作,将输出结果记作({W}'_{1},{W}'_{2},...{W}'_{s}),即:

通过上述操作,可以得到 s 个分支的权重矩阵。某个分支中特定位置的权重是由经过AAP操作得到的 ({X}'_{1},{X}'_{2},...{X}'_{s}) 中同样位置的值决定的,即由多个分辨率的特征得到。 

之后对 ({W}'_{1},{W}'_{2},...{W}'_{s-1}) 使用最近邻进行上采样操作,使得权重的分辨率与它们所对应分支的feature map分辨率一致,用于随后的element-wise channel weighting。

对于第 s 个分支中位置 i 处的特征值,计算公式为:

w_{si} 与所有分支的feature map在位置 i 处对应的特征区域有关,因此 w_{si} 包含多种分辨率的特征,通过上式得到的 y_{si} 包含多尺度的特征。 

H_{s} 在操作时,先使用AAP操作减小了 {X_{1},X_{2},...,X_{s-1}} 的分辨率,因此在后面的卷积运算中不会引入很大的计算量。

class CrossResolutionWeighting(nn.Module):def __init__(self,channels,ratio=16,conv_cfg=None,norm_cfg=None,act_cfg=(dict(type='ReLU'), dict(type='Sigmoid'))):super().__init__()if isinstance(act_cfg, dict):act_cfg = (act_cfg, act_cfg)assert len(act_cfg) == 2assert mmcv.is_tuple_of(act_cfg, dict)self.channels = channelstotal_channel = sum(channels)self.conv1 = ConvModule(in_channels=total_channel,out_channels=int(total_channel / ratio),kernel_size=1,stride=1,conv_cfg=conv_cfg,norm_cfg=norm_cfg,act_cfg=act_cfg[0])self.conv2 = ConvModule(in_channels=int(total_channel / ratio),out_channels=total_channel,kernel_size=1,stride=1,conv_cfg=conv_cfg,norm_cfg=norm_cfg,act_cfg=act_cfg[1])def forward(self, x):# mini_size即为当前stage中最小分辨率的shape:H_s, W_smini_size = x[-1].size()[-2:]  # H_s, W_s# 将所有stage的input均压缩至最小分辨率,由于最小的一个stage的分辨率已经是最小的了# 因此不需要进行压缩out = [F.adaptive_avg_pool2d(s, mini_size) for s in x[:-1]] + [x[-1]]out = torch.cat(out, dim=1)out = self.conv1(out)  # ReLu激活out = self.conv2(out)  # sigmoid激活out = torch.split(out, self.channels, dim=1)out = [# s为原输入# a为权重,并通过最近邻插值还原回原输入尺度s * F.interpolate(a, size=s.size()[-2:], mode='nearest')for s, a in zip(x, out)]return out

(4) Spatial Weight Computation

本文在引入跨分辨率信息后,还引入了一个单分辨率内部空间域的增强操作:

权重矩阵 W_{s} 的值在所有空间域位置处都相等,其中 F_{s} 的实现过程为: 

其中,Global Average Pooling(GAP)的作用是聚集所有位置的特征。

得到权重矩阵后,根据下式得到第 s 个分支位置 i 处的输出特征:

 

根据权重矩阵的计算过程可知,输出特征的每个元素都和该分支所有输入特征有关。

class SpatialWeighting(nn.Module):def __init__(self,channels,ratio=16,conv_cfg=None,act_cfg=(dict(type='ReLU'), dict(type='Sigmoid'))):super().__init__()if isinstance(act_cfg, dict):act_cfg = (act_cfg, act_cfg)assert len(act_cfg) == 2assert mmcv.is_tuple_of(act_cfg, dict)self.global_avgpool = nn.AdaptiveAvgPool2d(1)self.conv1 = ConvModule(in_channels=channels,out_channels=int(channels / ratio),kernel_size=1,stride=1,conv_cfg=conv_cfg,act_cfg=act_cfg[0])self.conv2 = ConvModule(in_channels=int(channels / ratio),out_channels=channels,kernel_size=1,stride=1,conv_cfg=conv_cfg,act_cfg=act_cfg[1])def forward(self, x):out = self.global_avgpool(x)out = self.conv1(out)out = self.conv2(out)return x * out

 (5) 计算量分析

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

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

相关文章

逻辑分析仪使用杂记

50MSa为采样深度:对被测信号一次采集的样点总数。它决定了一次采样所能采集到的数据量的多少,深度越大,一次采集的数据量越大。 16MHZ为采样率:对被测信号进行采样的频率,也就是每秒所采集的样点数。它决定了一次采样…

小程序内多种直播方案对比

我可以为您提供一个基于您提供信息的简单对比表,以便您对比视频号直播、小程序直播和三方SDK直播的不同特点和成本。在做出最终决定前,建议您还需要考虑直播质量、用户体验、后续支持和维护等因素。 特点/平台视频号直播小程序直播三方SDK直播直播方式通…

328——二维矩阵值变为1最小操作次数 next、nextInt、nextLine

一、next、nextInt、nextLine区别 1.next() next()不光是接收键盘输入的内容,而且还进行分割。例如默认分隔符为空格 Scanner sc new Scanner(System.in);while (true){String str sc.next();System.out.println(str "A");}// 输出结果 input&#…

【算法】归并排序(迭代法)

简介 归并排序有两种实现方法: 递归法(Top-down implementation)迭代法(Bottom-up implementation)关于归并排序的介绍请看之前的 归并排序(递归法)。 算法步骤(迭代) 设待排列序列有 n 个序列。子序列宽度为 width = 1。 将宽度为 width 的子序列每对相邻两个子序…

备考ICA----Istio实验14---出向流量管控Egress Gateways实验

备考ICA----Istio实验14—出向流量管控Egress Gateways实验 1. 发布测试用 pod kubectl apply -f istio/samples/sleep/sleep.yaml kubectl get pods -l appsleep2. ServiceEntry 创建一个ServiceEntry允许流量访问edition.cnn.com egressgw/edition-ServiceEntry.yaml api…

代码随想录Day38

Day 38 动态规划 part01 今日任务 斐波那契数 爬楼梯 使用最小花费爬楼梯 代码实现 斐波那契数 //递归public int fib(int n) {if (n 0) {return 0;}if (n 1) {return 1;}return fib(n - 1) fib(n - 2);}//动态规划public int fib2(int n) {if (n < 1) return n;in…

科技下乡:数字乡村改变乡村生活方式

在科技飞速发展的时代&#xff0c;数字化、信息化浪潮正以前所未有的速度席卷全球。在这场科技革命中&#xff0c;乡村不再是滞后的代名词&#xff0c;而是成为了数字乡村建设的热土。科技下乡&#xff0c;让数字乡村成为了改变乡村生活方式的重要力量。 一、科技下乡&#xf…

(学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

STM32之HAL开发——I2C读写EEPROM

I2C功能框图&#xff08;F1系列&#xff09; STM32 的 I2C 外设可用作通讯的主机及从机&#xff0c;支持 100Kbit/s 和 400Kbit/s 的速率&#xff0c;支持 7 位、 10 位设备地址&#xff0c;支持 DMA 数据传输&#xff0c;并具有数据校验功能&#xff0c;I2C 外设还支持 SMBus2…

工作日志- 不定期更新

1. protobuf中使用import引用其他proto文件&#xff0c;生成后在go语言的go modules中import 包名报错问题。 public.proto文件 //protoc --go_outpluginsgrpc:. public.proto syntax "proto3";package public;option go_package "self/game-service/msg/pu…

3D产品可视化SaaS

“我们正在走向衰退吗&#xff1f;” “我们已经陷入衰退了吗&#xff1f;” “我们正在步入衰退。” 过去几个月占据头条的问题和陈述引发了关于市场对每个行业影响的讨论和激烈辩论。 特别是对于科技行业来说&#xff0c;过去几周一直很动荡&#xff0c;围绕费用、增长和裁…

Webpack生成企业站静态页面 - ajax请求

一些项目因需求不同&#xff0c;如需SEO或小项目&#xff0c;使用angular、react或vue就大材小用了。可以通过webpack、gulp这些构建工具&#xff0c;也能快速完成html页面开发&#xff0c;并且也能使用less/sass/styus等样式预编译功能&#xff0c;以及将js、html分模块、分组…

RabbitMQ高级笔记

视频链接&#xff1a;【黑马程序员RabbitMQ入门到实战教程】 文章目录 1.发送者的可靠性1.1.生产者重试机制1.2.生产者确认机制1.3.实现生产者确认1.3.1.开启生产者确认1.3.2.定义ReturnCallback1.3.3.定义ConfirmCallback 2.MQ的可靠性2.1.数据持久化2.1.1.交换机持久化2.1.2.…

小米汽车SU7发布,售价21.59万起,订单总额破1亿

文 | 大力财经 小米召开新车发布会&#xff0c;正式发布小米 SU7。该车定位中大型纯电轿车&#xff0c;有 SU7、SU7 Pro、SU7 Max 三个版本&#xff0c;车身尺寸 4997/1963/1455mm&#xff0c;轴距 3000mm。售价 21.59-29.99 万。 新车发布后&#xff0c;市场反应热烈&#x…

Redis 过期删除策略 And 内存淘汰策略 !!!

一、Redis过期删除策略&#xff08;什么时候删除&#xff09; 1、惰性删除&#xff1a;放任键过期不管&#xff0c;但是每次从键空间中获取键时&#xff0c;都检查取得的键是否过期&#xff0c;如果过期的话就删除该键&#xff0c;如果没有过期就返回该键。 2、定期删除&…

Topaz Gigapixel AI for Mac 图像放大软件

Topaz Gigapixel AI for Mac是一款专为Mac用户设计的智能图像放大软件。它采用了人工智能技术&#xff0c;特别是深度学习算法&#xff0c;以提高图像的分辨率和质量&#xff0c;使得图像在放大后仍能保持清晰的细节。这款软件的特点在于其能够将低分辨率的图片放大至高分辨率&…

openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录

1.编程界面比较简单&#xff0c;具备PLC开发编程的四种编程方式。梯形图语言LD &#xff0c;指令表语言IL&#xff0c;结构化文本语言ST&#xff0c;功能模块图语言FBD。 2.官方使用手册。学习资料实在是太少&#xff0c;目前都是自己比较费劲的研究。 3.2 Creating Your First…

QT6实现音频输出方法

一.QT6音频调用及与QT5的区别 1.音频输入 QAudioSource代替QAudioInput类 QAudioSource类提供了一个接口&#xff0c;用于从音频输入设备接收音频数据。 Header: #include <QAudioSource> qmake: QT multimedia 2.音频输出 QAudioSink代替QAudioOutput类 QAudioSi…

第九届蓝桥杯---航班时间python

1.总结&#xff1a; 时 秒数//3600 分 秒数%3600//60 秒 秒数%60 print(‘{:02d}:{:02d}:{:02d}’.format(res//3600, res%3600//60, res%60)) {:02d}表示输入的整数是两位不足前面补0&#xff0c;d表示整数 # 时间计算函数 def time_caculate(t):m1 t[0].split(":&q…

【数据挖掘】实验5:数据预处理(2)

验5&#xff1a;数据预处理&#xff08;2&#xff09; 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握数据预处理&#xff0c;学习数据清洗、数据集成、数据变换、数据规约、R语言中主要数据预处理函数。 二&#xff1a;实验知识点总结 1&#xff1a;数据集成是将多个…