视频降噪
一直沒有接觸過視頻圖像處理,一來這個問題太南了,二來也確實沒有想過要接觸這方面的東西,借著這個機會看一下傳說中的視頻圖像處理,和單幀圖像處理又什么區別,他是如何利用多幀信息更好處理圖像,又是如何解決幀間(時間序列)一致性這樣一個問題。
文章目錄
- Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes
- Unprocessing Images for Learned Raw Denoising
- A Physics-based Noise Formation Model for Extreme Low-light Raw Denoising
- Benchmarking Denoising Algorithms with Real Photographs
- FastDVDnet: Towards Real-Time Deep Video Denoising Without Flow Estimation
- CycleISP
- Efficient Semantic Video Segmentation with Per-frame Inference
Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes
文章做了這么幾件事
我們先來看怎么從RGB 仿真RAW unprocessing,知道了怎么仿真數據,那么我們開始看這個文章的做法。
- unprocessing 實現了兩個問題
看訓練框架,輸入三幀,恢復中間幀
- predenoise
輸入3xhxwx4, 輸出 3xhxwx4 - alignment
- deformable convolution[13, 35]
[43] 使用的是 ‘explicit flow information’
大家說DConv 是自適應的dilatation conv,是Spatial Transformer Networks(STN) 的類似產物
- deformable convolution[13, 35]
pkp_kpk? 是常規卷積的偏移量
δpk\delta p_kδpk? 是學習的偏移量
δmk\delta m_kδmk? 是偏移量位置的權重
看這個博客
上面的圖看起來很暈,看edvr的圖
兩個疑問:(暫且猜測這樣做,看完代碼再做評判)
- Non-local Attention
使用separated attention modules 分離的注意模塊,包括spatial attention, channel attention, temporal attention, 他們的輸出相加,然后再接一個輸入的殘差相加。文章使用的是一個criss-cross attention[20], 降低計算量和內存
沒看懂
- Temporal fusion[35]
- spatial fusion[37]
10 個residual blocks
- ISP
- Loss
時間損失,怎么得到的,相鄰兩幀怎么會對應同一個raw 呢?他和SMID 又不一樣??
看代碼
相當于單張圖像raw 域降噪,分別訓練,聯合優化
Unprocessing Images for Learned Raw Denoising
- 寫在前面, 我們可以得到干凈的raw 為什么還需要仿真raw 圖呢?直接在干凈的raw 上加噪聲,然后使用仿真的噪聲來訓練一個去噪的網絡,把問題回歸到一個更簡單的領域。來看看文章的說法
官方代碼 google-research/unprocessing/
torch實現 aasharma90/UnprocessDenoising_PyTorch
文章依據Darmstadt Noise Dataset 流程仿真的數據,我下載不下來這個數據,所以無從得知這個數據集的具體樣貌,整個流程的代碼操作很明確,但是諸多參數的估計有些云里霧里,他只給了公式,一個流程一個流程梳理看,最重要的其實就是噪聲估計
文章根據DND 數據模擬的ISP 流程
針對RGB 圖像我們很難估計出每個像素的噪聲,但是對于相機sensor 的噪聲我們已經有了一定的認知,即光子到達sensor 的統計(shot) 和電路系統的不準確性(read),前者符合泊松分布,后者近似于0均值和固定方差的高斯噪聲,所以對于觀測值我們有以下模型
以上g_d和g_a 分別是數字增益和模擬增益,δr\delta_{r}δr? 表示read 噪聲的固定方差,基于此,我們可以看出噪聲的參數和增益時強相關的,也和sensor 是相關的,而增益在相機中是ISO(感光度)起作用。
以上一頓操作,我們可以獲取相機的噪聲水平,但是這個噪聲水平怎么得到呢?可以從不同的曝光場景中得到,文章說是從DND 數據集中統計得到的。
我的猜測是相機會記錄下數字增益和模擬增益的大小,那么δr\delta_{r}δr?怎么估計出來的。按照上一篇文章的說法兩者的噪聲方差可以通過實驗室環境采集得到。原理不得而知,但是方法很明確。以下分布怎么來的看不太懂。
雙線性/最近鄰
簡單認為其為一個全局的scale,為了生成這個scale,假設仿真和真實數據圖像灰度是從不同的指數分布中采樣,不懂。
就是 rgainr_{gain}rgain? bgainb_{gain}bgain?, 為了防止g>1 的時候,亮區沒有信息,設置th=0.9,保護了一下
這涉及到相機CCM 參數校正,在DND 數據集中記錄了兩個矩陣cam2xyz,xyz2rgb
數據仿真大概就是這樣,后面他們又發了一篇CycleISP 來解決這個數據仿真的問題,我們暫時按照這個來做
- framework
- 數據
使用MIR Flicker,并且使用高斯下采樣了兩倍來減少噪聲,量化,jpeg 壓縮,去馬賽克和其他影響。 - 網絡輸入
四通道的bayer 圖像+四通道的像素方差估計
其他好像沒有什么需要注意的了,嗯沒有norm layer,batchsize=16,leakyReLU,下采樣了4次,殘差學習
A Physics-based Noise Formation Model for Extreme Low-light Raw Denoising
Benchmarking Denoising Algorithms with Real Photographs
- analog gains (ISO values)
通過控制ISO,文章的解釋就是模擬增益來獲取不同水平的噪聲,然后通過調整曝光時長來控制圖像的平均亮度。 - 那么在ISP 中增益和ISO 有什么樣的關系呢?他們又是怎樣控制圖像亮度的呢?
ISP 中增益一般以db位單位,db和提高亮度之間的關系符合db=20logxdb=20logxdb=20logx,即每提高一倍的亮度需提高的增益
# coding=utf-8 """ ISO Gain(db, intensity) 之間的關系 ISO 感光度,指sensor 的感光能力,同樣的場景下ISO 越好,那么圖像就越亮,但是通常情況下,相機的硬件固定了以后ISO就固定了 故我們通常通過調整模擬增益(analog gains)來提高ISO 那么我們通常所說的ISO-200、ISO-2500 和0db 增益30db 增益是怎樣控制圖像亮度的呢? 其實他們都和提升的亮度的倍數有關 $db=20logscale$, 即每提升2倍的亮度db 大約提高6db,ISO 提高2倍 舉個栗子: ISO | db | intensity| ---| --- | --- | 100 | 0 | 1 | 200 | 6 | 2 | 400 | 12 | 4 | """import numpy as np import matplotlib.pyplot as plti = np.linspace(1, 20, 100) # i-db db = 20 * np.log(i) plt.figure(1) plt.plot(i, db) plt.xlabel('i_scale') plt.xlim(1) plt.ylabel('gain_db') plt.ylim(0) plt.savefig('i_db.png') plt.figure(2) plt.plot(db, i) plt.xlabel('gain_db') plt.xlim(0) plt.ylabel('i_scale') plt.ylim(1) plt.savefig('db_i.png') # i-ISO # 就是正比
論文之路止步于此…
2020.11.24 再來看下這個文章
文章通過在不同的ISO 下調整曝光時長來獲取配對的圖像,那么在低ISO 的圖像近似無噪聲的作為參考。
這個參考(reference) 并不是gt,需要細致的后處理
- 空間對齊(correct spatial misalignment)
- 校正曝光參數(cope with inaccuracies in the exposure parameters)
基于各向異性的Tobit 回歸模型的線性灰度變換 - 去除低頻偏置殘差(remove residual low-frequency bias that stems, e.g., from minor illumination changes)
這些操作都不知道
去噪數據GT的獲取,目前看來,多幀平均或者低增益配合長曝光,兩種模式。1. 對齊問題是存在的,但是就超微光的經驗來看,我們的采集方式應該不會有影響。2. 亮度不同確實是這樣的,如果所有的差異都差不多或者差異的趨勢一致,那么這個對于應用會有很大影響嗎?影響肯定是有的,但是對于去噪這個任務的影響大小呢?但是對于作為benchmark 評估來說肯定是有影響的吧?3. 看不懂
我發現這幾篇文章估計噪聲的方式好像不太一樣
- unprocessing—在固定增益下,估計高斯噪聲的方差參數,這個參數是相機原始數據記載的,我們的相機并沒有記錄啊
- Burst Denoising with Kernel Prediction Networks
unprocessing 引的這篇,也是他們自己寫的
確實看起來是一樣的,但是還是有一個疑問 δs\delta_sδs?,還是 δs2\delta_s^2δs2?,感覺應該是指方差 - RViDe
這個才是最接近原始物理意義的 - K-sigma transform
看了這篇文章才覺得以上幾篇文章都白看了。做完這一系列實驗,優化實驗就在他身上了。
既然我都知道噪聲估計的方法了,這篇文章到此為止。
FastDVDnet: Towards Real-Time Deep Video Denoising Without Flow Estimation
FastDVDNet 舍棄了視頻處理中常用的光流方法和可形變卷積,直接使用two-stage 的卷積處理視頻信息,有利有弊吧。
- 20201214 總結下上面所作的工作
使用imx305 D50 下的白平衡和ccm 矩陣替換了谷歌的流程,仿真的 raw 數據和真實的raw 數據通過真實數據預訓練的ISP 有色差,但是仿真的raw 數據訓練raw 域降噪還是可以的
使用的是RViDeNet 標定噪聲的方法,和論文表現一致,可復現性較高
3.1 raw denoise + isp
3.2 two-stage raw denoise + isp
3.3 FastDVDNet two-stage 和one-stage 都嘗試過
上述模型可以做到raw 域降噪的效果,但是效果不盡如人意。感覺不知道時序一致性到底是降噪沒有訓練好還是時序一致性沒有訓練好。接下來想要擁有兩個目標,一個是訓練一個好的去噪網絡,但是實際上ssim 已經到了0.98,但是噪聲還是很大,并沒有論文放出來的圖那么好。下次閱讀論文應該先復現,在用自己的數據做實驗,看到底是自己的問題,就不用老是懷疑論文了,比較有目標性的調優。
4.1 復現 cycleISP
4.2 使用cycleISP 仿真的數據做實驗
4.3 復現沈老師的工作
4.4 另外k-sigma transform 的工作也值得關注
CycleISP
github 20201217 沒有放出訓練代碼
在low-level 問題中獲取pixel-wise paired 數據是必要且困難的,但是實際上空間像素的不對齊,顏色,亮度的不匹配時不可避免的,且不同場景,不同設備的數據獲取代價巨大且工作重復。
The main idea is to inject noise in the RAW images obtained with our learned device-agnostic transformation rather than in the sRGB images directly
文章主要的思想是在通過學習得到的設備無關的變換的RAW 加入噪聲而不是直接將噪聲加在RGB 上
- 文章主要工作
- CycleISP - 一個設備無關的變換,可以使rgb 和 raw 之間相互轉換
- 真實噪聲的合成
- 雙注意力機制(dual attention mechanism)
- 輕量的網絡,最好的效果
- other application
20201218 日 先用MOT 數據做沈老師的時序一致性,這樣的話還是得有raw 的視頻流噪聲和無噪聲+無噪聲的gt
20210126 我現在有一個不成熟的想法,學習到的raw 圖除以一定的scale 就可以仿真低照度的raw 圖啦?
Efficient Semantic Video Segmentation with Per-frame Inference
視頻流的處理,要么使用光流將結果
這篇文章關于時序一致性的約束其實和SMID 并無區別。
實驗證明,選擇合適的超參是有效果的,但是約束時序一致性的同時會造成圖像的模糊。那么這兩者好像是不可調和的矛盾?怎樣緩解呢?
20210126 暫時并無辦法解決,也沒有想通為什么會這樣。
總結
- 上一篇: 表格html5 隐藏字段,element
- 下一篇: 使用Python计算水流量装置的流量稳定