精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一篇文章搞定CNN轉置卷積

汽車玩家 ? 來源:CSDN ? 作者:lanadeus ? 2020-01-31 17:32 ? 次閱讀

在CNN中,轉置卷積是一種上采樣(up-sampling)的方法。如果你對轉置卷積感到困惑,那么就來讀讀這篇文章吧。

上采樣的需要

在我們使用神經網絡的過程中,我們經常需要上采樣(up-sampling)來提高低分辨率圖片的分辨率。

上采樣有諸多方法,舉例如下。
最近鄰插值(Nearest neighbor interpolation)
雙線性插值(Bi-linear interpolation)
雙立方插值(Bi-cubic interpolation)

但是,上述的方法都需要插值操作,而這些插值的操作都充滿了人為設計和特征工程的氣息,而且也沒有網絡進行學習的余地。

為何需要轉置卷積

如果我們想要網絡去學出一種最優的上采樣方法,我們可以使用轉置卷積。它與基于插值的方法不同,它有可以學習的參數

若是想理解轉置卷積這個概念,可以看看它是如何運用于在一些有名的論文和項目中的。

DCGAN的生成器(generator)接受一些隨機采樣的值作為輸入來生成出完整的圖片。它的語義分割(semantic segmentation)就使用了卷積層來提取編碼器(encoder)中的特征,接著,它把原圖存儲在解碼器(decoder)中以確定原圖中的每個像素的類別歸屬。

轉置卷積也被稱作: “分數步長卷積(Fractionally-strided convolution)”和”反卷積(Deconvolution)”.

我們在這篇文章里面只使用轉置卷積這個名字,其他文章可能會用到其他名字. 這些名字指的都是同樣的東西.

卷積操作

我們先通過一個簡單的例子來看看卷積是怎么工作的.

假設我們有一個4x4的input矩陣, 并對它使用核(kernel)為3x3,沒有填充(padding),步長(stride)為1的卷積操作. 結果是一個2x2的矩陣,如下圖所示.

(譯者注: stride,kernel,padding等詞以下記為英文)

卷積操作的本質其實就是在input矩陣和kernel矩陣之間做逐元素(element-wise)的乘法然后求和. 因為我們的stride為1,不使用padding,所以我們只能在4個位置上進行操作.

一篇文章搞定CNN轉置卷積

要點:卷積操作其實就是input值和output值的位置性關系(positional connectivity).

例如,在input矩陣的左上角的值會影響output矩陣的左上角的值.

更進一步,3x3的核建立了input矩陣中的9個值和output矩陣中的1個值的關系.

“卷積操作建立了多對一的關系”. 在閱讀下文時,請讀者務必時刻牢記這個概念.

卷積的逆向操作

現在,考慮一下我們如何換一個計算方向. 也就是說,我們想要建立在一個矩陣中的1個值和另外一個矩陣中的9個值的關系.這就是像在進行卷積的逆向操作,這就是轉置卷積的核心思想.

(譯者注:從信息論的角度看,卷積是不可逆的.所以這里說的并不是從output矩陣和kernel矩陣計算出原始的input矩陣.而是計算出一個保持了位置性關系的矩陣.)

一篇文章搞定CNN轉置卷積

但是,我們如何進行這種逆向操作呢?

為了討論這種操作,我們先要定義一下卷積矩陣和卷積矩陣的轉置.

卷積矩陣

我們可以將卷積操作寫成一個矩陣. 其實這就是重新排列一下kernel矩陣, 使得我們通過一次矩陣乘法就能計算出卷積操作后的矩陣.

一篇文章搞定CNN轉置卷積

我們將3x3的kernel重排為4x16的矩陣,如下:

一篇文章搞定CNN轉置卷積

這就是卷積矩陣. 每一行都定義了一次卷積操作. 如果你還看不透這一點, 可以看看下面的圖. 卷積矩陣的每一行都相當于經過了重排的kernel矩陣,只是在不同的位置上有zero padding罷了.

一篇文章搞定CNN轉置卷積

為了實現矩陣乘法,我們需要將尺寸為4x4的input矩陣壓扁(flatten)成一個尺寸為16x1的列向量(column vector).

一篇文章搞定CNN轉置卷積

然后,我們對4x16的卷積矩陣和1x16的input矩陣(就是16維的列向量,只是看成一個矩陣)進行矩陣乘法.

一篇文章搞定CNN轉置卷積

尺寸為4x1的output矩陣可以重排為2x2的矩陣.這正和我們之前得到的結果一致.

一篇文章搞定CNN轉置卷積

一句話,一個卷積矩陣其實就是kernel權重的重排,一個卷積操作可以被寫成一個卷積矩陣.

即便這樣又如何呢?

我想說的是: 使用這個卷積矩陣,你可以把16(4x4的矩陣)個值映射為4(2x2的矩陣)個值. 反過來做這個操作,你就可以把4(2x2的矩陣)個值映射為16(4x4的矩陣)辣.

蒙了?

繼續讀.

轉置過后的卷積矩陣

我們想把4(2x2的矩陣)個值映射為16(4x4的矩陣)個值。但是,還有一件事!我們需要維護1對9的關系。

假設我們轉置一下卷積矩陣C(4x16),得到C.T(16x4)。我們可以將C.T(16x4)和一個列向量(4x1)以矩陣乘法相乘,得到尺寸為16x1的output矩陣。轉置之后的矩陣建立了1個值對9個值的關系。

一篇文章搞定CNN轉置卷積

output矩陣可以被重排為4x4的.

一篇文章搞定CNN轉置卷積

我們已經上采樣了一個小矩陣(2x2),得到了一個大矩陣(4x4)。轉置卷積依然維護著1對9的關系:因為權重就是這么排的。

注意:用來進行轉置卷積的權重矩陣不一定來自于(come from)原卷積矩陣。重點是權重矩陣的形狀和轉置后的卷積矩陣相同。

總結

轉置卷積和普通卷積有相同的本質:建立了一些值之間的關系。只不過,轉置卷積所建立的這個關系與普通卷積所建立的關系,方向相反。

我們可以使用轉置卷積來進行上采樣。并且,轉置卷積中的權重是可以被學習的。因此,我們沒有必要搞什么插值方法來做上采樣。

盡管它被稱作轉置卷積,但是這并不意味著我們是拿一個已有的卷積矩陣的轉置來作為權重矩陣的來進行轉置卷積操作的. 和普通卷積相比,intput和output的關系被反向處理(轉置卷積是1對多,而不是普通的多對1),才是轉置卷積的本質。

正因如此,嚴格來說轉置卷積其實并不算卷積。但是我們可以把input矩陣中的某些位置填上0并進行普通卷積來獲得和轉置卷積相同的output矩陣。你可以發現有一大把文章說明如何使用這種方法實現轉置卷積。然而,因為需要在卷積操作之前,往input中填上許多的0,這種方法其實有點效率問題.

警告:轉置卷積會在生成的圖像中造成棋盤效應(checkerboard artifacts)。本文推薦在使用轉置卷積進行上采樣操作之后再過一個普通的卷積來減輕此類問題。如果你主要關心如何生成沒有棋盤效應的圖像,需要讀一讀paper。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4765

    瀏覽量

    100565
  • cnn
    cnn
    +關注

    關注

    3

    文章

    351

    瀏覽量

    22178
收藏 人收藏

    評論

    相關推薦

    CNN卷積

    `前言卷積神經網絡在深度學習領域是個很重要的概念,是入門深度學習必須搞懂的內容。CNN圖像識別的關鍵——卷積當我們給定個"X&
    發表于 10-17 10:15

    卷積神經網絡CNN介紹

    【深度學習】卷積神經網絡CNN
    發表于 06-14 18:55

    卷積神經網絡CNN圖解

    之前在網上搜索了好多好多關于CNN的文章,由于網絡上的文章很多斷章取義或者描述不清晰,看了很多youtobe上面的教學視頻還是沒有弄懂,最后經過痛苦漫長的煎熬之后對于神經網絡和卷積有了粗淺的了解
    發表于 11-16 13:18 ?5.7w次閱讀
    <b class='flag-5'>卷積</b>神經網絡<b class='flag-5'>CNN</b>圖解

    卷積神經網絡CNN架構分析-LeNet

    對于神經網絡和卷積有了粗淺的了解,關于CNN 卷積神經網絡,需要總結深入的知識有很多:人工神經網絡 ANN卷積神經網絡CNN
    發表于 11-16 13:28 ?2751次閱讀
    <b class='flag-5'>卷積</b>神經網絡<b class='flag-5'>CNN</b>架構分析-LeNet

    卷積神經網絡CNN架構分析 - LeNet

    。 于是在這里記錄下所學到的知識,關于CNN 卷積神經網絡,需要總結深入的知識有很多: 人工神經網絡 ANN 卷積神經網絡 CNN 卷積神經
    發表于 10-02 07:41 ?658次閱讀

    深度解析什么是卷積

    這篇文章對轉卷積(反卷積)有著很好的解釋,這里將其翻譯為中文,以饗國人。
    的頭像 發表于 09-03 09:39 ?5396次閱讀

    深入理解深度學習中的反()卷積

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

    PyTorch教程14.10之卷積

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

    卷積神經網絡概述 卷積神經網絡的特點 cnn卷積神經網絡的優點

    卷積神經網絡概述 卷積神經網絡的特點 cnn卷積神經網絡的優點? 卷積神經網絡(Convolutional neural network,
    的頭像 發表于 08-21 16:41 ?2850次閱讀

    cnn卷積神經網絡原理 cnn卷積神經網絡的特點是什么

    cnn卷積神經網絡原理 cnn卷積神經網絡的特點是什么? 卷積神經網絡(Convolutional Neural Network,
    的頭像 發表于 08-21 17:15 ?1578次閱讀

    cnn卷積神經網絡算法 cnn卷積神經網絡模型

    cnn卷積神經網絡算法 cnn卷積神經網絡模型 卷積神經網絡(CNN)是
    的頭像 發表于 08-21 17:15 ?2032次閱讀

    cnn卷積神經網絡matlab代碼

    cnn卷積神經網絡matlab代碼? 卷積神經網絡(Convolutional Neural Network, CNN)是深度學習中種常用
    的頭像 發表于 08-21 17:15 ?1242次閱讀

    cnn卷積神經網絡簡介 cnn卷積神經網絡代碼

    cnn卷積神經網絡簡介 cnn卷積神經網絡代碼 卷積神經網絡(Convolutional Neural Network,簡稱
    的頭像 發表于 08-21 17:16 ?2632次閱讀

    卷積神經網絡cnn模型有哪些

    卷積神經網絡(Convolutional Neural Networks,簡稱CNN)是種深度學習模型,廣泛應用于圖像識別、視頻分析、自然語言處理等領域。 CNN的基本概念 1.1
    的頭像 發表于 07-02 15:24 ?667次閱讀

    cnn卷積神經網絡分類有哪些

    卷積神經網絡(CNN)是種深度學習模型,廣泛應用于圖像分類、目標檢測、語義分割等領域。本文將詳細介紹CNN在分類任務中的應用,包括基本結構、關鍵技術、常見網絡架構以及實際應用案例。
    的頭像 發表于 07-03 09:28 ?579次閱讀