TResNet: ResNet改进,实现高精度的同时保持高 GPU 利用率

news2024/11/20 10:35:17

终于开题,抓紧发文,然后放飞​​​​​​,来由就是想搞一篇论文,但是增加了某个东西之后吧,速度变慢了,所以导师提议加个这玩意看看能不能快点。

论文题目:TResNet: High Performance GPU-Dedicated Architecture

论文地址:https://arxiv.org/abs/2003.13630

代码:https://github.com/mrT23/TResNet

包含三个变体,TResNet-M、TResNet-L 和 TResNet-XL,它们仅在深度和通道数上有所不同。TResNet架构包含以下改进: SpaceToDepth stem,Anti-Alias downsampling,In-Place Activated BatchNorm,Blocks selection and SE layers。有些改进会增加模型的吞吐量,而有些则会降低模型的吞吐量。 就这5个,挨个说。

1.  SpaceToDepth stem

ResNet50 stem 由一个 stride-2 conv7×7 和一个最大池化层组成。ResNet-D 将 conv7×7 替换为三个 conv3×3 层。提高了准确性,降低了训练吞吐量。论文使用了专用的 SpaceToDepth 转换层 ,将空间数据块重新排列为深度。SpaceToDepth 层之后是简单的卷积,以匹配所需通道的数量。

代码:

class SpaceToDepth(nn.Module):
    def __init__(self, block_size=4):
        super().__init__()
        assert block_size == 4
        self.bs = block_size

    def forward(self, x):
        N, C, H, W = x.size()
        x = x.view(N, C, H // self.bs, self.bs, W // self.bs, self.bs)  # (N, C, H//bs, bs, W//bs, bs)
        x = x.permute(0, 3, 5, 1, 2, 4).contiguous()  # (N, bs, bs, C, H//bs, W//bs)
        x = x.view(N, C * (self.bs ** 2), H // self.bs, W // self.bs)  # (N, C*bs^2, H//bs, W//bs)
        return x

2.  Anti-Alias downsampling

 stride-2 卷积被 stride-1 卷积替换,然后是一个 3×3 的步长为 2的blur filter。

class AADownsample(nn.Module):
    def __init__(self, filt_size=3, stride=2, channels=None):
        super(AADownsample, self).__init__()
        self.filt_size = filt_size
        self.stride = stride
        self.channels = channels


        assert self.filt_size == 3
        a = torch.tensor([1., 2., 1.])

        filt = (a[:, None] * a[None, :])
        filt = filt / torch.sum(filt)

        # self.filt = filt[None, None, :, :].repeat((self.channels, 1, 1, 1))
        self.register_buffer('filt', filt[None, None, :, :].repeat((self.channels, 1, 1, 1)))

    def forward(self, input):
        input_pad = F.pad(input, (1, 1, 1, 1), 'reflect')
        return F.conv2d(input_pad, self.filt, stride=self.stride, padding=0, groups=input.shape[1])

3. In-Place Activated BatchNorm (Inplace-ABN)

在整个架构中,作者将所有BatchNorm + ReLU层替换为Inplace-ABN 层,该层将BatchNorm和activation作为一个单独的就地操作来实现,从而大大减少了训练深度网络所需的内存,而计算量的增加可忽略不计成本。

在TResNet模型中使用Inplace-ABN具有以下优点:

BatchNorm层是GPU内存的主要消耗者。 用Inplace-ABN替换BatchNorm层实际上可使最大批处理大小增加一倍,从而提高了GPU吞吐量。
对于TResNet来说,Leaky-ReLU比普通的ReLU提供更好的准确率。虽然一些现代的激活函数,例如Swish和Mish,也可能与ReLU相比,它们提供了更好的精度,它们的GPU内存消耗更高,并且其计算成本更高。相反,Leaky-ReLU具有与普通ReLU完全相同的GPU内存消耗和计算成本。

4. Blocks Selection

下图左边为ResNet34 使用的BasicBlock,右边为ResNet50使用的Bottleneck, Bottleneck使用GPU更高,但是可以得到更高精度, BasicBlock有更大的感受野.

因此, TResNet在前两阶段使用BasicBlock,后两阶段使用Bottleneck

5. SE Layers

SE 层仅放置在网络的前三个阶段,以获得最大的速度-准确度优势。对于Bottleneck单元,在conv3×3操作之后添加SE模块,缩减因子为8(r = 8)。对于 BasicBlock 单元,在残差和之前添加 SE 模块,缩减因子为 4 (r=4)。

然后就是各种的对比实验结果加上消融实验。开题结束了,要写小论文了,我就是个大混子,毕业万岁!

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

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

相关文章

深度剖析商业智能BI中的多维分析

数据在这些年的时间中,也逐渐成长为了个人、机构、企业乃至国家的战略资源,被很多人放到“新时代的石油”这一位置上。虽然这个说法也引起了一些争议,但更多只是讨论数据和石油的差异性,却并没有多少人否认数据的价值,…

开发速查表,一个值得每个程序员收藏的网站

在工作过程中,虽然我们程序员,主要是使用一门语言开发,但免不了会用到其他语言参与其他项目;或者很多全栈工程师,会参与前端的开发调试;总的来说,我们工作过程中,都会涉及到多门编程…

Fluent 嵌套网格(overset)功能讲解与实例操作

作者 | 张杨 在流体仿真中,我们经常会遇到边界运动的问题,如: 生物医疗行业中血管的运动 航空航天行业中飞行器的分离 容积泵中齿轮的相对运动 在ANSYS Fluent 17.0之前的版本中,我们通常采用传统的MDM(Moving/D…

【模型训练】YOLOv7车辆和行人检测

YOLOv7车辆和行人检测 1、车辆和行人检测模型训练2、模型评估3、模型和数据集下载网盘链接1、本项目采用YOLOv7算法实现对车辆和行人检测,在几千多张车辆和行人检测中能训练得到,我们训练了YOLOv7、,所有指标都是在同一个验证集上得到; 2、目标类别数:2 ;类别名:person、…

5、网络配置

文章目录5、网络配置5.1 VMware三种模式5.1.1 桥连模式5.1.2 NAT模式5.1.3 仅主机模式5.2 查看网络IP和网关5.2.1 查看虚拟网络编辑器5.2.2 修改虚拟网卡 Ip5.2.3 查看网关5.2.4 查看 windows 环境的中 VMnet8 网络配置5.3 配置网络ip地址5.3.1 ifconfig查看网络接口配置1 基本…

Windows内核--系统调用参数验证(5.1)

内核参数验证的重要性 内核模式之所以有别于用户模式,在于内核模式应该是安全、可信的。用户系统调用可以传入各式各样的参数,可能是代码无意写错或因不预期的内存覆盖"暗地修改"参数,也可能是Hack有意传入,内核都应当妥…

【强化学习论文合集】ICRA-2022 强化学习论文 | 2022年合集(六)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现…

生成者(建造者)模式

思考生成者模式 生成者模式就是将对象构建和对象内部构建分离 对象构建:手机的构建 对象内部构建:手机中屏幕和电池的构建 1.生成者模式的本质 生成器模式的本质:分离整体对象构建算法和对象的部件构造。 构建一个复杂的对象,本来就有构建的过…

前端程序员辞掉朝九晚五工作成为独立开发者一年开发出6款软件的故事

一个前端程序员的梦想 作为一个程序员,陈明福的梦想是: 自主自由的工作内容和方式。在全球范围内发展个人品牌和影响力。学习技术和经验,成为 SaaS 软件方面的专家。对世界产生积极影响。财务自由,能提前退休。 他的故事 1、他…

JS 根据某个字段进行排序或分组

JS 数组中根据某个字段进行排序 const arr [ { name: "崔喻琪", age: 32 }, { name: " 王忱景", age: 18 }, { name: " 房真睿", age: 27 }, { name: "姬泉孝", age: 20 }, { name: "余嘉芳", age: 16 }, { na…

Deep Few-Shot Learning for Hyperspectral Image Classification-浅读

这里写目录标题Deep Few-Shot Learning for Hyperspectral Image ClassificationIntroductionMethodExperimentDeep Few-Shot Learning for Hyperspectral Image Classification 我看的第一篇 few-shot learning 文章,记录一下,看看能不能说明few-shot …

学生家乡网页设计作品静态HTML网页—— HTML+CSS+JavaScript制作辽宁沈阳家乡主题网页源码(11页)

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

Python绘制三维图详解

利用Python绘制三维图 目标: 绘制图像z2x2y2z^2 x^2 y^2z2x2y2 import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D #绘制3D图案画曲面的第一步是就是要创建一个二维平面的网格,在Python当中,…

设备树_基础知识

设备树 格式 /dts-v1/; // 版本号 / { // /表示根节点string-property "xxx"; // string 类型string-list-property "xxx", "yyy"; // strin…

Linux下的Framebuffer编程

文章目录前言一、LCD操作原理二、代码解析及编写程序的步骤0.定义各类参数1.打开LCD设备节点2.获取触摸屏数据3.mmap映射Framebuffer,在Framebuffer中写入数据三、LCD操作函数解析1.描点函数2.显示字符函数总结前言 本篇文章将会介绍Linux下的Framebuffer编程&…

html中的定位知识点如何使用

目录 系列文章目录 文章目录 前言 一、定位是什么?有什么用? 二、定位方式有哪些?怎么使用? 1、静态定位:就是默认的定位方式,意思就是没有定位; 2、相对定位: 3、绝对定位&…

PDF怎么转成Word?安利几个转换小技巧

平时我们工作学习的时候,经常要跟文件打交道,并且接触最多的文件形式就是PDF与Word两种文件格式,它们各有各的好处,PDF的保密性以及兼容性好,便于我们进行文件分享查阅,而Word就方便我们进行编辑。如果我们…

Ubuntu Server 22.04.1配置(配置root账号、设置固定IP、更改SSH端口、配置UFW、VM扩展磁盘后Ubuntu的扩容)

为了能快速的创建虚拟机,通过VM创建了一个2核CPU、4G内存、40G硬盘,安装Ubuntu Server 22.04.1的虚拟机,以便在需要的时候随时克隆一个新的虚拟机出来。 在新的虚拟机克隆出来后可能会调整硬件的配置,例如将40G硬盘扩展到50G&…

Python编程 字典创建

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.字典 1.字典介绍 (了解) 2.字典创建&#xff0…

艾美捷nickases内切酶活性检测及相关研究

艾美捷nickases内切酶组分: NLS-Cas9(D10A) Nickase(0.1 μg/μl) 500 μL 10Reaction Buffer 1 ml 艾美捷nickases内切酶切割活性检测: NLS-Cas9(D10A) Nickase(0.1 μg/μl) 500 μL 10Reaction Buffer 1 ml 经多次柱纯化,SDS-PAGE 胶检…