主頁 >  其他 > 揭秘 VMAF 視頻質量評測標準

揭秘 VMAF 視頻質量評測標準

2020-12-09 08:11:14 其他

作者:楊洋,阿里云技術專家,從事直播相關媒體處理引擎開發

背景

影像質量的衡量是個老問題,對此人們提出過很多簡單可行的解決方案,例如均方誤差(Mean-squared-error,MSE)、峰值信噪比(Peak-signal-to-noise-ratio,PSNR)以及結構相似性指數(Structural Similarity Index,SSIM),這些指標最初都是被用于衡量影像質量的,隨后被擴展到視頻領域,
這些指標通常會用在回圈用在編碼內部,可用于對編碼決策進行優化并估算最終編碼后視頻的質量,但是由于這些演算法衡量標準單一,缺乏對畫面前后序列的總體評估,導致計算的結果很多情況下與主觀感受并不相符,

視頻質量

阿里云視頻云每天都會生產、處理大量來自不同應用場景、不同編碼型別的視頻資料,除了采用窄帶高清等技術以外,我們還會借助 VMAF 標準對處理后的視頻做質量評估,形成 媒體生產-->畫質評估-->編碼優化-->產品迭代 的技術倍訓,基于這套反饋機制,對不同的場景做針對性優化,達到畫質最優、成本最低的效果,

VMAF 介紹

面對不同特征的源內容、失真型別,以及扭曲程度,每個基本指標都各有優劣,缺少一個通用的、能反應主觀意識的畫質評估手段,VMAF (Video Multimethod Assessment Fusion) 由 Netflix 開發并開源,利用大量的主觀資料作為訓練集,通過機器學習的手段將不同評估維度的演算法進行“融合”,得到一個能準確反映主觀意志的畫質評價標準,
VMAF 主要包括3種指標:visual quality fidelity(VIF)、detail loss measure(DLM)、temporal information(TI),其中 VIF 和 DLM 是空間域的也即一幀畫面之內的特征,TI 是時間域的也即多幀畫面之間相關性的特征,這些特性之間融合計算總分的程序使用了訓練好的 SVM 來預測,
作業流程如圖:
file

VMAF 模型分析

VMAF 默認提供了 vmaf_float_v0.6.1.pkl 模型,可以分為 HDTV、Phone、4K 超解析度三種使用模式,滿足不同播放場景下的畫質評測需求,

1.HDTV 模式

HDTV 是針對客廳電視的場景設計的,參照 SMPTE EG-18-1994 標準,所有訓練集的主觀資料 (EMOS) 是遵循這種方式收集的:將視頻 scale 成 1080p,并以三倍于螢屏高度 (3H) 的觀看距離或 60 像素/度的角度解析度進行顯示,
可以說,VMAF 模型試圖捕捉的是 3H 外顯示的 1080p 視頻的感知質量,這是默認 VMAF 模型的隱含假設,因此,我們在對除 1080p 以外的其他解析度進行 VMAF 計算時,需要將視頻先 scale 成1080p,才能保證結果的準確性,

file

試想一下,如果將一個 480p 的視頻用 HDTV 模式來做評測,會發生什么情況呢?這就好像 480p 視頻是從 1080p 視頻中剪切出來的一樣,如果 480p 視頻的高度為 H ',則 H = 1080 / 480 * H ',其中 H 為所顯示的 1080p 視頻的高度,因此,VMAF 建模的是 3H = 6.75H ' 的觀看距離,
換句話說,如果你計算 480p 解析度的視頻對的 VMAF,你將預測觀看距離是其高度的 6.75 倍時的感知質量,在此觀看距離會隱藏大量主觀畫質的感知細節,從而讓 VMAF 分數可能偏高,

2.Phone 模式

默認的 vmaf_float_v0.6.1.pkl 模型也提供了移動設備場景的畫質評估功能,可以通過引數 “--phone-model” 開啟,在此模式下,每個受試者在他/她感到舒適的距離觀看視頻,
在訓練過的模型中,分數在 0 - 100 之間,與主觀投票量表呈線性關系,粗略的 “bad” 映射為20分,“excellent” 映射為 100 分,
橫向對比可以發現,如果將一部 540p 的視頻分別放在標準電視、手機設備、4K 設備顯示,在手機設備上的 VMAF 質量會比其他兩者更快的逼近 100 分的臨界值,

file

3. 4K 模式

由于 vmaf_float_v0.6.1.pkl 模型的訓練集中包括了 4K 和 1080p 的視頻源,當需要對比 A/B 兩個 4K 視頻哪一個畫質更好時,也能使用此模型,
但是由于默認模型采用的是 1080p + 3H 觀看距離的方式采集的 EMOS 資料,無法算出準確的 4K VMAF 分數,Netflix 后來專門提供了 vmaf_4k_v0.6.1.pkl 用于 4K 的畫質評估,

VMAF 核心模塊

VMAF 基于 SVM 的 nuSvr 演算法,在運行的程序中,根據事先訓練好的 model,賦予每種視頻特征以不同的權重,對每一幀畫面都生成一個評分,最終以均值演算法進行歸總(也可以使用其他的歸總演算法),算出該視頻的最終評分,其中主要的幾個核心模塊如下:

file

VMAF 分別用 python 和 C++ 實作了兩套介面,同時提供了 C 版本的 lib 庫,最新版本的 ffmpeg 已經將 VMAF 作為一個filter集成進去,
下面我們分析下各個模塊的作用:

Asset

一個 Asset 單元,包含了一個正在執行的任務資訊,比如目標視頻與原始視頻的幀范圍,低解析度視頻幀上采樣資訊等(VMAF 會在特征提取前通過上采樣的方式保證兩個視頻解析度相同),

Executor

Executor 會取走并計算 Asset 鏈表中每一個 Asset 單元,將執行結果回傳到一個 Results 鏈表中,Executor 類是 FeatureExtractor 與 QualityRunner 的基類,它提供了一些基函式,包括 Results 的操作函式、FIFO 管道函式、clean 函式等,

Result

Result 是以 key-value 形式,將 Executor 執行的結果存盤起來,key 存盤的是 “FrameNum” 或者質量分數的型別(VMAF_feature_vif_scale0_score 或 VMAF_feature_vif_scale1_score 等),value 存盤的是一系列分值組成的鏈表,
Result 類也提供了一個匯總工具,將每個單元的質量分數匯總成一個值,默認的匯總演算法是“均值演算法”,但是 Result.set_score_aggregate_method() 方法允許定制其他的演算法,

ResultStore

ResultStore 類提供了 Result 資料集的存盤、加載的能力,

FeatureExtractor

FeatureExtractor 是 Extractor 子類,專門用于從 Asset 集合中提取特征,作為基本的特征提取類,任何具體的特征提取介面,都繼承自 FeatureExtractor,例如 VmafFeatureExtractor/PsnrFeatureExtractor/SsimFeatureExtractor 等,

FeatureAssembler

FeatureAssembler 是一個聚合類,通過在建構式傳入 feature_dict 引數,指定具體的特征提取標準,將該標準提取出的特征結果聚合,輸出到一個 BasicResult 物件中,FeatureAssembler 被 QualityRunner 呼叫,用來將提取后的特征陣列傳給 TrainTestModel 使用,

TrainTestModel

TrainTestModel 是任何具體的回歸因子介面的基類,回歸因子必須提供一個 train() 方法去訓練資料集,predict() 方法去預測資料集,以及 to_file(),frome_file() 方法去保存、加載訓練好的模型,
回歸方程的超引數必須通過 TrainTestModel 的建構式傳入,TrainTestModel 類提供了一些基礎方法,例如歸一化、反歸一化、評估預測性能,

CrossValidation

CrossValidation 提供了一組靜態方法來促進 TrainTestModel 訓練結果的驗證,因此,它還提供了搜索 TrainTestModel 最優超參的方法,

QualityRunner

QualityRunner 是 Executor 子類,用來評估 Asset 任務集合的畫質分數,任何用于生成最終質量評分的介面都應該繼承 QualityRunner,例如跑 vmaf 標準的 VmafQualityRunner,跑 psnr 標準的 PsnrQualityRunner 都是 QualityRunner 的子類,

自定義 VMAF

最新版本的 vmaf 提供了 1080p、4k、mobilephone 三種場景下的 model 檔案,Netflix 號稱使用了海量的、多解析度、多碼率視頻素材(高噪聲視頻、CG動漫、電視劇)作為資料集,得到的這三組 model,在日常使用中,這三組 model 基本滿足需求了,不過,VMAF 提供了 model 訓練工具,可以用于訓練私有 model,

1.創建新的資料集

首先,按照 dataset 格式,定義資料集檔案,比如定義一個 example_dataset.py:

dataset_name = 'example_dataset'
yuv_fmt = 'yuv420p'
width = 1920
height = 1080
ref_videos = [
{'content_id': 0,
'content_name': 'BigBuckBunny',
'path': ref_dir + '/BigBuckBunny_25fps.yuv'}
...
]
dis_videos = [{'asset_id': 0,
'content_id': 0,
'dmos': 100.0,
'path': ref_dir + '/BigBuckBunny_25fps.yuv',
}
...
]

ref_video 是比對視頻集,dis_video 是訓練集,每個訓練集樣本視頻都有一個主觀評分 DMOS,進行主觀訓練,SVM 會根據 DMOS 做有監督學習,所以 DMOS 直接關系到訓練后 model 的準確性,

PS: 將所有觀察者針對每個樣本視頻的分數匯總在一起計算出微分平均意見分數 (Differential Mean Opinion Score) 即 DMOS,并換算成 0-100 的標準分,分數越高表示主觀感受越好,

2.驗證資料集

./run_testing quality_type test_dataset_file [--vmaf-model optional_VMAF_model_path] [--cache-result] [--parallelize]

資料集創建后,用現有的 VMAF 或其他指標 (PSNR,SSIM) 驗證資料集是否正確,驗證無誤后才能訓練,

3.訓練新的模型

驗證完資料集沒問題后,便可以基于資料集,訓練一個新的質量評估模型,
./run_vmaf_training train_dataset_filepath feature_param_file model_param_file output_model_file [--cache-result] [--parallelize]

例如,
./run_vmaf_training example_dataset.py resource/feature_param/vmaf_feature_v2.py resource/model_param/libsvmnusvr_v2.py workspace/model/test_model.pkl --cache-result --parallelize

feature_param_file 定義了使用那些 VMAF 特征屬性,例如:
feature_dict = {'VMAF_feature':'all', } 或 feature_dict = {'VMAF_feature':['vif', 'adm'], }

model_param_file 定義了回歸量的型別和使用的引數集,當前版本的 VMAF 支持nuSVR 和隨機森林兩種機器演算法,默認使用的 nuSVR,
output_model_file 是新生成的 model 檔案,

4.交叉驗證

vmaf 提供了 run_vmaf_cross_validation.py 工具用于對新生成的 model 檔案做交叉驗證,

5.自定義特征和回歸因子

vmaf 具有很好的可擴展性,不僅可以訓練私有的 model,也可以定制化或插入第三方的特征屬性、SVM 回歸因子,
通過 feature_param_file 型別檔案,支持自定義或插入第三方特征,需要注意的是所有的新特征必須要是 FeatureExtractor 子類,類似的,也可以通過 param_model_file 型別檔案,自定義或插入一個第三方的回歸因子,同樣需要注意的是,所有創建的新因子,必須是 TrainTestModel 子類,

總結

一套普適的主觀質量評價標準,不僅要有時域、空域的多維度評價標準,符合主觀意識的融合演算法,還要有大量有效的、符合標準規范的 EMOS 資料集,是一個需要長期投入,不斷迭代的優化程序,

「視頻云技術」你最值得關注的音視頻技術公眾號,每周推送來自阿里云一線的實踐技術文章,在這里與音視頻領域一流工程師交流切磋,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231842.html

標籤:其他

上一篇:容器網路(八)創建 macvlan 網路【50】

下一篇:容器網路(八)macvlan 網路結構分析【51】

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more