Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Neural Style Transfer

神经风格迁移通过匹配 CNN 特征统计量,将照片中的内容以另一张图像的风格重新绘制。内容涵盖 Gatys 的方法、快速模型和用途。

神经风格迁移(NST)是一种计算机视觉技术,它通过匹配预训练卷积神经网络(CNN)的内部特征,将一张图像(例如街景照片)的内容以另一张图像(例如绘画)的视觉风格呈现。特征图捕捉图像内容,由深层网络记录画面中各处出现的事物。风格则由特征通道之间的相关性捕捉,这些相关性记录纹理、颜色和笔触,但不保留它们的排列方式。图宾根大学的 Leon Gatys、Alexander Ecker 和 Matthias Bethge 于 2015 年 8 月在《艺术风格的神经算法》中介绍了这项方法;次年,Prisma 应用将其带给了智能手机用户。

原始方法的工作原理#

Gatys 的方法使用在 ImageNet 上训练的 VGG-19 CNN 作为固定的特征提取器,并改变输出图像的像素,而不是网络权重。两种损失函数共同决定结果:

  • 内容损失: 输出图像与内容照片在一个深层(conv4_2)的特征图之间的平方差,可保留物体和布局的可辨识性。
  • 风格损失: 从 conv1_1 到 conv5_1 五个层的 Gram 矩阵之间的平方差。对于有 C 个通道的层,Gram 矩阵是一个 C x C 表格,其条目 (i, j) 衡量通道 i 和 j 在整张图像各个位置上的共同响应强度之和。

两种损失的加权和通过 L-BFGS 优化算法最小化;反向传播则将梯度通过冻结的网络传回像素:

由于 Gram 矩阵会对所有位置求和,因此图像布局改变时,它几乎不会变化。使用 torchvision 的 ResNet-18(一个比 VGG-19 更小的 ImageNet CNN)交换照片象限,就能在 PyTorch中展示这一点:

import torch
from skimage import data
from torchvision.models import ResNet18_Weights, resnet18

weights = ResNet18_Weights.DEFAULT
cnn = resnet18(weights=weights).eval()
early_layers = torch.nn.Sequential(cnn.conv1, cnn.bn1, cnn.relu, cnn.maxpool, cnn.layer1)
preprocess = weights.transforms()

photo = torch.tensor(data.astronaut()).permute(2, 0, 1)  # 3 x 512 x 512
rearranged = torch.roll(photo, shifts=(256, 256), dims=(1, 2))  # same pixels, quadrants swapped


def content_and_style(image):
    """Return an early CNN layer's feature map (content) and its Gram matrix (style)."""
    with torch.no_grad():
        features = early_layers(preprocess(image)[None])[0].flatten(1)  # channels x positions
    return features, features @ features.T / features.shape[1]


(content_a, style_a), (content_b, style_b) = content_and_style(photo), content_and_style(rearranged)
print(f"Content change: {(content_a - content_b).norm() / content_a.norm():.0%}")
print(f"Style change:   {(style_a - style_b).norm() / style_a.norm():.0%}")

交换象限会使特征图变化 96%,但只会使 Gram 矩阵变化 7%;剩下的 7% 来自新接缝和中心裁剪,因为中心裁剪会保留每张图像中不同的部分。这就是为什么风格损失能复制绘画的笔触和调色板,却不会复制画中物体的位置。

快速风格迁移与任意风格迁移#

优化每张图像都需要数百次迭代,因此后续研究将优化过程转移到了训练阶段。斯坦福大学的 Justin Johnson、Alexandre Alahi 和 Li Fei-Fei 于 2016 年使用相同的损失为每种风格训练一个前馈网络,生成结果的速度提高了约三个数量级,并将相同的感知损失应用于超分辨率。Dmitry Ulyanov 和同事发现,在这些网络中用实例归一化取代批量归一化可以提升风格化效果。Xun Huang 和 Serge Belongie 于 2017 年提出的自适应实例归一化(AdaIN)无需重新训练即可处理任意风格:它会调整每个内容特征通道的均值和标准差,使其与风格图像相匹配,再进行解码,整个过程可实时完成。

用于构建稳健视觉模型的风格迁移#

Robert Geirhos 和同事使用 AdaIN 证明,在 ImageNet 上训练的 CNN 更依赖纹理而非形状:一张具有象皮纹理的猫图会被 ResNet-50 标记为大象,这是捷径学习的一种表现。他们使用 Painter by Numbers 绘画集中的 79,434 幅作品,为每张 ImageNet 图像随机添加绘画风格,制作出 Stylized-ImageNet;在该数据集上训练的 ResNet-50 则更多依赖形状。将这个基于形状的网络用作 Faster R-CNN 目标检测模型的骨干网络后,Pascal VOC 2007 上的 mAP50 从 70.7 提升到 75.1,MS COCO 上则从 52.3 提升到 55.2。

同样的思路也可用于检测数据集的数据增强,因为风格迁移不会改变物体的位置。风格化后的标注图像副本可以沿用原图的边界框,因此在 Ultralytics YOLO26检测数据集中,只需在新图像名称下复制原始标签文件即可。

  • 生成对抗网络(GAN): CycleGAN 学习整个图像集合之间的映射,例如照片与莫奈画作之间的映射,而不是匹配单张风格图像的统计特征。
  • 迁移学习: 微调预训练权重以适应新任务。NST 从不更新网络权重,只用网络来衡量损失。
  • 扩散模型: 根据文本提示或参考图像重新生成图像以改变其风格;这一过程也可能改变形状和细节。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来