Pix2Pix模型解决了有Pair对的数据翻译问题;CycleGAN解决了Unpaired数据下的图像翻译问题。但无论是Pix2Pix还是CycleGAN,都是解决了一对一的问题,即一个领域到另一个领域的转换。当有很多领域要转换时,对于每一个领域转换,都需要重新训练一个模型去解决。例如加入有K个领域,就需要训练K(K-1)个生成模型,这样的行为太低效了。本文所介绍的StarGAN就是将多领域转换用统一框架实现的算法。
在网络结构上为了让生成网络G拥有学习多个领域转换的能力,需要对生成网络G和判别网络D做如下改动。
在G的输入中添加目标领域信息,即把图片翻译到哪个领域这个信息告诉生成模型,生成模型通过信息进行翻译。
判别网络D除了具有判断图片是否真实的功能外,还要有判断图片属于哪个类别的能力。这样可以保证输入生成网络G中同样的图像,随着目标领域的不同映射到不同的领域。
还需要保证图像翻译过程中图像身份信息不丢失,只改变领域差异的那部分。因此需要对生成图像进行图像重建,图像重建即将图像翻译从领域A翻译到领域B,再翻译回来。
网络训练如下图所示:
(a)判别网络D不仅要学习去辨别图像的真假,还需要学习去辨别真实图像属于哪个领域。(b)生成网络G将图像和目标领域作为输入,直接在张量上concatenated,输出Fake image 。(c)生成网络试图通过original domain和Fake image重建图像。(d)通过判别网络D去更新生成网络G。G试图去生成Fake image去骗过判别网络为真实图像,并分类为target domain。
Adversarial Loss
为了让图像接近真实
L a d v = E x [ log D s r c ( x ) ] + E x , c [ log ( 1 − D s r c ( G ( x , c ) ) ] \begin{aligned} \mathcal { L } _ { a d v } = & \mathbb { E } _ { x } \left[ \log D _ { s r c } ( x ) \right] + & \mathbb { E } _ { x , c } \left[ \log \left( 1 - D _ { s r c } ( G ( x , c ) ) \right] \right. \end{aligned} Ladv=Ex[logDsrc(x)]+Ex,c[log(1−Dsrc(G(x,c))]
Domain Classification Loss
为了让生成网络能按照target domain进行翻译,再判别网络的输出层添加了一个辅助分类层。对于input Real image的Classification Loss用来更新判别网络D;对于生成的Fake image的Classification Loss 用来更新生成网络G。
L c l s r = E x , c ′ [ − log D c l s ( c ′ ∣ x ) ] \mathcal { L } _ { c l s } ^ { r } = \mathbb { E } _ { x , c ^ { \prime } } \left[ - \log D _ { c l s } \left( c ^ { \prime } | x \right) \right] Lclsr=Ex,c′[−logDcls(c′∣x)]
Reconstruction Loss.
为了保存翻译后的图像人脸的身份信息不变,计算重构后的L1 loss
L r e c = E x , c , c ′ [ ∥ x − G ( G ( x , c ) , c ′ ) ∥ 1 ] \mathcal { L } _ { r e c } = \mathbb { E } _ { x , c , c ^ { \prime } } \left[ \left\| x - G \left( G ( x , c ) , c ^ { \prime } \right) \right\| _ { 1 } \right] Lrec=Ex,c,c′[∥x−G(G(x,c),c′)∥1]
Full Objective.
最终生成网络G和判别网络D的损失函数:
L D = − L a d v + λ c l s L c l s r \mathcal { L } _ { D } = - \mathcal { L } _ { a d v } + \lambda _ { c l s } \mathcal { L } _ { c l s } ^ { r } LD=−Ladv+λclsLclsr
L G = L a d v + λ c l s L c l s f + λ r e c L r e c , \mathcal { L } _ { G } = \mathcal { L } _ { a d v } + \lambda _ { c l s } \mathcal { L } _ { c l s } ^ { f } + \lambda _ { r e c } \mathcal { L } _ { r e c } , LG=Ladv+λclsLclsf+λrecLrec,
在多数据集下训练StarGAN存在一个问题,那就是数据集之间的类别可能是不相交的,但内容可能是相交的。比如CelebA数据集合RaFD数据集,前者拥有很多肤色,年龄之类的类别。而后者拥有的是表情的类别。但前者的图像很多也是有表情的,这就导致前一类的图像在后一类的标记是不可知的。
为了解决这个问题,在模型输入中加入了Mask,即如果来源于数据集B,那么将数据集A中的标记全部设为0.
CalebA人脸数据集是香港中文大学的开放数据,包含10,177个名人身份的202,599张人脸图片,并且都做好了特征标记,这对人脸相关的训练是非常好用的数据集。图片数据集分为没有裁剪的和裁剪过的人脸数据集。提供的list_attr_celeba.txt文件夹记录了每一张图片的特征标签。一共有40种属性。
** RaFD**
发布于2010年,该数据集是Radboud大学Nijmegen行为科学研究所整理的,这是一个高质量的脸部数据库,总共包含67个模特,其中20名白人男性成年人,19名白人女性成年人,4个白人男孩,6个白人女孩,18名摩洛哥男性成年人。总共8040张图,包含8种表情,即愤怒,厌恶,恐惧,快乐,悲伤,惊奇,蔑视和中立。每一个表情,包含3个不同的注视方向,且使用5个相机从不同的角度同时拍摄的。
当数据集混合训练的时候会比只用单一数据集的效果要好。
开源代码:https://github.com/taki0112/StarGAN-Tensorflow
省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库2022年7月份热门报告合集免费下载【高清在线】2022最高分国产电影:《隐入尘烟》为什么说产品能力是一个人的底层能力?饶毅:伟大复兴岂能依靠一群“太监”?!微信视频号实时推荐技术架构分享小红书推荐中台实践快手推荐系统精排模型实践今天给大家带来一份工业互联网干货资料《工业互联网基本概念及关键技术(含案例).pdf》..._工业互联网 pdf
我有一个代码,从纬度,经度和高程数据创建一个三维地形表面。在我使用的是ax.plot_surface,它创建了一个如下所示的地形表面:我想对数据进行平滑处理以创建更像这样的图片:有没有更好的方法来平滑网格插值?在我的数据按[lat,lon,elev]大小排序(912,3)以下代码import osimport numpy as npfrom mpl_toolkits.mplot3d import ..._怎么给等高线做平滑 python
linux命令:RSYNC的使用_rsync 同步目录下文件 不同步子目录
最近有个测试库刚出现的情况,现象:以前一直未出现过这种状态:有的应用(这里部署的应用有100多个,且都是Tuxedo长连接数据库 的应用)每天第一次执行时报:ORA-02396: exceeded maximum idle time, please connect again过段时间会有应用报错:ORA-02391: exceeded simultaneous SESSIONS_P
之前分析了head.s到main.c的跳转,下面看看mian.c的工作流程分析。 boot之后的执行代码是init目录下的main.c,执行初始化任务。研究一下 linus一开头就给出了四个内联静态函数static inline _syscall0(int,fork)static inline _syscall0(int,pause)static inline _syscall1(int,s_linux main.c
迪杰斯特拉算法&贝尔曼—福特算法&弗洛伊德算法_matlab有向图最短路径
本篇CAD制图初学入门教程主要介绍的是关于浩辰CAD软件中如何选择相同或者类似的图形和图块。在使用浩辰CAD软件制图过程有时需要选择相同或类似的对象进行相同的操作,或通过选择所有同名的图块来统计图块数量或一次性删除此图块。浩辰CAD软件提供了多种选择相同或类似图形和图块的方法,使用哪种方法取决于这些图形的共同属性是什么,有的方法很简单,但不一定能选出你需要的图形,有些方法可以设置各种过滤条件,操作起来相对复杂一些。选择类似对象(SELECTSIMILIAR)选择一个对象后,右键菜单中会提供类似对象和全_选择两个相同图形的方块
各位同学好,今天和大家分享一下TensorFlow2.0中如何构建卷积神经网络ResNet-50,案例内容:现在收集了10位艺术大师的画作,采用卷积神经网络判断某一幅画是哪位大师画的。数据集:https://pan.baidu.com/share/init?surl=cWMvsl37MOZdxnoOjSGoNQ提取码: 2h5x1. 数据加载在文件夹中将图片按照训练集、验证集、测试集划分好之后,使用tf.keras.preprocessing.image_dataset_from_direc_resnet50数据集
写的比较详细的高star代码,转:https://blog.csdn.net/macanv/article/details/85684284
解决:You have to use a classifier to attach supplemental artifacts to the project instead of replacing them,jenkins发版[WARNING] JAR will be empty - no content was marked for inclusion!背景起因排查过程解决问题背景因为最近是新项目的开发,所以环境特别的不稳定,经常出各种错误,这次记录一下,帮助一下可能帮助到的伙计们起因在21年_jar will be empty - no content was marked for inclusion!
Java类源码解析一、object类源码1.类构造器类构造器是创建Java对象的途径之一,通过new 关键字调用构造器完成对象的实例化,还能通过构造器对对象进行相应的初始化。一个类必须要有一个构造器的存在,如果没有显示声明,那么系统会默认创造一个无参构造器,在JDK的Object类源码中,是看不到构造器的,系统会自动添加一个无参构造器。可以通过:Object obj = new Object();构造一个Object类的对象。/** * Constructs a new object. */@_java 源码解析
ltrim()删除字符串开头的空白字符(或其他字符)。string ltrim ( string $str[, string $character_mask])参数描述str 输入的字符串。character_mask 通过参数 character_mask,你也可以指定想要删除的字符,简单地列出你想要删除的所有字符即可。使用..,可以指定字符的范围。返回值:该函数返回一个删除了 str 最左边的空白字符的字符串。...