纹理一致性图像评价指标: Image Quality Assessment: Unifying Structure and Texture Similarity(2020 PAMI)
- 专题介绍
- 一、研究背景
- 二、方法总览
- 2.1 初始变换
- 2.2 纹理表示和结构表示
- 2.3 DISTS指标
- 2.4 优化DISTS指标
- 三、实验结果
- 四、总结
本文将对统一图像结构和图像纹理的评价指标DISTS进行讲解。这篇主要的亮点在于作者开发了一个具有明确容忍纹理重采样的全参考质量评价模型,参考资料如下:
[1]. 论文地址
[2]. 代码地址
[3]. IQA-pytorch代码路径
[4]. 作者视频讲解地址
专题介绍
图像质量评价(Image Quality Assessment, IQA)是图像处理、计算机视觉和多媒体通信等领域的关键技术之一。IQA不仅被用于学术研究,更在影像相关行业内实现了完整的商业化应用,涉及影视、智能手机、专业相机、安防监控、工业质检、医疗影像等。IQA与图像如影随形,其重要程度可见一斑。
但随着算法侧的能力不断突破,AIGC技术发展火热,早期的IQA或已无法准确评估新技术的能力。另一方面,千行百业中各类应用对图像质量的需求也存在差异和变化,旧标准也面临着适应性不足的挑战。
本专题旨在梳理和跟进IQA技术发展内容和趋势,为读者分享有价值、有意思的IQA。希望能够为底层视觉领域内的研究者和从业者提供一些参考和思路。
系列文章如下:
【1】🔥IQA综述
【2】PSNR&SSIM
【3】Q-Insight
【4】VSI
【5】LPIPS
一、研究背景
作者研究的动机,可以用以下的图来直观明确的表达。
图中(a)、(b)、(c)分别是原图,原图进行jpeg压缩的图像,以及重新在同样的草上采样的图(这里作者用的词叫resample)。从人类的认知上来说,会觉得(c)和(a)会更相像,然而这里所有的常规的IQA方法都失效了,包含前面提到的PSNR、SSIM以及LPIPS等,这里失败的原因也很明显,作者想要捕捉的是纹理上的感知一致性,而纹理具有不规则的情况,对于人类的感知来说并不需要像素级别的完全对其或一致,以前的方法对于这种情况的纹理不太具有容忍度,与实际人类的感知是不一样的。
基于此,作者开发了一个能够在图像结构和图像纹理上都具有与人类相同感知判断的指标,在此之上,还希望纹理能够resample(不需要像素级对齐)之后也是一样的,另外区分开退化(JPEG,JPEG会损失纹理)。总的来说,作者的贡献如下(作者没有明确分点,博主这里做一个简单总结):
- 开发了第一个具有明确容忍纹理resample的全参考图像质量评价模型。
- 设计特征空间的均值作为图像纹理统计特征,引入全局SSIM作为结构相似性指标,结合这两点在多尺度特征上利用不同的权重得到一个综合评价的指标。
- 通过最小化从相同纹理图像裁剪的子图像之间的相似距离,进一步优化了同一纹理判断的鲁棒性。
- 优化后的方法在传统的图像评价数据集和纹理相似数据集上都更接近人类的判断结果,该方法在纹理分类和检索任务上表现优异,最后该方法还对几何变化(平移和扩张)不敏感且不需要专门的训练或数据增强。
二、方法总览
博主先对该方法做一个大概的流程总结,后续会按照这个流程进行描述,整体博主认为可以分为4个步骤:
- 对图像进行一个初始的变换,从像素空间变换到特征空间。
- 对特征提取所谓纹理的表示,对特征提取所谓结构的表示。
- 利用纹理和结构的表示,加入一些可学习的权重综合计算一个评价指标。
- 利用这个评价指标,进一步优化权重得到纹理区域resample不敏感的指标,且能够有结构和纹理上做感知相似度的模型。
作者展示了这个评价指标做损失函数优化随机噪声和带JPEG噪声做输入的效果。可以看到本文的方法可以精准捕捉结构和纹理,优化后的效果在跟原图感知相似度上对比其他方法是最高的。
其他方法有些在输入为随机噪声时,连结构信息都被丢失了,最好表现的LPIPS在纹理上表现不如DISTS。
下面根据上面提到的几点根据顺序进行讲解。
2.1 初始变换
作者最后使用的是在ImageNet上训练的VGG16网络来对图像进行预处理,转换到特征空间,原因在于pixel空间不好对比感知距离。但是这个对于选取的变换,提到2个很重要的点:
- 下采样时需要抗混叠:作者描述的原因比较学术,博主这里做一些比较形象的描述,混叠现象一般会给图像的高频区域带来2个最常见的问题是,空间上的锯齿现象以及通道上的伪彩现象,这些是不抗混叠带来的artifact现象。那在这里,VGG16也是需要下采样的,下采样VGG16中使用到的算子是Maxpool,一个不抗混叠的算子,解决这个问题的方法非常简单,作者直接替换了这个算子引入了一个g滤波器,最后的表现形式名为L2-pooling,如下式所示。P(x)=g∗(x∗x)P(x)=\sqrt{g*(x*x)}P(x)=g∗(x∗x)g是一个Hanning window,具体表现为数值,大家可以参考后续的代码讲解,是一个较为低频的滤波器。
- 集合必须是单射(Injection):单射的意思就是不同的输入应该映射到不同的输出,一个对一个,不能一个特征的输出,对应着多个输入。例子就是当IQA指标最高时,对应的最佳输入不是参考图像,前面展示的一些方法(GTI-CNN等),就不满足这个性质,那么优化后的结果就很可能跟原图差距很大,损失大量结构信息或是纹理上的问题,这里LPIPS也是如此,没有严格的满足这个性质,所以在纹理上优化后也是存在一定的问题。作者对于DISTS的设计上为了满足这个性质,引入一个输入x,相当于预处理变换中引入一个identity变换,这样就能保证满足这个性质。即提取的预处理特征集合是:
f(x)={xj(i);i=0,…,m;j=1,…,nif(x)=\{x_j^{(i)}; i = 0,\ldots,m; j = 1,\ldots,n_if(x)={xj(i);i=0,…,m;j=1,…,ni f(y)={y~j(i);i=0,…,m;j=1,…,nif(y)=\{\tilde{y}_j^{(i)}; i = 0,\ldots,m; j = 1,\ldots,n_if(y)={y~j(i);i=0,…,m;j=1,…,ni
此两个分别代表输入和参考图像的预处理特征集合,是用VGG16提取的多个层的结果,对应conv1_2,conv2_2, conv3_3, conv4_3, and conv5_3,这里m=5,对应的x0和y0是identity变换。
2.2 纹理表示和结构表示
- 首先是纹理的部分,这里作者引用了很多研究,结论是一个仅包含CNN通道均值和方差的简化统计集合足以用于纹理分类或风格转移任务,因此作者使用了一个简单的集合来表示纹理,只包含特征映射的空间均值(总共1475个统计数据),为视觉纹理提供了一个有效的参数化模型,如下式所示。
l(x~j(i),y~j(i))=2μx~j(i)μy~j(i)+c1(μx~j(i))2+(μy~j(i))2+c2l(\tilde{x}_j^{(i)}, \tilde{y}_j^{(i)}) = \frac{2\mu_{\tilde{x}_j}^{(i)}\mu_{\tilde{y}_j}^{(i)} + c_1}{(\mu_{\tilde{x}_j}^{(i)})^2 + (\mu_{\tilde{y}_j}^{(i)})^2 + c_2}l(x~j(i),y~j(i))=(μx~j(i))2+(μy~j(i))2+c22μx~j(i)μy~j(i)+c1
这里的μ\muμ就是我们一直讲到的均值,ccc是一个防除零的值。
作者为了验证这个模型的可行性,用以下的公式来优化了以该特征的随机噪声输入。
y⋆=argminyD(x,y)=argminy∑i,j(μx~j(i)−μy~j(i))2y^\star = \underset{y}{\mathrm{arg}\min} D(x, y) = \underset{y}{\mathrm{arg}\min} \sum_{i, j} (\mu_{\tilde{x}_j}^{(i)} - \mu_{\tilde{y}_j}^{(i)})^2y⋆=yargminD(x,y)=yargmini,j∑(μx~j(i)−μy~j(i))2
可视化的优化结果表明该模型是有意义的,如下图所示。
(b)和(f)是用了多层((b)指只用到最浅层的VGG,( c)指只用到第二层VGG),只不过层数逐渐增大,(g)-(k)是只使用了VGG的某一层,可以看到多层的效果要明显优于单层的,(f)的效果与原图(a)很相像了,也是DISTS指标使用到的,通过看单层的效果可以发现,浅层的均值更多与图像基本的强度和颜色相关,深层的与形状和结构更加相关。作者还对比了其他纹理提取方法的效果:
这里(a)是原图,(b)图是一个不熟悉的方法,(c)是图像复原领域中感知损失中关于风格损失的部分,使用gram矩阵统计的纹理相关性,(d)是本文的方法,可以看到本文的方法得到的效果和gram_matrix的效果不相上下,但本文使用到的特征数相比gram_matrix是大大减小的,不会有太多的冗余。
- 结构的部分:使用了一个特征的相关系数,观察公式可以发现跟SSIM关于结构特征的定义是一样的,这里不同之处在于作者使用的global,全局的,因此可以理解为SSIM中窗口的尺寸跟特征图尺寸一样。
s(x~j(i),y~j(i))=2σx~jy~j(i)+c2(σx~j(i))2+(σy~j(i))2+c2s(\tilde{x}_j^{(i)}, \tilde{y}_j^{(i)}) = \frac{2\sigma_{\tilde{x}_j\tilde{y}_j}^{(i)} + c_2}{(\sigma_{\tilde{x}_j}^{(i)})^2 + (\sigma_{\tilde{y}_j}^{(i)})^2 + c_2}s(x~j(i),y~j(i))=(σx~j(i))2+(σy~j(i))2+c22σx~jy~j(i)+c2
这个没什么特别需要描述的,比较重要的点就是SSIM是分窗口计算,最后做平均,这里就是全局窗口,计算完一次就结束。
2.3 DISTS指标
DISTS指标的总览如下:l(x~j(i),y~j(i))=2μx~j(i)μy~j(i)+c1(μx~j(i))2+(μy~j(i))2+c1l(\tilde{x}_j^{(i)}, \tilde{y}_j^{(i)}) = \frac{2\mu_{\tilde{x}_j}^{(i)}\mu_{\tilde{y}_j}^{(i)} + c_1}{(\mu_{\tilde{x}_j}^{(i)})^2 + (\mu_{\tilde{y}_j}^{(i)})^2 + c_1}l(x~j(i),y~j(i))=(μx~j(i))2+(μy~j(i))2+c12μx~j(i)μy~j(i)+c1 s(x~j(i),y~j(i))=2σx~jy~j(i)+c2(σx~j(i))2+(σy~j(i))2+c2,s(\tilde{x}_j^{(i)}, \tilde{y}_j^{(i)}) = \frac{2\sigma_{\tilde{x}_j\tilde{y}_j}^{(i)} + c_2}{(\sigma_{\tilde{x}_j}^{(i)})^2 + (\sigma_{\tilde{y}_j}^{(i)})^2 + c_2},s(x~j(i),y~j(i))=(σx~j(i))2+(σy~j(i))2+c22σx~jy~j(i)+c2, D(x,y;α,β)=1−∑i=0m∑j=1ni(αijl(x~j(i),y~j(i))+βijs(x~j(i),y~j(i)))D(x, y; \alpha, \beta) = 1 - \sum_{i = 0}^{m} \sum_{j = 1}^{n_i} \left( \alpha_{ij} l(\tilde{x}_j^{(i)}, \tilde{y}_j^{(i)}) + \beta_{ij} s(\tilde{x}_j^{(i)}, \tilde{y}_j^{(i)}) \right)D(x,y;α,β)=1−i=0∑mj=1∑ni(αijl(x~j(i),y~j(i))+βijs(x~j(i),y~j(i)))
对纹理和结构的对比结果进行一个α\alphaα和β\betaβ的加权求和,最后进行一个减法,即相似度越高,值越小。
作者这里还讲了下这个指标满足的一些数学性质:非负性、对称性、三角不等式、唯一最小值,论文中有证明,感兴趣的读者可以看一下。
2.4 优化DISTS指标
自然,因为DISTS指标已经定义完毕,我们首先可以针对数据集进行一个L1的距离的优化。
E1(x,y;α,β)=∣D(x,y;α,β)−q(y)∣E_1(x, y; \alpha, \beta) = \left| D(x, y; \alpha, \beta) - q(y) \right|E1(x,y;α,β)=∣D(x,y;α,β)−q(y)∣
这里的q(y)q(y)q(y)是数据的分数标记。
为了使得容忍纹理resample更有效,作者还加入了一个正则项,显式的强制模型以数据驱动的方式来解决这个问题,最小化从同一纹理区域z中采样的两个patch(z1、z2)之间的距离。
E2(z;α,β)=D(z1,z2;α,β)E_2(z; \alpha, \beta) = D(z_1, z_2; \alpha, \beta)E2(z;α,β)=D(z1,z2;α,β)
那么总的优化函数就可以写作:
E(Q,T;α,β)=1∣Q∣∑x,y∈QE1(x,y;α,β)+λ1∣T∣∑z∈TE2(z;α,β)E(\mathcal{Q}, \mathcal{T}; \alpha, \beta) = \frac{1}{|\mathcal{Q}|} \sum_{x, y \in \mathcal{Q}} E_1(x, y; \alpha, \beta) + \lambda \frac{1}{|\mathcal{T}|} \sum_{z \in \mathcal{T}} E_2(z; \alpha, \beta)E(Q,T;α,β)=∣Q∣1x,y∈Q∑E1(x,y;α,β)+λ∣T∣1z∈T∑E2(z;α,β)
这里是从两个不同数据集上采样的mini-batch,分别优化我们前面讲到的内容,有分数的数据集优化E1E_1E1损失,纹理一致的数据集提供正则项E2E_2E2损失。
后续作者对比了其他的IQA方法,大概讲了下联系和区别,这个地方内容比较多,博主也不能完全讲明白,仅作一个抛砖引玉:
- SSIM和SSIM变种:都存在一个多尺度的操作,并且也可以调整多尺度给到最后结果的比例,SSIM也有能够解决轻微几何变换的能力,DISTS通过优化纹理不变性,这部分是相同的,但是前面也讲到SSIM是窗口的,DISTS是全局的,这个是比较大的一个区别。
- 自适应线性系统框架:这里是指一些将图像分离结构和非结构的方法,包含很多IQA模型,比如说MSE和空间频率加权的方法,方法上细节上肯定是存在一些不同。
- 图像内容和风格分离的方法:这个指的是常见的感知损失,图像内容的定义感知损失用的是特征之间的差值,风格的损失使用的是gram_matrix,计算的特征的相关性,作者认为这两个分量都存在大量冗余且不满足前面提到的变换唯一最小值的一个约束。
- 其他图像复原的损失:计算的pixel_loss,或者说跟感知损失的一个组合损失形式(开发中时常会使用到的情况,多个损失的组合),作者认为这种组合虽然说可以让模型复原的图像尽可能生成一些感知上有意义的结果,但没有达到作者想要的纹理不变性的水平。
三、实验结果
本篇文章的实验非常详细。
-
最基本的功能,分数预测。
针对数据集进行一个分数的拟合,在主观平均意见分数(MoSs)的散点图上,DISTS基本上是线性的,存在明显优势。
定量的实验上的表现:
在前面提到的LPIPS的数据集上进行了对比,效果也是在前列的,当然在分数预测上跟LPIPS没有明显优势。 -
纹理相似性:优势明显,对比其他方法。
纹理的失真量化,可以做排序的应用。
从(a)到(p)是质量逐渐递减的,(a)是原图。
纹理的分类和检索:纹理分类是将未知样本图像分类到已知纹理类的一种,纹理检索是在大型数据库上进行一个搜索,找到相似的图像。结果也是比较好的。
-
几何的形变:除了纹理上的相似度外,当原始图像跟退化图像存在全局或局部的错配时,大多数的全参考IQA方法会严重受损,根本原因他们需要像素对齐,当然配准可以解决这个问题,但是会带来更多的计算负担,且无法适应严重失真,本文提出的方法可以解决这个问题。
定量的实验,有明显优势。
定性的实验表现如下:
其中(a)时原图,(b)做了translate平移,(c)做了dilate扩展,(d)做了旋转,(e)做了云层的移动,(f)做了高斯噪声,(g)高斯模糊,(h)jpeg压缩,(i)jpeg2000压缩,可以明显看到DISTS对几何形变更鲁棒,这跟人类的感知会更相像。 -
消融实验:作者做了以下的实验:
(a):原始LPIPS;(b):(a)基础上替换L2 pooling;(c):添加indentity,输入图像;(d):在(c)之上将LPIPS中的L2距离替换为局部的SSIM计算,窗口为11x11;(e):在(c)之上将LPIPS中的L2距离替换为全局的SSIM计算;(f):在(c)的基础上加上纹理不变性的正则;(g):在(d)的基础上加入纹理不变的正则;(h):在(e)的基础上添加纹理不变的正则。
实验结果如下:
从中可以得到几个结论: -
L2 pooling优于maxpool。
-
将输入图像加入到其中对性能影响不大,但它保证了最小值唯一的情况,有利于感知优化。
-
全局的SSIM距离由于欧式距离,特别是比较纹理相似性和几何变换的不变性上。滑动窗口11x11一样是存在这个问题,效果会下降。
-
纹理不变正则项的训练,对于几何变换的不变性以及纹理的不变性有很大作用,尽管它会略微损失一部分对于分数评估的性能。
以上可以说明作者的DISTS中各个改进都是有益的。
四、总结
DISTS针对纹理和结构的全参考感知评估提供了一个新的方法,并且它还能对纹理resample和几何形变有一定容忍,更加靠近人类图像质量感知。不过还存在一些问题是:
- 预处理网络的特征提取部分还是一个黑盒子,对于提取的那些纹理和属性是未知的。
- 级联卷积和采样得到的多尺度特征对于最终结果的重要程度,如果我们可以量化它们,就可以针对性的定义距离,自适应的去使用,而不是现在这种固定的情况。
代码部分将会单起一篇进行解读。(未完待续)
感谢阅读,欢迎留言或私信,一起探讨和交流,如果对你有帮助的话,也希望可以给博主点一个关注,谢谢。