目录
0 前言
1 代码来源
2 代码的运行
2.1 CompressAI下载与安装
2.2 运行示例程序
3 结果分析
4 结论
5 参考文献
期末作业要求运行端到端的图像压缩代码,过程中学习了csdn上诸多教程。这里将运行的过程分享出来。
目前大多数文献附带的代码是在Linux平台使用TensorFlow环境实现的,由于硬件设备的限制,这些代码难以运行。
在文献《CompressAI: a PyTorch library and evaluation platform forend-to-end compression research》中,作者将下图所示的六个端到端图像压缩模型的代码移植到了pytorch平台,以下模型分别对应参考文献[1-6]。
CompressAI的代码完全开源,在下面的网站里有代码的下载方式及使用方法:interdigitalinc.github.io/CompressAI/index.html。
通过Git方式将代码下载至本地后,在conda中选择对应的文件夹并输入“pip install -e .”,即可完成CompressAI的配置。运行结果如图2.1所示。
图2.1 配置CompressAI
在CompressAI工程的“example”文件夹中,代码作者给出了CompressAI的使用示例。
首先运行“pip install -U ipython jupyter ipywidgets matplotlib”,安装“jupyter”等示例程序所需的库函数。运行结果如图2.2所示。
图2.2 安装“jupyter”等示例程序所需的库函数
安装后在CMD中输入“jupyter notebook”,在弹出的页面中即可看到两个示例文件。分别是“CompressAI Models Comparison Demo”和“CompressAI Inference Demo”。在这两个示例程序中,主要讲述了如何调用和评估已有的模型。
图2.3 示例程序
在“CompressAI Inference Demo”中,代码主要分为两部分。第一部分是用于调用模型实现图像的端到端压缩,并计算相关指标及可视化。第二部分是用于将图像压缩的结果与传统的图像压缩方法进行比较。
在进行端到端图像压缩时,需要调用已训练的神经网络,CompressAI中已经内置了6种端到端图像压缩方法,也可以自己训练新的神经网络用于图像压缩。这里调用了“bmshj2018_factorized”图像压缩网络,显示该网络有2998147个参数。
图3.1 加载网络
代码首先将输入的图像转化为浮点数的四维张量,并显示这张图片。
图3.2 原始图片
运行网络后,再将张量转换为图片,则可以得到压缩后的图片。通过与原始图片求差,可以得到差值图片。
图3.3 原始图片、重建图片和差值图片
通过计算可知这张图片的PSNR为27.40dB,MS-SSIM值为0.9743,比特率为0.222bpp,可见压缩效果较好。
图3.4 PSNR、MS-SSIM和比特率
在相同比特率的条件下,比较端到端的图像压缩方法与传统图像压缩方法结果。由下图可看出,在低比特率的条件下,端到端的图像压缩方法效果明显优于JPEG。
图3.5 相同比特率的条件下图像压缩效果对比
在相同的峰值信噪比要求下,可以发现端到端的图像压缩方法的比特率不到JPEG的一半。
图3.6 相同的峰值信噪比要求下图像压缩效果对比
在具有相同的MS-SSIM指标时,端到端图像压缩方法的比特率也远低于JPEG和webP。
图3.7 具有相同的MS-SSIM指标时图像压缩效果对比
在“CompressAI Models Comparison Demo”文件中,对比了不同种网络的运行结果。由于笔记本电脑内存不足,下图展示的结果为示例程序自带的结果。从结果中可以看出,这部分代码可以同时显示多个网络压缩后的图片。
图3.8 不同种端到端图像压缩方法结果比较
并同时计算所有输出的PSNR、MS-SSIM和比特率。
图3.9 不同种端到端图像压缩方法的PSNR、MS-SSIM和比特率比较
随着机器学习算法的发展,更清晰、更高分辨率、更低比特的图像压缩成为可能。端到端的图像压缩方法的出现,显现出了优于传统图像压缩方式的性能。本研究报告运行了CompressAI端到端图像压缩代码,并分析结果。通过运行代码更深刻的了解端到端图像处理算法内涵。