簡體   English   中英

使用 CNN 進行圖像反卷積

[英]Image deconvolution with a CNN

我有一個shape (C,H,W)的輸入張量,其中H=WC=W^2 該張量包含壓縮為(H,W) shape (1,H,W)的圖像的非線性變換信息。 轉換的確切形式並不重要(另外,無論如何都沒有封閉形式的表達式)。 我想設計一個CNN來估計來自此類張量的圖像。 我意識到我將不得不嘗試CNN architectures (因為我沒有轉換的確切形式),但我不確定如何進行。

輸入張量具有對圖像重建很重要的正值和負值,因此ReLU layer可能不應該在CNN的開頭附近實現。 我也不認為池化層會有用,至少在HW維度上。 顯然,我必須折疊 C 維度才能獲得圖像,但我不認為它應該一次完成, eg, torch.nn.Conv2d( C, 1, kernel_size )可能不是一個好主意。

在我看來,我應該首先使用一個Conv2D layer ,它產生與輸入張量相同大小的張量(以部分解讀非線性變換),但如果內核大小大於1, HW維度將減少大小,這是我不想要的(除非稍后可以在CNN解決這個問題)。 另一方面,如果內核大小為 1,則形狀將保持不變,但我認為在這種情況下張量不會發生任何變化。 另外,我可能必須包含線性層,但我不確定如何將它們與3D張量一起使用。

歡迎大家提出意見。

在開始附近應用 ReLU 層沒有問題,只要您先應用加權線性層即可。 如果網絡了解到它需要那里的值,它可以應用負權重來保留信息(粗略地說)。

事實上,在某些網絡中要做的一件有用的事情是將輸入歸一化以適合 N(0, 1) 正態分布。 https://www.researchgate.net/post/Which_data_normalization_method_should_be_used_in_this_artificial_neural_network

至於由於內核大小而“減少”硬件尺寸的問題 - 您可能可以在邊界上使用 0-padding 來避免這個問題。 根據我的經驗,網絡通常可以相對較好地處理這個問題。 但是,如果性能是一個問題,通常您可能希望顯着降低分辨率,然后在最后進行某種升級。 您可以在此處找到此類網絡的示例: 創建神經網絡結構的圖像

至於池化/特征層:因為張量的深度非常大(W^2),我建議您實際上立即減少很多。 由於來自/進入張量中每一層的權重,網絡的復雜性是張量深度和像素數的二次方 所以,我的基本策略是在開始時快速減少信息空間,做一些計算層,然后放大。

這些年來我學到的是 CNN 非常有彈性,而那些在紙面上看起來不錯的架構想法在現實中幾乎沒有什么作用 - 最好的因素幾乎總是更多的層(以一種好的方式完成,但自從 ResNet它變得更容易)和更多/更好的數據。 所以我會開始試驗並嘗試評估給定一個有效的 PoC 是什么阻止了網絡或嘗試變化。

我希望這足夠有道理:) 祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM