PyTorch深度学习实战 | 图像风格迁移(限免视频)
文章图片
PyTorch是当前主流深度学习框架之一 , 其设计追求最少的封装、最直观的设计 , 其简洁优美的特性使得PyTorch代码更易理解 , 对新手非常友好 。
本文为实战篇 , 介绍图像风格迁移 , 扫描文中的二维码可观看视频讲解(限免3天) 。
1
图像风格迁移
VGG模型是由Simonyan等人于2014年提出的图像分类模型 , 这一模型采用了简单粗暴的堆砌3×3卷积层的方式构建模型 , 并花费了大量的时间逐层训练 , 最终斩获了2014年ImageNet图像分类比赛的亚军 。 这一模型的优点是结构简单 , 容易理解 , 便于利用到其他任务当中 。
VGG-19网络的卷积部分由5个卷积块构成 , 每个卷积块中有多个卷积(convolution)层 , 结尾处有一个池化(pooling)层 , 如图10.1所示 。
文章图片
■图10.1VGG-19的网络结构
卷积层中的不同卷积核会被特定的图像特征激活 , 图10.2展示了不同卷积层内卷积核的可视化(通过梯度上升得到) 。 可以看到 , 低层卷积核寻找的特征较为简单 , 而高层卷积核寻找的特征比较复杂 。
■图10.2VGG网络中部分卷积层内卷积核的可视化
2
图像风格迁移介绍
图像风格迁移是指将一张风格图Is的风格与另一张内容图Ic的内容相结合并生成新的图像 。 Gatys等人于2016年提出了一种简单而有效的方法 , 利用预训练的VGG网络提取图像特征 , 并基于图像特征组合出了两种特征度量 , 一种用于表示图像的内容 , 另一种用于表示图像的风格 。 他们将这两种特征度量加权组合 , 通过最优化的方式生成新的图像 , 使新的图像同时具有一幅图像的风格和另一幅图像的内容 。
图10.3对风格迁移的内部过程进行了可视化 。 上面的一行中 , 作者将VGG网络不同层的输出构建风格表示 , 再反过来进行可视化 , 得到重构的风格图片;下面的一行中 , 作者将VGG网络不同层的输出构建内容表示 , 再反过来进行可视化 , 得到重构的内容图片 。 可以看到 , 低层卷积层提取的风格特征较细节 , 提取的内容特征较详细;高层卷积层提取的风格特征较整体 , 提取的内容特征较概括 。
文章图片
■图10.3风格迁移中使用的风格数学表示和内容数学表示
3
内容损失函数
1
●
内容损失函数的定义
内容损失函数用于衡量两幅图像之间的内容差异大小 , 其定义如下 。
其中 , Xl和Yl分别是两幅图片由VGG网络某一卷积层提取的特征图(featuremap) , l表示卷积层的下标 , i和j表示矩阵中行与列的下标 。 可见两幅图像的内容损失函数是由特征图对位求差得到的 。 低层卷积特征图对图片的描述较为具体 , 高层卷积特征图对图片的描述较为概括 。 Gatys等人选择了第4个卷积块的第2层(conv4_2)用于计算内容损失 , 因为我们希望合成的图片的内容与内容图大体相近 , 但不是一笔一画都一模一样 。
2
●
内容损失模块的实现
模块在初始化时需要将内容图片的特征图传入 , 通过detach方法告诉AutoGrad优化时不要变更其中的内容 。 forward方法实现上面的公式即可 。
4
风格损失函数
1
●
风格损失函数的定义
风格损失函数用于衡量两幅图像之间的风格差异大小 。 首先需要通过计算特征图的Gram矩阵得到图像风格的数学表示 。 给定VGG在一幅图像中提取的特征图Xl , 与之对应的Gram矩阵Gl定义如下 。
- 苹果|狠下杀手删除44万应用的苹果,值得安卓手机厂商学习
- |电流互感器在配电柜中的作用,你知道吗?电气人快来学习学习
- 软件|新增监测心率趣味运动等功能让米兔儿童学习手表6拓展性更强
- 为什么要去付费自习室学习?
- 本文转自:央广网央广网北京8月7日消息(见习记者 庞婷)巡检机器狗、迎宾机器人、AI学习...|最新“剧透”!北京数字服务企业将借力服贸会扬帆出海
- PyTorch深度学习实战 | 搭建卷积神经网络进行图像分类(限免视频)
- 可测心率可定位楼层,米兔儿童学习手表6,全面守护孩子健康安全
- 荣耀平板8|荣耀平板8体验分享:超清大屏学习好帮手,“千元级”首选它
- 快手开播一个月GMV破百万,雪中飞童装如何靠深度爆款冷启动?
- 华为|一天卖光10万台!华为和长虹深度合作后,创维康佳都“眼红了”