[2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 论文简析

[2021-ICCV] MUSIQ: Multi-scale Image Quality Transformer 论文简析

论文:https://arxiv.org/abs/2108.05997

代码:https://github.com/google-research/google-research/tree/master/musiq

概述

当前SOTA的IQA(图像质量评估)模型都是基于CNN的,基于CNN的模型通常受到在一个批次内,图像尺寸必须固定的限制,所以其输入图像通常会进行缩放或者裁剪,当然这会导致图像质量的下降。为了解决这个问题,本文设计了一个多尺度的图像质量transformer(multi-scale image quality transformer)来处理不同尺寸、不同长宽比的原分辨率图像。通过多尺度的图像表示,本文的模型可以捕捉到不同粒度(granularity)的图像质量。另外,本文提出了一种新型的基于哈希的(hash-based)二维空间嵌入方法和一种尺度嵌入,来作为多尺度表示中的位置嵌入。

在这里插入图片描述

上图中右侧(b)图是传统的CNN模型的做法,必须要缩放或者裁剪来固定输入图像尺寸,而这无疑会影响原图的图像质量;而左侧(a)图则是本文的多尺度图像质量transformer,基于图像块可以以多尺度的形式直接处理原图。

另外,由于MUSIQ只改变输入编码,因此它可以适应任何transformer变体,也就是说,本文提出的创新点是在编码阶段的处理方法,得到输入编码之后可以放到Swin、CvT之类的新型transformer里都是可以的。

本文的创新点总结如下:

  1. 本文提出一种基于图像块的多尺度图像质量transformer(multi-scale image quality transformer MUSIQ),可以处理不同尺寸、不同长宽比的全尺寸输入图像,并且可以提取多尺度的特征。
  2. 本文提出了一种新型的基于哈希的(hash-based)二维空间嵌入方法和一种尺度嵌入,来帮助transformer捕获空间间和尺度间的信息。
  3. 本文提出的MUSIQ在四个大规模IQA数据集上取得SOTA性能。

方法

模型框架

在这里插入图片描述

MUSIQ的整体结构如上图所示,首先得到输入图像的多尺度表示,包括原图和固定长宽比缩放(ARP(aspect ratio preserved) resized)的变体。不同尺度的图像被分成固定大小的图像块,然后被送入到模型中,由于图像块是来自不同的空间分辨率的图像,我们需要高效地将这些多种长宽比、多种尺度的输入编码为一个token序列,捕获像素、空间和尺度信息。

为此,本文设计了三个编码模块:

  1. 图像块编码模块
  2. 基于哈希的空间嵌入模块
  3. 可学习的尺度嵌入

分别对来自多尺度图像的图像块本身、每个图像块的二维空间位置、不同的尺度进行编码。

在将多尺度的图像输入编码为一个token序列之后,我们先准备一个额外的可学习的分类头classification head(CLS)。transformer encoder输出中的CLS token将作为最终的图像表示。然后在最后加一个全连接层来预测图像质量分。由于MUSIQ只改变输入编码,因此它可以适应任何transformer变体,也就是说,本文提出的创新点是在编码阶段的处理方法,得到输入编码之后可以放到Swin、CvT之类的新型transformer里都是可以的。

多尺度图像块嵌入

ARP resize = aspect ratio preserved resize 即固定长宽比缩放,后面不在赘述,直接简称ARP resize。

为了同时捕获局部信息和全局信息(各种多尺度方法的老说辞了^^),本文提出对图像的多尺度表示进行建模。

记全尺寸原图的高、宽、通道数分别为 H,W,CH,W,CH,W,C, 使用高斯核对全尺寸原图进行ARP resize(保持长宽比的缩放)之后的多尺度图像的高、宽、通道数分别为 hk,wk,Ch_k,w_k,Chk,wk,C ,其中 k=1,…,Kk=1,\dots,Kk=1,,KKKK是每个输入的ARP resize变体的个数。为了将多尺度输入对齐,从而有一致的全局视角,将每个多尺度变体的长边固定为 LkL_kLk ,从而:
αk=Lk/max(H,W),hk=αkH,wk=αkW\alpha_k=L_k/max(H,W),\ \ \ h_k=\alpha_kH, \ \ \ w_k=\alpha_kW αk=Lk/max(H,W),   hk=αkH,   wk=αkW
αk\alpha_kαk 即为每个尺度的缩放因子。

从每个多尺度图像中切分出尺寸为 PPP 的正方形图像块。对于高、宽不是 PPP 的整数倍的图像,用零填充(这里笔者有个问题:既然都padding 0了,那不就相当于也将输入的尺寸固定了吗,既然可以padding,那什么网络都能处理原尺寸图像啊,没搞懂这样设计还有什么意义)。每个图像块被图像块编码器模块patch encoder module编码为 DDD 维的嵌入,DDD​ 即为transformer中的隐层token尺寸。本文的patch encoder module使用了5层的ResNet而非线性映射。将patch encoder module输出的图像块嵌入拼接起来就得到输入图像的多尺度映射序列,来自原尺寸图像和ARP resize的多尺度图像的图像块个数就分别为:N=HW/P2N=HW/P^2N=HW/P2nk=hkwk/P2n_k=h_kw_k/P^2nk=hkwk/P2

对于输入图像尺寸不同导致的 N,nkN,n_kN,nk 不同,从而序列长度不同的问题。本文采用了NLP中常用的pad+mask的方式来得到固定长度的输入,从而进行训练。前面提到过ARP resize图像的长边固定在 LkL_kLk​ ,因此有 nk<=Lk2/P2=mkn_k<=L_k^2/P^2=m_knk<=Lk2/P2=mk ,所以直接pad到 mkm_kmk 即可。

基于哈希的二维空间嵌入

传统的固定长度的位置嵌入无法适应可变分辨率的输入,并且也无法对齐来自不同尺度但空间位置接近的图像块。

本文认为一个有效地适合MUSIQ的位置嵌入应当满足以下条件:

  1. 可以在不同长宽比、不同分辨率下有效地为图像块的空间信息进行编码;
  2. 不同尺度下空间位置接近的图像块应当有相近的空间嵌入
  3. 便于实现,不会干扰到transformer attention

据此,本文提出了一种基于哈希的二维空间嵌入(HSE),记某个图像块的位置在第 iii 行,第 jjj 列,被哈希到 G×GG\times GG×G 的网格中的相应的元素。该网格中的每一个元素是一个 DDD 维的嵌入向量。即有一个可学习的矩阵 T∈RG×G×DT\in \mathbb{R}^{G\times G\times D}TRG×G×D ,输入尺寸为 H,WH,WH,W ,对于位置在 (i,j)(i, \ j)(i, j) 的图像块,其空间嵌入被定义为 TTT 中的 (ti,tj)(t_i,t_j)(ti,tj) 位置的元素:
ti=i×GH/P,tj=j×GW/Pt_i=\frac{i\times G}{H/P},\ \ \ t_j=\frac{j\times G}{W/P} ti=H/Pi×G,   tj=W/Pj×G
DDD 维的空间嵌入 Tti,tjT_{t_i,t_j}Tti,tj 逐元素地加到patch embedding上。为了快速查找,将(ti,tj)(t_i,t_j)(titj)四舍五入到最接近的整数。

为了在不同尺度之间对齐图像块,来自不同尺度的图像块都映射到一个同样的表格 TTT。这样,在空间上位置接近但是来自不同的尺度的图像块也会被映射到TTT中接近的嵌入上。因为iiiHHH以及jjjWWW与尺寸调整因子ααα成比例变化。

TTT 的尺寸 GGG 存在一个trade-off,GGG​ 过小会导致过多的哈希碰撞,从而使得模型无法分辨空间位置接近的图像块;过大则会导致浪费内存并且需要更多的分辨率来进行训练。

尺度嵌入

由于本文对所用的图像复用一个相同的哈希矩阵,HSE是无法分别来自不同尺度的图像块的,因此本文引入一个额外的尺度嵌入SCE来帮助模型分辨来自不同尺度的图像块。

本文将SCE定义为一个可学习的嵌入 Q∈R(K+1)×DQ\in \mathbb{R}^{(K+1)\times D}QR(K+1)×D ,因为输入有 KKK 个尺度的变体。Q0∈RDQ_0\in \mathbb{R}^{D}Q0RD 逐元素地加到所有的 DDD 维的原分辨率图像的pathch embedding上,Qk∈RDQ_k\in \mathbb{R}^{D}QkRD 分别逐元素地加到所有 kkk 尺度的patch embedding上。

预训练和微调

本文预训练还是在ImageNet上做的,预训练阶段会使用各种数据增广的方法来提升性能。

微调则是在图像质量和美学质量数据集上进行,在微调阶段,保持原尺寸图像作为输入,数据增广只采用对图像质量无影响的水平翻转。

实验

吊打友商部分的实验就不在这里说了,具体指标大家可以到原文中去看。我们主要看一下和方法本身有关的消融实验和可视化实验。

ARP的重要性

本实验旨在说明固定长宽比缩放(ARP)的重要性,上面几个CNN和ViT的方法是直接介绍384/224的正方形square resize的输入,对于本文多尺度方法分别做了正方形square resize的的多尺度输入,和保持原图长宽比的多尺度输入。实验结果成功证实了保持长宽比在图像质量评估中的重要作用。

在这里插入图片描述

除此之外,作者还用折线图配合一张图像破坏长宽比的形式直观地展现了ARP的作用。图中蓝线,即带ARP的本文方法对图像长宽比的变化非常敏感,可以敏锐地察觉到图像长宽比变化对图像质量的影响。而其他在训练时接收的事固定正方形输入的模型则感知不到这种长宽比的变化带来的影响。

在这里插入图片描述

多尺度结合的全尺寸输入的有效性

本实验展示的是多尺度、全尺寸输入的有效性。实验结果如下表,可以看到多尺度输入性能优于单一尺度输入 ,原尺寸输入(full)性能优于固定尺寸输入,并且多尺度结合训练的性能也比多个尺度分别训练再结合

在这里插入图片描述

下面的注意力可视化实验也说明了多尺度学习的作用(注意一下三列分辨率是不同的,这里为了展示缩放到同样大小来适应表格)。可以看到在高分辨率的图像中,模型更加关注细节信息;而在低分辨率的图像中,模型更加关注全局信息。

在这里插入图片描述

下面是基于哈希的二维空间嵌入的每个网格位置 (i,j)(i,j)(i,j) 与其他位置处嵌入的余弦相似度。空间位置嵌入是为了反应二维图像的空间信息,通俗点说就是行列信息,即某个图像块在二维图像的哪一行,哪一列。可以看到除了和自己的相似度最高之外,和同行同列的空间嵌入的相似度也较高。这时符合我们的预期的,说明二维空间嵌入可以准确地表征图像块的行列信息。

在这里插入图片描述

基于哈希的空间嵌入和尺度嵌入的有效性

正文最后一个消融实验对比了有无本文的基于哈希的空间嵌入和有无尺度嵌入的情况下的模型的性能表现。可以看到,这两个嵌入是必需的。

在这里插入图片描述

在这里插入图片描述

还有一个实验对比了不同的图像块编码模块,还是本文的方法较优。

在这里插入图片描述

本文的概述、方法和实验就简单地介绍到这里,已经囊括方法思路和大部分细节及正文实验,此外还有一些附录实验,有兴趣的话请移步到原文中查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...

最近又有网友遇到在windows2008服务器上安装ORACLE软件时到2%就卡住不动的问题&#xff0c;下面是该网友的描述&#xff1a;oralce 11g r2 windows server 2008 R2安装到最后一步复制数据文件时卡到2% 不走了内存一直飙升求解决这个问题前段时间也有人遇到过&#xff0c;但是他…

手把手教你入门Git --- Git使用指南(Linux)

手把手教你入门Git — Git使用指南&#xff08;Linux&#xff09; 系统&#xff1a;ubuntu 18.04 LTS 本文所有git命令操作实验具有连续性&#xff0c;git小白完全可以从头到尾跟着本文所有给出的命令走一遍&#xff0c;就会对git有一个初步的了解&#xff0c;应当能做到会用并…

php数据关系图,如何利用navicat查看数据表的ER关系图

文章背景&#xff1a;(相关推荐&#xff1a;navicat)由于工作需要&#xff0c;现在要分析一个数据库&#xff0c;然后查看各个表之间的关系&#xff0c;所以需要查看表与表之间的关系图&#xff0c;专业术语叫做ER关系图。默认情况下&#xff0c;Navicat显示的界面是这样的&…

Linux中g++与gcc的区别

转自&#xff1a;https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C代码&#xff1b;vs把编辑器&#xff0c;编译器和调试器等工具都集成在这一款工具中&#xff0c;在Linux下我们能用什么工具来编译所编写好的代码呢&#…

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接

从C源代码到可执行文件的四个过程&#xff1a;预处理、编译、汇编、链接 总览 我们将在Linux操作系统中&#xff0c;以C语言的Hello World程序为例&#xff0c;用gcc编译器分步执行这四个步骤。 我们有再熟悉不过的HelloWorld程序&#xff0c;hello.c&#xff1a; #include …

linux内核中cent文件夹,Centos 中如何快速定制二进制的内核 RPM 包

1、rpm 制作前的环境准备&#xff1a;yum install -y ncurses-devel qt-devel rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel newt-devel python-devel zlib-devel bc2、准…

TabError- inconsistent use of tabs and spaces in indentation 查验及解决方法

TabError: inconsistent use of tabs and spaces in indentation 查验及解决方法 报错代码 def eccv16(pretrainedTrue):model ECCVGenerator()if(pretrained):import torch.utils.model_zoo as model_zoomodel.load_state_dict(torch.load(/home/ps/.cache/torch/hub/check…

linux用xshell编辑文件,Linux远程管理器xshell和xftp使用教程

Xshell 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xftp 是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。安装完毕后打开xshell设置网站帐号信息设置主机信息设置服务器帐号设置字符集编码设置好了…

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法 含义解释 FLOPS&#xff1a;注意全大写&#xff0c;是floating point operations per second的缩写&#xff08;这里的大S表示second秒&#xff09;&#xff0c;表示每秒浮点运算次数&#xff0c;理解为计算速度。是一个衡量…

科普 | 单精度、双精度、多精度和混合精度计算的区别是什么?

科普 | 单精度、双精度、多精度和混合精度计算的区别是什么? 转自&#xff1a;https://zhuanlan.zhihu.com/p/93812784 我们提到圆周率 π 的时候&#xff0c;它有很多种表达方式&#xff0c;既可以用数学常数3.14159表示&#xff0c;也可以用一长串1和0的二进制长串表示。 …

linux设备驱动之串口移植,Linux设备驱动之UART驱动结构

一、对于串口驱动Linux系统中UART驱动属于终端设备驱动&#xff0c;应该说是实现串口驱动和终端驱动来实现串口终端设备的驱动。要了解串口终端的驱动在Linux系统的结构就先要了解终端设备驱动在Linux系统中的结构体系&#xff0c;一方面自己了解的不够&#xff0c;另一发面关于…

NVIDIA英伟达的Multi-GPU多卡通信框架NCCL

NVIDIA英伟达的Multi-GPU多卡通信框架NCCL 笔者注&#xff1a;NCCL 开源项目地址&#xff1a;https://github.com/NVIDIA/nccl 转自&#xff1a;https://www.zhihu.com/question/63219175/answer/206697974 NCCL是Nvidia Collective multi-GPU Communication Library的简称&…

C语言n个坐标点间的最大距离,c语言已知两点坐标,求另一点到穿过这两点的直线最短距离。...

c语言已知两点坐标&#xff0c;求另一点到穿过这两点的直线最短距离。以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;c语言已知两点坐标&#xff0c;求另一点到穿过这两点的直线最短距离。#…

[分布式训练] 单机多卡的正确打开方式:理论基础

[分布式训练] 单机多卡的正确打开方式&#xff1a;理论基础 转自&#xff1a;https://fyubang.com/2019/07/08/distributed-training/ 瓦砾由于最近bert-large用的比较多&#xff0c;踩了很多分布式训练的坑&#xff0c;加上在TensorFlow和PyTorch之间更换&#xff0c;算是熟…

s3c2416开发板 linux,S3C2416移植内核Linux3.1的wm9713声卡过程

移植内核的声卡驱动。原因没有声卡驱动&#xff0c;WM9713声卡驱动移植(原来的内核有UDA1341声卡驱动&#xff0c;我们再次基础上直接修改)1、直接复制内核得到三个文件:s3c2416_wm9713.c , wm9713.c , s3c2416_ac97.c.linux-3.1\sound\soc\codecs\Wm9713.c---->wm9713.c;li…

c语言六位抢答器课程设计,51单片机八路抢答器课程设计

;说明&#xff1a;本人的这个设计改进后解决了前一个版本中1号抢答优先的问题&#xff0c;并增加了锦囊的设置&#xff0c;当参赛选手在回答问题时要求使用锦囊&#xff0c;则主持人按下抢答开始键&#xff0c;计时重新开始。;八路抢答器电路请看下图是用ps仿真的&#xff0c;已…

ELF文件详解—初步认识

ELF文件详解—初步认识 转自&#xff1a;https://blog.csdn.net/daide2012/article/details/73065204 一、 引言 在讲解ELF文件格式之前&#xff0c;我们来回顾一下&#xff0c;一个用C语言编写的高级语言程序是从编写到打包、再到编译执行的基本过程&#xff0c;我们知道在C…

linux下ora 01110,ORA-01003ORA-01110

Oracle 9i数据库登录时&#xff0c;提示ORA-01003&ORA-01110&#xff0c;大概意思是数据文件存储介质损坏。startup nomount,正常&#xff1b;alter database mount,也正常&#xff1b;alter database open,提示如下&#xff1a;alter database open*ERROR 位于第 1 行:ORA…

x11转发:通过ssh远程使用GUI程序

x11转发&#xff1a;通过ssh远程使用GUI程序 我们常常使用ssh服务远程操控服务器&#xff0c;大多数操作我们都可以通过命令行命令来实现。 ssh远程无法查看GUI程序 现在&#xff0c;笔者在x11-test目录下放入一张图片test.jpg&#xff0c;并通过opnencv-python写一个简单的…

操作系统引导详细过程

操作系统引导详细过程 转自&#xff1a;https://blog.csdn.net/lijie45655/article/details/89366372 就直观而言&#xff0c;我们所见到计算机启动的过程是&#xff1a;按下电脑开机键&#xff0c;系统在黑色的屏幕下打印出一些英文语句、然后进入进度条状态&#xff0c;最后…