博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CNNs在图像压缩领域的运用——An End-to-End Compression Framework Based on Convolutional Neural Networks
阅读量:2420 次
发布时间:2019-05-10

本文共 1958 字,大约阅读时间需要 6 分钟。

转自:

一、引言

之前写的论文笔记中讲的都是基于RNN的图像压缩网络,本文将要讲的是由哈尔滨工业大学Jiang Feng教授(具体的名字我也不知道怎么写)及其团队成员提出的基于CNN的图像压缩网络。该网络是CNN和标准图像算法在图像压缩领域中的首次结合,取得了state of the art 的效果。原论文请戳此传送门:

文章的主要贡献如下:

(1)提出了一种基于CNN的图像压缩方法,该方法包括两个CNN网络(ComCNN、RecCNN)和一个标准图像编码器(可以是JPEG、JPEG2000等),其中ComCNN网络用来根据原始图像生成一个紧密的representation,该representation经过标准编码器编码,RecCNN用来根据解码器的结果重建原始图像。实际上,这篇文章依然属于post-processing方法,通过适当的后处理加工提高图像压缩的效果。

(2)提出了一种新的学习算法实现两个CNN的同时学习,解决了标准图像算法中的量化舍入函数不可微导致的反向传播梯度无法计算的问题。

(3)文章提出的图像压缩网络可以和现有的标准图像算法,例如JPEG、JPEG2000相媲美。

二、文章提出的CNN图像压缩网络的细节

1、图像压缩网络的架构
本文提出的方法的架构如下图所示:

上文已经提到,网络包含两个CNN网络和一个标准编码解码器。ComCNN网络在保证原始结构信息不丢失的情况下生成原始图像的紧密representation,RecCNN作为重建CNN用来巩固解码器decoder的图片的质量,两个网络之间相互配合,共同训练实现高质量的图片压缩。现在来详细介绍一下两个网络的每一层的细节:

1.1 ComCNN

ComCNN一共由三层构成,用来保持图像的结构空间信息,每一层都是一个卷积加上一个Relu非线性激活操作。ComCNN的结构如下:

(1)第一层有64个3×3×c的卷积核,c是图像通道数量,生成64通道的特征图,然后跟上一个Relu非线性激活;

(2)第二层有64个3×3×64的卷积核,用来巩固特征图并下采样,下采样通过设置步长为2实现,然后跟上一个BN加上Relu激活函数;

(3)第三层有c个3×3×64的卷积核,用来建立紧密的representation。

1.2 RecCNN

RecCNN由20层卷积层构成,结构如下:

(1)第一层有64个3×3×64的卷积核,后面跟上Relu非线性激活函数,生成64通道的特征图;

(2)第二至十九层,每层有64个3×3×64的卷积核,后面跟上BN加Relu非线性激活;

(3)最后一层有c个3×3×64的卷积核,BN和残差学习都被加入进来,用来重建原始图片。

2、学习算法

2.1 理论优化目标函数
理论上,网络的优化函数如下:

x是原始图片的输入,θ1和θ2分别是ComCNN和RecCNN的参数,Cr(·)和Re(·)分别代表ComCNN和RecCNN,Co(·)代表标准编码解码器(JPEG,JPEG2000)。网络的训练目标就是优化ComCNN和RecCNN的参数,使的重建的图片和原始图片之间的差距最小。

然而,上述优化函数中的Co(·)有一个量化舍入函数,它是不可微的,所以反向传播过程无法进行,网络无法训练。为了解决上述问题,文章提出新的优化目标函数。

 

2.2 实际优化目标函数

通过控制θ2,计算最优的θ1:

通过控制θ1,计算最优的θ2:

参数的更新方法如下:

(1)更新RecCNN参数θ2:

(2)更新ComCNN参数θ1:

因为Co(·)的不可微性,θ1的更新依然很复杂。为了解决这个问题,文章引入辅助变量并假设Re(θ2尖,·)对辅助变量是单调的,辅助变量:

更新方法:

2.3 训练算法

网络的训练算法如下:

2.4 损失函数

(1)利用均方根误差(MSE),在RecCNN网络参数θ2训练好的情况下,ComCNN网络训练损失函数:

其中N是batch size。

(2)经过ComCNN得到了一系列紧密的representation,用xm尖表示,MSE损失函数如下:

其中res(·)代表RecCNN学习得到的残差。

 

3、训练结果

文章将训练的结果和许多已有的网络结果比较,并开放了源码。代码请戳:。文章的实验结果可用下表表示:

 

4、总结

可以发现,这篇文章我没有写很多叙述性的文字帮助理解,是因为这篇文章的方法确实很容易理解。文章提出了一种CNN和标准编码解码算法相结合的方法,实现了state of the art的结果,说明图像压缩的质量可以依靠后处理加工来进一步提升,为其他基于深度神经网络图像压缩的方法提供了方向。文章提供了源码,后期我将继续学习相关代码,进一步深入理解文章的思想。
 

 

你可能感兴趣的文章
豆瓣已玩烂,来爬点有逼格的 ——IMDB 电影提升你的品位
查看>>
一部刷爆朋友圈的5G短片,看完才知道5G多暖多重要!
查看>>
SDN精华问答 | SDN可以做什么?
查看>>
云评测 | 开发者最有用的开源云监控工具有哪些呢? 这7款神器总有一款适合你!...
查看>>
小团队的微服务之路
查看>>
K8S精华问答 | Kubernetes集群不能正常工作,难道是防火墙问题?
查看>>
5G精华问答 | 什么是5G?5G与LTE有什么关系?
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
微服务精华问答 | 在使用微服务架构时,您面临哪些挑战?
查看>>
Kubernetes 调度器实现初探
查看>>
边缘计算精华问答 | 边缘计算有哪些应用场景?
查看>>
要闻君说:Synergy Research Group首发云基础设施数据,腾讯云v5一把;京东物流发力5G;厉害!阿里挖走贾扬清...
查看>>
数据中台精华问答 | 数据中台和传统数仓的区别是什么?
查看>>
这是一则计算机视觉顶级会议CVPR与腾讯的爆闻,啥?
查看>>
如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
查看>>
【C语言】C语言中常用函数源代码【strncpy ,strncat ,strncmp】
查看>>
【Java】【算法练习】题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。如果是输出yes,不是输出no,数组任意两个数字不相同。
查看>>
【Java】给定一个二叉树和其中的一个节点,请找出中序遍历的下一个节点且返回, 注意:树中的节点不仅包含左右子节点,同时包含父节点的指针。
查看>>
【Java】【多线程】—— 多线程篇
查看>>
【计算机网络】—— TCP/IP篇
查看>>