MANIQA 无参 GAN 失真图像质量评估 CVPRW2022

MANIQA: Multi-dimension Attention Network for No-Reference Image Quality Assessment

https://arxiv.org/abs/2204.08958

Pipal: a large-scale image quality assessment dataset for perceptual image restoration.

https://arxiv.org/pdf/2007.12142.pdf

是啥


这是一篇图像质量评估方向的一篇文章,该任务对数字图像的视觉质量进行客观或者主观的评分,其中根据是否有原图作为对比,可以将现存的方法粗略划分为有参考或无参考图像质量评估,本文属于无参考质量评估

在这里插入图片描述

这篇论文尝试解决现有方法不能够对 GAN-based (指超分,图像恢复相关模型) 生成的失真图像进行准确预测质量得分的需求,因此提出了 MANIQA 方法,实验表明该方法在四个数据集上都达到了 SOTA 的结果

方法&网络架构


Pipal 研究发现人眼对于虚假但逼真图片很难鉴别,并且人眼对于一些局部的错位不仔细看也很难感知到,但神经网络可以区分,同时他们发现算法进行区分时对于空间错位的瑕疵非常敏感。

因此 MANIQA 为了加强全局与局部间的交互,受到 Restormer 工作的启发,提出了 Transposed Attention Block (TAB) 和 Scale Swin Transformer Block(SSTB)。这两个模块分别在通道和空间维度上应用注意力机制,以这种多维的方式,模块之间可以协同增强全局和局部区域之间的交互,从而提升了算法的精度,整体网络架构如下图所示

在这里插入图片描述

图片输入网络后,首先会经过 ViT 模块,然后提取 ViT 第 {7, 8, 9, 10} 层的特征图,Concat 后得到 CxHW 作为输出,随后 TAB 就会对输出的通道进行加权从而让接下来的 SSTB 模块更好的提取局部信息,最后经过两个分支输出图片最终的加权分数。

Transposed Attention Block (TAB)

在这里插入图片描述

在常规的 Self-Attention (SA) 中,通过 key-query 点积操作,能够让图片中的 patchs 产生信息交互,从而提取到了空间维度的特征。但忽略了 CxHW 中 C 也就是通道这个维度所蕴含的信息,基于此,作者提出了 TAB。

结合上图所示的 TAB 模块,它的功能是将 SA 作用到通道(C)这个维度上, 通过 Reshape 将 K 变成了 HWxC 从而与 Q 做矩阵相乘,然后再经过 Softmax 就可以获得通道与通道之间的相关性(可以理解为协方差矩阵,尺寸大小为 CxC),最后再与 V 进行加权后输出。

这个模块有两个好处

  1. 整合 ViT 中四个不同尺寸的层特征图,并根据通道对质量分的相关性赋予通道不同权重
  2. TAB 生成的 Attention Map 编码了全局上下文的语义信息,为接下来需要提取的局部信息提供帮助

Scale Swin Transformer Block (SSTB)

在这里插入图片描述

SSTB 模块有 3 个子模块组成,分别是 STL,Conv,Scale,其中 STL 就是标准的 Swin Transformer Layer,Conv 是卷积,Scale 是一个缩放参数 𝛼 ,公式如下

在这里插入图片描述

同样,文中也给出了两个好处

  • 通过 STL 可以获得类似 Conv 在空间上尺度和平移不变性的特征
  • 缩放参数 𝛼 可以稳定训练过程,通常取值为 0.1~0.2之间

总得来说,STBB 是通过 STL 来提取全局和局部的特征,文中关于为啥加入缩放参数 𝛼 也没说,这个模块感觉有点敷衍

Patch-weighted Quality Prediction (两个分支)

在这里插入图片描述

最后就是这两个分支的模块,一个分支计算每个 Patch 的分数,一个分支计算每个 Patch 的权重,然后加权求和获得最后分数,文中说**他们相信(= =,we believe… 这样子写论文也可以的吗)**这样做可以防止过拟合,而且质量分由多个 Patch 综合得到也很合理

训练细节


dataset: PIPAL, LIVE, CSIQ, TID2013, KADID-10K

backbone**😗* ViT-B/8 with pretrained weight

TAB: 2 blocks

SSTB: 1 block, 768 embedding dimension → 384 embedding dimension

𝛼: 0.8

lr: 10e-5

lr_sche: cosine annealing

optimizer: adam

batch size: 8

input size: 224x224

loss: MSE

效果评估


在这里插入图片描述

在提到的数据集上都取得了 SOTA,但我觉得缺了消融实验,也就是说并没有对比 TAB 和 STBB 对模型精度的影响

<think>好的,我现在需要帮用户解答如何编写无图像质量评估(No-Reference IQA)的代码。首先,我得回忆一下用户之前的提问,他们之前问过图像质量评估是否需要与原图对比,现在转向具体的无评估的实现。这说明用户可能已经了解IQA的基本分类,现在想实际应用,特别是无考的情况,因为他们可能没有原图可用。 接下来,我要确定用户的需求。用户可能是一位开发者或研究人员,想要在自己的项目中实现无考IQA。他们可能需要具体的代码示例和步骤,所以应该提供实际的代码,并解释关键点。此外,用户可能对现有工具或库不太熟悉,因此需要推荐一些常用的库,比如TensorFlow、PyTorch,或者现有的IQA工具包。 然后,我需要考虑无考IQA的常见方法。传统方法可能基于特征提取,比如自然场景统计(NSS)或者频域分析,而深度学习方法则使用预训练模型或构建自定义CNN。用户可能对这两种方法都感兴趣,或者更倾向于深度学习,因为现在主流的研究可能更关注基于模型的方法。 接着,我要组织回答的结构。应该先介绍无考IQA的两种主要方法:传统算法和深度学习,然后分别给出代码示例。比如,传统方法可以使用BRISQUE算法,而深度学习方法可以展示如何加载预训练模型或构建简单CNN。同时,需要指出依赖的库,比如Python的piq库,或者如何使用OpenCV和scikit-image进行特征提取。 另外,用户可能需要知道如何评估和选择模型,所以需要提到数据准备、模型训练的关键点,比如使用LIVE数据集,损失函数的选择,以及数据增强的重要性。同时,注意事项部分要强调数据匹配、计算资源、指标选择等实际问题,帮助用户避免常见陷阱。 还要确保代码示例简洁有效,并附有解释,让用户明白每一步的作用。例如,在传统方法中使用piq库的BRISQUE实现,只需几行代码,而在深度学习方法中展示模型构建和预测流程。如果用户需要更定制化的解决方案,可能需要引导他们考更复杂的模型或论文。 最后,总结一下,用户可能需要从简单实现入手,逐步深入,所以提供多个层次的代码示例和资源推荐会很有帮助。同时,提醒他们根据具体需求选择合适的方法,并考虑数据可用性和计算资源限制。</think>以下是**无图像质量评估(No-Reference IQA)**的代码实现思路与关键步骤,分传统算法与深度学习方法两类详解: --- ### 一、传统无考IQA(基于特征工程) #### 示例:BRISQUE算法(自然场景统计特征) ```python import cv2 import numpy as np from skimage import img_as_float # 1. 特征提取:计算归一化像素值与局部对比度 def calculate_features(image): image = img_as_float(image) # 转为浮点型 mu = cv2.GaussianBlur(image, (7,7), 7/6) # 高斯模糊模拟人眼感知 mu_sq = mu * mu sigma = np.sqrt(np.abs(cv2.GaussianBlur(image*image, (7,7), 7/6) - mu_sq)) normalized = (image - mu) / (sigma + 1e-6) # 归一化处理 return normalized.flatten()[:36] # 取前36维关键特征 # 2. 加载预训练SVR模型(需提前训练或下载权重) from sklearn.externals import joblib model = joblib.load('brisque_svr_model.pkl') # 3. 预测图像质量得分(0-100,越低质量越好) image = cv2.imread('damaged_image.jpg', 0) # 读取灰度图 features = calculate_features(image) quality_score = model.predict([features])[0] print(f"BRISQUE质量得分:{quality_score:.2f}") ``` --- ### 二、深度学习考IQA(基于预训练模型) #### 示例1:使用现成库`piq`快速实现 ```python # 安装库:pip install piq import torch from piq import NIMA, CLIPIQA # 方法1:CLIP-IQA(无需原图,基于视觉-语言模型) model = CLIPIQA() image = torch.rand(1, 3, 256, 256) # 输入图像张量(BCHW格式) score = model(image) # 输出质量得分(0-1,越高越好) # 方法2:NIMA(美学质量评估) model = NIMA(pretrained=True) score = model(image) # 输出得分分布与均值 ``` #### 示例2:自定义CNN模型(PyTorch) ```python import torch.nn as nn class NR_IQA_CNN(nn.Module): def __init__(self): super().__init__() self.features = nn.Sequential( nn.Conv2d(3, 32, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, kernel_size=3, padding=1), nn.ReLU(), nn.AdaptiveAvgPool2d(1) ) self.regressor = nn.Sequential( nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, 1) # 输出质量得分 ) def forward(self, x): x = self.features(x) x = x.view(x.size(0), -1) return self.regressor(x) # 使用示例 model = NR_IQA_CNN() input_image = torch.rand(1, 3, 224, 224) # 假设输入为224x224 RGB图 predicted_score = model(input_image) ``` --- ### 三、关键实现步骤 1. **数据准备** - 使用标注数据集(如LIVE、TID2013、KonIQ-10K) - 数据增强:旋转、噪声、模糊等模拟质量退化 2. **模型训练(以自定义CNN为例)** ```python import torch.optim as optim from torch.utils.data import DataLoader # 定义损失函数与优化器 criterion = nn.MSELoss() # 回归任务用MSE损失 optimizer = optim.Adam(model.parameters(), lr=1e-4) # 训练循环 for epoch in range(100): for images, scores in DataLoader(dataset, batch_size=32): outputs = model(images) loss = criterion(outputs, scores) optimizer.zero_grad() loss.backward() optimizer.step() ``` --- ### 四、注意事项 1. **模型选择** - 轻量级需求:选BRISQUE或NIQE(仅需512B内存) - 高精度需求:选预训练深度学习模型(如HyperIQA、MANIQA) 2. **代码优化方向** - 多任务学习:同时预测模糊、噪声、压缩失真等具体问题 - 特征融合:结合频域(DCT/Wavelet)与空域特征 --- ### 五、推荐工具库 - 传统方法:`python-brisque`、`pyiqa` - 深度方法:`PIQ`、`Kornia` - 完整解决方案:`TensorFlow Model Garden`中的`IQA模块` 如需具体数据集或预训练模型,可考论文代码库(如[HyperIQA](https://github.com/SSL92/hyperIQA))或访问[Image Quality Assessment Toolkit](https://pypi.org/project/image-quality/)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值