IQA CNN架构图解
时间: 2025-01-04 19:35:51 浏览: 16
### IQA相关的CNN架构及其工作原理
图像质量评估(IQA, Image Quality Assessment)旨在量化感知到的视觉质量,通常分为有参考(FR)、部分参考(PR)和无参考(NR)三种类型。对于基于CNN的IQA模型而言,这些架构通过模拟人类视觉系统的特性来实现这一目标。
#### 基于CNN的传统IQA框架
传统上,许多早期的工作依赖于手工设计特征提取器[^2]。然而,在引入深度学习之后,研究者们开始探索端到端训练的方法论。这类方法可以直接从原始像素数据中自动获取有用的表征形式,而无需显式的预处理阶段或复杂的工程化操作。
#### Deep-IQA架构解析
Deep-IQA是一种典型的全参考型IQA算法实例,它利用了卷积神经网络的强大能力来进行高质量预测:
1. **输入层**:接受一对相同尺寸但可能具有不同失真程度的图片作为输入;
2. **共享权重的双分支结构**:两个并行路径分别用于处理原图与失真版本;每条线路内部采用多级下采样机制逐步降低空间分辨率的同时增加通道数,从而捕捉局部细节以及全局上下文信息;此过程中的参数在整个网络内保持一致以便更好地对比差异[^3];
3. **融合模块**:将上述两路得到的结果拼接起来形成联合表示向量;该步骤有助于综合考虑两者间的相似性和区别之处;
4. **回归子网**:最终经过若干完全连接层映射至单一数值输出——即估计得分,代表主观评价指标如MOS (Mean Opinion Score) 的近似值。
```python
import torch.nn as nn
class SimpleIQA(nn.Module):
def __init__(self):
super(SimpleIQA, self).__init__()
# 定义基础卷积单元
conv_unit = lambda in_chans, out_chans: nn.Sequential(
nn.Conv2d(in_channels=in_chans,
out_channels=out_chans,
kernel_size=3),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2))
# 创建两条相同的流水线
self.branches = nn.ModuleList([
nn.Sequential(*[
conv_unit(3, 64), # 输入RGB三通道
conv_unit(64, 128),
conv_unit(128, 256)]),
nn.Sequential(*[
conv_unit(3, 64),
conv_unit(64, 128),
conv_unit(128, 256)])
])
# 融合后的分类头
self.fc_head = nn.Linear(2 * 256*7*7, 1)
def forward(self, ref_img, dis_img):
feat_ref = self.branches[0](ref_img).view(-1)
feat_dis = selfbranches[1](dis_img).view(-1)
combined_features = torch.cat((feat_ref, feat_dis), dim=-1)
quality_score = self.fc_head(combined_features)
return quality_score
```
值得注意的是,尽管这里展示了一个简化版的设计思路,实际应用当中往往还会涉及到更复杂的技术组件比如注意力机制、残差链接等以提升泛化能力和鲁棒性表现[^4]。
阅读全文