PyTorch中的不同图像压缩操作

问题描述 投票:0回答:1

在CNN分类模型训练期间,在计算损失的同时,我在PyTorch中对图像应用了jpeg压缩编码。当我调用loss.backward()时,它还必须通过对图像执行的编码和压缩操作来反向传播。

那些压缩算法(例如编码和JPEG压缩)是否可以区分,否则如何通过这些操作反向传播损耗梯度?

如果这些操作不可区分,PyTorch中是否存在执行H.264编码和JPEG压缩的可区分压缩算法?

任何建议都会很有帮助。

pytorch conv-neural-network gradient-descent image-compression
1个回答
0
投票

首先,请仔细考虑您是否需要区分JPEG压缩步骤。绝大多数项目在此步骤中没有区别,如果您不确定是否需要,则可能不需要。


如果确实需要在图像压缩器之间进行区分,则可以考虑比JPEG易于实现的编解码器。基于小波的压缩(命运不佳的JPEG 2000 format背后的技术)在数学上是优雅的,并且易于区分。在该技术的最新应用中,Thies et al. 2019将图像表示为拉普拉斯金字塔,其损耗分量用于在较高分辨率的水平上强制稀疏。


现在,作为思想实验,我们可以查看different steps within JPEG compression并确定是否可以以不同的方式实现它们。

  • 色彩转换(从RBG到YCbCr):我们可以将其表示为逐点卷积。

  • 色度下采样:在色度通道上使用torch.nn.functional.interpolate非常容易。

  • 离散余弦变换(DCT):现在,事情变得越来越有趣了。这是可能有效的DCT的Pytorch实现:https://github.com/zh217/torch-dct

  • 量化表:再次简单。这应该只是将DCT的输出与表中的值相乘。

  • 霍夫曼编码:硬;我不确定这是否可能。输出元素的数量将根据图像熵而变化,这会排除许多可区分的构造块。根据您的应用程序,您可能可以跳过此步骤(此步骤是无损压缩;因此,如果您试图区分JPEG引入的压缩伪像,那么前面的步骤就足够了。)

有关将JPEG DCT分量直接输入到神经网络的有趣的相关工作,请参见Faster Neural Networks Straight from JPEG。>

© www.soinside.com 2019 - 2024. All rights reserved.