基于感知损失的实时风格迁移与超分辨率重建

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

方法概述

许多经典的图像问题都可以被看成是图像变换任务,算法接受一个输入图像,然后输出变换之后的图像。最常见的例子就是图像处理中的取噪、超分辨重建、图像彩色化等问题,输入的图像是退化低质量图像(噪声、低分辨率、灰度化)得到的输出是一个彩色、高分辨率、高质量的图像,此外这类变换还包括图像语义分割、深度评估。以前基于卷积神经网络来解决这类问题通常采用的是像素基本的损失,但是这种方法训练得到模型拟合标注数据与输出结果之后的感知不同,作者正是基于这点提出了基于感知的损失来训练纠正这种偏差。

像素基本损失

在像素基本对比两幅图像、如果两幅图像感知相同,但是像素不同,像素损失就会造成很大偏差。

感知损失

基于高阶卷积神经网络特征实现感知比较,不做像素基本的损失。

作者基于感知损失实验了两个图像处理任务,均取得了比较好的效果

图像风格迁移任务
图像超分辨

显示如下:

103a9fdd298d8ef09b4300dcde42b850.png

模型架构

84f15621aaa7ceab3ed195562eba6683.png

模型主要分为两个部分,图像变换网络与感知损失网络,其中损失网络在训练过程种保持不变,主要是采用预训练的图像分类网络如VGG16。定义感知损失来分别度量风格与内容的感知不同,实现最优化得到训练模型。相关的损失表示如下:

0d0b86ad6bfd2da1c3d74b041427a950.png

出了上述损失之外,作者还定义了两个低阶的损失,一个是简单的像素损失,另外一个是全变分正则化损失。


实验结果

风格迁移的实验结果

424eef9bad65302d56624dc2765048b7.png

超分辨实验结果

eaf2838cdbbc480da90e8bab6c544ddd.png

源码下载地址

https://github.com/jcjohnson/fast-neural-style

预训练模型下载

bash models/download_style_transfer_models.sh

OpenCV DNN使用预训练模型输出结果:

27efcb00505d20fcec950c01564f0536.png

演示代码:

inWidth = 256
inHeight = 256
h, w = frame.shape[:2]
inp = cv.dnn.blobFromImage(frame, 1.0, (inWidth, inHeight),
                          (103.939, 116.779, 123.68), swapRB=False, crop=False)

# 执行风格迁移
net.setInput(inp)
out = net.forward()
print(out.shape)
t, _ = net.getPerfProfile()
freq = cv.getTickFrequency() / 1000
label = "FPS : %.2f" % (1000 / (t / freq))

# 解析输出
out = out.reshape(3, out.shape[2], out.shape[3])
print("ddddddddd", out.shape)
out[0] += 103.939
out[1] += 116.779
out[2] += 123.68
out /= 255.0
out = out.transpose(1, 2, 0)
print("new shape", out.shape)
out = np.clip(out, 0.0, 1.0)

# rescale与中值模糊,消除极值点噪声
cv.normalize(out, out, 0, 255, cv.NORM_MINMAX)
out = cv.medianBlur(out, 5)

# resize and show
result = np.uint8(cv.resize(out, (w, h)))
cv.putText(result, label, (5, 25), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
cv.imshow('Fast Style Demo', result)
cv.imwrite("D:/result_%d.png"%index, result)
好消息,小白学视觉团队的知识星球开通啦,为了感谢大家的支持与厚爱,团队决定将价值149元的知识星球现时免费加入。各位小伙伴们要抓住机会哦!

3583404bc29e1dfa041bc73f052d4548.png

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

c3efae676c77e54cd0bd70a66f7b3f55.png

d93d9f53407cc54f6cf2f3b1f3f0c3bd.png

### 感知损失风格损失的概念 感知损失(Perceptual Loss)主要衡量的是两个图像在经过预训练卷积神经网络处理后的高层特征之间的差异。这种方法的核心在于利用已有的深度学习模型来捕捉图像的语义信息,而不是简单地比较像素级的差异[^1]。通过这种方式,感知损失能够在生成高质量图像的任务中发挥重要作用。 相比之下,风格损失(Style Loss)则专注于捕获图像的艺术风格特性。具体来说,它是基于 Gram 矩阵计算得到的,Gram 矩阵反映了不同通道之间激活值的相关性。这种设计使得风格损失能够有效评估两张图片间的纹理和颜色分布相似程度,而忽略其具体的物体形状或位置信息[^2]。 ### 应用场景分析 #### 图像重建 在图像超分辨率任务中,感知损失常用于指导模型生成更接近真实高分辨率图像的结果。由于该方法考虑到了视觉上的相似性而非仅仅依赖于低层次细节匹配,因此能显著改善最终输出的质量[^3]。 ```python import torch.nn as nn class PerceptualLoss(nn.Module): def __init__(self, vgg_model): super(PerceptualLoss, self).__init__() self.vgg = vgg_model def forward(self, input_image, target_image): features_input = self.vgg(input_image) features_target = self.vgg(target_image) loss = nn.MSELoss()(features_input, features_target) return loss ``` 对于艺术滤镜效果实现而言,风格迁移是一个典型例子,在此过程中会同时运用到上述两种类型的损失函数。其中,内容保持由感知损失负责;而目标艺术家作品所体现的独特绘画手法,则借助风格损失加以重现[^4]。 ```python def gram_matrix(y): (b, ch, h, w) = y.size() features = y.view(b, ch, w * h) features_t = features.transpose(1, 2) gram = features.bmm(features_t) / (ch * h * w) return gram class StyleLoss(nn.Module): def __init__(self): super(StyleLoss, self).__init__() def forward(self, input_features, style_gram_matrices): G = gram_matrix(input_features) S = style_gram_matrices loss = nn.MSELoss()(G, S.expand_as(G)) return loss ``` ### 总结对比 | 特性 | 感知损失 | 风格损失 | |--------------|-----------------------------------|-----------------------------| | **关注重点** | 图像的内容 | 图像的风格 | | **适用范围** | 超分、去噪等注重结构还原的任务 | 创意类应用如风格迁移 | 尽管二者侧重点有所不同,但在实际项目开发当中往往需要综合考量两方面因素才能取得最佳表现成果[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值