[oneAPI] Neural Style Transfer

这篇具有很好参考价值的文章主要介绍了[oneAPI] Neural Style Transfer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517
Intel® DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/

oneAPI

import intel_extension_for_pytorch as ipex

# Device configuration
device = torch.device('xpu' if torch.cuda.is_available() else 'cpu')

optimizer = torch.optim.Adam([target], lr=config.lr, betas=[0.5, 0.999])
vgg = VGGNet().to(device).eval()

'''
Apply Intel Extension for PyTorch optimization against the model object and optimizer object.
使用Intel Extension for PyTorch中, 实际上在推理模式下是不需要优化器的
'''
vgg = ipex.optimize(vgg)

Neural Style Transfer

Neural Style Transfer是一种使用 CNN 将一幅图像的内容与另一幅图像的风格相结合的算法。给定内容图像和风格图像,目标是生成最小化与内容图像的内容差异和与风格图像的风格差异的目标图像。
[oneAPI] Neural Style Transfer,python杂记,oneapi,迁移学习
内容丢失

为了最小化内容差异,我们将内容图像和目标图像分别前向传播到预训练的VGGNet,并从多个卷积层中提取特征图。然后,更新目标图像以最小化内容图像的特征图与其特征图之间的均方误差。

风格丧失

与计算内容损失一样,我们将风格图像和目标图像前向传播到 VGGNet 并提取卷积特征图。为了生成与风格图像的风格相匹配的纹理,我们通过最小化风格图像的 Gram 矩阵和目标图像的 Gram 矩阵之间的均方误差来更新目标图像(特征相关性最小化)。请参阅此处了解如何计算风格损失。

特殊环境

本实验:借助PyTorch以及Intel® Optimization for PyTorch,对PyTorch进行了精心的优化与扩展,极大地提升了其性能,特别是在英特尔硬件上的表现更加卓越。这一优化策略使得我们的模型在训练和推断过程中变得更加迅捷高效,显著缩短了计算时间,提升了整体效率。并通过深度融合硬件与软件的精巧设计,有效地解锁了硬件潜力,让模型的训练和应用变得更加快速高效,为人工智能应用带来了全新的可能性。
[oneAPI] Neural Style Transfer,python杂记,oneapi,迁移学习

数据集使用自己收集的一些数据

[oneAPI] Neural Style Transfer,python杂记,oneapi,迁移学习
[oneAPI] Neural Style Transfer,python杂记,oneapi,迁移学习

content.png 表面原始的图片
[oneAPI] Neural Style Transfer,python杂记,oneapi,迁移学习
style.png表示需要将原始图片转化为的风格

定义使用包

from __future__ import division
from torchvision import models
from torchvision import transforms
from PIL import Image
import argparse
import torch
import torchvision
import torch.nn as nn
import numpy as np

import intel_extension_for_pytorch as ipex

# Device configuration
device = torch.device('xpu' if torch.cuda.is_available() else 'cpu')

加载数据

def load_image(image_path, transform=None, max_size=None, shape=None):
    """Load an image and convert it to a torch tensor."""
    image = Image.open(image_path)

    if max_size:
        scale = max_size / max(image.size)
        size = np.array(image.size) * scale
        image = image.resize(size.astype(int), Image.LANCZOS)

    if shape:
        image = image.resize(shape, Image.LANCZOS)

    if transform:
        image = transform(image).unsqueeze(0)

    return image.to(device)

Neural Style Transfer模型与介绍

VGGNet是一个经典的深度卷积神经网络架构,由牛津大学的研究团队提出,用于图像分类和识别任务。VGGNet以其简单而有效的结构在计算机视觉领域取得了显著的成就,成为了深度学习研究的重要里程碑之一。

VGGNet的特点在于其深层的网络结构,通过多个小尺寸的卷积核和池化层的堆叠,达到了很强的特征提取能力。其标准结构包括数个卷积层,之后是池化层,最后是全连接层。

VGGNet在图像分类竞赛中取得了优异的表现,其简单的结构和深层次的特征提取使得它成为了其他网络架构的基础。然而,由于其深层次的结构,VGGNet在计算资源和训练时间上需要较大代价,后续的研究逐渐提出了更加高效的网络架构,如ResNet和Inception等。

而对于本任务,我们使用原图,目标图,风格图的’0’, ‘5’, ‘10’, ‘19’, '28’等层的特征进行对比,最后让原图和风格图内容对应,而目标图与风格图的风格相似

class VGGNet(nn.Module):
    def __init__(self):
        """Select conv1_1 ~ conv5_1 activation maps."""
        super(VGGNet, self).__init__()
        self.select = ['0', '5', '10', '19', '28']
        self.vgg = models.vgg19(pretrained=True).features

    def forward(self, x):
        """Extract multiple convolutional feature maps."""
        features = []
        for name, layer in self.vgg._modules.items():
            x = layer(x)
            if name in self.select:
                features.append(x)
        return features

训练过程

def main(config):
    # Image preprocessing
    # VGGNet was trained on ImageNet where images are normalized by mean=[0.485, 0.456, 0.406] and std=[0.229, 0.224, 0.225].
    # We use the same normalization statistics here.
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize(mean=(0.485, 0.456, 0.406),
                             std=(0.229, 0.224, 0.225))])

    # Load content and style images
    # Make the style image same size as the content image
    content = load_image(config.content, transform, max_size=config.max_size)
    style = load_image(config.style, transform, shape=[content.size(2), content.size(3)])

    # Initialize a target image with the content image
    target = content.clone().requires_grad_(True)

    optimizer = torch.optim.Adam([target], lr=config.lr, betas=[0.5, 0.999])
    vgg = VGGNet().to(device).eval()

    '''
    Apply Intel Extension for PyTorch optimization against the model object and optimizer object.
    使用Intel Extension for PyTorch中, 实际上在推理模式下是不需要优化器的
    '''
    vgg = ipex.optimize(vgg)

    for step in range(config.total_step):

        # Extract multiple(5) conv feature vectors
        target_features = vgg(target)
        content_features = vgg(content)
        style_features = vgg(style)

        style_loss = 0
        content_loss = 0
        for f1, f2, f3 in zip(target_features, content_features, style_features):
            # Compute content loss with target and content images
            content_loss += torch.mean((f1 - f2) ** 2)

            # Reshape convolutional feature maps
            _, c, h, w = f1.size()
            f1 = f1.view(c, h * w)
            f3 = f3.view(c, h * w)

            # Compute gram matrix
            f1 = torch.mm(f1, f1.t())
            f3 = torch.mm(f3, f3.t())

            # Compute style loss with target and style images
            style_loss += torch.mean((f1 - f3) ** 2) / (c * h * w)

            # Compute total loss, backprop and optimize
        loss = content_loss + config.style_weight * style_loss
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if (step + 1) % config.log_step == 0:
            print('Step [{}/{}], Content Loss: {:.4f}, Style Loss: {:.4f}'
                  .format(step + 1, config.total_step, content_loss.item(), style_loss.item()))

        if (step + 1) % config.sample_step == 0:
            # Save the generated image
            denorm = transforms.Normalize((-2.12, -2.04, -1.80), (4.37, 4.46, 4.44))
            img = target.clone().squeeze()
            img = denorm(img).clamp_(0, 1)
            torchvision.utils.save_image(img, 'output-{}.png'.format(step + 1))


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--content', type=str, default='png/content.png')
    parser.add_argument('--style', type=str, default='png/style.png')
    parser.add_argument('--max_size', type=int, default=400)
    parser.add_argument('--total_step', type=int, default=2000)
    parser.add_argument('--log_step', type=int, default=10)
    parser.add_argument('--sample_step', type=int, default=500)
    parser.add_argument('--style_weight', type=float, default=100)
    parser.add_argument('--lr', type=float, default=0.003)
    config = parser.parse_args()
    print(config)
    main(config)

结果

[oneAPI] Neural Style Transfer,python杂记,oneapi,迁移学习

迭代结果图

[oneAPI] Neural Style Transfer,python杂记,oneapi,迁移学习

训练过程图文章来源地址https://www.toymoban.com/news/detail-655179.html

到了这里,关于[oneAPI] Neural Style Transfer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [oneAPI] 手写数字识别-BiLSTM

    比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel® DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/ 使用了pytorch以及Intel® Optimization for PyTorch,通过优化扩展了 PyTorch,使英特尔硬件的性能进一步提升,让手写数字识别问题更加的快速高效 使用

    2024年02月12日
    浏览(42)
  • FastGPT配置文件及OneAPI程序:

    FastGPT配置文件及OneAPI程序: 百度网盘 请输入提取码 提取码:wuhe 创建fastgpt目录:mkdir fastgpt 切换到fastgpt目录:cd fastgpt 下载docker-compose文件:curl -O https://raw.githubusercontent.com/labring/FastGPT/main/files/deploy/fastgpt/docker-compose.yml 下载config文件:curl -O https://raw.githubusercontent.com/labr

    2024年02月21日
    浏览(33)
  • [oneAPI] 使用字符级 RNN 生成名称

    比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel® DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/ 为了深入探索语言模型在分类和生成方面的卓越能力,我们特意设计了一个独特的任务。此任务的独特之处在于,它旨在综合学习多种语言的词

    2024年02月11日
    浏览(37)
  • [oneAPI] 使用Bert进行中文文本分类

    比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel® DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/ 在本次实验中,我们利用PyTorch和Intel® Optimization for PyTorch的强大功能,对PyTorch进行了精心的优化和扩展。这些优化举措极大地增强了PyTorch在各

    2024年02月12日
    浏览(44)
  • 基于因特尔OneAPI实现矩阵并行乘法运算

    OneAPI介绍 Intel oneAPI 是一个跨行业、开放、基于标准的统一的编程模型,旨在提供一个适用于各类计算架构的统一编程模型和应用程序接口。其核心思想是使开发者只需编写一次代码,便可在跨平台的异构系统上运行,支持的底层硬件架构包括 CPU、GPU、FPGA、神经网络处理器以

    2024年02月04日
    浏览(39)
  • dpc++(oneAPI)调用nvidiaGPU配置与验证

    1.安装Intel® oneAPI Toolkits https://software.intel.com/content/www/us/en/develop/documentation/installation-guide-for-intel-oneapi-toolkits-linux/top.html 下载安装Base版,注意版本,尽量安装新版本 2.安装GPU驱动与CUDA https://developer.nvidia.com/cuda-downloads 建议为11.8及以上版本 nvidia-smi能出现cuda版本 Ubuntu Red Hat

    2024年02月15日
    浏览(38)
  • Intel oneAPI——让高性能计算触手可及

    在人工智能兴起的今天,大规模、高性能计算已成为社会发展的刚需。动辄千万节点规模的社交网络、交通网络,语言聊天模型中的大规模神经网络,以及航空航天等涉及大规模计算的场景,都少不了并行计算的支持。并行计算是一种一次可执行多个指令的算法,目的是提高

    2024年02月01日
    浏览(64)
  • oneAPI人工智能分析工具包实现图像处理

    oneAPI是一个由英特尔(Intel)主导的、面向异构计算的开放标准和平台。它旨在简化和加速跨多种硬件架构的应用程序开发,包括CPU、GPU、FPGA和其他加速器。 以下是关于oneAPI发展的一些要点: 1.创立背景和目标: oneAPI的发展始于英特尔意识到在异构计算时代,开发者面临的

    2024年02月11日
    浏览(62)
  • [oneAPI] 基于BERT预训练模型的英文文本蕴含任务

    比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel® DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/ 我们在Intel® DevCloud for oneAPI平台上构建了我们的实验环境,充分利用了其完全虚拟化的特性,使我们能够专注于模型的开发和优化,无需烦心底

    2024年02月11日
    浏览(35)
  • [oneAPI] 基于BERT预训练模型的命名体识别任务

    比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel® DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/ 在本次实验中,我们在Intel® DevCloud for oneAPI上搭建实验,借助完全虚拟化的环境,专注于模型开发与优化,无需关心底层配置。使用Intel® Opti

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包