怎樣通俗易懂地解釋反卷積?

時間 2021-05-06 08:27:36

1樓:小合

簡單的說吧,點光源發出的光在經過顯微鏡的硬體到接收到的時候就不是乙個點了,而是形成了乙個在三維空間裡分布的光斑,這個三維空間上的光斑分布也可以稱作是點分布方程。這個由點光源到光斑的分散過程就是乙個正向卷積,如果已知光斑和點分布方程就可以回過去推算出點光源,這個反向得到點光源的過程就是反卷積。

那通常拍攝到的螢光顯微鏡影象都是無數個點光源分散成光斑後累積疊加後的結果,通過反卷積可以把光訊號還原到點光源原本的位置,也就是真實的還原了影象。

我是這麼理解的。希望大家補充糾正。

另外插嘴一句,惠更斯軟體應該是目前用來反卷積還原螢光顯微鏡影象最好最專業的軟體。

2樓:

問的應該是Transposed Convolutions

有一些地方也叫它deconvolution,不過這是一種不準確的說法。這算是一種冒用吧,實際上真正的deconvolution另有所指,所說的是convolution的逆過程,不僅僅恢復解析度,也恢復每個數值。

Transposed Convolutions如下圖,他僅僅恢復了影象的解析度。

3樓:已登出

恕我直言,回覆的都比較扯,如果反卷積只是恢復尺寸,understanding convolutional neural networks by visualizing(大概是這個名字)為什麼裡面的反卷積引數不用學習,是直接卷積轉置得到?

4樓:孫小也

閱讀本文的基礎,是預設已經理解了影象處理中正向卷積的過程(卷積特徵提取 - UFLDL)。

上取樣(Upsample)

在應用在計算機視覺的深度學習領域,由於輸入影象通過卷積神經網路(CNN)提取特徵後,輸出的尺寸往往會變小,而有時我們需要將影象恢復到原來的尺寸以便進行進一步的計算(e.g.:影象的語義分割),這個採用擴大影象尺寸,實現影象由小解析度到大解析度的對映的操作,叫做上取樣(Upsample)。

反卷積(Transposed Convolution)

正向卷積的實現過程

假設輸入影象 尺寸為 ,元素矩陣為:

卷積核 尺寸為 ,元素矩陣為:

步長 ,填充 ,即 ,

則按照卷積計算公式 ,輸出影象 的尺寸為 。

用矩陣乘法描述卷積

把 的元素矩陣展開成乙個列向量 :

把輸出影象 的元素矩陣展開成乙個列向量 :

對於輸入的元素矩陣 和輸出的元素矩陣 ,用矩陣運算描述這個過程:

通過推導,我們可以得到稀疏矩陣 :

反卷積的操作就是要對這個矩陣運算過程進行逆運算,即通過 和 得到 ,根據各個矩陣的尺寸大小,我們能很輕易的得到計算的過程,即為反卷積的操作:

但是,如果你代入數字計算會發現,反卷積的操作只是恢復了矩陣 的尺寸大小,並不能恢復 的每個元素值,本文最後會在 tensorflow 平台進行這個實驗。

在此之前,我們先給出反卷積影象尺寸變化的公式。

反卷積的輸入輸出尺寸關係

在進行反卷積時,簡單來說,大體上可分為以下兩種情況:

Relationship 1:

此時反卷積的輸入輸出尺寸關係為:

如上圖所示,我們選擇乙個輸入 尺寸為 ,卷積核 尺寸為 ,步長 ,填充 ,即 ,則輸出 的尺寸為 。

Relationship 2:

此時反卷積的輸入輸出尺寸關係為:

如上圖所示,我們選擇乙個輸入 的尺寸為 ,卷積核 的尺寸為 ,步長 ,填充 ,即 ,則輸出 的尺寸為。

反卷積在 FCN 中的應用

在影象語義分割網路 FCN-32s 中,上取樣反卷積操作的輸入每張影象的尺寸是 ,我們希望進行一次上取樣後能恢復成原始影象的尺寸 ,代入公式:

根據上式,我們可以得到乙個關於 三者之間關係的等式:

通過實驗,最終找出了最合適的一組資料:

反卷積的具體計算步驟

下面我們用一組實驗更直觀的解釋一下在 tensorflow 中反卷積的過程:

我們令輸入影象為:

卷積核為:

case 1

如果要使輸出的尺寸是 ,步數 ,tensorflow 中的命令為:

transpose_conv=tf

.nn.conv2d_transpose

(value

=input

,filter

=kernel

,output_shape=[

1,5,

5,1],

strides=2

,padding

='SAME'

)當執行 transpose_conv 命令時,tensorflow 會先計算卷積型別、輸入尺寸、步數和輸出尺寸之間的關係是否成立,如果不成立,會直接提示錯誤,如果成立,執行如下操作:

1. 現根據步數 對輸入的內部進行填充,這裡 可以理解成輸入放大的倍數,即在 的每個元素之間填充 ,的個數 與 的關係為:

例如這裡舉例的 ,即在 的每個元素之間填 個 :

因為卷積型別為 same,所以此時, 。

2. 接下來,用卷積核 對填充後的輸入 進行步長 的正向卷積,根據正向卷積輸出尺寸公式: 得到輸出尺寸是 ,反卷積公式中我們給出的輸出尺寸引數 也是為 ,兩者相同,所以可以進行計算,結果為:

與 tensorflow 的執行結果相同。

case 2

我們將 case 1 中的輸出尺寸 改成 ,其他引數均不變,tensorflow 中的命令為:

transpose_conv = tf.nn.conv2d_transpose(value=inputfilter=kerneloutput_shape=[1,6,6,1strides=2padding='SAME')

卷積型別是 same,我們首先在外圍填充一圈 :

這時發現,填充後的輸入尺寸與 的卷積核卷積後的輸出尺寸是 ,沒有達到 的 ,這就需要繼續填充 ,tensorflow 的計算規則是優先在左側和上側填充一排 ,填充後的輸入變為:

接下來,再對這個填充後的輸入與 的卷積核卷積,結果為:

與 tensorflow 的執行結果相同。

反卷積只能恢復尺寸,不能恢復數值

最後,我們要驗證一下前文中提到的「如果你代入數字計算會發現,反卷積的操作只是恢復了矩陣 的尺寸大小,並不能恢復 的每個元素值」。

1. 正向卷積:

value = tf.reshape(tf.constant([[1., 2., 34., 5., 67., 8., 91, 5, 5, 1])

filter = tf.reshape(tf.constant([[1., 00., 12, 2, 1, 1])

output = tf.nn.conv2d(value, filter, [1, 2, 2, 1], 'SAME')

卷積的結果是:

2. 我們用和正向卷積完全相同的引數對這個結果進行反卷積:

input = tf.reshape(tf.constant([[6., 8., 312., 14., 67., 8., 91, 3, 3, 1])

kernel = tf.reshape(tf.constant([[1., 00., 12, 2, 1, 1])

output = tf.nn.conv2d_transpose(value=inputfilter=kerneloutput_shape=[1, 3, 3, 1strides=[1, 2, 2, 1padding='SAME')

卷積的結果是:

可見,反卷積不能恢復數值,而且,在當 時,即便使用完全相同的引數進行轉置卷積,輸入的尺寸也不能恢復。

5樓:

卷積是是每次kernal從input裡取出一部分相乘得到結果;那如果就是kernal和input的關係反轉,根據input大小從kernal裡取出部分資料相乘來得到結果呢?就叫做翻捲積。

直觀上來看反卷積中kernal和input的關係和做卷積運算時的關係剛好是相反的,所以叫反卷積。

如何通俗易懂地解釋棒球規則?

老薑 沒有辦法。目前為止,我沒見過一篇能通俗易懂地介紹清楚棒球規則的文章。如果誰能講明白,就發財了。美國棒球協會幾十年來都一直想開啟中國市場,但是一直沒有人能用中文解釋清楚棒球規則,所以99 以上的中中國人始終都不懂打棒球的在幹嘛,所以美國棒球協會只能眼巴巴的看著nba在中國賺得盆滿缽滿。足球,踢進...

如何通俗易懂地解釋外微分?

null 外微分 和 Stokes 定理 大概是對應廣義的通量面積密度 對應 和散源強度體積密度 對應 對定向流形的邊界的積分 form 積分除以某種 維體積的密度.或許先對 的矩形證明 Stokes 定理是更簡單的引入.詳見這篇文章 john chen 我也是想理解外微分所以才找到知乎的這個問題,...

如何通俗易懂地解釋風險溢價?

Theratiomeasuresthe excess return or risk premium per unit of deviation.In finance,the Sharpe ratio also known as the Sharpe index,the Sharpe measure,...