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

概括

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

具体实现

1.图像预处理

python 复制代码
import cv2

image = 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.加载模型

python 复制代码
# 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.设置网络输入,将图片传入到模型并前向计算

python 复制代码
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)  # (通道,高度,宽度)转化为(高度,宽度,通道)
python 复制代码
'''''''======输出图片========='''
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果图

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

相关推荐
久绊A1 分钟前
Python 基本语法的详细解释
开发语言·windows·python
diemeng11191 小时前
AI前端开发技能变革时代:效率与创新的新范式
前端·人工智能
有Li1 小时前
跨中心模型自适应牙齿分割|文献速递-医学影像人工智能进展
人工智能
Hylan_J3 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
莫忘初心丶3 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
牧歌悠悠5 小时前
【深度学习】Unet的基础介绍
人工智能·深度学习·u-net
坚毅不拔的柠檬柠檬6 小时前
AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构
人工智能·chatgpt·文心一言
坚毅不拔的柠檬柠檬6 小时前
2025:人工智能重构人类文明的新纪元
人工智能·重构
jixunwulian6 小时前
DeepSeek赋能AI边缘计算网关,开启智能新时代!
人工智能·边缘计算
Archie_IT6 小时前
DeepSeek R1/V3满血版——在线体验与API调用
人工智能·深度学习·ai·自然语言处理