近年来,深度学习在计算机视觉领域已经占据主导地位,不管是在图像识别仍是超分辨重现上,深度学习已成为图片研究的重要技术;如今深度学习技术已进入图片压缩领域。程序员
本文将和你们分享如何使用深度学习卷积神经网络技术设计图像压缩算法。
当前主要图片压缩算法
说到图像压缩算法,目前市面上影响力比较大的图片压缩技术是
WebP和BPG
WebP:谷歌在2010年推出的一款能够同时提供有损压缩和无损压缩的图片文件格式,其以VP8为编码内核,在2011年11月开始能够支持无损和透明色功能。目前facebook、Ebay等网站都已采用此图片格式。算法
BPG:知名程序员、ffmpeg和QEMU等项目做者Fabrice Bellard推出的图像格式,它以HEVC为编码内核,在相同体积下,BPG文件大小只有JPEG的一半。另外BPG还支持8位和16位通道等等。尽管BPG有很好的压缩效果,但是HEVC的专利费很高,因此目前的市场使用比较少。网络
就压缩效果来讲,
BPG更优于WebP,可是BPG采用的HEVC内核所带来的专利费,致使其没法在市场进行大范围使用。在这种状况下,运用深度学习来设计图片压缩算法就应运而生。
如何用深度学习技术设计图片压缩算法
经过深度学习技术设计压缩算法的目的之一是,
设计一个比目前商用图片压缩
更优的
压缩算法
,同时借助于深度学习技术还能够设计更简洁的端到端算法
。
在图片、视频压缩领域,
主要用到的
深度学习技术是卷积神经网络
(CNN)
。
如图
1
所显示,像搭积木同样,一个卷积神经网络由卷积、池化、非线性函数、归一化层等模块组成。最终的输出根据应用而定,如在人脸识别领域,咱们能够用它来提取一串特征来表示一幅人脸图片
,
而后经过比较特征的异同进行人脸识别。

图1卷积神经网络示意图框架
(来源http://blog.csdn.net/hjimce/article/details/47323463)函数
用深度学习设计的图片压缩
完整的深度学习图片压缩框架包括
CNN编码
器
、量化、反量化、
CNN解码
器
、熵编码
、
码字估计、码率
-失真优化
等几个模块。编码
器
的做用是将图片转换为压缩特征,解码
器
就是从压缩特征恢复出原始图片。其中编码
器
和解码
器
,能够用卷积、池化、非线性等模块进行设计和搭建。
(图
2 用深度学习进行图片压缩示意图)
如何评判图片压缩算法
在深刻技术细节前,咱们先来了解一下如何评判压缩算法。评判一个压缩算法好坏的重要指标有
三个
:
PSNR(Peak Signal to Noise Ratio)、BPP(bit per pixel)和MS-SSIM(multi-scaleSSIM index)
。
咱们知道,
任何数据在计算机内都是以比特形式存储,所需比特数越多则占据的存储空间越大。
PSNR 用来评估解码后图像恢复质量,BPP用于表示图像中每一个像素所占据的比特数,MS-SSIM 值用来衡量图片的主观质量,
简单
来讲在同等的
Rate / BPP 下 PSNR
更高
,
恢复质量越好,
MS-SSIM 更高,主观感觉越好。
举个例子,假设长宽为
768*512 的图片大小为1M,利用深度学习技术对它编码,经过编码网络后产生包括 96*64*192 个数据单元的压缩特征数据,若是表示每一个数据单元平均须要消耗1个比特,则编码整张图须要 96*64*192 个比特。通过压缩后,编码每一个像素须要的比特数为(96*64*192)/(768*512)=3,因此 BPP 值为 3 bit/pixel,压缩比为 24:3=8:1。这意味着一张1M的图,经过压缩后只须要消耗0.125M 的空间,换句话说,以前只能放1张照片的空间,如今能够放8张。
如何用深度学习作压缩
谈到如何用深度学习作压缩,仍是用刚才那个例子。将一张大小
768*512 的三通道图片送入编码网络,进行前向处理后,会获得占据 96*64*192 个数据单元的压缩特征。有计算机基础的读者可能会想到,这个数据单元中可放一个浮点数
、
整形数
、
或者是二进制数。那到底应该放入什么类型的数据?从图像恢复角度和神经网络原理来说,若是压缩特征数据都是浮点数,恢复图像质量是最高的。但一个浮点数占据
32个比特位,
按
以前讲的比特数
计算公式
为
(
96*64*192*32)/(768*512)=96,压缩后反而每一个像素占据比特从 24 变到 96,非但没有压缩,反而增长了,这是一个糟糕的结果,
很显然浮点数不是好的选择
。
为了设计靠谱的算法,咱们使用一种称为
量化
的技术,它的目的是将浮点数转换为整数或二进制数,最简单的操做是去掉浮点数后面的小数,浮点数变成整数后只占据
8比特,则表示每一个像素要占据24个比特位。与之对应,在解码端,可使用
反量化
技术将变换后的特征数据恢复成浮点数,如给整数加上一个随机小数,这样能够必定程度上下降量化对神经网络精度的影响,从而提升恢复图像的质量。
即便压缩特征中每一个数据占据
1个比特位,但是 8:1 的压缩比在咱们看来并非一个很理想的结果。那如何进一步优化算法?再看下BPP的计算公式。假设每一个压缩特征数据单元占据1个比特,则公式可写成:(96*64*192*1)/(768*512)=3,计算结果是3 bit/pixel,从压缩的目的来看,BPP 越小越好。在这个公式中,分母由图像决定,能够调整的部分在分子,分子中 9六、6四、192 这三个数字与网络结构相关。很显然,当咱们设计出更优的网络结构,这三个数字就会变小。
那
1与哪些模块相关?
1表示每一个压缩特征数据单元平均占据1个比特位,量化会影响这个数字,但它不是惟一的影响因素,它还与码率控制和熵编码有关。码率控制的目的是在保证图像恢复质量的前提下,让压缩特征数据单元中的数据分布尽量集中、出现数值范围尽量小,这样咱们就能够经过熵编码技术来进一步下降1这个数值,图像压缩率会进一步提高。
用深度学习作视频压缩,能够看做是在深度学习图片压缩基础上的扩展,可结合视频序列帧间的光流等时空信息,在单张压缩的基础上,进一步下降码率。
深度学习图片压缩的优点
图鸭科技经过深度学习技术研发的图片压缩——
TNG 在内部的测试上已经超过 WebP 与BPG,下图是在 kodak24 标准数据集上测评结果,分别是 PSNR 值与 MS-SSIM 值。

图3图4在kodak24标准数据集上测评结果,上图为 PSNR 结果,下图为 MS-SSIM 的结果学习
熟悉图像压缩的朋友能够直接经过
PSNR 和 MS-SSIM 值看出: TNG
的
PSNR 值与 MS-SSIM值明显高于 WebP、jpeg2000 和 jpeg;且 TNG 在高码字的状况下 PSNR 值高于 BPG,且其MS-SSIM 值基本一致高于BPG。
在低码字状况下TNG与WebP压缩效果对比

图
5图6
低码字状况下
TNG与WebP压缩效果对比,
图
5 TNG,图6 WebP
相比
TNG,WebP 尽管保留了更多的细节,可是其失真更多,不利于后期恢复。而TNG采用了保边滤波的方法,让其失真更少,总体图像效果优于WebP。
在高码字状况下TNG与BPG对比



图
7图8
高
码字状况下
TNG与
BPG
压缩效果对比
,
图
7 TNG 图8 BPG
上
面两幅
图是高码字的状况,在实际的测试中,
BPG会出现
上图所示的颜色失真状况;
而反观
TNG其基本不会出现这类的失真情况。
这是由于
BPG在编码压缩时尽管图片
时,其
YUV通道是分开进行编解码,产生了一些色差。
而
TNG在编码时考虑到了总体图片的状况,采用了同一编码,也就避免了上述的状况。
在低码字的状况下TNG与BPG的对比



图9
图10
低
码字状况下
TNG与
BPG
压缩效果对比
,
图
9 TNG 图10 BPG
在低码字的状况下,
BPG压缩图片中出现了伪轮廓和块效应等问题,整个图片的连续性比较差;而TNG的图片连续性和物体的轮廓保持的更好。
图片压缩的使用领域能够说的极其普遍了,从社交应用、新闻客户端到游戏等领域,能够说有图片的地方就须要图片压缩。使用更先进的图片压缩技术,能够帮助大量使用图片的企业
节省大量图片带宽成本,且能帮助用户节省图片流量,减小加载图片所需时间。
总结
整体而言,借助于深度学习设计图像压缩算法是一项很是具备前景但也很是具备挑战性的技术。
深度学习技术图片压缩
能够
使
你们
在
全面
高清屏的
时
代
有
更
优质
的
视觉体验
,
同时
在
游戏
、
空间
图像
传感
等
领域
,
深度学习图片压缩技术能够帮助图片达到
更
高
分辨率,
更
小
存储
空间
,
从而为用户提供更好的视觉体验。
这里附上
TNG的测试连接:http://www.tucodec.com/picture/index你们能够自行进行测试(建议在PC端进行测试)。感兴趣的朋友也能够在测试完后,下载压缩后图片和二进制文件,下载安装解码器,来进行压缩图片的恢复处理。