0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度解析什么是轉(zhuǎn)置卷積

智能感知與物聯(lián)網(wǎng)技術(shù)研究所 ? 來源:CSDN博客 ? 作者:CSDN博客 ? 2020-09-03 09:39 ? 次閱讀

這篇文章對轉(zhuǎn)置卷積(反卷積)有著很好的解釋,這里將其翻譯為中文,以饗國人。

對于上采用的需求

當(dāng)我們用神經(jīng)網(wǎng)絡(luò)生成圖片的時候,經(jīng)常需要將一些低分辨率的圖片轉(zhuǎn)換為高分辨率的圖片。

對于這種上采樣(up-sampling)操作,目前有著一些插值方法進行處理: 最近鄰插值(Nearest neighbor interpolation) 雙線性插值(Bi-Linear interpolation) 雙立方插值(Bi-Cubic interpolation) 以上的這些方法都是一些插值方法,需要我們在決定網(wǎng)絡(luò)結(jié)構(gòu)的時候進行挑選。這些方法就像是人工特征工程一樣,并沒有給神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的余地,神經(jīng)網(wǎng)絡(luò)不能自己學(xué)習(xí)如何更好地進行插值,這個顯然是不夠理想的。

為什么是轉(zhuǎn)置卷積

轉(zhuǎn)置卷積(Transposed Convolution)常常在一些文獻(xiàn)中也稱之為反卷積(Deconvolution)和部分跨越卷積(Fractionally-strided Convolution),因為稱之為反卷積容易讓人以為和數(shù)字信號處理中反卷積混起來,造成不必要的誤解,因此下文都將稱為轉(zhuǎn)置卷積,并且建議各位不要采用反卷積這個稱呼。 如果我們想要我們的網(wǎng)絡(luò)可以學(xué)習(xí)到最好地上采樣的方法,我們這個時候就可以采用轉(zhuǎn)置卷積。這個方法不會使用預(yù)先定義的插值方法,它具有可以學(xué)習(xí)的參數(shù)。理解轉(zhuǎn)置卷積這個概念是很重要的,因為它在若干重要的文獻(xiàn)中都有所應(yīng)用,如: 1、在DCGAN中的生成器將會用隨機值轉(zhuǎn)變?yōu)橐粋€全尺寸(full-size)的圖片,這個時候就需要用到轉(zhuǎn)置卷積。 2、在語義分割中,會使用卷積層在編碼器中進行特征提取,然后在解碼層中進行恢復(fù)為原先的尺寸,這樣才可以對原來圖像的每個像素都進行分類。這個過程同樣需要用到轉(zhuǎn)置卷積。

卷積操作

讓我們回顧下卷積操作是怎么工作的,并且我們將會從一個小例子中直觀的感受卷積操作。假設(shè)我們有一個的矩陣,我們將在這個矩陣上應(yīng)用的卷積核,并且不添加任何填充(padding),步進參數(shù)(stride)設(shè)置為1,就像下圖所示,輸出為一個的矩陣。

這個卷積操作在輸入矩陣和卷積核中,對每個元素的乘積進行相加。因為我們沒有任何填充和使用1為步進,因此我們只能對這個操作進行4次,因此我們的輸出矩陣尺寸為。

這種卷積操作使得輸入值和輸出值之間存在有位置上的連接關(guān)系,舉例來說,輸入矩陣左上方的值將會影響到輸出矩陣的左上方的值。更具體而言,的卷積核是用來連接輸入矩陣中的9個值,并且將其轉(zhuǎn)變?yōu)檩敵鼍仃嚨囊粋€值的。一個卷積操作是一個多對一(many-to-one)的映射關(guān)系。讓我們記住這個,我們接下來將會用得著。

反過來操作吧

現(xiàn)在,假設(shè)我們想要反過來操作。我們想要將輸入矩陣中的一個值映射到輸出矩陣的9個值,這將是一個一對多(one-to-many)的映射關(guān)系。這個就像是卷積操作的反操作,其核心觀點就是用轉(zhuǎn)置卷積。舉個例子,我們對一個的矩陣進行上采樣為的矩陣。這個操作將會維護一個1對應(yīng)9的映射關(guān)系。

因此就結(jié)論而言,卷積操作是多對一,而轉(zhuǎn)置卷積操作是一對多,如下圖所示,每一個“對”而言,都需要維護一個權(quán)值。

但是我們將如何具體操作呢?為了接下來的討論,我們需要定義一個卷積矩陣(convolution matrix)和相應(yīng)的轉(zhuǎn)置卷積矩陣(transposed convolution matrix)。

卷積矩陣

我們可以將一個卷積操作用一個矩陣表示。這個表示很簡單,無非就是將卷積核重新排列到我們可以用普通的矩陣乘法進行矩陣卷積操作。如下圖就是原始的卷積核:

我們對這個的卷積核進行重新排列,得到了下面這個的卷積矩陣:

這個便是卷積矩陣了,這個矩陣的每一行都定義了一個卷積操作。下圖將會更加直觀地告訴你這個重排列是怎么進行的。每一個卷積矩陣的行都是通過重新排列卷積核的元素,并且添加0補充(zero padding)進行的。

為了將卷積操作表示為卷積矩陣和輸入矩陣的向量乘法,我們將輸入矩陣攤平(flatten)為一個列向量,形狀為,如下圖所示。

我們可以將這個的卷積矩陣和的輸入列向量進行矩陣乘法,這樣我們就得到了輸出列向量。

這個輸出的的矩陣可以重新塑性為一個的矩陣,而這個矩陣正是和我們一開始通過傳統(tǒng)的卷積操作得到的一模一樣。

簡單來說,這個卷積矩陣除了重新排列卷積核的權(quán)重之外就沒有啥了,然后卷積操作可以通過表示為卷積矩陣和輸入矩陣的列向量形式的矩陣乘積形式進行表達(dá)。 所以各位發(fā)現(xiàn)了嗎,關(guān)鍵點就在于這個卷積矩陣,你可以從16()到4()因為這個卷積矩陣尺寸正是的,然后呢,如果你有一個的矩陣,你就可以從4()到16()了,這不就是一個上采樣的操作嗎?啊哈!讓我們繼續(xù)吧!

轉(zhuǎn)置卷積矩陣

我們想要從4()到16(),因此我們使用了一個的矩陣,但是還有一件事情需要注意,我們是想要維護一個1到9的映射關(guān)系。 假設(shè)我們轉(zhuǎn)置這個卷積矩陣變?yōu)?。我們可以對和列向量進行矩陣乘法,從而生成一個的輸出矩陣。這個轉(zhuǎn)置矩陣正是將一個元素映射到了9個元素。

這個輸出可以塑形為的矩陣:

我們只是對小矩陣進行上采樣為一個更大尺寸的矩陣。這個轉(zhuǎn)置卷積矩陣維護了一個1個元素到9個元素的映射關(guān)系,因為這個關(guān)系正表現(xiàn)在了其轉(zhuǎn)置卷積元素上。需要注意的是:這里的轉(zhuǎn)置卷積矩陣的參數(shù),不一定從原始的卷積矩陣中簡單轉(zhuǎn)置得到的,轉(zhuǎn)置這個操作只是提供了轉(zhuǎn)置卷積矩陣的形狀而已。

總結(jié)

轉(zhuǎn)置卷積操作構(gòu)建了和普通的卷積操作一樣的連接關(guān)系,只不過這個是從反向方向開始連接的。我們可以用它進行上采樣。另外,這個轉(zhuǎn)置卷積矩陣的參數(shù)是可以學(xué)習(xí)的,因此我們不需要一些人為預(yù)先定義的方法。即使它被稱為轉(zhuǎn)置卷積,它并不是意味著我們將一些現(xiàn)存的卷積矩陣簡單轉(zhuǎn)置并且使用其轉(zhuǎn)置后的值。 從本質(zhì)來說,轉(zhuǎn)置卷積不是一個卷積,但是我們可以將其看成卷積,并且當(dāng)成卷積這樣去用。我們通過在輸入矩陣中的元素之間插入0進行補充,從而實現(xiàn)尺寸上采樣,然后通過普通的卷積操作就可以產(chǎn)生和轉(zhuǎn)置卷積相同的效果了。你在一些文章中將會發(fā)現(xiàn)他們都是這樣解釋轉(zhuǎn)置卷積的,但是這個因為在卷積操作之前需要通過添加0進行上采樣,因此是比較低效率的。注意:轉(zhuǎn)置卷積會導(dǎo)致生成圖像中出現(xiàn)棋盤效應(yīng)(checkerboard artifacts),這篇文章《Deconvolution and Checkerboard Artifacts》推薦了一種上采樣的操作(也就是插值操作),這個操作接在一個卷積操作后面以減少這種現(xiàn)象。如果你的主要目的是生成盡可能少棋盤效應(yīng)的圖像,那么這篇文章就值得你去閱讀。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 卷積
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    18511

原文標(biāo)題:一文搞懂轉(zhuǎn)置卷積(反卷積)

文章出處:【微信號:tyutcsplab,微信公眾號:智能感知與物聯(lián)網(wǎng)技術(shù)研究所】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用PyTorch深度解析卷積神經(jīng)網(wǎng)絡(luò)

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種特殊類型的神經(jīng)網(wǎng)絡(luò),在圖像上表現(xiàn)特別出色。卷積神經(jīng)網(wǎng)絡(luò)由Yan LeCun在1998年提出,可以識別給定輸入圖像中存在的數(shù)字。
    發(fā)表于 09-21 10:12 ?833次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)—深度卷積網(wǎng)絡(luò):實例探究及學(xué)習(xí)總結(jié)

    深度學(xué)習(xí)工程師-吳恩達(dá)》03卷積神經(jīng)網(wǎng)絡(luò)—深度卷積網(wǎng)絡(luò):實例探究 學(xué)習(xí)總結(jié)
    發(fā)表于 05-22 17:15

    解析深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)原理與視覺實踐

    解析深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)原理與視覺實踐
    發(fā)表于 06-14 22:21

    C語言教程之矩陣的轉(zhuǎn)

    C語言教程之矩陣的轉(zhuǎn),很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 15:41 ?0次下載

    如何使用基于轉(zhuǎn)卷積操作改進進行單階段多邊框目標(biāo)檢測方法

    針對單階段多邊框目標(biāo)檢測( SSD)模型在以高交并比(IoU)評估平均檢測精度(mAP)時出現(xiàn)的精度下降問題,提出一種使用轉(zhuǎn)卷積操作構(gòu)建的循環(huán)特征聚合模型。該模型以SSD模型為
    發(fā)表于 12-12 11:49 ?4次下載
    如何使用基于<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>置</b><b class='flag-5'>卷積</b>操作改進進行單階段多邊框目標(biāo)檢測方法

    深度學(xué)習(xí)中的各種卷積網(wǎng)絡(luò)大家知多少

    對于那些聽說過卻又對它們沒有特別清晰的認(rèn)識的小伙伴們,這篇文章非常值得一讀。Kunlun Bai 是一位人工智能、機器學(xué)習(xí)、物體學(xué)以及工程學(xué)領(lǐng)域的研究型科學(xué)家,在本文中,他詳細(xì)地介紹了 2D、3D、1x1 、轉(zhuǎn) 、空洞(擴張)、空間可分離、
    的頭像 發(fā)表于 02-22 09:44 ?4200次閱讀

    探析深度學(xué)習(xí)中的各種卷積

    在信號處理、圖像處理和其它工程/科學(xué)領(lǐng)域,卷積都是一種使用廣泛的技術(shù)。在深度學(xué)習(xí)領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)(CNN)這種模型架構(gòu)就得名于這種技術(shù)。但是,深度學(xué)習(xí)領(lǐng)域的
    的頭像 發(fā)表于 02-26 10:01 ?3391次閱讀
    探析<b class='flag-5'>深度</b>學(xué)習(xí)中的各種<b class='flag-5'>卷積</b>

    一篇文章搞定CNN轉(zhuǎn)卷積

    在CNN中,轉(zhuǎn)卷積是一種上采樣(up-sampling)的方法。如果你對轉(zhuǎn)卷積感到困惑,那么就來讀讀這篇文章吧。
    的頭像 發(fā)表于 01-31 17:32 ?4669次閱讀

    深度學(xué)習(xí)&計算機視覺方向的相關(guān)面試題

    卷積也稱為轉(zhuǎn)卷積,如果用矩陣乘法實現(xiàn)卷積操作,將卷積核平鋪為矩陣,則
    的頭像 發(fā)表于 09-24 13:04 ?2577次閱讀
    <b class='flag-5'>深度</b>學(xué)習(xí)&計算機視覺方向的相關(guān)面試題

    深入理解深度學(xué)習(xí)中的反(轉(zhuǎn))卷積

    本文首發(fā)于 GiantPandaCV :深入理解神經(jīng)網(wǎng)絡(luò)中的反(轉(zhuǎn))卷積作者:梁德澎本文主要是把之前在知乎上的回答:反卷積和上采樣+卷積
    發(fā)表于 02-07 11:17 ?0次下載
    深入理解<b class='flag-5'>深度</b>學(xué)習(xí)中的反(<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>置</b>)<b class='flag-5'>卷積</b>

    PyTorch教程14.10之轉(zhuǎn)卷積

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程14.10之轉(zhuǎn)卷積.pdf》資料免費下載
    發(fā)表于 06-05 11:11 ?0次下載
    PyTorch教程14.10之<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>置</b><b class='flag-5'>卷積</b>

    深度學(xué)習(xí)中的各種卷積原理解析

    從技術(shù)上講,信號處理中的去卷積卷積運算的逆運算。但這里卻不是這種運算。因此,某些作者強烈反對將轉(zhuǎn)卷積稱為去
    發(fā)表于 07-01 10:24 ?701次閱讀
    <b class='flag-5'>深度</b>學(xué)習(xí)中的各種<b class='flag-5'>卷積</b>原理<b class='flag-5'>解析</b>

    MATLAB | 這是我見過最離譜的轉(zhuǎn)操作

    注:此轉(zhuǎn)操作與 t-product 積相對應(yīng),在其他類型張量運算中的轉(zhuǎn)操作可能有不同的定義方式,請注意區(qū)分。
    的頭像 發(fā)表于 07-21 11:50 ?841次閱讀
    MATLAB | 這是我見過最離譜的<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>置</b>操作

    卷積神經(jīng)網(wǎng)絡(luò)的工作原理和應(yīng)用

    卷積神經(jīng)網(wǎng)絡(luò)(FCN)是深度學(xué)習(xí)領(lǐng)域中的一種特殊類型的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),尤其在計算機視覺領(lǐng)域表現(xiàn)出色。它通過全局平均池化或轉(zhuǎn)卷積處理任意尺寸
    的頭像 發(fā)表于 07-11 11:50 ?1138次閱讀

    如何在Tensorflow中實現(xiàn)反卷積

    在TensorFlow中實現(xiàn)反卷積(也稱為轉(zhuǎn)卷積或分?jǐn)?shù)步長卷積)是一個涉及多個概念和步驟的過程。反卷積
    的頭像 發(fā)表于 07-14 10:46 ?621次閱讀