
計算成像這個方向我最早接觸是從手機多攝和夜景算法開始的。當時一直有個疑問為什么同樣一片傳感器有的團隊能拍出接近單反的夜景有的卻連基本細節(jié)都糊成一團后來才慢慢意識到差距不在后期調(diào)色而在對成像物理過程的理解深度。計算成像的核心就是把光怎么變成電信號這件事用數(shù)學寫清楚再反過來解出我們真正想要的圖像。這一講我想把入門最關(guān)鍵的三個概念——前向模型、逆問題、AI——用從業(yè)者的視角講透不堆公式重點說清楚它們各自解決什么問題、為什么必須這樣設(shè)計、實際落地時哪里最容易翻車。1. 計算成像到底在算什么從拍照到解方程的思維轉(zhuǎn)變1.1 傳統(tǒng)成像和計算成像的分水嶺在哪里傳統(tǒng)相機的邏輯很直接鏡頭把場景聚焦到傳感器上傳感器把光強轉(zhuǎn)成電壓讀出電路量化成像素值一張圖就出來了。整個過程是物理直接映射圖像質(zhì)量取決于光學設(shè)計和傳感器工藝軟件能做的只是錦上添花。計算成像不一樣它承認一個事實從場景到最終圖像之間存在一個可以被建模的變換過程而這個變換往往是病態(tài)的——信息在傳遞中丟失了、混疊了、被噪聲污染了。一旦你接受這個前提思路就完全變了。你不再問怎么把鏡頭做得更好而是問我能不能設(shè)計一個編碼方式讓傳感器記錄的不是最終圖像而是某種中間測量值然后通過計算把原始場景恢復出來。這就是計算成像的本質(zhì)把成像問題轉(zhuǎn)化為一個數(shù)學反演問題。單像素相機、編碼孔徑、光場相機、無透鏡成像全都是這個思路的產(chǎn)物。我常跟新人打一個比方傳統(tǒng)成像像是用復印機復印文件復印質(zhì)量取決于機器計算成像是先把文件打散成碎片、編碼后存儲再根據(jù)碎片的統(tǒng)計規(guī)律拼回原文。前者簡單直接后者靈活但需要更強的數(shù)學工具。1.2 為什么必須先把前向模型寫出來前向模型forward model是計算成像的地基。它描述的是給定一個真實場景 x經(jīng)過成像系統(tǒng)的物理過程最終得到測量值 y 的映射關(guān)系通常寫成 y A(x) n其中 A 是成像算子n 是噪聲。這個式子看起來簡單但它是整個系統(tǒng)設(shè)計的起點。為什么必須先寫前向模型因為逆問題的求解完全依賴于它。你不知道 A 長什么樣就不知道哪些信息被保留、哪些被丟棄也就無法判斷恢復是否可能。舉個例子編碼孔徑成像里A 是一個由編碼圖案決定的卷積加下采樣算子如果你把編碼圖案設(shè)計成隨機二值矩陣A 的頻域響應就比較平坦逆問題相對好解如果設(shè)計成有規(guī)律的低頻圖案高頻信息幾乎全丟再強的算法也救不回來。實際項目中我見過太多團隊跳過前向建模直接上深度學習結(jié)果網(wǎng)絡(luò)在訓練集上表現(xiàn)很好換一個場景就崩。原因很簡單網(wǎng)絡(luò)隱式學到的 A 和真實物理過程不一致泛化能力自然差。前向模型不是學術(shù)裝飾它是約束算法搜索空間的物理先驗。1.3 逆問題為什么病態(tài)病態(tài)體現(xiàn)在哪逆問題就是已知 y 和 A求 x。聽起來是解方程但成像里的逆問題幾乎都是病態(tài)的ill-posed主要體現(xiàn)在三個方面。第一是不適定多個不同的 x 可能產(chǎn)生相同的 y。比如下采樣操作把 4K 圖像降成 1080p無數(shù)張 4K 圖都能降成同一張 1080p 圖你無法唯一確定原圖。第二是不穩(wěn)定y 里一點點噪聲可能導致解出來的 x 面目全非。第三是解不存在由于噪聲和模型誤差嚴格滿足 y Ax 的 x 可能根本不存在。病態(tài)意味著你不能直接求逆必須引入正則化或先驗。這就是為什么計算成像和優(yōu)化理論、統(tǒng)計推斷、深度學習深度綁定——它們本質(zhì)上都在提供什么樣的 x 是合理的這個先驗信息。稀疏性、低秩、深度圖像先驗、擴散模型先驗都是不同形式的正則化手段。2. 前向模型的構(gòu)建細節(jié)從物理過程到矩陣算子2.1 把光學、傳感器、噪聲拆成可計算的模塊構(gòu)建前向模型的第一步是分解物理鏈路。一個典型的成像鏈路可以拆成場景輻射度 → 光學系統(tǒng)傳遞 → 傳感器采樣 → 讀出噪聲 → 量化。每一段都可以單獨建模最后乘起來或級聯(lián)起來。光學部分通常用點擴散函數(shù)PSF描述它告訴你一個理想點光源經(jīng)過系統(tǒng)后在傳感器上變成什么形狀。如果系統(tǒng)是空間不變的光學傳遞就是一個卷積如果空間變化比如大視場鏡頭邊緣畸變嚴重就得用分塊卷積或更復雜的算子。傳感器部分涉及采樣和積分像素不是理想點它有一定面積會對入射光做空間積分這個積分本身就是一個低通濾波。噪聲部分要區(qū)分讀出噪聲、散粒噪聲、暗電流它們的統(tǒng)計特性不同散粒噪聲服從泊松分布讀出噪聲通常近似高斯。我一般建議新人先用最簡模型跑通假設(shè)空間不變、只考慮高斯噪聲把 A 寫成卷積矩陣。等這條鏈路驗證沒問題再逐步加入空間變化、泊松噪聲、量化誤差。一次性建太復雜的模型調(diào)試成本會高到讓你懷疑人生。2.2 離散化連續(xù)物理模型怎么變成矩陣真實世界是連續(xù)的但計算必須離散。離散化的關(guān)鍵是把連續(xù)算子 A 用矩陣或可快速計算的算子表示。對于卷積型成像A 可以寫成托普利茲矩陣或循環(huán)矩陣后者可以用 FFT 加速復雜度從 O(N2) 降到 O(N log N)。對于編碼孔徑這類系統(tǒng)A 往往是編碼圖案逐元素相乘 卷積 下采樣的組合。這里有個容易踩的坑離散化尺度選擇。如果場景的離散網(wǎng)格比傳感器像素細太多A 的維度會爆炸如果太粗又會丟失高頻細節(jié)導致模型和真實物理不匹配。我的經(jīng)驗是離散網(wǎng)格至少要比傳感器像素密度高一倍給逆問題留出超分辨的空間同時用算子形式不顯式構(gòu)造矩陣來控制內(nèi)存。另一個細節(jié)是邊界條件。卷積時圖像邊界怎么處理直接影響邊緣區(qū)域的恢復質(zhì)量。零填充會引入暗邊周期延拓會產(chǎn)生環(huán)繞偽影對稱延拓相對溫和但也不是萬能。實際項目里我會根據(jù)場景內(nèi)容選邊界策略并在損失函數(shù)里對邊界區(qū)域單獨加權(quán)。2.3 噪聲建模為什么不能一律當高斯處理噪聲建模是前向模型里最容易被低估的部分。很多論文為了數(shù)學方便直接假設(shè)加性高斯噪聲但真實傳感器在低照度下主要是散粒噪聲服從泊松分布它的方差和信號強度相關(guān)不是常數(shù)。如果把泊松噪聲當高斯處理逆問題的求解會出現(xiàn)系統(tǒng)性偏差亮區(qū)噪聲被高估暗區(qū)噪聲被低估恢復出來的圖像要么暗部噪聲爆炸要么亮部過度平滑。正確做法是用泊松-高斯混合模型或者用方差穩(wěn)定變換如 Anscombe 變換把泊松噪聲近似轉(zhuǎn)成高斯再套用成熟的高斯去噪算法。我在一個低照度成像項目里吃過這個虧。最初用高斯假設(shè)暗部恢復出來全是彩色噪點換成泊松模型后同樣的算法框架暗部信噪比提升了將近一倍。噪聲模型選錯后面所有優(yōu)化都是在錯誤的道路上狂奔。3. 逆問題求解的三條路線優(yōu)化、迭代、學習3.1 基于正則化的優(yōu)化方法從 Tikhonov 到全變分最經(jīng)典的逆問題求解是正則化優(yōu)化minimize ||y - Ax||2 λR(x)第一項保證數(shù)據(jù)一致性第二項 R(x) 是正則項λ 控制兩者權(quán)衡。Tikhonov 正則用 L2 范數(shù)解有閉式形式計算快但會過度平滑邊緣。全變分TV正則用梯度稀疏性能保邊但優(yōu)化是非光滑的需要 ADMM、 primal-dual 等算法。選正則項本質(zhì)是在選先驗。TV 適合分段常數(shù)圖像比如醫(yī)學 CT、遙感對于紋理豐富的自然圖像TV 會產(chǎn)生塑料感這時候可以考慮高階 TV、非局部均值或稀疏字典。λ 的選擇也很講究太大則細節(jié)丟失太小則噪聲放大常用 L 曲線法或交叉驗證來定。我個人的經(jīng)驗是優(yōu)化類方法可解釋性強、理論保證好適合對穩(wěn)定性要求高的場景比如工業(yè)檢測、醫(yī)學重建。但它的缺點是求解慢而且正則項的表達能力有限面對復雜先驗時力不從心。3.2 迭代重建Plug-and-Play 為什么好用Plug-and-PlayPnP是這幾年非常實用的框架。它的核心思想是把優(yōu)化算法如 ADMM里的去噪子問題替換成一個現(xiàn)成的去噪器這個去噪器可以是 BM3D、NLM也可以是訓練好的 CNN。這樣一來你既保留了優(yōu)化框架的收斂性又借用了強大去噪器的先驗表達能力。PnP 的好處是模塊化前向模型 A 和去噪器解耦換傳感器只需改 A換先驗只需換去噪器。我在做多模態(tài)融合成像時特別依賴這個特性不同模態(tài)的前向模型不同但去噪先驗可以共享。不過 PnP 也有坑。去噪器的噪聲水平參數(shù)必須和迭代過程中的等效噪聲匹配否則會震蕩或不收斂。實踐中我會用一個噪聲水平調(diào)度策略從大到小逐步降低模擬退火的感覺。另外PnP 的收斂性理論保證比純優(yōu)化弱需要監(jiān)控殘差和目視檢查。3.3 深度展開網(wǎng)絡(luò)把迭代算法展開成網(wǎng)絡(luò)深度展開deep unfolding是把迭代算法的每一步映射成網(wǎng)絡(luò)的一層展開固定次數(shù)后端到端訓練。比如 ISTA 展開成 LISTAADMM 展開成 ADMM-Net。這樣網(wǎng)絡(luò)結(jié)構(gòu)有物理意義參數(shù)量比黑箱網(wǎng)絡(luò)少泛化性通常更好。展開網(wǎng)絡(luò)的關(guān)鍵設(shè)計是哪些參數(shù)可學習、哪些固定。前向算子 A 通常固定它是物理的步長、閾值、正則權(quán)重可以學習。訓練時用真實測量值 y 和真值 x 配對損失用 MSE 或感知損失。我實測下來展開網(wǎng)絡(luò)在訓練分布內(nèi)表現(xiàn)極好但分布外泛化仍然依賴訓練數(shù)據(jù)的多樣性。如果訓練集只有某類場景換場景后性能下降明顯。解決辦法是加入物理仿真數(shù)據(jù)做增廣或者在損失里加入前向一致性約束強制網(wǎng)絡(luò)輸出經(jīng)過 A 后仍能匹配 y。4. AI 在計算成像里的真實角色不是替代物理而是補先驗4.1 端到端網(wǎng)絡(luò)能做什么、不能做什么端到端網(wǎng)絡(luò)直接從測量 y 回歸圖像 x省去了顯式建模和迭代。它在特定任務上確實能打比如固定編碼孔徑的超分辨、特定顯微鏡的點擴散函數(shù)反卷積。但它有兩個硬傷。第一是物理不一致。網(wǎng)絡(luò)輸出的 x 經(jīng)過真實前向模型 A 后未必能得到接近 y 的測量值這意味著它可能編造了不存在的細節(jié)。第二是泛化差。訓練時的噪聲水平、編碼圖案、場景分布一變性能就崩。我見過一個端到端去模糊網(wǎng)絡(luò)訓練時用高斯模糊核換成運動模糊后輸出全是偽影。所以端到端網(wǎng)絡(luò)適合場景固定、數(shù)據(jù)充足的封閉任務不適合開放環(huán)境。要用它最好加上前向一致性損失或者用展開結(jié)構(gòu)約束。4.2 擴散模型和 score-based 方法帶來的新可能擴散模型作為先驗是這兩年計算成像里最讓人興奮的方向。它的思路是訓練一個去噪網(wǎng)絡(luò)學習圖像分布的 score 函數(shù)然后在逆問題求解時用這個 score 作為先驗通過迭代采樣恢復圖像。相比傳統(tǒng)正則擴散先驗的表達能力強得多能生成紋理自然、細節(jié)豐富的結(jié)果。實際用法有幾種一是把擴散模型當作 PnP 里的去噪器替換 BM3D二是用擴散后驗采樣DPS直接在測量條件下采樣三是用擴散模型做后處理先優(yōu)化求解再擴散精修。我在一個稀疏視角 CT 重建項目里試過 DPS相比 TV 正則細節(jié)恢復明顯更好但采樣速度慢需要幾百步迭代實時性差。擴散模型的坑在于采樣步數(shù)、噪聲調(diào)度、條件引導強度都需要調(diào)而且它對前向模型的準確性很敏感。如果 A 有偏差擴散模型會自信地生成錯誤結(jié)構(gòu)。4.3 數(shù)據(jù)驅(qū)動先驗和物理模型的融合策略最穩(wěn)的方案永遠是物理模型加數(shù)據(jù)先驗的混合。具體做法用前向模型保證數(shù)據(jù)一致性用神經(jīng)網(wǎng)絡(luò)提供先驗兩者在優(yōu)化框架里交替。PnP、展開網(wǎng)絡(luò)、擴散先驗都屬于這個范疇。融合的粒度可以不同。粗粒度是 PnP去噪器和前向算子完全解耦中粒度是展開網(wǎng)絡(luò)每層都有物理結(jié)構(gòu)細粒度是把物理參數(shù)也做成可學習比如讓網(wǎng)絡(luò)同時估計 PSF 和圖像。細粒度最靈活但最難訓練容易陷入局部最優(yōu)。我的建議是先從 PnP 入手驗證前向模型和去噪先驗是否匹配穩(wěn)定后再嘗試展開網(wǎng)絡(luò)提升速度如果對生成質(zhì)量要求極高且算力充足再上擴散先驗。不要一上來就端到端那是在給自己挖坑。5. 實操中那些文檔不會告訴你的坑5.1 仿真數(shù)據(jù)和真實數(shù)據(jù)的域 gap 怎么縮小做計算成像研究前期幾乎都在仿真數(shù)據(jù)上驗證。但仿真和真實之間有一道鴻溝仿真假設(shè)的 PSF、噪聲、編碼圖案和真實系統(tǒng)總有偏差。這個 gap 不處理算法上真實設(shè)備就廢。縮小 gap 的常用手段一是標定真實系統(tǒng)的 PSF 和噪聲參數(shù)用實測值替換仿真假設(shè)二是做域隨機化訓練時隨機擾動 PSF、噪聲水平、編碼圖案讓網(wǎng)絡(luò)見過足夠多的變化三是用少量真實配對數(shù)據(jù)做微調(diào)。我在一個無透鏡成像項目里先用仿真預訓練再用 50 組真實數(shù)據(jù)微調(diào)最終真實場景的 PSNR 比純仿真訓練高了 4 dB 以上。標定這件事值得單獨說。PSF 標定通常用點光源或刀口法但真實系統(tǒng)的 PSF 可能隨視場變化單點標定不夠。我會在視場里選多個位置分別標定然后插值得到空間變化的 PSF。噪聲標定則用暗場和多亮度平場擬合出噪聲方差和信號強度的關(guān)系。5.2 評價指標選錯優(yōu)化方向就錯了PSNR 和 SSIM 是最常用的指標但它們和人類視覺感知的相關(guān)性有限。計算成像里如果目標是視覺質(zhì)量PSNR 高不代表好看如果目標是下游任務檢測、分割那應該直接用下游指標評估。我踩過的坑一個去噪項目PSNR 優(yōu)化到很高但下游目標檢測的 mAP 反而下降因為過度平滑把一些小目標抹掉了。后來改用感知損失加下游任務損失聯(lián)合訓練才把問題解決。所以指標選擇要服務于最終目標。重建任務看 PSNR/SSIM感知任務看 LPIPS下游任務看任務指標。最好多個指標一起看避免被單一指標誤導。5.3 算力、內(nèi)存和實時性的現(xiàn)實約束計算成像的算法往往很重尤其是擴散先驗和深度展開。實際部署時算力和內(nèi)存是硬約束。我見過論文里的算法在服務器上跑幾分鐘一張圖到嵌入式設(shè)備上根本跑不動。優(yōu)化方向一是用算子形式避免顯式構(gòu)造大矩陣用 FFT 或稀疏矩陣加速二是模型量化、剪枝、蒸餾三是減少迭代步數(shù)用展開網(wǎng)絡(luò)替代長迭代四是分塊處理把大圖切成小塊分別恢復再拼接但要注意塊間一致性避免拼接縫。實時性要求高的場景比如手機夜景、自動駕駛通常只能用輕量展開網(wǎng)絡(luò)或 PnP 加快速去噪器。擴散模型目前還很難做到實時除非用蒸餾或一致性模型加速。6. 入門學習路徑和第一個可跑通的項目建議6.1 數(shù)學和編程基礎(chǔ)該補到什么程度入門計算成像數(shù)學上需要線性代數(shù)矩陣、特征值、SVD、優(yōu)化理論凸優(yōu)化、梯度下降、ADMM、概率統(tǒng)計貝葉斯、最大似然、噪聲模型。不需要一上來就啃透邊做邊補效率更高。編程上Python 是絕對主力NumPy 做數(shù)值計算SciPy 做優(yōu)化和信號處理PyTorch 做深度學習和 GPU 加速。建議熟練掌握用 FFT 做卷積、用自動微分求梯度、用 GPU 批量處理。MATLAB 在光學和醫(yī)學成像社區(qū)仍有大量遺產(chǎn)代碼看得懂就行新項目我基本都用 Python。6.2 從哪個小項目切入最合適我推薦從圖像去模糊或單像素成像仿真切入。去模糊的前向模型簡單卷積加噪聲逆問題經(jīng)典資料多容易跑通。單像素成像則能完整體驗編碼、測量、重建的全流程而且前向模型清晰適合理解計算成像的精髓。具體步驟先寫前向模型用已知圖像生成仿真測量值然后實現(xiàn)一個 TV 正則的優(yōu)化求解看恢復效果再換成 PnP 或展開網(wǎng)絡(luò)對比提升最后加入噪聲、模型誤差觀察魯棒性。這一套走下來前向模型、逆問題、AI 三條線就都摸到了。6.3 怎么判斷自己真的入門了一個簡單的標準給你一個新的成像系統(tǒng)你能獨立寫出它的前向模型判斷逆問題是否病態(tài)、病態(tài)在哪選擇合適的正則或先驗并解釋為什么這么選。能做到這些說明你已經(jīng)從調(diào)包進入設(shè)計階段。再高一級的標準你能設(shè)計編碼圖案或光學系統(tǒng)主動改善逆問題的條件數(shù)讓后續(xù)重建更容易。這就是計算成像從計算輔助成像走向計算驅(qū)動成像的標志也是這個領(lǐng)域最有意思的地方。我在實際項目里最深的體會是計算成像的難點從來不在某個算法而在對整個鏈路的理解。前向模型錯了逆問題再花哨也沒用先驗選錯了AI 再強也救不回來。把物理、數(shù)學、學習三件事打通才是這個方向真正的門檻。