深度神经网络(dnn)--风格迁移(简单易懂)

概括

        深度神经网络(DNN)在风格迁移领域的应用,实现了将一幅图像的艺术风格迁移到另一幅图像上的目标。该技术基于深度学习模型,特别是卷积神经网络(CNN),通过提取内容图像的内容特征和风格图像的风格特征,并定义内容损失和风格损失函数,最终生成融合了两者特征的新图像。风格迁移在艺术创作、图像编辑等领域有着广泛应用,它让艺术风格的传递更加高效且富有创造力。

具体实现

1.图像预处理 

import cv2image = cv2.imread('./mountain.jpg')
cv2.imshow('image', image)
cv2.waitKey(0)'''----------图片预处理-------------------'''
(h, w) = image.shape[:2]  # 获取图像尺寸
blob = cv2.dnn.blobFromImage(image, 1, (w, h), (0, 0, 0), swapRB=True, crop=False)

函数cv2.dnn.blobFromImage:实现图像预处理,从原始图像构建一个符合人工神经网络输入格式的四维块。
blob = cv2.dnn.blobFromImage(image, scalefactor=None, size=None, mean=None, swapRB=None, crop=None)
参数:
        image:表示输入图像。
        scalefactor:表示对图像内的数据进行缩放的比例因子。具体运算是每个像素值*scalefactor,该值默认为 1。
        size:用于控制blob的宽度、高度。
        mean:需要将图片整体减去的平均值。如果需要对RGB图片的三个通道分别减去不同的值,那么可以使用3组平均值,如果只使用一组,那么就默认对三个通道减去一样的值。减去平均值是为了消除同一场景下不同光照的图片对我们最终的分类或者神经网络的影响。
        swapRB:表示在必要时交换通道的R通道和B通道。一般情况下使用的是RGB通道。而OpenCV通常采用的是BGR通道。因此可以根据需要交换第1个和第3个通道。该值默认为 False。
        crop:一个布尔值,决定是否对图片进行裁剪。
返回值:blob: 表示在经过缩放、裁剪、减均值后得到的符合人工神经网络输入的数据。该数据是一个四维数据,布局通常使用N(表示batch size)、C(图像通道数,如RGB图像具有三个通道)、H(图像高度)、W(图像宽度)表示

2.加载模型

# net = cv2.dnn.readNetFromTorch('./model/candy.t7')
# net = cv2.dnn.readNetFromTorch('./model/composition_vii.t7')
# net = cv2.dnn.readNetFromTorch('./model/feathers.t7')
# net = cv2.dnn.readNetFromTorch('./model/la_muse.t7')
# net = cv2.dnn.readNetFromTorch('./model/mosaic.t7')
# net = cv2.dnn.readNetFromTorch('./model/starry_night.t7')
# net = cv2.dnn.readNetFromTorch('./model/the_scream.t7')
# net = cv2.dnn.readNetFromTorch('./model/the_wave.t7')
net = cv2.dnn.readNetFromTorch('./model/udnie.t7')

加载模型net=cv2.dnn.readNet( model[, config[, framework]] )
各参数的含义如下:
model:模型权重参数文件路径。文件内存储的是训练好的模型的权重值,是二进制文件。
config:模型配置文件路径。模型配置文件内存储的模型描述文件,描述的是网络结构,是文本文件,文件较小。
framework:DNN框架,可省略,DNN模块会自动推断框架种类。
net:返回值,返回网络模型对象。
支持的模型格式有Torch,TensorFlow,Caffe,DartNet,ONNX和Intel OpenVINO
model参数    | config参数 | framework参数 | 函数名称
*.caffemodel  | *.prototxt     | caffe                  | readNetFremoCaffe
*.pd               | *.pbtxt         | tensorflow          | readNetFromTensorFlow
*.t7                | *.net            | torch                  | readNetFromTorch
*.weight         | *.cfg            | darknet              | readNetFromDarknet
*.bin              | *.xml           | dldt                     | readNetFromModelOptimizer
*.onnx           |                    | onnx                   | readNetFromONNX

模型资源在文章开头

3.设置网络输入,将图片传入到模型并前向计算

net.setInput(blob)  #设置网络输入,将图片传入到模型
out = net.forward()  #网络计算,网络前向计算
# out是四维的:B*C*H*W
# B:batch图像数量(通常为1),C:channels通道数,H:height高度、W:width宽度
# ======输出处理=========
# 重塑形状(忽略第1维),4维变3维
# 调整输出out的形状,模型推理输出out是四维BCHW形式的,调整为三维CHW形式
out = out.reshape(out.shape[1], out.shape[2], out.shape[3])
# 将输出进行归一化处理(0, 1)
cv2.normalize(out, out, norm_type=cv2.NORM_MINMAX)
result = out.transpose(1, 2, 0)  # (通道,高度,宽度)转化为(高度,宽度,通道)
'''''''======输出图片========='''
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果图

还有多种风格,都在文章资源里,感兴趣的话可以下载尝试一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361561.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SK Hynix 3D DRAM良率突破56.1%,开启存储新时代

根据韩国财经媒体Business Korea独家报道:在刚刚结束的VLSI 2024国际研讨会上,韩国半导体巨头SK Hynix公布了一项振奋人心的进展:其五层堆叠3D DRAM的制造良率已达到56.1%。此成果标志着3D DRAM技术在商业化道路上迈出了坚实的一步&#xff0…

VS 在多线程中仅调试某个线程

调试多线程程序时,只想观察某个线程的运行情况; 但是,由于线程切换执行,会导致调试时焦点在几个代码块之间跳来跳去,故需要解决这个问题。 参考文章: C#使用线程窗口调试多线程程序。 1 打开线程窗口&…

Hadoop 2.0 大家族(一)

目录 一、Hadoop 2.0大家族概述(一)分布式组件(二)部署概述 二、ZooKeeper(一)ZooKeeper简介(二)ZooKeeper 入门 一、Hadoop 2.0大家族概述 (一)分布式组件 …

CVPR讲座总结(二)-探索图像生成基础模型的最新进展探索多模态代理的最新进展:从视频理解到可操作代理

引言 在CVPR24上的教程中,微软高级研究员Linjie Li为我们带来了多模态代理的深入探索。这些代理通过整合多模态专家和大语言模型(LLM)来增强感知、理解和生成能力。本文总结了Linjie Li的讲座内容,重点介绍了多模态记忆、可操作代…

ElementUI搭建

概述 Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组 件库. 安装 ElementUI npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用。 npm i element-ui -S 在控制台输入此命令来安装ElementUI 在 main.j…

低代码平台实践:打造高效动态表单解决方案的探索与思考

🔥需求背景 我司业务同事在抓取到候选人的简历之后,经常会出现,很多意向候选人简历信息不完整,一个个打电话确认的情况,严重影响了HR的工作效率,于是提出我们可以通过发送邮件、短信、H5链接的方式来提醒候…

迈巴赫S480升级增强现实AR抬头显示hud比普通抬头显示HUD更好用吗

增强AR实景抬头显示HUD(Augmented Reality Head-Up Display)是一种更高级的驾驶辅助技术,相比于普通抬头显示HUD,它提供了更丰富、更具沉浸感的驾驶体验。以下是它比普通抬头显示HUD多的一些功能: • 信息呈现方式&am…

七天速通javaSE:第二天 基础:标识符与数据类型

文章目录 前言一、注释与标识符1. 注释2. 标识符2.1 标识符2.2 关键字 二、数据类型1. 语言类型2. 数据类型2.1 基本数据类型2.2引用数据类型 三、类型转换1. 自动转换2. 强制转换(不建议) 四、代码规范 前言 今天将学习Java语法的基础,认识…

idea添加文档注释

一、easy javadoc插件 在settings的plugins中下载easy javadoc插件。 安装完成后重启idea,再次打开settings界面。会出现easyDoc相关配置。 二、设置模版以及使用 类描述模版参考设置: /** * 类描述 -> * * Author: ywz * Date: $Date$ */ 方法描述…

【SSM】

Spring常见面试题总结 Spring 基础 什么是 Spring 框架? Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块…

AI助力校园安全:EasyCVR视频智能技术在校园欺凌中的应用

一、背景分析 近年来,各地深入开展中小学生欺凌行为治理工作,但有的地方学生欺凌事件仍时有发生,严重损害学生身心健康,引发社会广泛关注。为此,教育部制定了《防范中小学生欺凌专项治理行动工作方案》进一步防范和遏…

布隆过滤器(Bloom Filter)

什么是布隆过滤器 它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。主要用于判断一个元素是否在一个集合中。 布…

Go语言学习:每日一练1

Go语言学习:每日一练1 目录 Go语言学习:每日一练1变量声明函数定义流程控制 ifrange遍历switch 变量声明 package main//定义变量 var a 1 const Message “hello,world”func main() {b : 2 //短变量声明var c 3c TestMethod(a, b, c)} //定义函数…

铸就创新之盾:知识产权管理体系认证,赋能企业卓越前行

在当今知识经济时代,知识产权已成为企业竞争力的核心要素。知识产权的有效管理不仅关乎企业的技术创新和市场竞争力,更是推动整个行业乃至社会经济发展的重要驱动力。随着全球化进程的加速,知识产权的保护和管理愈发受到重视,企业…

国产车规MCU OTA方案总结

目录 1. 旗芯微FC4150 OTA 2. 云途YTM32B1MD OTA 3.小结 今天没有废话,啪一下很快,把目前接触到的国内带eFlash的车规MCU硬件OTA方案做一个梳理。 1. 旗芯微FC4150 OTA 旗芯微FC4150是基于ARM Cortex(快去审核下官网介绍,少了个T)-M4F内…

【low-ui-vue】实现原生可扩展动态表格组件

本文字数:3520字 预计阅读时间:20分钟 所谓动态列的表格,就是列数不固定。像广为使用的elementUI的table组件就是表头写死的,这种也叫列数固定的表格。 01 效果 当然,动态性增加了,当然要做出一定“牺牲”。…

C#基于SkiaSharp实现印章管理(2)

上一篇文章最后提到基于System.Text.Json能够序列化SKColor对象,但是反序列化时却无法解析本地json数据。换成Newtonsoft.Json进行序列化和反序列化也是类似的问题。   通过百度及查看微软的帮助文档,上述情况下需自定义转换类以处理SKColor类型数据的…

Vite响应Ajax请求

Vite响应Ajax请求 陈拓 2024/06/20-2024/06/24 1. 概述 http-server、live-server 等常用于本地测试和开发的http服务器不能很好的支持 ES 模块,在测试ES 模块时浏览器控制台经常显示错误: Failed to load module script: Expected a JavaScript modu…

C++用Crow实现一个简单的Web程序,实现动态页面,向页面中输入数据并展示

Crow是一个轻量级、快速的C微框架,用于构建Web应用程序和RESTful API。 将处理前端页面的POST请求以添加数据的逻辑添加到 /submit 路由中,并添加了一个新的路由 / 用于返回包含输入框、按钮和表格的完整页面。当用户向表格添加数据时,JavaS…

021.合并两个有序链表,递归和遍历

题意 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 难度 简单 标签 链表、排序 示例 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]输入:l1 [], l2 [] 输出:[]…