本文来自图鸭科技团队的投稿,他们用深度学习技术设计、优化图片压缩算法,在保证图像画质的情况下能节省55%带宽。本文将介绍实现方法及测试对比。

随着互联网的发展,人们对高清图片的需求也在不断增加,在保证图像画质的情况下最大程度降低图像体积已成为行业发展趋势。

目前比较出名的图像压缩格式是:WebP与HEIF。

  • WebP:谷歌旗下的一款可以同时提供有损压缩和无损压缩的图片文件格式,其以VP8编码为内核,在2011年11月开始可以支持无损和透明色功能。目前facebook等网站都已采用这种图片格式。

  • BPG:知名程序员、ffmpeg和QEMU等项目作者Fabrice Bellard推出的图像格式,它以HEVC编码为内核,在相同体积下,BPG文件大小只有JPEG的一半。另外BPG还支持8位和16位通道等等。尽管BPG有很好的压缩效果,但是HEVC的专利费很高,所以目前的市场使用比较少。

这两大技术都各有优劣,为了最大程度的应对市场需求采用深度学习技术做图片压缩算法已受到业界越来越多的关注。

深度学习技术设计图片压缩算法

通过深度学习技术设计压缩算法不仅能在不借助HEVC的情况下设计出更适合商用的更高压缩比的图片压缩算法,还可以在保持图片画质同时,尽可能降低图片体积。

在图片压缩领域主要用到的深度学习技术是卷积神经网络(CNN)。卷积神经网络就像搭积木一样,一个卷积神经网络由卷积、池化、非线性函数、归一化层等模块组成,最终的输出根据应用而定;如在人脸识别领域,我们可以用它来提取一串特征表示一幅人脸图片,然后通过比较特征的异同进行人脸识别。

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

如何利用卷积神经网络做压缩?

如图2所示,完整的框架包括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更高,压缩效果更好,MSSIM更高,主观感受更好。

下图为图鸭图片格式Tiny Network Graphics (TNG) 与其他图片格式在同一压缩比下的PSNR值与MS-SSIM值对比:

图3:图鸭TNG图片格式与其他图片格式在同一压缩比下的PSNR值与MS-SSIM值对比

从上图对比中可以看到,图鸭的TNG在MS-SSIM值上一直处于领先状态,其PSNR值也已超过WebP、JPEG2000等商用算法。

如何用深度学习做压缩?

谈到如何用深度学习做压缩,我们以图片来举例。将一张大小 768 * 512 的三通道图片送入编码网络,进行前向处理后,会得到占据 96 * 64 * 192 个数据单元的压缩特征。有计算机基础的读者可能会想到,这个数据单元中可放一个浮点数,整形数,或者是二进制数。那到底应该放入什么类型的数据呢?

从图像恢复角度和神经网络原理来讲,如果压缩特征数据都是浮点数,恢复图像质量是最高的。但一个浮点数占据32个比特位,图片的计算公式为( 96 * 64 * 192 * 32)/(768*512)=96,压缩后反而每个像素占据比特从24变到96!图片大小非但没有压缩,反而增加了,这是一个糟糕的结果,很显然浮点数不是好的选择。

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

即使压缩特征中每个数据占据1个比特位,可是压缩还是有可进步的空间。那如何进一步优化算法?再看下BPP的计算公式。

假设每个压缩特征数据单元占据1个比特,则公式可写成:(96*64*192*1)/(768*512)=3,计算结果是3 bit/pixel,从压缩的目的来看,BPP越小越好。在这个公式中,分母由图像决定,我们进行调整的只有分子:96、64、192,这三个数字与网络结构相关。所以,如果我们设计出更优的网络结构,这三个数字也会变小。

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

总结

总体而言,借助于深度学习设计视频和图像压缩算法是一项非常具有前景,但同时也非常有挑战性的技术。

最后,大家可以点击阅读原文获取TNG测试链接(建议在PC端测试)。

深度学习为图片压缩算法赋能:节省55%带宽相关推荐

  1. 深度学习狗图片_狗品种分类的深度学习

    深度学习狗图片 深度学习 (Deep Learning) Stuck behind the paywall? Click here to read the full story with my fri ...

  2. 深度学习图像视频压缩算法——TNG

    互联网时代,社交媒体分享.自动驾驶.增强显示.卫星通信.高清电视或视频监控等应用场景对图片和视频有很强的需求,压缩算法也因此备受关注,但是不同的应用场景对压缩算法的性能要求也不一样:有的需求是以保持高 ...

  3. 深度学习中图片数据增强方法

    简 介: 在深度学习中需要对图像进行不同的处理.本文对比了基于Numpy以及Paddle.vision.transforms函数中对于图片处理的效果. 关键词: 图像预处理,cv2,paddle #m ...

  4. (二)深度学习数据处理-----图片数据处理

    如果你对数据处理不熟悉,可以看我的上篇博客,里面介绍了常用的数据处理方法 上篇博客地址:机器学习数据处理 目录 1.pytorch加载数据集 1.加载pytorch自带的数据集 2.图像读取和保存 1 ...

  5. 【深度学习】图片分类CNN模板

    构建一个字母ABC的手写识别网络, 要求给出算法误差收敛曲线,所给程序要有图片导入接口. 其中A,B,C都代表label,三个文件夹存在具体的图片.只要是这样类型的,直接套下面模板. import o ...

  6. 深度学习开源图片数据库

    数据的准备工作是训练模型前的必要工作,显然这也是非常耗时的,所以在入门阶段我们完全可以用现有的开源图片库快速完成前期的准备工作: ImageNet   ImageNet是根据WordNet层次结构(目 ...

  7. 吴恩达机器学习与深度学习作业目录 [图片已修复]

    python3.6 (一) 吴恩达机器学习作业目录 1 吴恩达机器学习作业Python实现(一):线性回归 2 吴恩达机器学习作业Python实现(二):logistic回归 3 吴恩达机器学习作业P ...

  8. cameraman matlab 自带图,使用Matlab自带工具进行深度学习——训练图片数据集

    拿到项目,训练数据集是一个复杂的事情,虽然看起来很难不太可能短时间学会,但是事情总要做... 一步一个脚印来吧,慢慢更新进度,恩. 使用matlab执行代码(我软工项目的代码,没有代码可以直接跳过,学 ...

  9. 深度学习用于图片的分类和检测总结

    1. CNN用于分类:具体的过程大家都知道,无非是卷积,下采样,激活函数,全连接等.CNN用于分类要求它的输入图片的大小是固定的(其实不单单是CNN,很多其它的方法也是这样的),这是它的一个不足之处之 ...

最新文章

  1. mysql mrr_cost_based_mysql mrr介绍
  2. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)
  3. 【报表技术】IReport 图形化报表开发工具安装教程
  4. 1470: 区间求最值(RMQ问题,ST算法模板)
  5. 2万字长文包教包会 JVM 内存结构
  6. 40种网站设计常用技巧
  7. 加速你的IDE !!!送9个固态硬盘(金士顿240G SSD)
  8. 一步一步学EF系列【6、IOC 之AutoFac】
  9. 请求发送者与接收者解耦——命令模式(三)
  10. python将注释写入xml_向xml文档添加注释
  11. 算法导论随笔(十四):NP完全性之P问题、NP问题、NPC问题和NP难问题
  12. matlab工具箱参数修改,使用matlab工具箱标定摄像头(内参数)
  13. Linux主机驱动与外设驱动分离思想 1
  14. 获取iv和encryptedData
  15. Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子
  16. 白领失眠危害大 如何拯救上班族?
  17. 学微信小程序要学些什么?
  18. 三菱IO模块QH42P使用方法
  19. TusharePro快速入门
  20. 《程序员练习生》第1期 做程序员需要天赋吗?

热门文章

  1. InstallShield Build Error -1014: Cannot rename directory PATH to PATH\folder.Bak.
  2. (7)Java数据结构--集合map,set,list详解
  3. 【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback
  4. 我所认识的JavaScript正则表达式
  5. 存储过程,触发器,分页练习
  6. [C++基础]025_虚函数和虚函数表
  7. HDU多校3 - 6975 Forgiving Matching(多项式匹配字符串)
  8. CodeForces - 1198A MP3(尺取)
  9. HDU4372(第一类斯特林数)
  10. POJ1269(判断线段相交)