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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

图像迁移风格保存模型_图像风格迁移也有框架了:使用Python编写,与PyTorch完美兼容,外行也能用...

發(fā)布時間:2024/7/23 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像迁移风格保存模型_图像风格迁移也有框架了:使用Python编写,与PyTorch完美兼容,外行也能用... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原標題:圖像風(fēng)格遷移也有框架了:使用Python編寫,與PyTorch完美兼容,外行也能用

選自Medium

作者:Philip Meier

機器之心編譯

編輯:陳萍

易于使用的神經(jīng)風(fēng)格遷移框架 pystiche。

將內(nèi)容圖片與藝術(shù)風(fēng)格圖片進行融合,生成一張具有特定風(fēng)格的新圖,這種想法并不新鮮。早在 2015 年,Gatys、 Ecker 以及 Bethge 開創(chuàng)性地提出了神經(jīng)風(fēng)格遷移(Neural Style Transfer ,NST)。

不同于深度學(xué)習(xí),目前 NST 還沒有現(xiàn)成的庫或框架。因此,新的 NST 技術(shù)要么從頭開始實現(xiàn)所有內(nèi)容,要么基于現(xiàn)有的方法實現(xiàn)。但這兩種方法都有各自的缺點:前者由于可重用部分的冗長實現(xiàn),限制了技術(shù)創(chuàng)新;后者繼承了 DL 硬件和軟件快速發(fā)展導(dǎo)致的技術(shù)債務(wù)。

最近,新項目 pystiche 很好地解決了這些問題,雖然它的核心受眾是研究人員,但其易于使用的用戶界面為非專業(yè)人員使用 NST 提供了可能。

pystiche 是一個用 Python 編寫的 NST 框架,基于 PyTorch 構(gòu)建,并與之完全兼容。相關(guān)研究由 pyOpenSci 進行同行評審,并發(fā)表在 JOSS 期刊 (Journal of Open Source Software) 上。

  • 論文地址:
  • 項目地址:

在深入實現(xiàn)之前,我們先來回顧一下 NST 的原理。它有兩種優(yōu)化方式:基于圖像的優(yōu)化和基于模型的優(yōu)化。雖然 pystiche 能夠很好地處理后者,但更為復(fù)雜,因此本文只討論基于圖像的優(yōu)化方法。

在基于圖像的方法中,將圖像的像素迭代調(diào)整訓(xùn)練,來擬合感知損失函數(shù)(perceptual loss)。感知損失是 NST 的核心部分,分為內(nèi)容損失(content loss)和風(fēng)格損失(style loss),這些損失評估輸出圖像與目標圖像的匹配程度。與傳統(tǒng)的風(fēng)格遷移算法不同,感知損失包含一個稱為編碼器的多層模型,這就是 pystiche 基于 PyTorch 構(gòu)建的原因。

如何使用 pystiche

讓我們用一個例子介紹怎么使用 pystiche 生成神經(jīng)風(fēng)格遷移圖片。首先導(dǎo)入所需模塊,選擇處理設(shè)備。雖然 pystiche 的設(shè)計與設(shè)備無關(guān),但使用 GPU 可以將 NST 的速度提高幾個數(shù)量級。

模塊導(dǎo)入與設(shè)備選擇:

importtorch importpystiche from pystiche importdemo, enc, loss, ops, optim

print(f "pystiche=={}")

device = ( "cuda"iftorch.cuda.is_available else"cpu")

輸出:

pystiche== 0.7. 0

多層編碼器

content_loss 和 style_loss 是對圖像編碼進行操作而不是圖像本身,這些編碼是由在不同層級的預(yù)訓(xùn)練編碼器生成的。pystiche 定義了 類,該類在單個前向傳遞中可以有效地處理編碼問題。該示例使用基于 VGG19 架構(gòu)的 vgg19_multi_layer_encoder。默認情況下,它將加載 torchvision 提供的權(quán)重。

多層編碼器:

multi_layer_encoder = enc.vgg19_multi_layer_encoderprint(multi_layer_encoder)

輸出:

VGGMultiLayerEncoder(arch=vgg19, framework=torch, allow_inplace= True(preprocessing): TorchPreprocessing(( 0): Normalize( mean=( '', '', ''), std=( '', '', '') ))(conv1_1): Conv2d( 3, 64, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu1_1): ReLU(inplace= True) (conv1_2): Conv2d( 64, 64, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu1_2): ReLU(inplace= True) (pool1): MaxPool2d(kernel_size= 2, stride= 2, padding= 0, dilation= 1, ceil_mode= False) (conv2_1): Conv2d( 64, 128, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu2_1): ReLU(inplace= True) (conv2_2): Conv2d( 128, 128, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu2_2): ReLU(inplace= True) (pool2): MaxPool2d(kernel_size= 2, stride= 2, padding= 0, dilation= 1, ceil_mode= False) (conv3_1): Conv2d( 128, 256, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu3_1): ReLU(inplace= True) (conv3_2): Conv2d( 256, 256, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu3_2): ReLU(inplace= True) (conv3_3): Conv2d( 256, 256, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu3_3): ReLU(inplace= True) (conv3_4): Conv2d( 256, 256, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu3_4): ReLU(inplace= True) (pool3): MaxPool2d(kernel_size= 2, stride= 2, padding= 0, dilation= 1, ceil_mode= False) (conv4_1): Conv2d( 256, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu4_1): ReLU(inplace= True) (conv4_2): Conv2d( 512, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu4_2): ReLU(inplace= True) (conv4_3): Conv2d( 512, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu4_3): ReLU(inplace= True) (conv4_4): Conv2d( 512, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu4_4): ReLU(inplace= True) (pool4): MaxPool2d(kernel_size= 2, stride= 2, padding= 0, dilation= 1, ceil_mode= False) (conv5_1): Conv2d( 512, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu5_1): ReLU(inplace= True) (conv5_2): Conv2d( 512, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu5_2): ReLU(inplace= True) (conv5_3): Conv2d( 512, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu5_3): ReLU(inplace= True) (conv5_4): Conv2d( 512, 512, kernel_size=( 3, 3), stride=( 1, 1), padding=( 1, 1)) (relu5_4): ReLU(inplace= True) (pool5): MaxPool2d(kernel_size= 2, stride= 2, padding= 0, dilation= 1, ceil_mode= False) )

感知損失

pystiche 將內(nèi)容損失和風(fēng)格損失定義為操作符。使用 作為 content_loss,直接與編碼進行對比。如果編碼器針對分類任務(wù)進行過訓(xùn)練,如該示例中這些編碼表示內(nèi)容。對于content_layer,選擇 multi_layer_encoder 的較深層來獲取抽象的內(nèi)容表示,而不是許多不必要的細節(jié)。

content_layer= "relu4_2"encoder= (content_layer) content_loss= (encoder)

pystiche 使用 作為 style_loss 的基礎(chǔ),通過比較編碼各個通道之間的相關(guān)性來丟棄空間信息。這樣就可以在輸出圖像中的任意區(qū)域合成風(fēng)格元素,而不僅僅是風(fēng)格圖像中它們所在的位置。對于 ,如果它在淺層和深層 style_layers 都能很好地運行,則其性能達到最佳。

style_weight 可以控制模型對輸出圖像的重點——內(nèi)容或風(fēng)格。為了方便起見,pystiche 將所有內(nèi)容包裝在 中,該操作處理在同一 multi_layer_encoder 的多個層上進行操作的相同類型操作符的情況。

style_layers = ( "relu1_1", "relu2_1", "relu3_1", "relu4_1", "relu5_1") style_weight = 1e3

def get_encoding_op(encoder, layer_weight):return (encoder, score_weight=layer_weight)

style_loss = (multi_layer_encoder, style_layers, get_encoding_op, score_weight=style_weight,)

結(jié)合了 content_loss 與 style_loss,將作為優(yōu)化的標準。

criterion = (content_loss, style_loss).to(device)print(criterion)

輸出:

PerceptualLoss((content_loss): FeatureReconstructionOperator(score_weight= 1,encoder= VGGMultiLayerEncoder(layer= relu4_2,arch= vgg19,framework= torch,allow_inplace= True))(style_loss): MultiLayerEncodingOperator(encoder= VGGMultiLayerEncoder(arch= vgg19,framework= torch,allow_inplace= True),score_weight= 1000(relu1_1): GramOperator(score_weight=)(relu2_1): GramOperator(score_weight=)(relu3_1): GramOperator(score_weight=)(relu4_1): GramOperator(score_weight=)(relu5_1): GramOperator(score_weight=)))

圖像加載

首先加載并顯在 NST 需要的目標圖片。因為 NST 占用內(nèi)存較多,故將圖像大小調(diào)整為 500 像素。

size= 500images= demo.images content_image = images[ "bird1"].read(size=size, device=device) (content_image)

內(nèi)容圖片

style_image = images[ "paint"].read(size=size, device=device) (style_image)

風(fēng)格圖片

神經(jīng)風(fēng)格遷移

創(chuàng)建 input_image。從 content_image 開始執(zhí)行 NST,這樣可以實現(xiàn)快速收斂。image_optimization 函數(shù)是為了方便,也可以由手動優(yōu)化循環(huán)代替,且不受限制。如果沒有指定,則使用 作為優(yōu)化器。

input_image= content_image.clone output_image= optim.image_optimization(input_image, criterion, num_steps= 500)

不氪金玩轉(zhuǎn)中文超大規(guī)模預(yù)訓(xùn)練!

12月22日20:00, 百度自然語言處理部資深研發(fā)工程師碩環(huán)老師將在第二期直播《NLP開發(fā)利器解析:中文超大規(guī)模預(yù)訓(xùn)練模型精講》 中介紹:

  • 語義理解技術(shù)簡介

  • 基于預(yù)訓(xùn)練的語義理解技術(shù)
  • 文心(ERNIE)技術(shù)原理詳解
  • 文心最新技術(shù)解讀
  • 文心語義理解技術(shù)應(yīng)用

掃碼進群聽課,還有機會贏取100元京東卡、《智能經(jīng)濟》實體書、限量百度鼠標墊多重好獎!

轉(zhuǎn)載請聯(lián)系本公眾號獲得授權(quán)

總結(jié)

以上是生活随笔為你收集整理的图像迁移风格保存模型_图像风格迁移也有框架了:使用Python编写,与PyTorch完美兼容,外行也能用...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九热精品视频在线播放 | av av在线 | 波多野结衣在线观看一区 | 欧美色资源 | 特黄三级 | 欧美乱妇在线观看 | japansexxxxhd医生 夜夜操导航 | 中国在线观看视频高清免费 | 日韩视频中文字幕在线观看 | 国产精品久久91 | 日韩v片| 午夜香蕉网 | 欧美日韩在线观看一区二区三区 | www.日批 | 日日爱669 | 亚洲色欧美另类 | 日韩六九视频 | av福利网址| 日韩欧美亚洲综合 | 欧美人与性禽动交精品 | 波多野结衣理论片 | 午夜视频在线网站 | 久久香焦| 欧美午夜激情影院 | 日韩欧美二区三区 | 一区二区三区日本视频 | 成人av影视在线 | 色狠狠综合网 | 无码国产精品高潮久久99 | 欧美动态视频 | 久久无码国产视频 | 天天干天天操心 | 亚洲最大色网站 | 老妇女玩小男生毛片 | 亚洲最大黄色 | 玖玖精品视频 | 五月激情五月婷婷 | 人妻洗澡被强公日日澡电影 | 日本特黄特黄刺激大片 | 免费观看nba乐趣影院 | 成人一级生活片 | 吞精囗交69激情欧美 | 欧美久久久久久久久久久久 | 久久久久亚洲av成人网人人网站 | 三级久久久 | 中国黄色一级片 | 色就是色av | 日韩极品视频在线观看 | 理论片琪琪午夜电影 | 轮番上阵免费观看在线电影 | 欧美日韩在线第一页 | 插插插av | 日韩一级黄色录像 | 少妇一级淫片免费放中国 | 日本 奴役 捆绑 受虐狂xxxx | 黄色天堂网| 成人免费看片98 | 亚洲三级在线视频 | 被两个男人吃奶三p爽文 | 仙踪林久久久久久久999 | 欧美人xxx | 91精品国产综合久久久蜜臀图片 | 日韩午夜视频在线 | 婷婷激情视频 | 大香蕉精品一区 | 国产精品污 | 久久婷婷婷 | 亚欧视频在线观看 | 亚洲熟悉妇女xxx妇女av | 欧美一级免费黄色片 | 蝌蚪久久| 欧美激情免费 | 午夜淫片 | 播放灌醉水嫩大学生国内精品 | 操比视频网站 | av青青草 | 人人妻一区二区三区 | 日韩黄色高清视频 | 麻豆精品一区 | 人人干av| 九九九九九伊人 | 国产夜夜操 | 久色视频| 五月激情站 | 欧美乱妇狂野欧美视频 | 久久精品这里只有精品 | 中文字幕不卡 | 波多野结衣50连登视频 | 亚洲黄色在线观看 | 中文字幕91爱爱 | 成人在线视屏 | 国产精品一线 | 日日噜噜噜噜久久久精品毛片 | 中文字幕人成乱码熟女香港 | 成人久久精品人妻一区二区三区 | 欧美脚交视频 | 天天操天天操天天干 | 天天插夜夜爽 | 天天草天天操 |