前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用JPEG制作更快,更准确的神经网络

利用JPEG制作更快,更准确的神经网络

作者头像
LiveVideoStack
发布2021-09-01 16:01:25
4550
发布2021-09-01 16:01:25
举报
文章被收录于专栏:音视频技术音视频技术

Uber AI Labs介绍了一种制作神经网络的方法,该方法通过破解libjpeg并利用JPEG表示来更快,更准确的完成图像处理的任务。本文来自Uber Engineering博客,LiveVideoStack进行了翻译。

文 / Lionel Gueguen, Alex Sergeev, Rosanne Liu, & Jason Yosinski

译 / 元宝

原文 https://eng.uber.com/neural-networks-jpeg/

神经网络是处理各种行业数据的重要工具,在过去几年里从一个学术研究领域发展成为行业的基石。卷积神经网络(CNN)对于从图像中提取信息特别有用,无论是对图像进行分类,识别人脸还是评估围棋棋局的位置。

在Uber,我们将CNNs用于各种用途,从检测物体和预测其运动到处理街道级别和卫星图像的千兆字节,以改善我们的地图。在使用CNN时,我们关心它完成任务的准确程度,在很多情况下,我们也关心它的速度。在这两个示例中,一个是网速是原来的两倍的网络可以实现实时检测而不是离线检测,或者能够在一周的数据中心时间而不是两周内处理庞大的数据集。

在本文中,我们描述了在NeurIPS 2018上提出的一种方法,通过破解libjpeg并利用JPEG(流行的图像格式)已经使用的内部图像表示,同时使CNNs更小、更快、更准确。这项工作的早期版本于2018年6月作为ICLR研讨会海报提出。本文还将讨论与网络架构设计相关的频率空间和颜色信息的惊人见解。

为了理解这种方法,首先让我们看一下JPEG编解码器的工作原理。一旦我们理解了JPEG,我们就可以很自然地应用CNN。

JPEG的工作原理

JPEG是一种旧格式,在2017年庆祝了它诞生25周年,并且它仍然是最广泛使用的图像格式之一。在其常见配置中,JPEG编码器执行图1中的步骤,如下所示,从右到左:

图1. JPEG编码过程包含几个阶段,此处从右到左显示。

从图像的RGB表示开始(如右图所示),图像被转换为表示亮度(亮度)的YCbCr颜色空间-Y,以及表示色度(色调)的Cb和Cr通道。然后,通过预定因子(通常是两个或三个)对Cb和Cr通道进行下采样(在我们的工作中,我们使用两个因子)。这种下采样是压缩的第一阶段:信息丢失的第一阶段。然后,将该表示中的每个信道分成8×8块并通过离散余弦变换(DCT),变换到类似于傅立叶变换的频率空间。DCT本身是无损且可逆的,将8×8空间块转换为64个通道。

然后量化系数,这是一个有损的过程,包含第二压缩阶段。量化由JPEG质量参数控制,质量设置越低,压缩越严重,文件越小。量化阈值是特定于每个空间频率,并且经过精心设计的:对低频的压缩比高频率更少,因为人眼对宽频区域上的细微误差比对高频信号幅度的变化更敏感。然后,通过霍夫曼编码的变体无损地压缩量化的DCT系数(整数)并将其存储在JPEG文件中,如上面图1中所示的image.jpg。

JPEG解码过程与JPEG编码过程完全相反。所有可逆步骤都被精确地反转,两个有损步骤——量化和下采样——近似反转以产生RGB图像。对于上下文,此过程可能已运行十次,只是为了解码和显示此网页上显示的图像!

假设我们想在JPEG图像上训练一个神经网络。我们可以将JPEG图像解压为RGB,并将其输入神经网络的第一层,如下图2所示:

图2.在典型的训练过程中,JPEG图像被解压为RGB,然后被送入神经网络。

现在我们了解了JPEG算法,难道我们不能轻易做得更好吗?神经网络必须处理由RGB像素阵列表示的图像。许多神经网络似乎学习了第一层中从像素空间到频率空间的转换。因此,如下图3所示,为什么不直接将DCT表示输入网络,跳过过程中的一些早期层呢?

图3.我们提出的过程:仅将JPEG图像解压到DCT表示阶段,然后将此表示直接提供给神经网络。正如我们所看到的,频率表示允许我们跳过网络的第一部分,节省计算,并且与使用原始像素相比,可以使网络具有更高的精度!

这正是我们在下面和在论文中详细介绍的方法:我们修改libjpeg直接将DCT系数输出到TensorFlow(如果您想自己尝试,可以使用我们的代码),并根据此表示直接训练网络。结果证明,只要有几个细节是正确的,它就会非常有效!

基线

在我们的研究中,我们从JPEG表示中来训练网络,希望生成的网络既准确又快速。我们考虑了几个图像处理任务,但是现在我们选择尝试从ImageNet数据集中分类图像。我们使用的所有网络都基于残余网络ResNet-50,并且所有网络都经过了90个epoch的训练,这可以通过使用Horovod在128个NVIDIA Pascal gpu上进行分布式训练,只需两到三个小时就可以在我们的设置中完成。

首先,我们以最标准的方式——从RGB像素——训练了一个普通的ResNet-50,并发现它达到了大约7.4%的前五个误差,并且可以在NVIDIA Pascal GPU上每秒超过200个图像进行推断。在下面的图4中,我们将该网络描述为一个小的黑色方块,它位于一个跟踪错误率和速度之间关系的图中:

图4.在此图中,我们绘制了从像素训练的两个网络中每秒图像的前五个误差和速度之间的关系。

灰色虚线显示了这个基线的准确度。相对于速度较慢且具有较少误差的网络,我们更喜欢速度更快的网络,因此我们希望找到在图中出现在右下方的网络。根据具体应用,我们可能愿意在准确性和速度方面进行权衡。除了RGB像素网络之外,我们还从YCbCr像素(正方形下方的灰色菱形)训练了一个网络,发现它的表现几乎相同,表明色彩空间本身并没有显着影响性能。

由于我们的目标是快速准确的网络,我们首先尝试使ResNet-50更短(从底部删除块)或更薄(每层使用更少的通道)。虽然这会使网络更快,但我们会失去多少精确度?在下面的图5中,一些较短和较薄的网络显示了仍然利用RGB像素输入的ResNet-50的简单突变可用于我们的权衡曲线:

图5.使ResNet-50更短或更薄但仍使用RGB输入时,可以使用不同的权衡曲线。

在图5中,我们可以看到具有全宽度的较短网络比保持全深度的薄网络表现更好。浅灰色的“删除N个ID块”行形成了Pareto前端,显示了一组“非主导”网络,或那些提供最佳速度与准确性权衡的网络。例如,简单地删除三个ID块可以使我们的图像每秒近300张图像,但错误也会增加,在这种情况下会增加近8%。“删除3个ID块”网络位于Pareto前端,因为没有其他网络具有比它更低的错误和更高的速度。(有关这些网络的更多详细信息,请参阅我们的完整研究论文。)

现在让我们尝试直接在JPEG解码器中提供的DCT系数上训练网络,看看是否可以将整个帕累托向前推进。

训练DCT输入网络

要从DCT输入进行训练,我们必须首先考虑不同输入大小的问题。

香草ResNet-50设计用于具有形状(224,224,3)的输入——宽度和高度为224像素和3个颜色通道(RGB)。我们的DCT系数具有非常不同的形状:Y通道沿每个空间维度小8倍但具有64个频率通道,从而产生输入形状(28,28,64)。Cb和Cr通道小16倍(由于额外的2倍下采样),因此它们各自具有形状(14,14,64)。我们该如何处理这些不寻常形状的表示?

假设我们没有完全忽略任何一个输入,那么任何提出的架构的基本要求是在它最终做出分类决策之前,组合Y和Cb/Cr。我们将考虑的所有体系结构都具有以下形式:将变换或子网络T1应用于Y,将另一个变换或子网络T2应用于Cb和Cr,将通道顺序连接到结果,并将连接后的表示提供给一个ResNet-50顶部的ResNet镜像,无论是否进行一些修改。总体架构如图6所示:

图6.在用于进行DCT输入的网络的一般形式中,T 1和T 2可以是任意学习或非学习变换。

在T2是子网络(学习变换)的情况下,权重在Cb和Cr路径之间是不共享的。注意,为了按通道连接表示,它们必须共享相同的空间大小,因此,例如,T1和T2不可能同时是标识转换。

我们考虑的两个系列T1和T2的转换:一个是通过最多使用单层转换来尽早合并路径,另一个是先进行更重要的处理、然后合并路径。

DCT早期合并架构

使得Y和Cb/Cr的不同空间大小匹配的最简单方法是对大表示(Y)进行下采样,或对小表示(Cb/Cr)进行上采样。我们尝试两者并将结果添加到我们的图中,如蓝色“DownSampling”和“UpSampling”圆圈,如下图7所示:

图7.使用DCT表示并尽可能早地合并数据流 - 使用单个层 - 导致Pareto前移,同时具有更快和更准确的网络。

由于DownSampling模型减小了第一层输入数据的空间大小,因此最终速度非常快——每秒约450幅图像,或者是ResNet-50速度的两倍以上——但其误差也要高得多。UpSampling模型更慢、更准确,因为它丢弃的信息更少。

我们最初对UpSampling模型中的错误高于基线ResNet-50感到有些失望。我们假设这个问题的根源是一个微妙的问题:DownSampling和UpSampling模型中早期层的单元接收域太大。CNN中一个单元的感受域是它可以看到的输入像素的数量,或者可能影响其激活的输入像素的数量。事实上,在研究了网络中每一层的步幅和接受域后,我们发现在普通ResNet-50的中途,单位的接受域约为70。就像通过我们幼稚地组装起来的UpSampling模型一样,接受域已经是110px ,因为我们的DCT输入层的[步幅,接受域]是[8,8],而不是典型的典型[1,1]像素输入层。直观上,我们要求网络了解110px宽的视觉概念,但没有给它足够的层数或计算能力来做到这一点。(更多讨论请看论文的第3节和图4。)

我们通过在网络早期添加额外的stride-1块创建了一个新的感知域感知(RFA)模型UpSampling-RFA。通过这种新模型,接受域逐层增长更加平滑,与ResNet-50大致匹配,并且性能得到提高(见图7)。如果通过学习的反卷积而不是像素复制来完成上采样,则误差会进一步降低,从而产生最佳模型:解卷积-RFA。

通过对接受域的小心处理,我们现在发现了一种模型,它不仅更准确(6.98%的误差与7.35%的误差相比),而且比基线快1.29倍!沿着相同的DCT Early Merge系列的其他车型现在形成了新的Pareto前端,在他们提供的错误和速度权衡方面占据了先前车型的主导地位。

接下来,我们尝试更深入的学习T1和T2变换,看看我们是否可以进一步推动前沿。

DCT Late Merge架构

早期合并Y和Cb / Cr通道遵循典型的、概念上简单的深度学习范例:以某种方式将所有数据集合在一起,将其提供给模型,并让模型学习如何处理它。这种方法简单易用,但我们可以通过消除不必要的计算来生成更快的模型吗?

经过一些实验,我们发现,为了获得较高的精度,需要允许亮度分支进行多层计算,但色度路径可以提供较少的计算层,而不会造成损害。换句话说,将Y通道放入网络的底部,然后在中间注入Cb/Cr信息,就像从底部的三个通道开始一样,但是,当然,前者节省了计算量。

如下图8所示,我们用红色显示了这个Late-Concat模型的结果速度和错误率,以及两个相关网络:感知字段感知版本,Late-Concat-RFA以及针对速度调整的版本使用较少的过滤器,Late-Concat-RFA-Thinner。我们可以看到,帕累托前沿再次向前移动!特别是,我们现在发现一个模型比香草ResNet快1.77倍,并且具有几乎相同的误差率。

图8. Late-Concat模型再次推动帕累托前沿。与Cb/Cr路径相比,通过允许沿Y路径显着更深的T1比T2更多的计算,我们获得了最佳的速度/精度权衡。Late-Concat-RFA-Thinner比香草ResNet-50快约1.77倍,精度大致相同。

有趣的是,颜色信息直到后来才需要在网络中与从亮度中学到的更高层次的概念相结合。在这一点上,我们只能推测,但可能是学习中等层次的概念(例如:草或狗毛)需要多层处理精细亮度边缘到纹理之前与空间上不太精确的颜色信息组合(例如:绿色或棕色)。也许我们可以从ResNet-50从RGB像素学到的更高频率的黑白边缘和更低频率(或恒定)的颜色检测器一直预期这个结果(图9)。

图9. ResNet-50使用RGB像素输入学习的第一层功能。许多边缘检测器主要是黑色和白色,在亮度空间中操作。许多颜色特征在空间或较低频率上是恒定的,并且可以仅用于将粗糙的颜色信息传递到需要它的更高层。自2012年以来,我们已经看过这样的过滤器;我们是否应该一直期待在网络后期才能获得颜色呢?

精确定位收益和未来方向

到目前为止,我们所展示的结果对于从业者来说是令人鼓舞和有用的——我们已经展示了什么能够产生快速准确的网络。为了使这一领域的科学贡献有意义,我们还需要确定这些成果,并说明它们为什么被实现。在我们的论文中,我们进行消融研究以确定收益来源。

综上所述,我们发现速度的提高仅仅是由于输入层和后续层上的数据量更小,这是可以预料的。精度的提高主要是由于DCT表示的具体使用,它在图像分类中工作得非常好。令人惊讶的是,简单地用步幅8 DCT变换替换ResNet-50的第一个卷积层会产生更好的性能。它比完全相同形状的学习变换更有效。换句话说,与传统观点相反,我们发现使用较大的接受域和步幅(每8个)比小的更好,并且第一层的硬编码比学习它更好。2015年,当残余网络在ImageNet上的成为最新技术水平时,简单地用冻结的DCT替换第一层将进一步改善现有技术水平。

上述结果表明的未来方向包括评估不同的频率空间表示,不同大小的DCT,以及检测、分割和其他图像处理任务的性能。

如果您使用神经网络处理任何图像处理,我们希望听到切换到DCT表示是否能像这里一样对您的任务有利。如果您想要对这些结果的更详细的描述,请参阅我们的论文(包括“补充信息”部分中的架构细节),并使用我们的代码库轻松地将DCT表示读取到TensorFlow或PyTorch中。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LiveVideoStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档