国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python基于VGG19實(shí)現(xiàn)圖像風(fēng)格遷移

這篇具有很好參考價值的文章主要介紹了python基于VGG19實(shí)現(xiàn)圖像風(fēng)格遷移。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目錄

1、原理

2、代碼實(shí)現(xiàn)


1、原理

圖像風(fēng)格遷移是一種將一張圖片的內(nèi)容與另一張圖片的風(fēng)格進(jìn)行合成的技術(shù)。

風(fēng)格(style)是指圖像中不同空間尺度的紋理、顏色和視覺圖案,內(nèi)容(content)是指圖像的高級宏觀結(jié)構(gòu)。

實(shí)現(xiàn)風(fēng)格遷移背后的關(guān)鍵概念與所有深度學(xué)習(xí)算法的核心思想是一樣的:定義一個損失函數(shù)來指定想要實(shí)現(xiàn)的目標(biāo),然后將這個損失最小化。你知道想要實(shí)現(xiàn)的目標(biāo)是什么,就是保存原始圖像的內(nèi)容,同時采用參考圖像的風(fēng)格。

在Python中,我們可以使用基于深度學(xué)習(xí)的模型來實(shí)現(xiàn)這一技術(shù)。?神經(jīng)風(fēng)格遷移可以用任何預(yù)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)。我們這里將使用 ?? Gatys等人所使用的 VGG19網(wǎng)絡(luò)。

2、代碼實(shí)現(xiàn)

?以下是一個基于VGG19模型的簡單圖像風(fēng)格遷移的實(shí)現(xiàn)過程:

(1)創(chuàng)建一個網(wǎng)絡(luò),它能夠同時計算風(fēng)格參考圖像、目標(biāo)圖像和生成圖像的 VGG19層激活。

(2)使用這三張圖像上計算的層激活來定義之前所述的損失函數(shù),為了實(shí)現(xiàn)風(fēng)格遷移,需要將這個損失函數(shù)最小化。

(3)設(shè)置梯度下降過程來將這個損失函數(shù)最小化

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
?
import torch
import torch.optim as optim
from torchvision import transforms, models
?
vgg = models.vgg19(pretrained=True).features
?
for param in vgg.parameters():
    param.requires_grad_(False)
?
?
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
?
vgg.to(device)
?
?
def load_image(img_path, max_size=400):
?
    image = Image.open(img_path)
    
    if max(image.size) > max_size:
        size = max_size
    else:
        size = max(image.size)
        
    image_transform = transforms.Compose([
                        transforms.Resize(size),
                        transforms.ToTensor(),
                        transforms.Normalize((0.485, 0.456, 0.406), 
                                             (0.229, 0.224, 0.225))])
?
    image = image_transform(image).unsqueeze(0)
    
    return image
?
?
content = load_image('dogs_and_cats.jpg').to(device)
style = load_image('picasso.jpg').to(device)
?
?
assert style.size() == content.size(), "輸入的風(fēng)格圖片和內(nèi)容圖片大小需要一致"
?
?
plt.ion()
def imshow(tensor,title=None):
    
    image = tensor.cpu().clone().detach()
    image = image.numpy().squeeze()
    image = image.transpose(1,2,0)
    image = image * np.array((0.229, 0.224, 0.225)) + np.array((0.485, 0.456, 0.406))
    plt.imshow(image)
    if title is not None:
        plt.title(title)
    plt.pause(0.1)
?
plt.figure()
imshow(style, title='Style Image')
?
plt.figure()
imshow(content, title='Content Image')
?
?
?
?
def get_features(image, model, layers=None):
   
    if layers is None:
        layers = {'0': 'conv1_1',
                  '5': 'conv2_1', 
                  '10': 'conv3_1', 
                  '19': 'conv4_1',
                  '21': 'conv4_2',  
                  '28': 'conv5_1'}
        
    features = {}
    x = image
    for name, layer in model._modules.items():
        x = layer(x)
        if name in layers:
            features[layers[name]] = x
            
    return features
?
content_features = get_features(content, vgg)
style_features = get_features(style, vgg)
?
def gram_matrix(tensor):
    
    _, d, h, w = tensor.size() 
    tensor = tensor.view(d, h * w)
    gram = torch.mm(tensor, tensor.t())
    return gram
?
style_grams={}
for layer in style_features:
  style_grams[layer] = gram_matrix(style_features[layer])
?
import torch.nn.functional as F
?
def ContentLoss(target_features,content_features):
  content_loss = F.mse_loss(target_features['conv4_2'],content_features['conv4_2'])
  return content_loss
?
def StyleLoss(target_features,style_grams,style_weights):
    style_loss = 0
    for layer in style_weights:
        target_feature = target_features[layer]
        target_gram = gram_matrix(target_feature)
        _, d, h, w = target_feature.shape
        style_gram = style_grams[layer]
        layer_style_loss = style_weights[layer] * F.mse_loss(target_gram,style_gram)
        style_loss += layer_style_loss / (d * h * w)
?
    return style_loss
?
?
style_weights = {'conv1_1': 1.,
                 'conv2_1': 0.75,
                 'conv3_1': 0.2,
                 'conv4_1': 0.2,
                 'conv5_1': 0.2}
?
alpha = 1  # alpha
beta = 1e6  # beta
?
?
show_every = 100
steps = 2000 
?
target = content.clone().requires_grad_(True).to(device)
optimizer = optim.Adam([target], lr=0.003)
?
?
for ii in range(1, steps+1):
    
    target_features = get_features(target, vgg)
    
    content_loss = ContentLoss(target_features,content_features)
    
    style_loss = StyleLoss(target_features,style_grams,style_weights)
        
    total_loss = alpha * content_loss + beta * style_loss
    
    optimizer.zero_grad()
    total_loss.backward()
    optimizer.step()
    #print(ii)
    
    if  ii % show_every == 0:
        print('Total loss: ', total_loss.item())
        plt.figure()      
        imshow(target)
?
plt.figure()
imshow(target,"Target Image")
plt.ioff()
plt.show()
?

python基于VGG19實(shí)現(xiàn)圖像風(fēng)格遷移,python,開發(fā)語言

python基于VGG19實(shí)現(xiàn)圖像風(fēng)格遷移,python,開發(fā)語言

python基于VGG19實(shí)現(xiàn)圖像風(fēng)格遷移,python,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-735153.html

到了這里,關(guān)于python基于VGG19實(shí)現(xiàn)圖像風(fēng)格遷移的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 畢業(yè)設(shè)計-基于生成對抗網(wǎng)絡(luò)的圖像風(fēng)格遷移

    畢業(yè)設(shè)計-基于生成對抗網(wǎng)絡(luò)的圖像風(fēng)格遷移

    目錄 前言 課題背景和意義 實(shí)現(xiàn)技術(shù)思路 一、相關(guān)工作 二、基于生成對抗網(wǎng)絡(luò)的風(fēng)格遷移模型 三、實(shí)驗(yàn)與結(jié)果分析 四、總結(jié) 實(shí)現(xiàn)效果圖樣例 最后 ? ? ??大四是整個大學(xué)期間最忙碌的時光,一邊要忙著備考或?qū)嵙?xí)為畢業(yè)后面臨的就業(yè)升學(xué)做準(zhǔn)備,一邊要為畢業(yè)設(shè)計耗費(fèi)大量精

    2024年02月06日
    瀏覽(32)
  • AI:113-基于卷積神經(jīng)網(wǎng)絡(luò)的圖像風(fēng)格遷移

    ??點(diǎn)擊這里跳轉(zhuǎn)到本專欄,可查閱專欄頂置最新的指南寶典~ ?????? 你的技術(shù)旅程將在這里啟航! 從基礎(chǔ)到實(shí)踐,深入學(xué)習(xí)。無論你是初學(xué)者還是經(jīng)驗(yàn)豐富的老手,對于本專欄案例和項(xiàng)目實(shí)踐都有參考學(xué)習(xí)意義。 ??? 每一個案例都附帶有在本地跑過的關(guān)鍵代碼,詳細(xì)講

    2024年02月02日
    瀏覽(25)
  • 畢設(shè) 深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python

    畢設(shè) 深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python

    ?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項(xiàng)目,今天

    2024年02月04日
    瀏覽(29)
  • OpenCV實(shí)現(xiàn)圖像風(fēng)格遷移(梵高星空)

    OpenCV實(shí)現(xiàn)圖像風(fēng)格遷移(梵高星空)

    在計算機(jī)視覺和深度學(xué)習(xí)的世界中,有一項(xiàng)令人著迷的技術(shù)被廣泛應(yīng)用,它能夠?qū)⒁环N獨(dú)特的藝術(shù)風(fēng)格嵌入到圖像中,仿佛這幅圖像是由大師親自繪制的一樣。這技術(shù)被稱為圖像遷移,它引領(lǐng)我們進(jìn)入一個充滿無限創(chuàng)意可能性的領(lǐng)域。通過圖像遷移,我們可以將一幅藝術(shù)作品

    2024年02月08日
    瀏覽(22)
  • 競賽項(xiàng)目 深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python

    競賽項(xiàng)目 深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python

    ?? 優(yōu)質(zhì)競賽項(xiàng)目系列,今天要分享的是 ?? 深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python 該項(xiàng)目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦! ??學(xué)長這里給一個題目綜合評分(每項(xiàng)滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 ?? 更多資料, 項(xiàng)目分享: https://gitee.com/danche

    2024年02月13日
    瀏覽(22)
  • 深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python 計算機(jī)競賽

    深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python 計算機(jī)競賽

    ?? 優(yōu)質(zhì)競賽項(xiàng)目系列,今天要分享的是 ?? 深度學(xué)習(xí)圖像風(fēng)格遷移 - opencv python 該項(xiàng)目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦! ??學(xué)長這里給一個題目綜合評分(每項(xiàng)滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 ?? 更多資料, 項(xiàng)目分享: https://gitee.com/danche

    2024年02月04日
    瀏覽(27)
  • 語義分割 | 基于 VGG16 預(yù)訓(xùn)練網(wǎng)絡(luò)和 Segnet 架構(gòu)實(shí)現(xiàn)遷移學(xué)習(xí)

    語義分割 | 基于 VGG16 預(yù)訓(xùn)練網(wǎng)絡(luò)和 Segnet 架構(gòu)實(shí)現(xiàn)遷移學(xué)習(xí)

    Hi,大家好,我是源于花海。 本文主要使用數(shù)據(jù)標(biāo)注工具 Labelme 對貓(cat)和狗(dog)這兩種訓(xùn)練樣本進(jìn)行標(biāo)注,使用預(yù)訓(xùn)練模型 VGG16 作為卷積基,并在其之上添加了全連接層?;跇?biāo)注樣本的信息和預(yù)訓(xùn)練模型的特征提取能力以及 Segnet 架構(gòu),訓(xùn)練自己構(gòu)建的 語義分割 網(wǎng)

    2024年01月25日
    瀏覽(19)
  • Pytorch基于VGG cosine similarity實(shí)現(xiàn)簡單的以圖搜圖(圖像檢索)

    Pytorch基于VGG cosine similarity實(shí)現(xiàn)簡單的以圖搜圖(圖像檢索)

    代碼如下: 上述代碼的核心思想類似于感知損失(Perceptual Loss),利用VGG提取圖像的多級特征,從而比較兩張圖像之間的相似性。區(qū)別在于Perceptual Loss中一般使用MAE,MSE比較特征的距離,而這里的代碼使用余弦相似度。 一個例子如下,給定一張貍花的圖像(query)如下: 我們希望

    2024年02月13日
    瀏覽(19)
  • 【深度學(xué)習(xí)實(shí)戰(zhàn)】基于深度學(xué)習(xí)的圖片風(fēng)格快速遷移軟件(Python源碼+UI界面)

    【深度學(xué)習(xí)實(shí)戰(zhàn)】基于深度學(xué)習(xí)的圖片風(fēng)格快速遷移軟件(Python源碼+UI界面)

    摘要: 圖像風(fēng)格遷移(Image Style Transfer) 是一種將一張圖像的風(fēng)格應(yīng)用到另一張圖像上的技術(shù)。本文詳細(xì)介紹了其實(shí)現(xiàn)的技術(shù)原理,同時給出完整的 Python 實(shí)現(xiàn)代碼、訓(xùn)練好的Pt模型,并且通過 PyQT 實(shí)現(xiàn)了UI界面,更方便進(jìn)行功能的展示。圖片風(fēng)格轉(zhuǎn)換系統(tǒng)主要實(shí)現(xiàn)了3種風(fēng)格

    2024年02月02日
    瀏覽(28)
  • 畢設(shè) 深度學(xué)習(xí)圖像風(fēng)格遷移

    畢設(shè) 深度學(xué)習(xí)圖像風(fēng)格遷移

    今天學(xué)長向大家介紹一個機(jī)器視覺項(xiàng)目 基于深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)的花卉識別 圖片風(fēng)格遷移指的是將一個圖片的風(fēng)格轉(zhuǎn)換到另一個圖片中,如圖所示: 原圖片經(jīng)過一系列的特征變換,具有了新的紋理特征,這就叫做風(fēng)格遷移。 在實(shí)現(xiàn)風(fēng)格遷移之前,需要先簡單了解一下VG

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包