1. 项目概述当图像评估不再需要“标准答案”在计算机视觉的日常工作中我们常常面临一个看似简单却极其棘手的问题这张图“好不好”这里的“好”包含两层含义一是技术层面的“质量”比如有没有模糊、噪点、压缩失真二是艺术层面的“美学”比如构图是否和谐、色彩是否悦目、主题是否突出。这就是图像质量评估IQA和图像美学评估IAA要解决的核心问题。传统方法解决这个问题有点像在教一个孩子认字。你得先给他一本标注了“好字”和“坏字”的字典即带有大量人工评分的数据集然后让他反复学习最终学会判断。这种方法就是参数化方法模型被“训练”去拟合人类的平均意见分数MOS。它的弊端很明显严重依赖特定数据集换个领域比如从自然风景图换到医学影像或者换个失真类型模型性能就可能大幅下滑。更麻烦的是收集和标注海量高质量的“好/坏”图像对成本高昂且主观性强。近年来自监督学习Self-Supervised Learning催生了一类强大的“基础模型”Foundation Models比如CLIP、DINOv2。这些模型通过海量无标签的“图文对”或“图像块”进行预训练学会了理解图像和文本之间深层次的语义关联其产生的图像嵌入Embedding蕴含了丰富的视觉概念。一个很自然的想法是能否直接利用这些“通才”模型已经学到的通用视觉知识来评估图像的质量和美学而无需针对IQA/IAA任务进行任何额外的训练或复杂的提示词工程CLIP-IQA率先尝试了这个方向它使用“Good image.”和“Bad image.”这样的文本提示作为锚点计算待评估图像与这两个文本提示在CLIP空间中的相似度来打分。这确实是一个巧妙的零样本方法。但问题也随之而来语言是模糊的。“好”与“坏”的定义因人而异因文化而异一个简单的文本提示能否精准捕捉人类对图像质量与美学那复杂、多维的感知QUASARQUality and Aesthetics Scoring with Advanced Representations的提出正是为了回答这个问题并试图走得更远。它的核心思想非常直观既然文本提示有歧义那我们为何不用图像本身作为“锚点”呢与其让模型去理解抽象的“好”与“坏”的文字不如直接给它看一堆公认的“好图”和“坏图”的集合让模型在它自己的高维特征空间里找到这两个集合的“中心思想”即质心然后将待评估图像与这两个质心进行比较。这种方法完全数据驱动、非参数化无需训练仅依赖于预训练的基础模型和一组定义好的锚点图像。简单来说QUASAR的工作流程就像一场“图像选美”我们事先准备好两个房间一个房间里挂满了历届冠军的照片高质量/高美学锚点集另一个房间里则是海选淘汰者的照片低质量/低美学锚点集。对于任何一张新照片我们让它同时走进这两个房间感受氛围。模型图像编码器就是那位经验丰富的评委它能将照片和房间的整体“气质”都转化为一组高维特征向量。最后我们计算新照片的特征向量与两个房间“平均气质向量”质心的相似度。新照片更像哪个房间的整体感觉它的得分就偏向哪一边。这种方法的价值在于其通用性和鲁棒性。它不针对任何特定类型的失真或美学风格进行训练因此理论上可以泛化到任何图像领域。无论是评估手机拍照的画质、艺术作品的感染力还是生成式AI产出的图片QUASAR提供了一套统一的、无需重新训练的工具。对于算法工程师、图像处理研究员、内容平台的产品经理甚至是摄影爱好者理解并应用这种方法意味着你拥有了一把更灵活、更强大的尺子去度量那个原本难以言说的视觉“感觉”。2. QUASAR核心设计思路拆解为何“以图锚图”更胜一筹要理解QUASAR的巧妙之处我们需要深入其三个核心组件锚点数据、图像编码器和聚合函数。这不仅仅是三个模块的简单堆叠其背后是一套针对现有方法局限性的系统性思考与设计。2.1 锚点数据从模糊文本到精准图像集合在CLIP-IQA中锚点是“Good image.”和“Bad image.”这两个文本字符串。这带来了几个根本性问题语义模糊性“好”与“坏”是高度抽象和主观的概念。对于CLIP模型而言这两个提示词可能主要激活与图像内容“正面/负面”相关的语义特征而非专门针对技术质量如锐度、噪声或构图美学。维度缺失图像质量和美学是多维度的。一张图可能色彩绝佳但构图混乱另一张可能极度清晰但毫无美感。单一的文本提示难以覆盖所有这些复杂维度。模型偏差CLIP的文本编码器在预训练时接触的“good/bad”语境可能与专业的IQA/IAA语境存在偏差。QUASAR的解决方案是彻底摒弃文本提示转而使用图像嵌入集合作为锚点。具体操作是对于IQA利用全参考数据集如KADIS700k天然的结构。该数据集包含大量原始“参考图像”高质量和通过对它们施加各种失真如高斯模糊、JPEG压缩、噪声生成的“失真图像”低质量。我们可以直接将参考图像集作为“高质量锚点集”失真图像集作为“低质量锚点集”。对于IAA由于美学数据集如AVA没有天然的“好/坏”二分QUASAR采用中位数分割法。将整个数据集按人类平均意见分数排序取分数高于中位数的图像作为“高美学锚点集”低于中位数的作为“低美学锚点集”。注意这种基于数据驱动的锚点构建方式本质上是将人类评判的先验知识“编码”到了两个图像集合中。锚点集的质量和代表性直接决定了评估器的上限。因此选择覆盖失真类型广、美学风格多样的权威数据集至关重要。这种“以图锚图”的策略优势明显表达力强图像嵌入直接来源于视觉编码器包含了颜色、纹理、构图、语义等全方面信息远比几个单词的文本嵌入丰富。直接可比待评估图像和锚点图像在同一个特征空间由同一个图像编码器产生进行比较避免了跨模态图像-文本对齐可能引入的误差。数据驱动锚点的定义完全依赖于数据可以通过更换或扩充锚点数据集来适应不同的评估标准或文化偏好具备了良好的可定制性。2.2 图像编码器挖掘基础模型的“视觉通感”QUASAR本身不训练任何编码器而是作为一个“框架”可以灵活搭载各种现成的、基于自监督学习预训练的基础模型。论文中系统评估了7种模型包括CLIP、DINOv2、COCA等并涵盖了ViT和ResNet等不同骨干网络。这里的关键洞察是这些在亿级互联网数据上通过自监督目标如图文对比、图像掩码重建训练出来的基础模型其内部表征已经隐式地学习到了与图像质量和美学相关的特征。例如CLIP通过对比学习对齐图像和文本其图像编码器为了匹配“一张清晰的城市夜景照片”这样的文本描述必须学会捕捉“清晰度”、“色彩饱和度”、“场景结构”等属性。DINOv2通过自蒸馏学习让模型从同一图像的不同裁剪视图中学习一致的特征表示这迫使模型关注于图像的语义内容和稳定的全局结构这些都与美学评价中的“主体突出”、“构图稳定”相关。实验发现对于IQA任务使用移除位置编码的CLIP ResNet-50RN50*作为编码器效果最佳。位置编码记录了图像块的空间顺序对于分类等任务很重要但在评估全局质量时可能引入无关的细节干扰移除它能提升鲁棒性。而对于IAA任务标准的CLIP ViT-L/14表现更好因为美学评估可能更需要理解图像各部分之间的语义关系和整体布局ViT的全局注意力机制在此更有优势。实操心得选择编码器时IQA任务可以优先尝试对局部失真模糊、噪声更敏感的卷积网络如ResNet变体并考虑移除位置编码IAA任务则可以优先尝试对全局语义和关系建模更强的视觉TransformerViT。QUASAR的框架设计允许你像更换镜头一样轻松切换编码器以适配不同任务。2.3 聚合函数从散点集合到代表性“观点”有了“高质量锚点集”和“低质量锚点集”这两个大的图像集合我们如何从中提炼出一个统一的、代表性的“观点”来代表整个集合简单地对集合内所有图像的嵌入取算术平均Mean是一种方法但可能不是最优的。因为集合内的图像质量或美学分数本身也有分布简单平均可能会被大量“平庸”的样本所主导而忽略了真正具有代表性的“极好”或“极差”的样本。QUASAR探索了三种聚合策略均值法最直接的方法计算每个锚点集合内所有图像嵌入的均值向量作为质心。偏移均值法考虑到数据分布可能不均匀例如AVA数据集中多数图片分数集中在中段该方法只取分数分布两端如最高分的前30%和最低分的后30%的图像嵌入来计算质心过滤掉中间大量“模棱两可”的样本使质心更具区分度。K-Means聚类法先对每个锚点集合进行K-Means聚类得到N个簇中心然后再对这些簇中心取平均得到最终质心。这种方法试图克服数据分布的不均衡确保不同“子类”例如不同风格的高质量图片都能对最终质心有所贡献而不是被数量最多的子类所淹没。实验表明对于美学评估IAA偏移均值法往往能取得更好的效果。这印证了我们的直觉在美学评判中那些公认的“杰作”和“劣作”所传达的特征信号比大量“还行”的作品更具代表性和区分力。而对于质量评估IQA由于参考图像和失真图像区分通常比较明确简单的均值法通常就足够了。3. 实操过程与核心环节实现理解了核心思想后我们可以一步步拆解QUASAR的实现流程。以下我将结合论文中的细节和实际工程经验提供一个可操作的指南。3.1 环境准备与依赖安装首先你需要一个Python环境建议3.8以上和基本的深度学习库。QUASAR的核心依赖是图像编码器这里以最常用的OpenCLIP库为例。# 创建虚拟环境可选 conda create -n quasr python3.9 conda activate quasr # 安装PyTorch (请根据你的CUDA版本选择) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装OpenCLIP它提供了CLIP、DINOv2等多种预训练模型的便捷接口 pip install open-clip-torch # 其他可能需要的库 pip install numpy pandas scikit-learn pillow requests3.2 构建锚点数据这是QUASAR区别于其他方法的关键一步。你需要准备两个图像列表及其对应的嵌入。步骤一获取或准备锚点数据集对于IQA下载KADIS700k或PIPAL等全参考IQA数据集。你需要区分出ref_imgs参考图像列表和dist_imgs失真图像列表。对于IAA下载AVA或AADB等美学数据集。你需要读取每张图像的人工平均分MOS然后按分数中位数划分为high_aesthetic_imgs高美学图像列表和low_aesthetic_imgs低美学图像列表。步骤二提取锚点图像嵌入使用选定的图像编码器如CLIP RN50批量处理图像提取特征向量。这里需要注意预处理的一致性后续评估的图像必须采用与提取锚点嵌入时完全相同的预处理流程。import open_clip import torch from PIL import Image import torchvision.transforms as T # 1. 加载模型和预处理管道 model_name RN50 # 对于IQA使用RN50* pretrained openai model, _, preprocess open_clip.create_model_and_transforms(model_name, pretrainedpretrained) model.eval() device torch.device(cuda if torch.cuda.is_available() else cpu) model.to(device) # 注意对于IQACLIP-IQA和QUASAR论文中提到他们移除了RN50的位置编码并跳过了resize步骤除SPAQ数据集。 # 为了复现论文结果你可能需要修改OpenCLIP的预处理或使用他们提供的代码。 # 以下是一个标准的预处理流程对于IAA任务 # preprocess T.Compose([ # T.Resize(224, interpolationT.InterpolationMode.BICUBIC), # T.CenterCrop(224), # T.ToTensor(), # T.Normalize(mean[0.48145466, 0.4578275, 0.40821073], std[0.26862954, 0.26130258, 0.27577711]), # ]) def extract_features(image_path_list, preprocess_fn, model, device): 批量提取图像特征 features [] for img_path in image_path_list: image Image.open(img_path).convert(RGB) image_input preprocess_fn(image).unsqueeze(0).to(device) # [1, C, H, W] with torch.no_grad(): image_features model.encode_image(image_input) # [1, feature_dim] image_features / image_features.norm(dim-1, keepdimTrue) # 归一化方便后续计算余弦相似度 features.append(image_features.cpu()) return torch.cat(features, dim0) # [N, feature_dim] # 假设你有两个列表high_quality_paths, low_quality_paths # high_quality_embeddings extract_features(high_quality_paths, preprocess, model, device) # low_quality_embeddings extract_features(low_quality_paths, preprocess, model, device)步骤三计算锚点质心应用选定的聚合函数。这里以最常用的均值法为例。def compute_centroid(embeddings, methodmean, offset_ratio0.3, n_clusters100): 计算一个图像集合的质心。 Args: embeddings: [N, D] 张量N个图像的D维特征。 method: 聚合方法mean, offset_mean, kmeans offset_ratio: 用于‘offset_mean’取分数最高/最低的比例。 n_clusters: 用于‘kmeans’的簇数。 Returns: centroid: [1, D] 质心向量。 if method mean: centroid embeddings.mean(dim0, keepdimTrue) elif method offset_mean: # 假设embeddings已经按照对应的MOS分数排序从高到低 n embeddings.shape[0] k int(n * offset_ratio) # 取前k个高质量/高美学或后k个低质量/低美学 # 这里需要外部传入排序信息简化示例取前k个 centroid embeddings[:k].mean(dim0, keepdimTrue) elif method kmeans: from sklearn.cluster import KMeans kmeans KMeans(n_clustersn_clusters, random_state0).fit(embeddings.numpy()) cluster_centers torch.from_numpy(kmeans.cluster_centers_).float() centroid cluster_centers.mean(dim0, keepdimTrue) else: raise ValueError(fUnknown aggregation method: {method}) # 对质心进行归一化 centroid centroid / centroid.norm(dim-1, keepdimTrue) return centroid # 计算高质量和低质量锚点质心 # high_centroid compute_centroid(high_quality_embeddings, methodmean) # low_centroid compute_centroid(low_quality_embeddings, methodmean)3.3 评估单张图像一旦得到了高质量质心c_high和低质量质心c_low评估新图像就变得非常高效。def quasr_score(image_path, model, preprocess, high_centroid, low_centroid, device): 计算单张图像的QUASAR分数。 Returns: score: 介于0到1之间的分数越高表示质量/美学越好。 # 1. 提取待评估图像的特征 image Image.open(image_path).convert(RGB) image_input preprocess(image).unsqueeze(0).to(device) with torch.no_grad(): image_feature model.encode_image(image_input) # [1, D] image_feature image_feature / image_feature.norm(dim-1, keepdimTrue) # 2. 计算与两个质心的余弦相似度 sim_high torch.nn.functional.cosine_similarity(image_feature, high_centroid.to(device)) sim_low torch.nn.functional.cosine_similarity(image_feature, low_centroid.to(device)) # 3. 通过softmax将相似度转换为0-1之间的分数 # 公式: score exp(sim_high) / (exp(sim_high) exp(sim_low)) score torch.softmax(torch.stack([sim_high, sim_low]), dim0)[0].item() return score # 使用示例 # test_image_path your_test_image.jpg # final_score quasr_score(test_image_path, model, preprocess, high_centroid, low_centroid, device) # print(fQUASAR Score: {final_score:.4f})3.4 批量评估与结果分析在实际应用中我们通常需要评估整个数据集并与人类评分如MOS进行相关性计算以验证指标的有效性。最常用的相关性指标是斯皮尔曼等级相关系数SRCC它衡量预测分数与人类评分在排序上的一致性对单调关系敏感且不假设线性关系。import numpy as np from scipy.stats import spearmanr def evaluate_dataset(image_paths, mos_scores, model, preprocess, high_centroid, low_centroid, device): 评估一个数据集计算预测分数与MOS的SRCC。 predicted_scores [] for img_path in image_paths: score quasr_score(img_path, model, preprocess, high_centroid, low_centroid, device) predicted_scores.append(score) predicted_scores np.array(predicted_scores) mos_scores np.array(mos_scores) # 计算斯皮尔曼相关系数 srcc, _ spearmanr(predicted_scores, mos_scores) return srcc, predicted_scores # 假设你有测试集的路径列表 test_paths 和对应的MOS列表 test_mos # srcc, pred_scores evaluate_dataset(test_paths, test_mos, model, preprocess, high_centroid, low_centroid, device) # print(fSpearman Rank Correlation Coefficient (SRCC): {srcc:.4f})重要提示预处理一致性这是复现论文结果或获得可靠评估的关键。QUASAR论文中发现是否对输入图像进行Resize到224x224对CLIP-IQA的性能影响巨大而对QUASAR的影响较小这体现了QUASAR对预处理流程的鲁棒性。但在你自己的实践中必须保证构建锚点与评估图像时采用完全相同的预处理参数包括resize尺寸、裁剪方式、归一化均值/方差。一个常见的错误是锚点用了一套预处理测试时用了另一套这会导致特征空间不一致结果毫无意义。4. 性能表现与关键发现解读QUASAR论文在8个主流基准数据集上进行了全面测试包括TID2013、KADID10k全参考IQA、KonIQ-10k、LIVE-itW、SPAQ无参考IQA以及AVA、TAD66kIAA。其核心结论可以概括为以下几点4.1 全面超越CLIP-IQA如表1所示QUASAR在几乎所有数据集上的SRCC都显著高于CLIP-IQA。特别是在最具挑战性的TAD66k美学数据集和包含丰富失真类型的TID2013、KADID10k质量数据集上优势最为明显。这直接证明了图像锚点比文本提示能更有效、更稳定地引导基础模型完成评估任务。4.2 对预处理和模型架构的鲁棒性图4和图5的结果非常有意思。当改变预处理策略例如强制将所有输入图像Resize到224x224时CLIP-IQA的性能在多个数据集上如SPAQ, KonIQ10k出现了显著下降。这是因为CLIP-IQA严重依赖文本提示与图像特征的跨模态对齐输入图像尺寸的改变可能破坏了CLIP视觉编码器尤其是ViT位置编码与训练时的一致性从而影响了特征提取。而QUASAR则表现出了惊人的鲁棒性性能波动很小。这是因为QUASAR完全在图像特征空间内操作其“高质量”和“低质量”的概念是通过大量图像样本的统计特征质心定义的。只要预处理方式在构建锚点和评估时保持一致特征空间的相对关系就是稳定的。这使得QUASAR在实际部署中更可靠无需纠结于复杂的预处理技巧。4.3 “小样本”有效性锚点数据并非越多越好一个反直觉但至关重要的发现是构建高质量的锚点并不需要海量数据。图6显示当使用KADIS700k84万张图作为锚点数据时即使只随机抽取其中很小一部分比如1%约8400张图来计算质心QUASAR的性能就已经接近使用全部数据时的饱和水平。对于更小的PIPAL数据集2.3万张失真图仅用几百张图就能达到不错的性能。这对实际应用意味着什么意味着计算和存储成本可以大大降低。你不需要为锚点保存数百万张图片的原始文件只需要预先计算并存储一个代表性的子集的嵌入特征甚至只需要存储最终的两个质心向量每个只有1024或768维。这使得QUASAR可以作为一个轻量级的插件轻松集成到各种图像处理流水线或移动端应用中。4.4 美学评估关键在于筛选“意见领袖”对于美学评估IAA图7的消融实验揭示了更深层的规律。当使用“偏移均值法”构建锚点时性能随着偏移量即只取分数最高/最低的那部分图片的增加而提升并在一个较高的偏移比例达到峰值。这说明在美学评判中那些获得极端评分极高或极低的图片比大量评分中庸的图片更能清晰地定义“美”与“不美”的边界。这类似于社会心理学中的“意见领袖”概念。在定义什么是“好品味”时参考顶尖艺术家和公认的拙劣作品比参考大众的平均选择更有效。QUASAR的“偏移均值法”自动实现了这种筛选让锚点质心由最具代表性的“意见领袖”图像所塑造从而获得了更强的判别力。5. 常见问题、局限性与实战建议尽管QUASAR表现优异但在实际应用前必须清楚它的边界和需要注意的坑。5.1 锚点数据的选择偏差QUASAR的性能上限受限于锚点数据集的质量和代表性。如果你用一个只包含风景照片的高质量锚点集去评估人像照片结果可能不准确。因为模型学到的“高质量”特征可能包含了过多的“自然景观”语义而非通用的技术质量特征。实战建议对于通用评估应尽可能使用覆盖广泛场景、内容、失真类型的权威数据集如KADIS700k for IQA, AVA for IAA。对于垂直领域如医学影像、卫星图片、动漫插图理想情况下应该构建领域专用的锚点数据集。如果数据有限可以尝试用领域数据在基础模型的嵌入空间中进行最近邻搜索从大型通用数据集中筛选出视觉特征最相似的子集来构建锚点这是一种可行的迁移策略。5.2 对“主观性”的无力QUASAR如同所有数据驱动的IAA方法其美学评估本质上是学习数据集中人类评分的“平均偏好”。如果锚点数据集如AVA的评分存在文化、地域或群体性偏差QUASAR就会继承这些偏差。它无法定义“绝对的美”只能反映“相对于给定锚点集的审美趋势”。5.3 计算成本分析QUASAR的推理过程分为两步特征提取使用大型基础模型如CLIP ViT-L/14对单张图像进行前向传播。这是主要的计算开销。论文中给出在V100 GPU上处理一张224x224的图像约需0.023秒内存占用约2.2GB针对ViT-L模型。处理高分辨率图片如6MP时内存和耗时会增加。评分计算得到特征向量后只需计算两次余弦相似度和一次softmax开销微乎其微复杂度为O(D)其中D是特征维度如768。因此瓶颈在于特征提取。在实时性要求高的场景如过滤海量用户上传图片需要对每张图都运行一次大型模型成本需要考虑。一种优化思路是使用更轻量级的编码器如较小的ViT或MobileNet架构的CLIP变体尽管可能会牺牲一些精度。5.4 与业务逻辑的结合QUASAR输出一个0到1之间的分数。如何将这个分数转化为业务决策直接设定一个固定阈值如0.7算高质量是危险的因为分数的绝对数值与锚点集强相关。实战建议更可靠的方式是使用相对排序或动态阈值。相对排序对一批待筛选的图片用QUASAR打分然后取Top-K。这适用于内容推荐、精选图集生成等场景。动态阈值在业务系统上线初期可以收集一小批经过人工审核的图片计算其QUASAR分数的分布根据业务需求如希望过滤掉多少比例的低质内容来确定一个合适的阈值。并需要定期用新数据校准这个阈值。5.5 失败案例分析何时QUASAR可能失灵根据论文和我们的经验QUASAR在以下情况可能表现不佳对抗性样本精心构造的、能欺骗人类视觉的噪声图像也可能在特征空间里靠近高质量质心。风格极端化如果待评估图像的艺术风格例如抽象表现主义、故障艺术完全不在锚点数据集的分布内其低质量特征可能被误判为一种“高美学”的新颖性。内容绝对主导如果一张图像的内容本身极具吸引力如罕见的自然奇观即使其技术质量很差模糊、噪点多人类评分也可能很高。QUASAR能否正确评估取决于其编码器是否将“内容吸引力”和“技术质量”编码在了特征空间的可分离维度上。这仍是一个开放问题。QUASAR为我们提供了一把强大且灵活的尺子但它并非万能。理解其原理、优势与局限结合具体的业务场景和数据特点进行定制化应用才能最大程度发挥其价值。它的出现标志着图像评估正在从依赖特定任务训练的“专家系统”走向利用通用视觉基础模型的“通才评估”的新范式。