[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?=αk?H,???wk?=αk?W
α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?=hk?wk?/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)(ti?tj?)四舍五入到最接近的整數。

為了在不同尺度之間對齊圖像塊,來自不同尺度的圖像塊都映射到一個同樣的表格 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}Q0?RD 逐元素地加到所有的 DDD 維的原分辨率圖像的pathch embedding上,Qk∈RDQ_k\in \mathbb{R}^{D}Qk?RD 分別逐元素地加到所有 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.pswp.cn/news/532821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532821.shtml
英文地址,請注明出處:http://en.pswp.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;應當能做到會用并…

linux修改主機名后oracle em控制臺起不來,更改計算機名后導致Oracle dbconsole無法啟動問題解決方法...

今天不知道哪根筋搭歪了&#xff0c;看著Oracle EM控制臺的主機名WIN-LOSGI0TCOG0亂七八糟的很不爽&#xff0c;就把它給改了。然后Oracle EM就上不去了&#xff0c;Oracledbconsole服務起不來&#xff0c;我嘗試把所有“WIN-LOSGI0TCOG0”替換成“ggsjy”&#xff0c;找了好多…

Shell腳本多行換行報錯:- unrecognized arguments- \

shell error: unrecognized arguments: \ 在使用linux長命令時&#xff0c;我們通常會用一個shell腳本加\分行的形式來更清晰展示參數。 這時有一個注意事項&#xff1a;在\后必須緊跟回車&#xff0c; 否則會導致后面的參數無法傳入。因為這時程序會將后面的參數算作一條新命…

shell腳本長命令帶換行 注釋方法

shell腳本長命令帶換行 注釋方法 命令行傳參 在訓練深度學習網絡時&#xff0c;我們每次實驗通常會有許多超參數需要設置&#xff0c;如batch size, epoch, gpu id, arch甚至還有一些具體的模型結構等。這事我們通常使用python模塊argparse&#xff0c;在命令行進行傳參。 比…

php對中英文字符串進行截取,利用php怎么對中英文混合的字符串進行截取

利用php怎么對中英文混合的字符串進行截取發布時間&#xff1a;2021-01-04 15:31:24來源&#xff1a;億速云閱讀&#xff1a;103作者&#xff1a;Leah利用php怎么對中英文混合的字符串進行截取&#xff1f;很多新手對此不是很清楚&#xff0c;為了幫助大家解決這個難題&#xf…

Linux查找命令find、loacte、whereis、which、type梳理

Linux查找命令find、loacte、whereis、which、type梳理 Linux操作系統中有5種常用的查找命令&#xff1a;find&#xff0c;locate&#xff0c;whereis&#xff0c;which&#xff0c;type&#xff0c;他們分別用于查找不同的東西&#xff0c;本文將就他們各自的功能進行一下梳理…

php數據關系圖,如何利用navicat查看數據表的ER關系圖

文章背景&#xff1a;(相關推薦&#xff1a;navicat)由于工作需要&#xff0c;現在要分析一個數據庫&#xff0c;然后查看各個表之間的關系&#xff0c;所以需要查看表與表之間的關系圖&#xff0c;專業術語叫做ER關系圖。默認情況下&#xff0c;Navicat顯示的界面是這樣的&…

Linux軟鏈接的使用

Linux軟鏈接的使用 轉自&#xff1a;https://www.cnblogs.com/sueyyyy/p/10985443.html&#xff0c;本博文僅對原博排版稍微優化。 更為細致的硬鏈接、軟鏈接的介紹可參考&#xff1a;Linux中的硬鏈接和軟鏈接 另外&#xff0c;提供筆者對軟連接的一個最簡單的理解&#xff…

oracle死鎖優化,Oracle性能優化之LockContention(轉)

1、概念DML事務使用row-level locks,查詢不會鎖定數據。鎖有兩種模式&#xff1a;exlusive、share。鎖的類型&#xff1a;? DML or data locks:– Table-level locks(TM)– Row-level locks(TX)? DDL or dictionary locks一個transaction至少獲得兩個鎖&#xff1a;一個共享的…

Linux中g++與gcc的區別

轉自&#xff1a;https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我們常用vs來編譯編寫好的C和C代碼&#xff1b;vs把編輯器&#xff0c;編譯器和調試器等工具都集成在這一款工具中&#xff0c;在Linux下我們能用什么工具來編譯所編寫好的代碼呢&#…

linux系統可以用迅雷嗎,在Linux系統下使用wine運行迅雷5的方法

在Linux系統下使用wine運行迅雷5的方法一、下載ies4linux去 http://www.tatanka.com.br/ies4linux/page/Installation 下載ies4linux的文件包(目前版本為2.99)&#xff0c;然后解壓縮。注意&#xff1a;這個網站被大陸和諧了&#xff0c;需要跳墻。至于怎么跳&#xff0c;諸位就…

從C源代碼到可執行文件的四個過程:預處理、編譯、匯編、鏈接

從C源代碼到可執行文件的四個過程&#xff1a;預處理、編譯、匯編、鏈接 總覽 我們將在Linux操作系統中&#xff0c;以C語言的Hello World程序為例&#xff0c;用gcc編譯器分步執行這四個步驟。 我們有再熟悉不過的HelloWorld程序&#xff0c;hello.c&#xff1a; #include …

uboot引導linux內核,u-boot啟動內核的幾種方式

1.uboot啟動內核的代碼縮減如下&#xff1a;s getenv ("bootcmd");debug ("### main_loop: bootcmd\"%s\"\n", s ? s : "");if (bootdelay > 0 && s && !abortboot (bootdelay)){run_command (s, 0);}2.假設boot…

跟我一起寫makefile: 概述、介紹、規則

跟我一起寫makefile 概述、介紹、規則 轉自&#xff1a;https://seisman.github.io/how-to-write-makefile/rules.html 概述 什么是makefile&#xff1f;或許很多Windows的程序員都不知道這個東西&#xff0c;因為那些Windows的集成開發環境&#xff08;integrated developm…

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設置網站帳號信息設置主機信息設置服務器帳號設置字符集編碼設置好了…

strict=False 但還是size mismatch for []: copying a param with shape [] from checkpoint,the shape in cur

strictFalse 但還是size mismatch for []: copying a param with shape [] from checkpoint,the shape in cur 問題 我們知道通過 model.load_state_dict(state_dict, strictFalse)可以暫且忽略掉模型和參數文件中不匹配的參數&#xff0c;先將正常匹配的參數從文件中載入模…

linux中權限765啥意思,Linux中的文件權限

Linux系統中的每一個文件都與多種權限類型相關聯。在這些權限中&#xff0c;我們主要和三類權限打交道&#xff1a;用戶(user)、用戶組(group)和其他用戶(others)。用戶是文件的所有者&#xff1b;用戶組是指和文件所有者在同一組的其他多個用戶的集合&#xff1b;其他用戶是除…