深度学习图像视频压缩技术

写在文章前面,刚刚发现有不少小伙伴收藏转发了咱们的图片简史,因此我就又来了,今天给你们带来的是办公室另外一位大牛写的关于图片压缩和深度学习的文章。但愿你们喜欢哈~算法

说到图像压缩算法,最典型的有JPEG、JPEG2000等。微信

JPEG压缩与JPEG2000压缩对比

而其中JPEG 采用的是以离散余弦转换(Discrete Cosine Transform) 为主的区块编码方式(如图2)。JPEG2000改用以小波转换(Wavelet Transform) 为主的多解析编码方式。小波转换的主要目的是将图像的频率成分抽取出来。网络

图2JPEG编码框图

在有损压缩下,JPEG2000一个比较明显的优势是没有JPEG压缩中的马赛克失真效果。JPEG2000的失真主要是模糊失真。模糊失真产生的主要缘由是高频量在编码过程当中必定程度的衰减。在低压缩比情形下(好比压缩比小于10:1),传统的JPEG图像质量有可能比JPEG2000好。JPEG2000在高压缩比的情形下,优点才开始明显。框架

总体来讲,和传统的JPEG相比,JPEG2000仍然有很大的技术优点,一般压缩性能大概能够提升20%以上。通常在压缩比达到100:1的情形下,采用JPEG压缩的图像已经严重失真并开始难以识别了,但JPEG2000的图像仍可识别。函数

深度学习技术设计压缩算法的目的性能

用深度学习技术设计压缩算法的一个目的是学习一个比离散余弦变换或小波变换更优的变换,同时用深度学习技术也能够设计更简洁的端到端算法,这样能够设计出比JPEG2000等商用算法性能更优的算法。学习

在图片或视频压缩领域,使用最多的深度学习技术是卷积神经网络(CNN),先简单介绍卷积神经网络。如图3所显示,像搭积木同样,一个卷积神经网络能够由卷积、池化、非线性函数、归一化层等模块组成。最终的输出根据应用而定,如在人脸识别领域,咱们能够用它来提取一串数字(专业术语称为特征)来对一幅人脸图片进行表示。而后能够经过比较特征的异同,来进行人脸识别。优化

图3卷积神经网络示意图 (来源http://blog.csdn.net/hjimce/article/details/47323463)

那如何利用卷积神经网络作压缩?如图4所示,完整的框架包括CNN编码网络、量化、反量化、CNN解码、熵编码等几个模块。编码网络的做用是将图片转换为压缩特征,解码网络就是从压缩特征恢复出原始图片。其中编码网络和解码网络,能够用卷积、池化、非线性等模块进行设计和搭建。编码

图4用深度学习进行图片压缩示意图

如何评判压缩算法.net

在深刻技术细节前,咱们先来了解一下如何评判压缩算法。评判一个压缩算法好坏的重要指标有两个:一个是每一个像素占据的比特位数(bit per pixel, BPP),一个是PSNR。咱们知道,数据在计算机中以比特形式存储,所须要的比特数越多,则占据的存储空间越大。BPP用于表示图像中每一个像素所占据的比特数,如一张RGB三通道图,表示每一个像素须要消耗24个比特。PSNR用来评估解码后图像的恢复质量,简单理解就是PSNR越高,恢复质量越好。

咱们举个例子,假设长宽为768512的图片大小为1M,咱们利用深度学习技术对它编码,经过编码网络后产生包括9664192个数据单元的压缩特征数据,若是表示每一个数据单元平均须要消耗1个比特,则编码整张图须要9664192个比特。通过压缩后,编码每一个像素须要的比特数为(9664192)/(768512)=3,因此BPP值为3bit/pixel,压缩比为24:3=8:1。这意味着一张1M的图,经过压缩后只须要消耗0.125M的空间,换句话说,以前只能放1张照片的空间,如今能够放8张。

如何用深度学习作压缩

谈到如何用深度学习作压缩,仍是用刚才那个例子。将一张大小768512的三通道图片送入编码网络,进行前向处理后,会获得占据9664192个数据单元的压缩特征。有计算机基础的读者可能会想到,这个数据单元中可放一个浮点数,整形数,或者是二进制数。那问题来了,到底应该放入什么类型的数据?从图像恢复角度和神经网络原理来说,若是压缩特征数据都是浮点数,恢复图像质量是最高的。但一个浮点数占据32个比特位,那以前讲的比特数计算公式变为(966419232)/(768*512)=96,压缩后反而每一个像素占据比特从24变到96,非但没有压缩,反而增长了,这是一个糟糕的结果,很显然浮点数不是好的选择。

因此为了设计靠谱的算法,咱们使用一种称为量化的技术,它的目的是将浮点数转换为整数或二进制数,最简单的操做是去掉浮点数后面的小数,浮点数变成整数后只占据8比特,则,表示每一个像素要占据24个比特位。与之对应,在解码端,可使用反量化技术将变换后的特征数据恢复成浮点数,如给整数加上一个随机小数,这样能够必定程度上下降量化对神经网络精度的影响,从而提升恢复图像的质量。

即便压缩特征中每一个数据占据1个比特位,但是8:1的压缩比在咱们看来并非一个很理想的结果。那如何进一步优化算法?咱们再看下BPP的计算公式。假设每一个压缩特征数据单元占据1个比特,则公式可写成:,计算结果是3bit/pixel,从压缩的目的来看,BPP越小越好。在这个公式中,分母由图像决定,咱们能够调整的部分在分子,分子中9六、6四、192这三个数字与网络结构相关。很显然,当咱们设计出更优的网络结构,这三个数字就会变小。

那1与哪些模块相关?1表示每一个压缩特征数据单元平均占据1个比特位,量化会影响这个数字,但它不是惟一的影响因素,它还与码率控制和熵编码有关。码率控制的目的是在保证图像恢复质量的前提下,让压缩特征数据单元中的数据分布尽量集中,出现数值范围尽量小,这样咱们就能够经过熵编码技术来进一步下降1这个数值,图像压缩率会进一步提高。

用深度学习作视频压缩,能够看做是在深度学习图片压缩的基础上扩展,可结合视频序列帧间的光流等时空信息,在单张压缩的基础上,进一步下降码字。

在kodak24标准数据集上测评结果,上图为PSNR,下图为MS—SSIM的结果

总结

总的来讲,用深度学习来设计视频和图像压缩算法是个很是具备前景但也是很是具备挑战性的技术。目前,其已经在人脸识别等领域证实了它的强大能力,有理由相信在不久的未来,深度学习技术将为图像视频压缩领域带来更大的突破。现阶段咱们公司自主研发的算法已经超过商用的JPEG2000。 如图6和图7

图 6 在同等压缩率下压缩视觉效果对比。上图为咱们所提出的算法,下图为JPEG2K算法。在纹理细节上,咱们的算法能获得更好的效果。

图 7 在同等压缩率下,对复杂图像压缩视觉效果对比。上图为咱们所提出的算法,下图为JPEG2K算法。在细节上,咱们的算法能获得更好的效果。

关注图鸭微信公众号(微信搜索:tucodec) 联系咱们

相关文章
相关标签/搜索