日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

StyTr^2:Image Style Transfer with Transformers

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 StyTr^2:Image Style Transfer with Transformers 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2022CVPR Yingying Deng StyTr2 :Image Style Transfer with Transformers

文章目錄

  • 主要工作
  • 介紹
    • 面臨的困難
    • 主要貢獻
  • 相關工作
    • 圖像風格遷移
    • transformer架構
    • 位置編碼
      • Functional positional encoding
      • Parametric positional encoding
  • 模型架構
  • 方法
    • CAPE:Content-Aware Positional Encoding
      • 1.生成patches的embed
      • 2.CAPE
    • Style Transfer Transformer
      • Transformer encoder
      • Transformer decoder
        • AT,Auto-Regressive
        • 與NAT的對比:
      • CNN decoder
    • 網絡優化
  • 實驗

主要工作

消除基于CNN的風格遷移方法的有偏問題,并提出新的使用transformer的風格遷移框架。

介紹

該基于transformer的框架(StyTr2StyTr^2StyTr2)包含兩個不同的transformer的encoder,以分別為內容和樣式生成特定域的序列。encoder之后,decoder分別地逐步生成圖像patches的輸出序列。可以看作是圖像patches的sequence-to-sequence的生成。

面臨的困難

  • 與基于邏輯排序的句子不同,圖像patches的序列與圖像內容的語義信息相關聯。
  • 圖像分辨率的指數級增長將導致位置編碼的顯著變化,導致位置偏差較大,輸出質量較差。
  • 主要貢獻

    • 提出基于transformer👍的圖像風格遷移框架StyTr2StyTr^2StyTr2,生成具有良好保存的結構和輸入內容圖像細節(防止內容有偏的風格遷移)的樣式化結果。
    • 提出一種尺度不變(針對不同分辨率大小的圖像)的內容感知位置編碼(CAPE👍,content-aware positional encoding)方案。

    相關工作

    圖像風格遷移

    總而言之,言而總之,與全卷積網絡相比,基于transformer的網絡可以利用自注意機制捕獲輸入圖像的長期依賴性。在本文中,我們引入基于transformer的樣式遷移任務的結構,將圖像風格遷移任務看作是圖像patches的sequence-to-sequence的生成。

    transformer架構

    位置編碼

    Functional positional encoding

    通過預定義的函數來計算,如Attention?Is?All?You?Need\text {Attention Is All You Need}Attention?Is?All?You?Need中:

    • PE(pos,2i)=sin(pos/100002i/dmodel)\color{black}PE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}})PE(pos,2i)?=sin(pos/100002i/dmodel?),偶數位置
    • PE(pos,2i+1)=cos(pos/100002i/dmodel)\color{black}PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{model}})PE(pos,2i+1)?=cos(pos/100002i/dmodel?),奇數位置

    其中,pos是一句話中某個字的位置,dmodeld_{model}dmodel??表示將一個詞表示為一個向量的長度,2i表示這個向量的每個維度。代碼實現,見:

    E:\pycharm\learn_pytorch\src\position_encoding_transformer.py

    Parametric positional encoding

    通過網絡訓練得到,如:BERT

    模型架構

    方法

    CAPE:Content-Aware Positional Encoding

    1.生成patches的embed

    給定輸入圖像,首先對圖像做transform,變成256*256大小:

    def train_transform():transform_list = [transforms.Resize(size=(512, 512)),transforms.RandomCrop(256),transforms.ToTensor()]return transforms.Compose(transform_list)

    然后把輸入圖像分成L個8*8大小的patches,每個patch的維度是C,即,每個patch由3維變為C維,然后經過一個線性投影層。其實就是經過一個conv(indim:3,outdim:512,kernelsize:8,stride:8)\color{black}conv(in_dim:3, out_dim:512, kernel_size:8, stride:8)conv(ind?im:3,outd?im:512,kernels?ize:8,stride:8),變成512x32x32大小的特征。生成序列特征編碼sigma,C是sigma的維度。

    self.proj = nn.Conv2d(in_chans,embed_dim,kernel_size=patch_size,stride=patch_size) #N 32 32 512 ... ... x = self.proj(x)

    2.CAPE

    重新縮放為18*18,并通過一個維度不變的1x1卷積用作訓練出來的位置編碼,然后插值為256x256。

    self.new_ps = nn.Conv2d(512, 512, (1,1)) self.averagepooling = nn.AdaptiveAvgPool2d(18) # content-aware positional embedding content_pool = self.averagepooling(content) #18 18 512 pos_c = self.new_ps(content_pool) pos_embed_c = F.interpolate(pos_c, mode='bilinear',size= style.shape[-2:]) # N C:512 H:256 W:256

    Style Transfer Transformer

    Transformer encoder

    StyTr2StyTr^2StyTr2有兩個transformer encoder去編碼特定域(內容和風格)的特征。通過自注意力機制與前饋神經網絡對其進行編碼。

    其中,對輸入的style圖像做embedding時,不需要考慮位置編碼,因為我們不需要在輸出中維護輸入style圖像的結構特征。

    Transformer decoder

    與自回歸(AT,Auto-Regressive)處理方式不同,本文decoder一次將所有的連續的小塊作為輸入來預測輸出。

    AT,Auto-Regressive

    與NAT的對比:

    CNN decoder

    transformer的輸出序列是HW64×C\frac{HW}{64} × C64HW?×C的形狀。本文沒有直接上采樣輸出序列來構建最終結果,而是使用三層CNN解碼器來細化transformer decoder的輸出。對于每一層,本文采用一系列的操作,包括3×3Conv+ReLU+2×upsample來擴大輸出尺寸。最后可以得到H×W×3的分辨率的最終結果。

    網絡優化

    使用VGG網絡提取的特征計算loss。

    ①:Lc=1Nl∑i=0Nl∥?i(Io)??i(Ic)∥2\color{black}{ L } _ { c } = \frac { 1 } { N _ { l } } \sum _ { i = 0 } ^ { N _ { l } } \| \phi _ { i } ( I _ { o } ) - \phi _ { i } ( I _ { c } ) \| _ { 2 }Lc?=Nl?1?i=0Nl???i?(Io?)??i?(Ic?)2?

    LcL_cLc?是由VGG提取輸入內容圖像與輸出圖像的特征,并計算它們之間每一層的歐氏距離。

    ②:Ls=1Nl∑i=0Nl∥μ(?i(Io))?μ(?i(Is))∥2+∥σ(?i(Io))?σ(?i(Is))∥2\color{black}\begin{array} { l } { { L } _ { s } = \frac { 1 } { N _ { l } } \sum _ { i= 0 } ^ { N _ { l } } \| \mu ( \phi _ { i } ( I _ { o } ) ) - \mu ( \phi _ { i } ( I _ { s } ) ) \| _ { 2 } } { + \| \sigma ( \phi _ { i } ( I _ { o } ) ) - \sigma ( \phi _ { i } ( I _ { s } ) ) \| _ { 2 } } \\ \end{array}Ls?=Nl?1?i=0Nl??μ(?i?(Io?))?μ(?i?(Is?))2?+σ(?i?(Io?))?σ(?i?(Is?))2??

    LsL_sLs?是最小化由VGG提取的輸出圖像與輸入的風格圖像的每一層特征的均值和方差。

    ③:Lid1=∥Icc?Ic∥2+∥Iss?Is∥2\color{black}{ L } _ { i d 1 } = \left\| I _ { c c } - I _ { c } \right\| _ { 2 } + \| I _ { s s } - I _ { s } \| _ { 2 } Lid1?=Icc??Ic?2?+Iss??Is?2?,其中IcI_cIc?是輸入圖像,IccI_{cc}Icc?是輸出圖像。

    ? Lid2=1Nl∑i=0Nl∥?i(Icc)??i(Ic)∥2+∥?i(Iss)??i(Is)∥2\color{black}{ L } _ { i d 2 } = \frac { 1 } { N _ { l } } \sum _ { i = 0 } ^ { N _ { l } } \| \phi _ { i } ( I _ { c c } ) - \phi _ { i } ( I _ { c } ) \| _ { 2 } + \| \phi _ { i } ( I _ { s s } ) - \phi _ { i } ( I _ { s } ) \| _ { 2 } Lid2?=Nl?1?i=0Nl???i?(Icc?)??i?(Ic?)2?+?i?(Iss?)??i?(Is?)2?

    同時當輸入的內容和風格圖像一樣(同時是風格圖\同時是內容圖)時,需要保證此時的輸出圖像與輸入圖像歐氏距離最小;并且此時從輸入與輸出提取出來的特征的歐氏距離也應該最小。

    ④:最后的loss由下式表出:

    L=λcLc+λsLs+λid1Lid1+λid2Lid2\color{black}{ L } = \lambda _ { c } { L } _ { c } + \lambda _ { s } { L } _ { s } + \lambda _ { i d 1 } { L } _ { i d 1 } + \lambda _ { i d 2 } {L } _ { i d 2 } L=λc?Lc?+λs?Ls?+λid1?Lid1?+λid2?Lid2?

    其中λc,λs,λid1,λid2\lambda_c,\lambda_s,\lambda_{id1},\lambda_{id2}λc?,λs?,λid1?,λid2?分別設置為10,7,50,1。

    實驗

    content:MS-COCO style:WiKiArt

    訓練時所有輸入圖像隨機裁切成256*256大小;測試時支持任何大小分辨率

    總結

    以上是生活随笔為你收集整理的StyTr^2:Image Style Transfer with Transformers的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。