发表在2018年CVPR。

以下对于一些专业术语的翻译可能有些问题。

摘要

  • 有损压缩是一个优化问题,其优化目标是率失真,优化对象是编码器、量化器和解码器(同时优化)。

    Lossy image compression can be formulated as a joint rate-distortion optimization to learn encoder, quantizer, and decoder.

  • 其中,量化器和离散熵预测(discrete entropy estimation)是不可差分的,因此要将压缩系统用CNN替换是很困难的。

  • 作者认为,我们可以根据图像的局部内容,来决定图像中每一个区域的重要性,从而控制每一个区域的码率分配,从而替换掉离散熵估计。

  • 此外,作者还采用了一个二元机(binarizer)来实现量化功能。为了让二元机在BP过程中可差分,作者引入了一个代理函数(proxy function),在BP中代替二元操作。

  • 此时,编码器、解码器、二元机和权重图是可以端到端优化的。

  • 为了实现无损压缩,作者还引入了卷积熵编码器。

  • 实验发现,在低码率图像压缩条件下,算法的SSIM指标超过了JPEG和JPEG 2000。

故事要点

  • 一个图像压缩系统通常需要包括以下三个组分:编码器(encoder),量化器(quantizer)和解码器(decoder)。这才能组成一个编解码器(codec)。

  • JPEG和JPEG 2000为什么不够好呢【有哪些提升空间呢】?首先,它们都依赖于主观设计的图像变换方法,并且需要对各组分独立优化。从效果上,在低码率压缩时二者表现都很差,会产生模糊、振铃和块效应等。

  • CNN为什么有取而代之的潜力呢?因为:复杂的非线性分析和生成变换过程,都可以用几层CNN实现。此外,CNN结构还可以让编码器和解码器联合优化。

  • 尽管基于深度学习的工作很多,但仍有许多问题亟待解决。首先,我们如何解决量化器的不可差分特性?其次,由于我们的学习目标是 同时最小化 压缩率和失真,因此我们要衡量熵率(entropy rate)。如何 连续地近似 用离散码元定义的 离散熵率?

  • 因此,本文的目标就是解决(1)量化和(2)熵率预测问题。

  • 现有的深度学习方法,为每一个位置都分配相同长度的码元。显然,局部信息量(local informative content)是空域变化的,因此比特率也应该是空域变化的。因此作者提出了一个基于内容权重的重要性图(content-weighted importance map)。其输出一个与输入同尺寸的图。每一个点的值是一个非负数值,指示编码长度。此时,重要性图各点求和,就可以作为压缩率的连续预测,进而作为压缩率控制器。此时,我们就不再需要预测熵率了。

  • 二元机很简单:首先对特征图取sigmoid函数,输出大于0.5的则归为1,否则为0。在反向传播时,该二元机被一个代理函数近似。

  • 此时,整体网络就可以联合优化。如图:

  • 注意:在传统方法中,编码是基于上下文(context)的。为此,作者采用了[14]提出的基于上下文的自适应二进制算术编码方法CABAC,进一步压缩二进制码元和重要性图。

本来我是想看一看重要性图怎么生成的。看到上图就知道了,就是简单的CNN网络。因此方法没再细看。

以我的经验,这种方案最难的是训练。我们直接看看作者怎么训练的。

模型训练

前面提到了,我们要同时最小化压缩率和失真。因此损失函数设为两个加权组合:
\[
loss = MSE + \gamma R
\]
其中,MSE是从解码器解码出来的图像,与原图像的\(L_2\)范数。R是码率损失。作者设置了一个阈值\(r\),若重要性图的求和大于\(r\),则损失为和;否则为0。总的损失是batch中每一张图像损失的总和。

在实际训练时,作者先抛开重要性图,让编码器解码器主体先收敛;然后按三个阶段训练,学习率分别是\(1e^{-4}\)、\(1e^{-5}\)和\(1e^{-6}\)。每个阶段都训练到损失函数不再下降为止。

\(\gamma\)和\(r\)根据需要可调。

Paper | Learning convolutional networks for content-weighted image compression的更多相关文章

  1. Paper | U-Net: Convolutional Networks for Biomedical Image Segmentation

    目录 故事背景 U-Net 具体结构 损失 数据扩充 发表在2015 MICCAI.原本是一篇医学图像分割的论文,但由于U-Net杰出的网络设计,得到了8k+的引用. 摘要 There is larg ...

  2. Paper Reading - Convolutional Sequence to Sequence Learning ( CoRR 2017 ) ★

    Link of the Paper: https://arxiv.org/abs/1705.03122 Motivation: Compared to recurrent layers, convol ...

  3. 【论文笔记】Learning Convolutional Neural Networks for Graphs

    Learning Convolutional Neural Networks for Graphs 2018-01-17  21:41:57 [Introduction] 这篇 paper 是发表在 ...

  4. FlowNet: Learning Optical Flow with Convolutional Networks

    作者:嫩芽33出处:http://www.cnblogs.com/nenya33/p/7122701.html 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者同意,必须保留此段声明:必须 ...

  5. Paper | Densely Connected Convolutional Networks

    目录 黄高老师190919在北航的报告听后感 故事背景 网络结构 Dense block DenseNet 过渡层 成长率 瓶颈层 细节 实验 发表在2017 CVPR. 摘要 Recent work ...

  6. Deep Learning 33:读论文“Densely Connected Convolutional Networks”-------DenseNet 简单理解

    一.读前说明 1.论文"Densely Connected Convolutional Networks"是现在为止效果最好的CNN架构,比Resnet还好,有必要学习一下它为什么 ...

  7. How to do Deep Learning on Graphs with Graph Convolutional Networks

    翻译: How to do Deep Learning on Graphs with Graph Convolutional Networks 什么是图卷积网络 图卷积网络是一个在图上进行操作的神经网 ...

  8. 模型压缩-Learning Efficient Convolutional Networks through Network Slimming

    Zhuang Liu主页:https://liuzhuang13.github.io/ Learning Efficient Convolutional Networks through Networ ...

  9. [论文理解] Learning Efficient Convolutional Networks through Network Slimming

    Learning Efficient Convolutional Networks through Network Slimming 简介 这是我看的第一篇模型压缩方面的论文,应该也算比较出名的一篇吧 ...

随机推荐

  1. Windows下同时安装python2和python3如何兼容版本

    引言:因学习需要把python2和python3都安装了,为了避免使用过程中混淆版本在网上找了一些解决方案,亲测可用.方法如下: 分别下载并安装Python2.x和Python3.x. 配置环境变量. ...

  2. [开源] FreeSql 配套工具,基于 Razor 模板实现最高兼容的生成器

    FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...

  3. golang数据结构之快速排序

    具体过程:黑色标记代表左指针,红色标记代表右指针,蓝色标记代表中间值.(依次从左往向下) //QuickSort 快速排序 func QuickSort(left ]int) { l := left ...

  4. 利器: Mac自带的图片工具Sips

    Sips是Mac提供的一个处理图片的命令行工具,与Photoshop这种重量级选手相比,自然功能上要差很多.不过话说回来如大小裁剪.图片翻转和旋转这些日常小功能其实也不必非得动用Photoshop这样 ...

  5. 15-Django开发REST接口

    使用Django开发REST接口 我们以在Django框架中使用的图书以及书中人物案例来写一套支持图书数据增删改查的REST API接口,来理解REST API的开发(前后端均发送JSON格式数据) ...

  6. 3 JDK并发包

    JDK内部提供了大量实用的API和框架.本章主要介绍这些JDK内部功能,主要分为3大部分: 首先,介绍有关同步控制的工具,之前介绍的synchronized就是一种同步控制手段,将介绍更加丰富的多线程 ...

  7. Flask笔记:RESTful

    RESTful是用于前台和后端进行通信的一种规范或者说一种风格,采用的是HTTP和HTTPS协议,数据传输的格式使用的都是JSON,而不是XML.通常,RESTful的URL中只有名词,没有动词,而且 ...

  8. PHP+Ajax点击加载更多列表数据实例

    一款简单实用的PHP+Ajax点击加载更多列表数据实例,实现原理:通过“更多”按钮向服务端发送Ajax请求,PHP根据分页参数查询将最新的几条记录,数据以JSON形式返回,前台Query解析JSON数 ...

  9. java核心技术第三篇之JDBC第一篇

    01.JDBC_两个重要的概念: 1).什么是数据库驱动程序:由数据库厂商提供,面向某种特定的编程语言所开发的一套访问本数据库的类库. 驱动包一般由两种语言组成,前端是:面向某种特定编程语言的语言:后 ...

  10. 微信小程序踩坑日记3——上传照片至服务器

    0. 引言 主要解决将小程序端获取的图片保存在服务器上.亲测可用的服务端脚本. 1. 获取照片 通过wx.chooseImage()方法,获取到图片,使用wx.uploadFile()上传图片. wx ...