【论文阅读】Faster Neural Networks Straight from JPEG

Faster Neural Networks Straight from JPEG

论文链接:Faster Neural Networks Straight from JPEG (neurips.cc)

作者:Lionel Gueguen,Alex Sergeev,Ben Kadlec,Rosanne Liu,Jason Yosinski

机构:Uber,Uber AI Labs

关键词:DCT,CNN,JPEG,图像编码

参考文献:Gueguen L, Sergeev A, Kadlec B, et al. Faster neural networks straight from jpeg[J]. Advances in Neural Information Processing Systems, 2018, 31.

代码链接:https://github.com/calmevtime/DCTNet

摘要

在这里插入图片描述

直接从RGB像素训练卷积神经网络(CNNs)的简单、优雅的方法在经验上取得了压倒性的成功。但是,通过使用不同的输入表示,是否可以从网络中挤出更多的性能?在本文中,提出并探索了一个简单的想法:直接在JPEG编解码器中间计算并可用的分块离散余弦变换(DCT)系数上训练CNN。直观地说,当使用CNN处理JPEG图像时,似乎没有必要将逐块频率表示解压缩为扩展的像素表示,将其从CPU搬到GPU,然后使用CNN进行处理,该CNN将在其第一层中学习类似于转换回频率表示的东西。为什么不跳过这两个步骤,直接将频域输入网络?在本文中,作者修改libjpeg以直接生成DCT系数,并修改ResNet-50网络以适应不同大小和跨步输入,并在ImageNet上评估性能。实验发现网络速度更快、更准确,以及精度大致相同但比ResNet-50快1.77倍。

Method

在这里插入图片描述

来自 Y 通道 D Y D_Y DY 的 DCT 系数通常比来自色度通道 D C b D_{Cb} DCb D C r D_{Cr} DCr 的 DCT 系数具有更大的尺寸,如图 1a 所示,其中实际形状是根据图像输入大小 224 × 224 224×224 224×224 计算的。因此,有必要进行特殊的转换来处理空间维度匹配,然后才能将生成的激活连接起来并馈送到传统的CNN中。论文考虑了两个抽象变换 ( T 1 , T 2 ) (T_1, T_2) (T1,T2) ,它们分别在不同的系数通道上运行,目的是在三个激活 a Y a_Y aY a C b a_{Cb} aCb a C r a_{Cr} aCr 之间产生匹配的空间大小,其中 a Y = T 1 ( D Y ) a_Y = T_1(D_Y) aY=T1(DY) a C b = T 2 ( D C b ) a_{Cb} = T_2(D_{Cb}) aCb=T2(DCb) a C r = T 2 ( D C r ) a_{Cr} = T_2(D_{Cr}) aCr=T2(DCr)。图 3 说明了这一过程。

在这里插入图片描述

除了确保卷积特征图大小对齐外,还必须考虑在变换结束时和整个网络中每个单元生成的感受野大小和步幅(以下用 R R R S S S 表示)。对于采用RGB输入的典型网络,每个单元的感受野和步幅在每个输入通道(红色、绿色、蓝色)方面都是相同的,但对于流经Y通道与Cb和Cr通道的信息,原始像素空间中考虑的感受野可能不同,这是不希望的。通过检查 DCT 操作产生的表示大小,当与不同块(下表)的 ResNet-50 的同一组参数进行比较时,发现 D Y D_Y DY 的空间维度与Block 3 的激活维度匹配,而 D C r D_{Cr} DCr D C b D_{Cb} DCb 的空间维度与Block 4 的空间维度匹配。这启发了我们在网络架构设计中跳过一些 ResNet 模块,但跳过而不进行进一步修改会导致网络功能大大降低(层数和参数更少),以及最终的网络层具有更小的感受野。

变换 ( T 1 , T 2 ) (T_1, T_2) (T1,T2)是通用的,允许我们将DCT系数调整到兼容的大小。在确定变换时,考虑了以下设计概念。变换可以是 (1) 非参数或手动设计的,例如原始 DCT 系数的上采样或下采样,(2) 可学习并且可以简单地表示为卷积层,或 (3) 卷积层的组合,例如 ResNet 模块本身。论文探索了七种不同的变换方法 ( T 1 , T 2 ) (T_1, T_2) (T1,T2),从最简单的上采样到反卷积,并结合了后续 ResNet 块的不同选择:

UpSampling:色度 DCT 系数 D_{Cb} 和 D_{Cr} 都是通过将像素的高度和宽度复制 2 倍到 D_{Y} 的尺寸来上采样的。然后将这三者按通道连接起来,并在进入 ResNet ConvBlock 3 (CB_3) 之前经过批量归一化层,但步幅为 1,然后是标准 CB_4 和 CB_5。

UpSampling-RFA:类似于 UpSampling,但在这里保留 ResNet CB_2(而不是删除它)以及 CB_2 和 CB_3,以便它们模仿在原始 ResNet-50 块中观察到的 R 和 S 的增加,并记作“Receptive Field Aware”或 RFA。

Deconvolution-RFA:上采样的替代方法是可学习的反卷积层。在此设计中,在 D C b D_{Cb} DCb D C r D_{Cr} DCr 上使用两个独立的反卷积层来增加空间尺寸。设计的其余部分与 UpSampling-RFA 相同。

DownSampling:使用卷积层对较大的系数 D Y D_Y DY 进行下采样。

Late-Concat:通过 ResNet-50 的两个 ConvBlocks (CBs) 和三个 IdentityBlocks (IBs) 自行运行 D Y D_Y DY D C b D_{Cb} DCb D C r D_{Cr} DCr 在与 D Y D_{Y} DY 路径连接之前并行通过 CB。然后,在 C B 4 CB_4 CB4 之后将连接的表示形式馈送到标准 ResNet 中。

Late-Concat-RFA:将 D Y D_Y DY 通过三个 CBs,并调整了内核大小和步幅,使得 R 的增加模仿原始 ResNet-50 中的 R。在并行中, D C b D_{Cb} DCb D C r D_{Cr} DCr 在连接到 D Y D_Y DY 路径的结果之前采用与 Late-Concat 相同的路径。

Late-Concat-RFA-Thinner:与 Late-Concat-RFA 相同,但通道数有所修改。沿 D Y D_Y DY 路径的前两个 CB 的通道数减少,第三个 CB 的通道数增加,将通道数从 {1024、512、512} 更改为 {384、384 、 768}。 D C b D_{Cb} DCb D C r D_{Cr} DCr 通过具有 256 个通道而不是 512 个通道的 CB 反馈。

实验

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

redis的设计与实现(四)——单机数据库特性

1. 前言 我们前面了解了redis的数据结构,对象。但是redis对于这些对象的使用和管理策略需要也熟记于心,这篇文章我们就了解一下吧。 2. 类型检查和命令多态 DEL,EXPIRE,RENAME,TYPE,OBJECT 可以对任何数据类型执行SET,GET,APPEND,STRLEN,等…

【nodejs ubuntu】nodejs版本过老的更新方法

使用apt方法安装的node.js版本过于老了,以至于我没法用npm下载hexo 下面是更新方法 参考了这篇文章 然后就可以成功安装了

蓝桥杯算法赛(二进制王国)

问题描述 二进制王国是一个非常特殊的国家,因为该国家的居民仅由 0 和 1 组成。 在这个国家中,每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示,例如 101、 000、 111 等。 现在,国王选了出 N 户家庭参加邻国的庆典…

PMP考试难不难,通过率怎样?

PMP考试自从新考纲调整后有几次考试难度是非常高的,那段时间我也看网上好多机构通过率都不咋地,当时也是因为官方的出题难度稍高,还组织了免费的重考,也是后来逐渐开始归于平常了吧,直到现在都是我认为比较简单的选择题…

【Qt】QDialog对话框

目录 一、概念 二、对话框的分类 2.1 模态对话框 2.2 非模态对话框 2.3 混合属性对话框 三、消息对话框QMessageBox 四、颜色对话框QColorDialog 五、文件对话框QFileDialog 六、字体对话框QFontDialog 七、输入对话框QInputDialog 一、概念 对话框是GUI程序中不可或…

Unity角色多人同步

1.位置同步和状态同步&#xff1a;需要同步的节点上挂载脚本&#xff1a; gameObject.AddComponent<SyncTransform>(); ; //同步gameObject.GetComponent<SyncTransform>().syncId SyncUtilFunc.GetRoleSyncId(PlayerData.Instance.PlayerId); //同步gameObject.G…

Qt定时器类QTimer

参考原文链接&#xff1a;https://blog.csdn.net/weixin_43780415/article/details/131389737 Qt定时器类QTimer是一个用于重复执行或延迟执行函数的类。它可以在一定时间间隔内发送一个信号&#xff0c;也可以在指定的时间后发送一个信号。QTimer是一个基于事件的定时器&#…

鸿蒙OS开发实例:【工具类封装-页面路由】

import common from ohos.app.ability.common; import router from ohos.router 封装app内的页面之间跳转、app与app之间的跳转工具类 【使用要求】 DevEco Studio 3.1.1 Release api 9 【使用示例】 import MyRouterUtil from ../common/utils/MyRouterUtil MyRouterUtil…

giteed的使用

1. 将工作区的内容添加到暂存区 你的工作区要有内容&#xff08;.git 不算&#xff09; 注意&#xff1a;空文件可以添加&#xff0c;但是空文件夹不管 如果没有形成历史版本之前&#xff0c;暂存区的同名文件会被覆盖 //打开命令行&#xff0c;切换到 .git所在的目录&…

JVM常见垃圾收集算法

JVM常见垃圾收集算法 标记-清除算法复制算法标记-整理&#xff08;标记压缩&#xff09;算法分代收集算法新生代和老年代分代收集算法工作机制 面试题&#xff1a;为什么分代收集算法把堆分成年轻代和老年代&#xff1f; 标记-清除算法 最基础的算法&#xff0c;分标记和清除两…

红队笔记8-CTF5打靶流程-CMS漏洞-多用户信息泄露(vulnhub)

目录 开头: 1.主机发现和端口扫描&#xff1a; 2.80端口-NanoCMS哈希密码信息泄露-后台getshell 3.提权-用户过多信息泄露 4.总结&#xff1a; 开头: 学习的视频是哔哩哔哩红队笔记&#xff1a; 「红队笔记」靶机精讲&#xff1a;LAMPSecurityCTF5 - 标准攻击链&#xff…

ByteTrack多目标跟踪——yolox_model代码详解

文章目录 yolox_modelYOLOPAFPNYOLOXHeadmodel损失计算初步筛选SimOTA 求解 附&#xff1a;网络结构Cls headCls_convsCls_preds Reg headReg_convsReg_preds Obj headObj_preds yolox_model yolox_model主要包括以下几个文件:yolox.py、yolo_pafpn.py以及yolo_head.py train时…

[AIGC] MySQL存储引擎详解

MySQL 是一种颇受欢迎的开源关系型数据库系统&#xff0c;它的强大功能、灵活性和开放性赢得了用户们的广泛赞誉。在 MySQL 中&#xff0c;有一项特别重要的技术就是存储引擎。在本文中&#xff0c;我们将详细介绍什么是存储引擎&#xff0c;以及MySQL中常见的一些存储引擎。 文…

申请GeoTrust数字证书

GeoTrust介绍&#xff1a; 大家应该都不陌生&#xff0c;作为最老资格的一批国际大牌证书&#xff0c;GeoTrust的品牌效益和使用群体非常庞大。在数字证书领域也是当之无愧的龙头地位&#xff0c;作为Symantec和Digicert的子品牌&#xff0c;证书安全性能方面毋庸置疑&#xf…

IP SSL证书注册流程

使用IP地址申请SSL证书&#xff0c;需要用公网IP地址申请&#xff0c;申请之前确保直接的IP地址可以开放80或者443端口两者选择1个就好&#xff0c;端口不需要一直开放&#xff0c;只要认证的几分钟内开放就可以了&#xff0c;然后IP地址根目录可以上传txt文件。 IP SSL证书认…

Codeforces Round 800 (Div. 1)C. Keshi in Search of AmShZ 反向dijkstra,并附带权值

Problem - C - Codeforces 目录 题意&#xff1a; 思路&#xff1a; 答疑&#xff1a; 1.为什么反向做呢&#xff1f; 2.为什么是到达点的剩余度数呢&#xff1f; 3.相同路是否可以去重&#xff0c;用个set&#xff1f; 4.如果有多条路相同呢&#xff1f; 参考代码&am…

【SecretFlow——SPU基础】

1.SPU基础 SPU设备在SecretFlow中负责执行MPC计算。 2.代码解读 2.1 创建设备 import secretflow as sf # 如果存在secretflow&#xff0c;先关闭已经存在的环境 sf.shutdown() # 初始化四个参与方 sf.init([alice, bob, carol, dave], addresslocal) # 寻找未占用的端口来…

【YOLOV5 入门】——detect.py简单解析模型检测基于torch.hub的检测方法

声明&#xff1a;笔记是毕设时根据B站博主视频学习时自己编写&#xff0c;请勿随意转载&#xff01; 一、打开detect.py&#xff08;文件解析&#xff09; 打开上节桌面创建的yolov5-7.0文件夹里的detect.py文件&#xff08;up主使用的是VScode&#xff0c;我这里使用pycharm…

NLP深入学习:结合源码详解 BERT 模型(三)

文章目录 1. 前言2. 预训练2.1 modeling.BertModel2.1.1 embedding_lookup2.1.2 embedding_postprocessor2.1.3 transformer_model 2.2 get_masked_lm_output2.3 get_next_sentence_output2.4 训练 3. 参考 1. 前言 前情提要&#xff1a; 《NLP深入学习&#xff1a;结合源码详…

PyQt5开发——QCheckBox 复选框用法与代码示例

1. 复选框 QCheckBox 是 Qt 框架中的一个控件&#xff0c;用于在界面中表示一个可以被选中或取消选中的复选框。它通常用于允许用户在多个选项之间进行选择。在 Python 中使用 PyQt 或 PySide 开发 GUI 应用程序时&#xff0c;可以使用 QCheckBox 控件来实现复选框。 2.基本用…