更快的神经网络直接从JPEG

更快的神经网络直接从JPEG

神经网络是处理各种行业数据的重要工具,在过去几年里从学术研究领域发展成为工业的基石。雷竞技是骗人的卷积神经网络(CNNs)在从图像中提取信息方面特别有用他们分类识别人脸,或在围棋中评估棋盘位置

在优步,我们使用cnn有各种各样的目的,从探测物体并预测其运动处理拍级的街道图像和卫星图像来改善我们的地图。在使用CNN时,我们关心它完成任务的准确性,在很多情况下,我们也关心它的速度。在这两个例子中,两倍速度的网络可能支持实时检测而不是离线检测,或者能够在数据中心一周的时间内(而不是两周)处理一个巨大的数据集。

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

要理解这种方法,首先让我们看看JPEG编解码器是如何工作的。一旦我们理解了JPEG,如何应用CNN自然就会随之而来。

JPEG是如何工作的

JPEG是一种古老的格式25岁生日在2017年,并仍然是最广泛使用的图像格式之一。在一种常见的配置中,JPEG编码器按照图1(从右到左)所示的步骤进行操作:

图1。JPEG编码过程由几个阶段组成,如图从右向左所示。

从图像的RGB表示(如右所示)开始,图像被转换为表示亮度(亮度)的YCbCr颜色空间y和表示色度(色调)的Cb和Cr通道。然后用一个预定的因子对Cb和Cr通道进行下采样,通常是2或3个因子(在我们的工作中,我们使用因子2)。这个下采样是压缩的第一个阶段:信息丢失的第一个阶段。然后将该表示中的每个通道分成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个周期的训练,在我们的装置中,通过使用只需两到三个小时就可以完成Horovod利用跨越128个NVIDIA Pascal gpu的分布式训练。

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

图4。在这个图中,我们映射了由像素训练的两个网络的前五个错误和每秒图像速度之间的关系。

灰色虚线显示了精确度的基线水平。我们喜欢速度快的网络而不是速度慢的网络,喜欢误差小的网络而不是误差大的网络,所以我们想要找到在这个图中出现在下方和右侧的网络。根据特定的应用程序,我们可能愿意在准确性和速度方面做出权衡。除了RGB像素网络,我们还从YCbCr像素(正方形下的灰色菱形)训练了一个网络,发现它的性能几乎相同,表明颜色空间本身不会显著影响这里的性能。

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

图5。当ResNet-50变短或变薄但仍然使用RGB输入时,可以获得不同的权衡曲线。

在图5中,我们可以看到具有全宽度的较短网络比保持全深度的薄网络表现更好。浅灰色的“移除N个ID块”行形成帕累托前沿,显示了一组“非主导”网络,或那些提供最佳速度与准确性折衷的网络。例如,简单地删除3个ID块可以使我们的图像提升到每秒近300张,但错误也增加了,在这种情况下,误差接近8%。“移除3个ID块”网络位于帕累托前沿,因为没有其他网络比它具有更低的错误和更高的速度。(关于这些网络的更多细节可以在我们的完整研究中找到雷竞技是骗人的.)

现在让我们尝试直接在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顶部的镜像(或不进行一些修改)。总体架构如下图6所示:

图6。在接受DCT输入的网络的一般形式中,T1和T2可以是任意的习得或非习得变换。

在T2是一个子网络(学习变换),Cb路径和Cr路径之间的权值是不共享的。注意,为了按通道方式连接表示,它们必须共享相同的空间大小,因此,例如,对于T1和T2都是恒等变换。

我们考虑T1和T2转换:早期合并路径通过最多使用单层转换,以及那些首先进行更重要处理的转换,后期合并路径

DCT早期合并架构

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

图7。使用DCT表示,并尽可能早地合并数据流(使用单层),结果是帕累托前沿移位,网络更快、更准确。

因为DownSampling模型在第一层减少了输入数据的空间大小,它最终会非常快——大约每秒450张图像,或者是resnet -50速度的两倍多——但它的误差也更高。上采样模型更慢、更准确,因为它丢弃的信息更少。

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

通过在网络早期添加额外的stride-1块,我们创建了一个新的接受域感知(RFA)模型,上采样-RFA。有了这个新模型,现在接受场的逐层增长更加平滑,与ResNet-50差不多,性能也提高了(见图7)。如果上采样是通过学习反褶积而不是像素复制完成的,误差会进一步减少,产生最好的模型:反褶积rfa。

通过对接受域的仔细研究,我们现在发现了一个兼而有之的模型更准确的(6.98%,误差7.35%)而且快1.29倍比基线!沿着相同的DCT早期合并线的其他模型现在形成了新的帕累托前沿,在提供的误差和速度权衡方面领先于以前的模型。

接下来,我们尝试更深入的学习T1和T2变换一下,看看我们能不能把边界推得更远。

DCT后期合并架构

早期合并Y和Cb/Cr通道遵循了典型的、概念上简单的深度学习范式:以某种方式将所有数据聚集在一起,将其交给模型,然后让模型学习如何处理这些数据。这种方法简单而优雅,但是我们能否通过消除不必要的计算来生成更快的模型呢?

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

如下面的图8所示,我们用红色显示这个Late-Concat模型的结果速度和错误率,以及两个相关的网络:一个接受域感知版本,Late-Concat- rfa,和一个通过使用更少的过滤器调整速度的版本,Late-Concat- rfa - thin。正如我们所见,帕累托战线再次向前移动!特别是,我们现在找到了一个模型快1.77倍与普通ResNet相比,错误率几乎相同。

图8。后期concat模型将帕累托前沿再次向前推进。通过允许明显更深的T1比T2-沿着Y路径比Cb/Cr路径的计算量更多-我们获得了最佳的速度/精度权衡。late - concat - rf - thin的速度是普通ResNet-50的1.77倍,但精度基本相同。

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

图9。第一层特征由RGB像素输入的ResNet-50学习。许多边缘探测器主要是黑白的,在亮度空间中工作。许多颜色特征要么在空间上恒定,要么在较低的频率上恒定,可能只是为了将粗略的颜色信息传递到需要的更高层次。我们已经自2012年以来就见过这样的滤镜;我们是否应该一直期望在网络的后期才需要颜色?

明确收益和未来方向

到目前为止,我们所展示的结果是令人鼓舞的,对从业者是有用的——我们已经展示了什么致力于生产快速和准确的网络。为了使这一领域的贡献在科学上有意义,我们还需要查明这些收益和表现为什么他们意识到。在我们的在美国,我们进行消融研究以确定增益来源。

总之,我们发现速度的提高只是由于输入层和后续层上的数据量更小,正如人们所预期的那样。精度的提高主要是由于DCT表示的特定使用,结果证明它对图像分类非常有效。令人惊讶的是,简单的用stride 8 DCT变换替换ResNet-50的第一个卷积层可以获得更好的性能.它甚至比完全相同形状的学习变换效果更好。换句话说,与传统智慧相反,我们发现使用更大的接受域和步长(每个8个)比小的更好,硬编码第一层比学习它更好。当剩余网络在ImageNet上设置了2015年的技术水平,简单地用冻结的DCT替换第一层就可以进一步提高技术水平。

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

如果您的工作是使用神经网络进行图像处理,我们很想知道切换到DCT表示是否对您的任务有好处。如果你想了解更详细的研究结果,看到我们的论文(包括补充信息部分的架构细节),并使用我们的代码库轻松地将DCT表示读取到TensorFlow或PyTorch。

如果你对这类研究感兴趣,可以考虑雷竞技是骗人的申请超级人工智能实验室

评论