Google開發的RAISR演算法利用機器學習壓縮圖片,提高解析度,實際應用怎麼樣?
529827-google-raisr-surfer
這項新技術被稱為RAISR,其全稱為「快速、精確的超解析度技術。」通常意義上來說,縮小圖像將意味著圖像質量或解析度的降低。不過,RAISR通過識別低解析度圖像並且採樣,使用過濾器來強化像素細節。任何曾試著修圖的人都知道最後成型的圖片或多或少看起來有點模糊,但是通過機器學習,RAISR技術就避開了這個致命傷。
準確地說,RAISR並不是用來壓縮圖像的,而是用來upsample圖像的。
眾所周知,圖片縮小到半解析度後,在拉回原大小,會出現強烈的鋸齒。從80年代開始就有很多super sampling的方法,要麼從多張低解析度的圖構建出高解析度,要麼從單張「猜測」出高解析度。本質上其實都是針對邊緣搞事情。從鋸齒狀的邊緣恢復出一條帶斜率的線段。
用機器學習做這件事情,基本框架是
1. 拿到大量高解析度的圖像,對圖片做分塊,比如4x4。
2. 每個塊都縮小到半解析度。3. 用半解析度的塊作為輸入,全解析度的塊作為輸出,訓練。4. 在Runtime,用半解析度的塊作為輸入,就能預測出一個可以接受的全解析度結果。當然,在第三步,特徵選取、調參數之類是必要的。DL嘛。
這其實Sony早就有了,X-Reality Pro晶元里就集成了一個,用來把1080p轉成4k。不過不那麼通用,重點是針對文字這樣清晰邊緣的,以處理亮度特徵為主。
回到我一開始說的,為什麼說RAISR不是壓縮演算法,而是upsample演算法?因為即便是一個不存在高解析度的圖像,也可以通過這個演算法得到高解析度。本質上就是single image super-resolution (SISR),效果一般,特點是速度快。
單幀圖像超解析度問題,其實就是選一個trade-off between run-time and performance。想要速度快,直接bicubic線性插值唄;想要效果好,深度CNN網路嘛。
CVPR2017有一個單幀圖像超解析度的競賽,正好也參加了,我們的演算法被選為the most efficient solution,就是在run-time 和 performance之間的折中取得比較好,詳見競賽總結報告
http://www.vision.ee.ethz.ch/~timofter/publications/Timofte-CVPRW-2017.pdf
但是,令人失望的是,從實際應用的角度出發,例如手機圖像質量提升方面,這些演算法都沒什麼用。
坦白地講,RAISR也就是因為是Google發的,才有人關注。同樣一篇文章,如果是一般的學者發表的,估計就沒什麼人鳥。
另外, @小白在閉關 小白同學說的手機實時預覽無損數字變焦,期待你們的成果喲,快十月了!
P.S. 對超解析度演算法感興趣的同學可以在線測試一下某湯的超解析度演算法,他家經常號稱世界第一嘛,那就看一下世界第一的能做到什麼程度啦。
SenseMaster | SenseTime | 商湯科技
Google自己的Single Image Super Resolution,本來還想著說upsampling是不是用了去年CVPR subpixel的方式,結果一看發現好複雜,不夠優雅…
RAISR原文:
https://arxiv.org/abs/1606.01299Subpixel CNN原文:
https://arxiv.org/abs/1609.05158大家感受一下區別…當然我不懂CV我就是瞎說…RAISR的實際應用應該是比較好的,畢竟速度快。
談到超分辨演算法的實際應用,無非就是在演算法性能和運行時間上取得一個比較好的trade-off,如果在運行時間允許的情況下可以較為逼真的還原高分辨的圖像,那就可以做到了產品上的實際應用了。
嗯最近組裡接的某廠10月即將發布的手機就承載著我們組做的攝像預覽的中無損數字變焦演算法,本質上就是對預覽的幀進行超分辨。怎麼做的就是機密啦
說到super-resolution的實際應用,就別提要用GPU的deep learning演算法行嗎,推薦下面這篇文章,就三層:
Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network- 真是又快又吼啊!
這應該是SISR(single image super resolution)的應用之一了吧,近幾年CNN在這一塊工作挺多的,例如SRCNN,SRGAN等,作用就是由一張低解析度圖片生成2x,4x,8x的高清大圖,效果還算不錯,這裡有個benchmark,huangzehao/Super-Resolution.Benckmark。
我在github上跑過2位童鞋的代碼,谷歌所說的「訓練速度非常快,一小時內訓練1000張」、「預測速度非常快」不知道怎麼來的,我這邊用i7 6850k來進行訓練,起碼要三四分鐘才能完成一張(DIV2K數據集)的訓練,後來為了測試就訓練了20張,用了1個半小時,效果當然是沒什麼效果的,因為只訓練了20張,如果谷歌有訓練的細節公布,那就可以實驗下了。最近在研究CNN based模型的工業級超分應用,有研究同行可以私信交流下。
其實叫機器學習並不合適,RAISR並沒有用到神經網路的結構,而是傳統的Hash,特徵的提取也是用到patch的梯度信息。
論文裡面提到比深度學習方法SRCNN快上十倍,這應該是可靠的,畢竟是IEEE fellow的文章,github上也有Matlab的簡易代碼,有興趣的可以去跑跑效果。
最近單幅超解析度演算法(SISR)基本都是利用深度學習做了,可以去看看CVPR 2017,效率提升主要體現在sub-pixel,比如FSRCNN、ESPRN、LapSRN,可以在小圖上做分類。但是在移動設備上實時還是困難不少,畢竟是單幅的演算法,通用設備還要給很多其他演算法留下空間,對工業界可不是什麼好消息。
叫機器學習可以,叫AI就不合適了。
推薦閱讀:
※虛擬現實(vr)將會是下一個熱點嗎?
※Hololens 的使用場景有哪些局限?
※浙大周昆教授的gpu是誰教的?
※如何實現一個類似UE4中的材質編輯器?
※如何在 Graphics 頂級會議上 (SIGGRAPH / EG / PG) 上發表論文?