愛奇藝資深演算法工程師蔣紫東老師不久前在AI科技大本營平臺做了一次《愛奇藝ZoomAI視訊增強技術的應用》的公開課分享。通過本次課程,你將可以瞭解AI演算法在影象增強領域和愛奇藝業務中的應用;瞭解超解析度,色彩增強,去劃痕等深度學習模型的技術演進,工程中的挑戰和解決方案。
以下是蔣紫東老師的演講實錄:
大家晚上好!我是來自愛奇藝的演算法工程師蔣紫東,很榮幸能參加今天這次活動,也歡迎大家參加這次關於ZoomAI視訊增強技術的分享,這個也是我在愛奇藝的主要工作之一。
本次分享大概會有這四個方面:
第一、這個技術提出的背景暨我們為什麼需要視訊增強?
第二、我們對視訊或者影象中各種增強技術的原理介紹,包括學術界的最新論文的介紹,以及我們自己的一些思考和嘗試。
第三、介紹愛奇藝ZoomAI技術的框架,以及在各條業務線的應用情況。
第四、分享總結以及一些參考資料的陳述。
一、視訊/影象增強技術的重要性及現狀
現在我們先看我們為什麼要視訊增強。去年開始大家有一個共識,視訊行業已經進入到叫“超高清時代”,去年央視也開播了4K超高新的電視訊道,我們會發現市面上的硬體產品基本上超高清或者4K就是標配,不管是電視螢幕、機頂盒、VR裝置等等。實際上,我們雖然有這麼多的高清的硬體裝置,但是其實我們並沒有那麼多的超高清的視訊資源,甚至可以說很多視訊資源的質量是非常低的。為什麼會這樣?我們總結了以下幾個原因:
第一點原因,使用者的行為不可控。大家都知道最近的UGC類的視訊應用或者圖片應用是非常火爆的,也就是使用者可以自己拍攝、製作和上傳很多的短視訊和圖片。比如說像微博、抖音、朋友圈等等,愛奇藝也有好多視訊、薑餅、泡泡這樣各類的應用,可是使用者的行為不可控,使用者缺少專業的拍攝器材和拍攝的技能。比如在暗光拍攝導致背景有很多噪點且畫面過暗,比如圖片在轉播中經過多次壓縮,導致有很大的壓縮噪聲。
第二點原因,本身的片源是非常老舊的。比如說下面的兩個例子,左邊的《渴望》是90年的,右邊的《護士日記》是1957年的黑白電影。
因為以前的介質像VCD、DVD它們的解析度都是在720P以下的。我們可以簡單來看一下,比如這是《渴望》的效果,人物臉上很多噪點,背景也有很多劃痕。可以看到臉上有很多的噪點,然後片子中也會有一些劃痕,就是一條條的橫線,而且看到細節也比較模糊,然後像這裡的《護士日記》就可以看到明顯的有很多的劃痕白點。我們可以看到旁邊的桌子上面一閃一閃的,有很多白的或者黑的,各種各樣的劃痕。這個原因就是因為可能是膠片本身的損傷,也有可能是在膠片轉數字化的過程中引入了損傷,這樣就會造成會出現右邊的這些問題,比如說有劃痕、有噪聲、畫面會抖動。
最後一點,使用者主動選擇低碼流。一個客觀存在的問題,就是哪怕這個質量再好,我也要看低畫質,為什麼?因為比如說可能到月底了,或者是我所在的我所在的地方網路訊號不好,我不得不選擇低碼流的模式。既然選擇了低碼流,伺服器就會盡可能的把解析度給下降,也會加入更多的壓縮,就會有產生很多的壓縮噪聲。
由此可見,產生低質量視訊的原因是各種各樣的。隨著大家的追求越來越高,提高視訊或者圖片質量的需求也變得越來越迫切。我們可以看一下歷年來的關於影象和視訊增強的相關文獻,可以看到它是逐步提高這麼一個趨勢。
二、視訊/影象增強技術原理及面臨的挑戰
因為前面我們說到造成圖片或者視訊質量低下的原因是多維度的,其實針對於每一個維度都是學術界和業界研究的課題,我們今天會從這五個方面來講:
超解析度這個是解決解析度低的問題;去噪銳化是解決有背景噪聲或者壓縮噪聲的問題;色彩增強是解決色彩灰暗這樣問題;插幀就是幀率低;去劃痕就是由於膠片的損傷導致的視訊上有很多的劃痕,或者是白點,或者白塊,或者水漬等這樣的問題。
我們首先來看超解析度的問題,這個問題的描述,我相信來聽這個課的朋友們應該有所瞭解,就是一張低解析度的圖,過一個模組以後就變成一張高解析度圖。如果說我們用現在比較流行的深度學習的模型來完成這項,它一般來說是一個CNN的模型,得到一張高分辯率圖,然後我們有一張真實的高解析度圖,兩者之間取一個loss,把這個loss降到最小,來通過反向傳遞來優化CNN裡面的係數。
主要面臨兩個問題:第一個就是CNN的結構設計,如何設計這個模型結構,使得可以有效的恢復或者創造出更多的畫素。其實這裡就是創造出畫素,因為原來的畫素點少,變成高分辨以後畫素點多。
第二點就是loos函式如何選擇可以使得影象的細節或者是邊緣更加的清晰。
我們來看一下主流的幾種做法:
第一大類,就是單幀超分。
輸入是一張圖片,輸出是這張輸入圖片的高解析度圖片。這張圖是來自於右下角DBPN的這篇文章的一個總結,我把它拿過來了。首先,左上角就是最原始的DNN的方法,就是一張小圖,首先經過一種傳統的插值處理放大,比如說雙線性插值這種方法放大,放大以後再經過一個全卷積網路。這裡最經典的就是SRCNN,是用深度學習來進行超分的開山之作,後面有它的進化型VDSR,VDSR主要的區別就是它最後訓練的是兩者的差,而不是直接生成張真實的圖。這種全域性殘差後面也會用到,實測效不錯。
左下角就是先經過全卷積,最後再經過一個上取樣的過程上,這個上取樣可以用反摺積,也可以用次畫素,代表的就是FSRCNN和EDSR。它有一個好處,就是它做這個全卷積時輸入圖片尺寸是比較小的,所以首先第一個好處就是它的速度快。然後也給了放大這件事情一個訓練的機會,就是我的放大並不是直接放大,它可以有訓練係數。
右邊這兩個雖然是新的方法,但是其實它們是適合於放大兩倍或兩倍以上的,像上面像這個Lap這種放大,一聽名字就知道說是先把影象進行金字塔分解,然後逐級放大,比如說你要放大八倍,那你就先放大兩倍,再放大兩倍,再放大兩倍,而不是一次性放八倍。
右下角DBPN就是一張圖先放大再縮小,再放大再縮小,然後中間的每一個模組之間都是利用類DenseNet這樣的方法進行全部相連的,最後融合以後得到一個結果。DBPN自己文章中也有資料比較,它的效能在放大兩倍的情況下,是不如EDSR的,只有在高倍數超分的時候才能在這種結構中體現出優勢。代價就是它的運算的複雜度和消耗的時間以及對於記憶體視訊記憶體的消耗都會增加。
第二類,根據多幀影象進行超解析度。
因為很多情況下我們處理的視訊,其實是可以利用視訊的前後幀的關係,因為前後幀有更多的細節,我們就可以呈現出更多的細節。如何來融合前後幀的關係?一個方法就是把時間作為通道數。正常情況下我們一張圖片有三個通道,如果有三張圖片,其實就是九個通道,那麼就把它當成是一個九個通道的東西,然後直接通過2D卷積來進行後續的處理,也可以將時間作為另一個維度,用3D卷積來處理。
第二種融合前後幀的方法就是利用光流,光流也是最近非常火,在視訊的很多領域中都會用到的。凡是考慮前後幀關係的演算法,有一大類就是利用光流的方法。我們先簡單看看什麼是光流,看一下左邊的有這個人,他從背上拿出一把箭的時候,他的手肘不就是從這個位置變到了這個位置,其實這裡的每一個畫素點的運動就是光流。如果粗糙的理解就可以認為是一種運動估計。
因為有各種各樣的網路可以學會光流,假設我們的光流已經學會了以後,我們怎麼樣來融合?就是TOFlow這篇文章提到,如果我們有這幀和它的前一幀和後一幀,我們可以根據兩幀之間的光流來估計,根據上一針來估算出當前幀,也可以根據下一幀來估算出當前幀,這樣我們就三個當前幀,就是真實的當前幀和兩個估算出來當前幀,我們把這三幀合在一起,經過一個2D和3D卷積的處理,就能拿到最後的生成出來的超解析度圖。
我們現階段的模型設計的結構是這樣的,首先我們採用的是單幀處理,然後單次上取樣,再全域性殘差。
因為我們也其實也比較了單幀和多幀的區別,發現其實從肉眼上來看,單幀的效果和多幀的已經非常接近,在這種情況下多幀的消耗會多很多,而且會有一些其他的影響,所以我們選擇了單幀的處理方法。為什麼只採用單次上取樣?在我們的業務場景中,圖片基本上就會放大兩倍,不太可能會放大四倍,所以直接採用單次的就是最合算。用DenseNet的結構就是借鑑了DBPN的思想,引入更多的低層的特徵。然後全域性殘差,因為在VDRI以後基本上大多數超分都會採用全域性殘差的形式。因為可以想象低解析度圖和高解析度在低頻的情況下基本上都是一致的,唯一有差別的就是那些細節的部分,這個加法就說明右邊的這一圖就是低頻的成份,整個網路只要學習那些高頻的細節就可以了。
關於loss函式的選擇,一般情況下最常見的就是這種L1或者L2的loss,也就是mse或者mae,很多paper也討論過了,像mse的loss會天生導致影象產生模糊,現在有一大類叫做GAN的loss,它是根據影象的分佈來生成畫素。GAN的loss在很多demo中可以說是非常的驚豔,但我們自己在使用過程中發現有兩大問題,我們對於自動化的流程來說可能不是很合適:
第一個可能會導致語義不符的問題,我們可以看一下框裡,就左邊這個是沒有加GAN的,右邊這個是加GAN的,可以看到右邊的這張圖的確比左邊清晰很多的
但問題就在於“太清晰”了。最右邊這張原圖中真正的頭飾其實是一個太陽,但經過GAN放大的圖雖然很清晰,但是看不出太陽的樣子。所以它改變了圖的語義。而左邊這張雖然它模糊,但是它只是看不清,但是沒有改變語義。如果我們是針對UGC圖片使用者上傳的圖片,我們不能擅自更改使用者的本意,在語義準確和畫面模糊之間做個權衡,我們覺得語義準確更重要。
GAN的第二個問題會放大噪聲。往往低解析度圖伴隨著噪聲,這些噪聲可能會被GAN當成一個具體的東西被具象化。
我們最後的選擇是mse加上一個梯度的loss。梯度的loss其實是動作預測網路中一個常見的loss,就是要求生成圖和真實圖的梯度要一致。因為梯度就是邊緣。我們的超分很多情況下是想讓邊緣變得銳利,加入梯度的loss以後會使得整個網路的邊緣傾向銳利。我們可以看一下下面這個例子,左邊這個就是最普通的,然後這裡就是不加梯度的los了,這邊就加了梯度的loss,就是看到頭髮的就是邊緣會更加的銳利一些。
下面我們可以看一個超分在視訊中的例子,這個例子在去年愛奇藝世界大會上展示過,可以看到左邊整體比較模糊,右邊會清晰一些,就是從540P到1080P的一個視訊。
之前介紹的是一個雲端的演算法,其實對於移動端來說採用深度學習的方法就不合適,雖然現在有tflite,ncnn這樣的移動端深度學習框架,但是畢竟還沒有跟機器是配得非常好,很多中低端的手機其實跑不動這種生成模型的。我們在移動端主要是考慮效率,那麼我們就採用單層濾波器的方式來實現,進行訓練和優化。
說完了超分以後我們再來說去噪的問題,影象中的噪聲主要是背景噪聲和壓縮噪聲,其實去噪和超分的網路結構是可以非常類似的,因為都是一個“圖到圖”的生成網路,所以前面講過的東西基本上都可以相互借鑑。比如說右邊也去引導全域性殘差這些東西。
其實對於去噪來說主要的問題有兩個:
一個是去噪本身是一個低通濾波器,就是基本上可以近似為一個低通濾波器,如何在去燥的時候儘可能的保留住邊緣和細節?
第二就是如何的模擬真實噪聲,因為很多paper其實講過,很多去噪的方法在人工合成噪聲的測試集上非常優秀,因為他們訓練的時候也是用人工合成造成的方法來訓練的,比如說加一個高斯噪聲,但是這個時候在真實的圖片上可能就不行了,那麼我們如何更好的模擬真實造成也是一大問題。
我們可以看一看兩個去噪的經典網路,第一個是DNCNN,它就是一個全卷積的模型,就輸入一張噪聲圖,經過多層卷積以後,最後出來一個全域性的殘差。它在訓練的時候,訓練集裡面加入各種層次的高斯去噪,來模擬那種多造成混合的資料集。第二個是CBDNet,這是2019年的CVPR。它的網路分成兩個部分,首先就來一張圖以後先要估算一下,噪聲是什麼水平的,然後再把估算出來的噪聲水平輸入到第二個網路中,再加上原圖,再來算出一個最終的生成圖。它中間還引入一個不對稱的loss,就是根據實驗發現前面的噪聲估計,如果同樣是估不準,往小的估和往大了估相比,還是往大了估更好一點。不對稱loss,就是兩邊的懲罰是不一致。
我們這邊做的時候就是採取了一個端到端的網路同時完成去噪和銳化。噪聲主要主要是背景噪聲和壓縮噪聲。同時完成去噪和銳化就是為了彌補由於去造成的邊緣模糊,網路結構和之前的超分是很類似的。
如何同時完成去造和銳化?其實大致的思想就是在訓練集的時候加入一定比例的噪聲和模糊,然後不斷的去貼近真實的情況,然後不斷的調整,然後來拿到一個比較好的效果。
可以看到一些真實圖片的例子,綠色的手上週圍的噪點沒有了。然後右邊《渴望》的圖裡比如說文字高亮,衣服的格子紋理會更加的清晰一些。
接下來我們來看下一個問題,就是色彩增強的問題,它主要是解決圖片或者視訊亮度不行,過亮、過曝或者色彩暗淡的問題,主流有兩種方式,第一個是黑盒模式,這是一個端到端的生成模型,就是拿一張不好的圖,經過這個網路以後,或者全卷積,或者unet,然後生成一張好的圖,代表的比如DPE是18年的CVPR。前面這個網路是一個unet結構,輸出一張圖以後,然後如果我們有成對的資料科,就是有一張不好的圖和對應的經過人工PS以後的好圖,那麼我們就可以用mse的loss+GAN的loss來做,如果我們沒有成對的資料,就用cycleGAN的這種方法來做。為什麼說它是黑盒模式?因為我們最終拿到的是一張增強圖,我們也不知道它是怎麼把一張壞圖變成一張好圖的。
第二類是白盒模式,它這個網路不是一個生成網路,而是一個迴歸模型。輸入原圖,輸出各種色彩相關的引數,接下來就是隻要用正常的影象處理的方法來對原圖進行處理就可以了。我們可以參見微軟提出的這個exposure的方法,它裡面融合了強化學習和GAN,一步步的把一張壞圖變成一張好圖,為什麼強化學習?這跟下棋一樣,比如有12個棋子,每個分別到底應該先做哪一步、後做哪一步,每一步採用的量是多少,都可以調整。
我們可以來總結一下這兩個方法,首先,黑盒模型它是比較容易訓練的,因為它就是生成模型,之前用的生成模型都可以訓練。但是它的問題是色塊中有可能出現異常值可能導致語義不符的問題。畢竟卷積的原理導致了,輸出的畫素值除了和原畫素值相關,還和感受野中其他畫素值相關。第二個問題是如果這個原圖非常大的話,這個時間會非常慢。
白盒模型其實更符合人類PS的習慣,拿到一張圖之後只需要知道調節哪些引數來改變就可以了。而且更適合處理視訊的情況。但是它的問題是訓練很難收斂,而且效果上那些最好的例子中可能還不如黑盒的好。
為了線上模型的求穩,我們自行設計了一個和exposure相比簡化了很多的白盒版本。首先,我們不再引入強化學習了,我們只處理這三個量:曝光度,飽和度和白平衡。因為經過我們大量的實驗發現,這三個值對於調節圖片的色彩最重要。然後我們固定它的順序。最後我們在求loss的時候有兩個loss,第一個loss是增強圖與真實好圖的mse,因為我們有一些成對的資料集,比如Adobe的FiveK。第二個loss是色彩調整引數的mse,這個真值是如何得到的呢?我們也可以做一些自建的資料集,就是我們拿到一張好圖以後,刻意把它的曝光調低、飽和調低,這時其實我們知道應該加多少的曝光和飽和能把它補回來。所以我們還可以把這兩個loss給融合,一方面來拿到這個mse的loss,另外一方面讓這些迴歸的loss也要小,這樣可以使得整個模型比較穩定。同時,它的計算量很小,一張大圖縮小到64×64來處理就可以了。
來看最後處理的效果,第一列和第三列是原圖,右邊兩列是增強過的圖。我們對於亮度、飽和度、白平衡的調整以後,可以看到效果還是可以的。
接下來的問題是如何在視訊處理中保持幀間的一致。我們的視訊很多情況下都是逐幀做的,怎麼保證這幀比如變的這個紅色是正紅色,下一幀變的也應該是正紅色,如果一會兒變得比較深,一會兒比較暗的話,就會發現色彩在抖。怎麼解決這個問題?公開論文上討論這個問題的很少,我們則設計了一個解決方案:先過場景切分,再進行白盒模型。就是一個視訊幀經過場景切分以後,我們可以分為不同的場景,這個場景切分的依據就是發現畫面色彩色彩的突變點,然後我們在每一個場景中選取一幀來進行白盒模型得到引數,這個場景中所有的幀都用同樣的引數來進行色彩增強就行了。
我們可以看個簡單的視訊例子,對《渴望》做的色彩增強,比如樹葉會更加綠。
說完了色彩增強,下面看去劃痕。去劃痕其實是一個比較小眾的問題,相關的論文比較少,它主要是因為膠片本身介質受到了損傷。像這裡可能有人在膠片上劃了一下,最後播出來時就會有一道劃痕,或者在讀取時受到磁頭的干擾或者什麼,出現了這種上下波紋會動的情況。
此類問題的解決方法,經典的方法是兩步走的,首先是劃痕的檢測,然後將劃痕去除,劃痕的檢測大多數情況採用直線檢測的方式,直線檢測就是通過找到空間中的豎線、橫線、直線,然後再利用空間插值或者時間的插值,把這個線用別的畫素給補上去。它的缺點比較明顯,第一,如果這個劃痕不是直線,它是個水漬,它是個白點,它是個彎彎曲曲的,可能效果就不行了。第二,畫面本身可能是有水平線或者豎直線的,比如電線杆或者桌子上的紋理,那麼就會誤識別的把它去掉。
那麼怎麼處理這個方法呢?我們可以借鑑之前超分中講到的光流法來設計,但是這裡有一個前提,就是劃痕只可能在這個幀的這個位置出現,在前後幀的同一個位置是不會出現的。這是劃痕產生的原理決定的,因為不可能兩個膠片真的這麼湊巧的在同一個位置產生一模一樣的劃痕。我們有了這樣的前提以後就可以設計上述的模型,利用光流來估算某一幀,然後進行融合。
但是這有一個問題,就是我們怎麼保證這前後2k幀是在同一個場景的?因為正常視訊中有剪輯的,會出現場景切換,這時我們剛才講到的場景演算法又可以來用一下。我們可以看看最後的效果。
最後一個問題講的是插幀,插幀的技術其實也是非常好理解的,就是原來的視訊幀率比較低,我們如何提高視訊的幀率,使得觀影體驗更加流暢,比如在體育直播,或者動畫片,或者打鬥的動作片、武打片裡可能用得比較多一些。主流的方法基本都是這樣的,通過光流估計出,然後經過warp、經過融合,和之前去劃痕的結構非常像。
比如CVPR18年的這篇,可以看到它這邊是光流,右邊是融合,它的創新點在哪裡?就是加入了一些邊緣提取,做了一些邊緣特徵,要保證最後合成出來的、插出來的那幀也有比較好的邊緣。這篇現在還沒有開源實現的,我們在這個模型的基礎上做了一些裁減,因為右邊這個實在是太龐大了。我們簡單看看效果左邊的這個原視訊,汽車滑過去看到一卡、一卡、一卡,右邊的就會比較流暢。
三、介紹ZoomAI技術實現和應用
第三部分是ZoomAI的框架和應用的介紹。
ZoomAI圖片解決方案。針對於圖片的,它在工具包裡有三個——超解析度、去噪銳化、色彩增強。因為它們都是對單張圖片來做的,輸入一個圖片以後,這三個介面可以做得都一樣,這樣各條業務線就可以自由的配置,到底要用什麼工具以及它們的順序是怎樣的,或者各自的引數是怎樣的,可以做到靈活配置,這是1.0方案。
在2.0中我們加入了內容的理解,大家想想現在很多圖片,比如拍人像模式時背景是虛化的,這時背景就不應該進行銳化操作,如果這張圖片中是有文字的,文字區域的銳化又可以做得特別大膽。所以在2.0中我們先經過文字檢測,檢測出文字區域,也通過一個前景提取網路來檢測出這張圖片的前景區域和背景區域,然後每一個區域的這個模組都是之前1.0那個模組,最終得到一個結果。
我們看看示意圖,比如這張圖裡謝娜本身是前景區域,文字的部分就是文字區域,後面其他的就是背景區,這樣來進行融合。
ZoomAI視訊解決方案。這個視訊方案有多個工具,首先是兩個預處理的工具——場景切分和重複幀的去除,然後是幀間的一些演算法——去劃痕和插幀,然後是單幀的演算法——對於單張圖片進行處理的超分、去噪銳化、色彩增強等。每個視訊解壓成圖片,然後去除掉重複幀,然後經過場景切分,每一個場景分別做幀間的演算法和單幀的演算法,最後和原來的音訊一起合成,變成最終的視訊。中間這個部分是根據業務線的邏輯可以隨時調整。
各項業務與使用場景。可以看到ZoomAI已經包含了多個演算法模組,應用在了愛奇藝的多條產品線中、多個應用場景中。
下面介紹一些已經有的應用場景。首先,是這個國劇修復的專案,主要用到去噪銳化和去劃痕這兩個模組,經過我們處理後人臉顯得更光滑,背景沒有噪聲,文字上不會有抖動,文字也更加的突顯。
這裡AI處理相對於人工處理最大的優勢就是效率提高、成本降低,提高效率500倍。第一期的國劇修復成果已經在春節期間上線了。現在正準備在暑期上線包括四大名著在內的第二批經典電視劇。
這是老舊綜藝視訊的處理,評書《亂世梟雄》全集剛在愛奇藝上線,它原來的解析度很低,只有240P,而且有很多鋸齒,經過修復以後清晰度提高不少,使它達到了上線的標準。我們可以看一下例子,桌子這裡的紋理更加的清晰,左邊的原圖就會比較模糊。
下面有一個動畫片的增強,我們用到了超分的模組和色彩增強,右邊的紅色就會更加的紅。我們看一下視訊的效果,右邊的草地會更加的綠一些,整體的色彩更加的鮮豔。這裡的紅色,包括之後會出現的黃色,整體會更加鮮豔。而且採用了場景切分以後,色彩不會抖動,很平穩。
這是對3D動漫《四海鯨騎》的插幀效果展示。左邊這個是原始的,可以看到這個船在轉彎時一卡一卡的,右邊的明顯比較流暢,特別是鏡頭拉遠時,左邊有很強的卡頓感,右邊就會很流暢。
下面是對各個頻道封面圖增強的效果,現在大家開啟愛奇藝看到的封面圖基本都是經過ZoomAI增強的,用到的模組是去噪銳化和色彩增強。
四、進階資源推薦及經驗分享
這裡重點講一下關於工程思維的問題。學術圈與工程應用這兩個群體的重點不同,前者主要精力花在模型設計和創新上,而工程應用最多的時間花在了資料與訓練上。
我們在業務中最重要的一點就是資料,與kaggle競賽不同,我們都沒有現成的資料集,需要憑藉各種工程技術去收集反應實際應用場景的資料。資料的好壞極大的影響了最終模型的效果。然後對於模型的結果,PSNR等指標可以作為參考,但是最終還是看主觀感受。我們在超分和插幀的訓練中,遇到很多A比B指標好,但是主觀感受B比A好的情況。畢竟最後呈現給使用者的就是主觀感受。這也是現在的評價指標的偏差,GAN相關論文已經闡述了很多,我們也在研究這個問題。
對於模型的選擇,我們更看重模型的穩定性和泛化能力。畢竟是一個上線執行的服務,而不是為了一個驚豔的demo效果。當然在選擇和設計模型時,也需要考慮更重約束,比如模型大小本身的約束、執行速度的約束、用什麼框架來支援等等。最終在效果和效率之間找到一個平衡點。
最後是我之前提到那些演算法的論文出處,有興趣的朋友可以進一步看一看,這個就是今天大致的分享內容了。
Q&A環節
以下是蔣紫東老師對於使用者問題的回答。
問:超解析度用傳統的方法進行圖片細節的增強,有哪些客觀指標可以評價不同增強方法的效果,還是隻能主觀評價?
答:客觀指標可以看一些趨勢,做一些快速的判斷。但是最後確定效果,還是應該引入主觀評價。愛奇藝就是有完整的質檢團隊來做介質質量的判斷。除非你是打比賽,如果你是打比賽的話,它用什麼客觀指標,你就用什麼客觀指標。但如果是真實應用的話,主觀的評價更重要。
問:去劃痕的流程裡有一個融合CNN,這個CNN是用什麼資料集訓練的?
答:去劃痕的資料是我們自己生成的資料,就是我們可以拿到很多視訊幀的片段,然後我們自己把劃痕加進去,劃痕就是不同形狀的、不同顏色的塊或者線。還有一個方法,大家可以試一試,現在很多編輯軟體可以加入老電影效果,也可以用這個方法把劃痕加進去。
問:去噪的訓練資料是如何構造的?怎麼模擬真實噪聲?模型是實時處理嗎?
答:現在的去噪模型不是實時的,但可以實時,實時的話就需要把網路做得更簡化。怎麼模擬真實噪聲?真實噪聲是這樣的,其實可以看一個香港理工大學的PolyU資料集,這是一個真實噪聲的資料集,它是通過一個固定的照相機對一個場景多次狂拍,狂拍了以後每一幀都有噪聲,然後再取個平均以後就覺得那是真實圖片,我們的資料集一方面是用了這個,另外一方面是自己加入了不同的高斯噪聲和壓縮噪聲嘗試。
問:去噪的時候如何同時訓練去噪和銳化?
答:在資料集上設計加入不同比例的噪聲和高斯模糊。
問:對於無參考指標的視訊,怎麼判斷當前視訊的質量好壞?是否進行增強、去噪和銳化?
答:這就是我們正在做的視訊質量評價的東西,可以判斷視訊的噪聲等級,模糊等級,用來指導後面的增強。現線上上的短視訊增強中就已經加入這麼一個模組,只會對於評價不那麼好的視訊進行增強處理。
問:ZoomAI是愛奇藝開發的一個框架嗎?
答:ZoomAI應該是愛奇藝開發的一個介質增強解決方案,是對視訊或者圖片進行增強的,它本身由多個演算法模組組成。
問:超分的梯度loss是如何選取的?
答:梯度loss就是指,生成圖和真實圖的“梯度”的mse一致。因為梯度就是邊緣,說明除了讓它平緩的地方接近以外,更要強調它梯度的部分接近。這時有兩個loss,兩個loss融合起來肯定有一個權重的引數,來調節權重的引數,使得在最好的場景下效果最好就行。
問:手機終端的超分功耗怎麼解決?
答:手機終端相當於我們沒有用一個深度學習的框架,我們用的是自己在GPU上自己寫的SDK,所以它的功耗可以自己控制。如果用深度學習的話,可能這個功耗就有點問題。
問:明明移動端AI模型那麼多,為什麼超分不能用深度學習?
答:這是生成模型和迴歸或者分類模型的區別,生成模型的複雜度和要生成的圖片面積呈正比。,而做影象增強,圖片的目標解析度肯定不會太小,所以模型就簡單不了、運算量小不下去。而如果你指分類的問題或者簡單的迴歸問題,可以把原始的圖片縮到很小,這時你的運算量就沒有那麼大。就好像我們色彩的白盒處理那樣。
問:去噪是一個模型嗎?還是不同的噪聲有不同的模型?
答:這裡我們現在做的是有多個模型的,其實前置會有一個判斷,會根據噪聲的判斷來決定採用不同配比的模型。
問:視訊打分資料集是什麼?
答:資料集是我們愛奇藝內部的,通過我們的質檢團隊會有很多這樣的資料。
問:對於NIMA這種圖片評價演算法怎麼看?
答:覺得有參考價值,但是不能作為硬指標判斷。因為它是第一篇用CNN來做質量評價的,而且效果上也還可以。如果對於同一張圖片不同處理的時候這個評價還具有參考價值,但是如果對於多種圖片,因為圖片有可能是風景,有可能是人物,有可能是一個杯子,這時因為資料集的侷限性,可能這個分數就沒有那麼可信了。
問:色彩增強會進行場景分類嗎?
答:其實是會有的,分成了5類,人物,風景,美食,卡通,其他。
問:關於ZoomAI可以實時處理實時顯示嗎?
答:,如果是一個純實時的視訊流的話,那麼就是手機端那個,是實時顯示的。其它的沒有必要,如果我們只在伺服器端做的話沒有必要做到實時,只需要把視訊上傳,最後生成一個好的視訊就可以了。
問:銳化和降噪處理的順序?
答:因為它們是一起處理的,沒有順序區別,是一個模型直接出來結果的。
問:場景風格有用深度學習的嗎?
答:這個方面沒有特別的去研究,覺得可能是可以用的,但是對於我們的業務來說,不需要這麼複雜。比如對色彩增強來說,我們就想分割出色彩的強烈變化,哪怕這個場景沒有變化,突然開燈那一下,還是客廳的場景,但是色彩發生突變,這時我們也希望它判斷出來場景發生變化,所以我們用色彩這個維度來做相似度判斷,效果是不錯的。
問:如何縮小模型放進移動端?
答:這個其實是一個很大的問題,其實有很多論文都在講這個問題。首先就是如果去分類或者什麼的話,就先選擇那種天生就是為移動端設計的,像MobileNet等等這樣的結構,會好放進去很多。如果對於生成模型的話,確實只有大刀闊斧的裁剪了,把它的中間特徵的層數給減小和通道數減小。
問:我們現在的ZoomAI有應用在不同地方嗎?
答:有應用在移動端實時跑的,像之前說的手機端和愛奇藝播放器的PC端。以及之還有一部分是在後端進行介質增強的,用來代替人工修復或者人工增強。
問:訓練樣本一般需要多少?
答:這個是根據任務以及能拿到多少,有一些就比較容易,像去噪,我記得是200萬的圖片,有一些資料不那麼容易拿到的就會少一些。
問:視訊插幀以後,25變到50fps,視訊增長了1倍,對應的音訊也要插值嗎?
答:音訊不用插值,因為音訊的採用率沒有變,還是按原來那樣。插幀了以後時長是不變的,插幀了以後還是1小時,音訊也是1小時,你只要把這兩個合起來就可以了。
謝謝大家!