神经网络等数据驱动算法席卷全球。 它们的发展有几个原因,包括廉价而强大的设备和海量数据。 神经网络目前处于与“认知”任务相关的所有事物的前沿,例如图像识别、自然语言理解等。 但它们不应仅限于此类任务。 本文讨论如何使用神经网络压缩图像,使用残差学习。 本文中介绍的方法比标准编解码器更快更好。 方案、方程式,当然还有下切测试的表格。
本文基于
什么是图像压缩及其工作原理?
图像压缩是转换图像以使其占用更少空间的过程。 简单地存储图像会占用大量空间,这就是为什么有 JPEG 和 PNG 等旨在减少原始图像大小的编解码器的原因。
如您所知,有两种类型的图像压缩: 无损的 и 有损失. 顾名思义,无损压缩可以保留原始图像数据,而有损压缩会在压缩过程中丢失部分数据。 例如,JPG 是有损算法 [大约。 翻译。 - 基本上,我们也不要忘记无损 JPEG],而 PNG 是一种无损算法。
无损和有损压缩的比较
请注意,右侧图像中有很多块状伪像。 这是丢失的信息。 相似颜色的相邻像素被压缩为一个区域以节省空间,但有关实际像素的信息丢失了。 当然,JPEG、PNG 等编解码器中使用的算法要复杂得多,但这是有损压缩的一个很好的直观示例。 无损压缩固然好,但无损压缩文件占用磁盘空间大。 有更好的方法可以在不丢失大量信息的情况下压缩图像,但它们非常慢并且许多使用迭代方法。 这意味着它们不能在多个 CPU 或 GPU 内核上并行运行。 这种限制使它们在日常使用中完全不切实际。
卷积神经网络输入
如果需要计算某些东西并且计算可以是近似的,请添加
建筑
作者提出了一个双网络。 第一个网络将图像作为输入并生成紧凑表示 (ComCNN)。 该网络的输出随后由标准编解码器(例如 JPEG)处理。 在经过编解码器处理后,图像被传递到第二个网络,该网络“修复”来自编解码器的图像以尝试返回原始图像。 作者将这个网络命名为 Reconstructive CNN (RecCNN)。 与 GAN 一样,这两个网络都是迭代训练的。
ComCNN 紧凑表示传递给标准编解码器
RecCNN。 ComCNN 输出按比例放大并馈送到 RecCNN,后者将尝试学习剩余部分
编解码器输出按比例放大,然后传递给 RecCNN。 RecCNN 将尝试渲染尽可能接近原始图像的图像。
端到端图像压缩框架。 Co(.) 是一种图像压缩算法。 作者使用了 JPEG、JPEG2000 和 BPG
什么是余数?
其余部分可以被认为是“改进”编解码器正在解码的图像的后处理步骤。 拥有大量关于世界的“信息”,神经网络可以做出关于修复什么的认知决策。 这个想法是基于
损失函数
使用两个损失函数是因为我们有两个神经网络。 其中第一个是 ComCNN,标记为 L1,定义如下:
ComCNN 的损失函数
说明
这个方程看似复杂,其实是标准的(均方根误差) MSE. ||² 表示它们所包围的向量的范数。
公式 1.1
Cr 表示 ComCNN 的输出。 θ表示ComCNN参数的可学习性,XK是输入图像
公式 1.2
Re()
代表 RecCNN。 这个等式简单地将等式1.1的意思传达给RecCNN。 θ 表示 RecCNN 可训练参数(顶上的帽子表示参数是固定的)。
直观定义
方程 1.0 将导致 ComCNN 改变其权重,以便在使用 RecCNN 重新创建时,最终图像看起来与输入图像尽可能相似。 第二个 RecCNN 损失函数定义如下:
公式 2.0
说明
同样,该函数可能看起来很复杂,但这在很大程度上是一个标准的神经网络损失函数 (MSE)。
公式 2.1
Co()
表示编解码器输出,顶部带帽子的 x 表示 ComCNN 输出。 θ2 是 RecCNN 可训练参数, res()
只是 RecCNN 的残差输出。 值得注意的是,RecCNN 是在 Co() 和输入图像之间的差异上训练的,而不是在输入图像上训练的。
直观定义
方程式 2.0 将导致 RecCNN 改变其权重,以便输出看起来与输入图像尽可能相似。
培训计划
模型是迭代训练的,比如
测试
作者将他们的方法与现有方法(包括简单的编解码器)进行了比较。 他们的方法比其他方法执行得更好,同时在适当的硬件上保持高速。 此外,作者尝试仅使用两个网络中的一个并注意到性能下降。
结构相似性指数比较 (SSIM)。 高值表示与原件更相似。 粗体表示作者的工作结果
结论
我们研究了一种将深度学习应用于图像压缩的新方法,并讨论了在图像分类和语言处理等“一般”任务之外的任务中使用神经网络的可能性。 这种方法不仅不逊色于现代要求,而且可以让您更快地处理图像。
学习神经网络变得更加容易,因为我们专门为 Habravchan 制作了促销代码 哈勃, 在横幅上显示的折扣基础上额外提供 10% 的折扣。
更多课程
数据分析课程 开发运营课程 职业网络开发人员 从零开始的职业 iOS 开发者 从零开始的职业 Android 开发者 从零开始的职业 Java 开发人员 JavaScript课程 机器学习课程 “数据科学的数学和机器学习”课程 进阶课程《机器学习Pro+深度学习》
推荐文章
如何在没有在线课程的情况下成为数据科学家 450 个免费的常春藤盟校课程 如何连续 5 个月每周 9 天学习机器学习 数据分析师的收入是多少:2020 年俄罗斯和国外的薪资和职位空缺概览 采矿业中的机器学习和计算机视觉
来源: habr.com