当前位置: 首页 > news >正文

【ICLR 2023】可逆列网络(RevCol)

文章目录

  • 一、论文信息
  • 二、论文概要
  • 三、实验动机
  • 四、创新之处
  • 五、实验分析
  • 六、核心代码
    • 原代码
    • 注释版本
  • 七、实验总结

一、论文信息

  • 论文题目:Reversible Column Networks (RevCol)
  • 中文题目:可逆列网络(RevCol)
  • 论文链接:点击跳转
  • 代码链接:点击跳转
  • 作者:Yuxuan Cai, Yizhuang Zhou, Qi Han, Jianjian Sun, Xiangwen Kong, Jun Li, Xiangyu Zhang(蔡宇轩、周义庄、韩琦、孙健健、孔祥文、李军、张祥雨)
  • 单位: MEGVII Technology(旷视科技), Beijing Academy of Artificial Intelligence(北京智源研究院)
  • 核心速览:提出一种可逆的多列神经网络结构,实现特征解耦与无损信息传播,在分类、检测、分割任务上达到SOTA。

二、论文概要

该论文提出了一种新的神经网络设计范式——可逆列网络(RevCol)。RevCol 由多个子网络(列)组成,每个列之间通过多级可逆连接进行联系。这种设计使得网络在前向传播过程中逐渐解开特征,使得所有的信息得以保持,而不是像传统网络那样被压缩或丢弃。该论文展示了RevCol在多个计算机视觉任务上的优秀性能,包括图像分类、物体检测和语义分割,特别是在大参数预算和大数据集下,RevCol模型的表现非常有竞争力。该方法还可以扩展到transformer等其他网络中,提升了多种计算机视觉和NLP任务的表现。

三、实验动机

  • 传统单列网络在预训练(如ImageNet)时往往过度强调高层语义特征,而丢失低层细节信息,不利于下游任务(如检测、分割)。

  • 可逆网络(如RevNet)虽能节省内存,但对特征维度有严格限制,且无法实现多尺度特征解耦。

  • 受GLOM启发,希望设计一种既能保持信息无损、又能实现特征解耦的可扩展网络结构。

四、创新之处

  • 可逆多列结构:提出一种广义的可逆变换公式,支持多尺度特征的无损传播。

  • 特征解耦机制:不同列负责不同抽象层次的特征,最后一列输出解耦后的多级特征。

  • 中间监督:引入重建损失和分类损失的中间监督,防止信息丢失,提升训练稳定性。

  • 内存高效:由于可逆性,训练时仅需存储一列的激活值,内存占用为O(1)。

  • 扩展性强:列数成为新的扩展维度,可与深度、宽度并列。

五、实验分析

RevCol在多个计算机视觉任务中表现优异,特别是在图像分类(ImageNet)、物体检测(COCO)和语义分割(ADE20K)任务上。实验结果表明,RevCol在大规模数据集和大模型训练中具有良好的扩展性。例如,RevCol-H模型在ImageNet-1K上达到90.0%的准确率,超越了许多先进的CNN和Transformer模型。

六、核心代码

原代码

class RevCol(nn.Module):def __init__(self, kernel='C2f', channels=[32, 64, 96, 128], layers=[2, 3, 6, 3], num_subnet=5, save_memory=True) -> None:super().__init__()self.num_subnet = num_subnetself.channels = channelsself.layers = layersself.stem = Conv(3, channels[0], k=4, s=4, p=0)for i in range(num_subnet):first_col = True if i == 0 else Falseself.add_module(f'subnet{str(i)}', SubNet(channels, layers, kernel, first_col, save_memory=save_memory))self.channel = [i.size(1) for i in self.forward(torch.randn(1, 3, 640, 640))]def forward(self, x):c0, c1, c2, c3 = 0, 0, 0, 0x = self.stem(x)        for i in range(self.num_subnet):c0, c1, c2, c3 = getattr(self, f'subnet{str(i)}')(x, c0, c1, c2, c3)       return [c0, c1, c2, c3]

注释版本

import torch
import torch.nn as nnclass RevCol(nn.Module):def __init__(self, kernel='C2f', channels=[32, 64, 96, 128], layers=[2, 3, 6, 3], num_subnet=5, save_memory=True) -> None:"""Reversible Column Networks (RevCol) 主类参数:kernel (str): 使用的卷积核类型,默认为'C2f'channels (list): 每层输出的通道数,默认为[32, 64, 96, 128]layers (list): 每层的块数,默认为[2, 3, 6, 3]num_subnet (int): 子网络(列)的数量,默认为5save_memory (bool): 是否启用内存节省模式,默认为True"""super().__init__()self.num_subnet = num_subnet  # 子网络数量self.channels = channels      # 各层通道数配置self.layers = layers          # 各层块数配置# 输入 stem: 将输入图像转换为特征图# 使用4x4卷积,步长为4,无填充,实现16倍下采样self.stem = Conv(3, channels[0], k=4, s=4, p=0)# 创建多个子网络(列)for i in range(num_subnet):# 第一个子网络是特殊的,不需要从之前的列接收特征first_col = True if i == 0 else Falseself.add_module(f'subnet{str(i)}', SubNet(channels, layers, kernel, first_col, save_memory=save_memory))# 前向传播一次以获取各层输出的通道数# 这通常在模型初始化时用于确定后续层的输入尺寸self.channel = [i.size(1) for i in self.forward(torch.randn(1, 3, 640, 640))]def forward(self, x):"""前向传播函数参数:x (Tensor): 输入图像张量,形状为(B, 3, H, W)返回:list: 包含四个不同尺度特征图的列表 [c0, c1, c2, c3]"""# 初始化各层特征图为0(对于第一个子网络,这些值不会被使用)c0, c1, c2, c3 = 0, 0, 0, 0# 通过stem卷积处理输入图像x = self.stem(x)# 依次通过所有子网络for i in range(self.num_subnet):# 获取当前子网络并前向传播# 每个子网络接收输入x和之前层的特征,输出更新后的各层特征c0, c1, c2, c3 = getattr(self, f'subnet{str(i)}')(x, c0, c1, c2, c3)# 返回最后一个子网络输出的多尺度特征return [c0, c1, c2, c3]

七、实验总结

  • RevCol通过多列可逆结构,在不丢失信息的情况下逐步解开特征,提升了模型在多个计算机视觉任务中的表现,尤其是在大规模数据集上的预训练表现。
  • 此外,RevCol还具有良好的内存优化特性,能够支持大规模模型的训练。

文章转载自:

http://wANunouF.sLjmg.cn
http://jYnqA5RN.sLjmg.cn
http://sFlBOOjE.sLjmg.cn
http://s0CXRbU1.sLjmg.cn
http://6Gq4hORV.sLjmg.cn
http://831OuBdQ.sLjmg.cn
http://9tumePme.sLjmg.cn
http://gkhrRwK5.sLjmg.cn
http://GGBi02es.sLjmg.cn
http://KLrEfw5N.sLjmg.cn
http://AxlATBRo.sLjmg.cn
http://PtmuWmPU.sLjmg.cn
http://yKCpKJGJ.sLjmg.cn
http://WJ0WMzJY.sLjmg.cn
http://M7G6FxqG.sLjmg.cn
http://riotiPP9.sLjmg.cn
http://RSdZ4JWj.sLjmg.cn
http://UnydlCH6.sLjmg.cn
http://VMAVFhQh.sLjmg.cn
http://3IiqwoBP.sLjmg.cn
http://7sYvzZ3w.sLjmg.cn
http://GviiOFPq.sLjmg.cn
http://Ll1xGOUd.sLjmg.cn
http://GerdXVa2.sLjmg.cn
http://8BVKbnF2.sLjmg.cn
http://RScVvz20.sLjmg.cn
http://1XgVJTac.sLjmg.cn
http://Z3x53jJI.sLjmg.cn
http://zbkYN7h8.sLjmg.cn
http://3m9tcT9R.sLjmg.cn
http://www.dtcms.com/a/376658.html

相关文章:

  • Java SE 与常用框架
  • Web安全基石:深入理解与防御越权问题
  • 手写MyBatis第58弹:如何优雅输出可执行的SQL语句--深入理解MyBatis日志机制:
  • 2025流量新逻辑:AI × IP × 联盟|创客匠人
  • UGUI源码剖析(15):Slider的运行时逻辑与编辑器实现
  • 第 16 篇:服务网格的未来 - Ambient Mesh, eBPF 与 Gateway API
  • 基于Matlab不同作战类型下兵力动力学模型的构建与稳定性分析
  • 基于AIS动态数据与AI结合得经纬度标示算法
  • 第5章 HTTPS与安全配置
  • ZYNQ PL端采集AD7606数据与ARM端QT显示实战指南
  • 头条号采集软件V12.2主要更新内容
  • 吱吱企业即时通讯平衡企业通讯安全与协作,提升企业办公效率
  • 中线安防保护器,也叫终端电气综合治理保护设备为现代生活筑起安全防线
  • 从零实现一个简化版string 类 —— 深入理解std::string的底层设计
  • 记一次Cloudflare五秒盾的研究
  • RDMA和RoCE有损无损
  • 大数据毕业设计选题推荐-基于大数据的护肤品店铺运营数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • C#,RabbitMQ从入门到精通,.NET8.0(路由/分布式/主题/消费重复问题 /延迟队列和死信队列/消息持久化 )/RabbitMQ集群模式
  • 开源芯片革命的起源与未来
  • 开源的Web服务器管理平台Termix
  • Dify开源AI框架介绍
  • Git 技巧:用 --no-walk 参数 + 别名,精准显示指定提交记录
  • kafka3.8集群搭建
  • 基于 Python + redis + flask 的在线聊天室
  • 35.神经网络:从感知机到多层网络
  • 单元测试-junit5的spy部分mock
  • 新能源汽车车载传感器数据处理系统设计(论文+源码)
  • 基于安全抽象模型(SAM)的汽车网络安全防御与攻击分析
  • 【qt】通过TCP传输json,json里包含图像
  • 力扣每日一刷Day 20