哈工大左旺孟教授:多领域视觉数据的转换、关联与自适应学习

http://blog.sciencenet.cn/home.php?mod=space&uid=3291369&do=blog&quickforward=1&id=1074540

整理:苟超

1.基于多领域视觉数据学习

我们首先讨论多领域的视觉数据。对于现在来说,它应该是我们可以用各种不同传感器,比如RGB和深度摄像机、红外、超光谱等来获取的数据。另外一个就是可以从不同视角去拍摄获取。此外,我们可以用语言来描述某个场景或者物体,也可以用声音、视频去记录。同样我们也可以用真实物理世界、VR、AR等方式去重现展示,从而形成视觉数据描述。

那么我们怎么去利用这些多领域视觉数据来更有效率的去解决问题?第一个就是我们可以把不同领域的数据融合在一起,然后来做一些事情。如果这种融合是在这种学习识别和分类这种融合的话,那么它肯定会对识别和分类的性能会有帮助。此外这种融合可以让它在原始数据基础上得到一些比较好的视觉效果,或者是得到一些就是我们想要的一些视觉特效。例如Suwajanakorn等人在今年Siggraph上的文章实现输入音频和奥巴马图像,输出合成的视频,使得嘴型和音频匹配。另外一个融合可以通过迁移学习实现。今年李开复在一个talk就提出过,深度学习之后是增强学习,然后就是迁移学习。王坤峰等提出的平行视觉也可以从该角度来理解,就相当于说我们先模拟得到一个场景,在这个场景训练一个模型,然后最后再把这个实验的模型在应用到实际,中间再会有一些交互平行执行使得模型优化。

基于学习的方法需要大量的训练数据,而手动标注耗时费力,我们可以融合仿真的带标注信息三维数据和无标签信息的虚拟数据来解决问题。在迁移学习中,为了减小真实数据和仿真数据之间的偏差,生成对抗网络(GANs)提供了一种有效的解决方式。此外,GAN还可以按照真实数据分布来生成对应的逼真图像,从而改善训练模型的泛化能力。

2.改善GAN的学习能力

Gooodfellow等在2014年提出了生成对抗网络(GANs),它包含一个生成网络和一个判别网络。生成网络不断更新使得网络生成的图像更加逼真,而判别网络的目的是尽量正确的判断数据来源于真实数据还是生成网络生成的数据。

GAN的目的是利用生成网络按照真实数据的分布来生成逼真数据,对于GAN的学习,它是一个最大-最小优化问题。我们先从最大化均方分布(Maximum Mean Discrepancy,MMD)来开始讨论优化改进GAN的学习能力,Borgwardt在06年提出MMD,就是如果假设有两个分布,如果这两个分布相同,那么这两个分布的均值一定相同。但是如果这两个分布的数学期望相同,并不表示两个分布相同。倘若我们将所有分布限制在希尔伯特空间,且小于等于1,此时如果其数学期望相同,那么可以证明这两个分布是相同的。

后面15年Li等人提出GenerativeMoment Matching Networks (GMMN)来利用核方法优化求解问题。Salimans等在2016年提出改进的GAN,将问题限制在Lipschitz连续性上,从而解决梯度消失的问题。Arjovsky等人提出Wasserstein GAN,利用Wasserstein距离来度量。另外一个优化方向可以从流行学习角度出发,从而考虑两个分布之间的局部关系。

3.图像转换

Image Translation可以分为有监督和无监督两种方式。首先就是有监督,最开始的时候是MSE和Perceptual loss,后来有了GAN,更多的工作开始基于GAN来实现。ConditionalGAN的视觉效果较好,但仍然有一点局限性,我们还可以基于内部和外部的约束去优化模型结构。有监督的ImageTranslation主要是图像复原,图像超分辨率,街景分割,边缘检测等。

前面提到的基于MSE 定义的loss来实现Image Translation具有一定局限性,它会过于平滑图像,同时还会损失边缘和纹理细节信息。利用深度网络,比如VGG来实现基于perceptualloss的图像转换也会损失边缘和纹理细节信息,还会引入一些人工仿真场景信息。Ledig等人在今年CVPR上发表了文章将Perceptual loss和GAN结合,从而使得转换更为逼真。如果按照前面的这些方法来实现,我们需要设计用什么网络来实现计算Perceptual loss。那么如何避免去显示定义网络来实现Perceptualloss?Conditional GAN就可以实现,它定义正对(输入和真实图像)和反对(输入和仿真图像),然后学习网络来实现正确判断正反对。这样就可以将perceptual隐式嵌入到网络中,这种conditional GAN方法是当时实现效果最好的。

另一种就是无监督图像转换,比如马到斑马的转换,四季场景变化等。还有一个例子就是人脸标签转换,比如性别、是否戴眼镜等。一个典型工作是今年CVPR上的Learning Residual Images(Shen &Liu),他们提出利用一个残差网络来学一个脸部标签(戴眼镜),同时利用另外一个残差网络来去掉眼镜,训练过程中这两个网络一起学习,使得它可以从戴眼镜到不戴眼镜,同时也可以实现从不戴眼镜到戴眼镜,这就相当于一个环,可以实现遍历,最终实现一个可以完成Faceattribute transfer的模型。后面还有相似的工作比如DualGAN (Yi et al., Arxiv 2017)和Cycle-Consistentsupervision (Zhu et al., Arxiv2017)等。

还有Facebook的一个工作,这个比较明确,就是说这里面有一个encoder,最后这个output需要设置什么样就是什么样。同时如果想调整这个Y得到目标的话,需要满足这个E(x)和Y是独立。这样的网络有一个很大好处就是它学一个网络,可以任意改变人脸的一个attribute即可,比如性别、年龄、眼镜等。这种网络结构是一个比较简洁比较漂亮的模型。

4.深度领域适应

下面讲讲Deep Domain Adaptation。在GAN出来之前,该领域已经做了十来年了。传统Domain Adaptation目标主要是指在领域A学得的模型,用于领域B。为了实现这个目标,我们设定了任务。第一个任务就是有监督的这个类型,在这种情况下就是说A里头也有label,B领域里面也有。还有一种就是半监督,即A里面有label,而B领域里面没有或者只有少量label。最后一个就是无监督的领域适应,领域A和B都没有任何标签信息。无监督是最难也是最有意义的。后来随着deep learning的巨大成功,被逐步引入domain adaptation, Donahue等人在ICML2014提出一些有监督是深度特征可以减小不同domain之间的bias。后来(Yosinski et al., NIPS 2014)提出深度特征不能解决domainadaptation问题,从双向的角度出发,domain adaptation是需要的。最开始利用Maximum Mean Discrepancy (MMD) 来实现,主要用线性核,后来将CNN引入实现非线性映射。后来(Grettonet al., NIPS 2012)提出用多核方法实现domain adaptation,从对抗思想来理解,先固定核函数参数,更新特征提取模型的参数来最小化MMD,然后固定特征提取模型参数,更新核函数参数来最大化MMD。

通过2014年的讨论,大家开始从无监督方向考虑,并结合GAN来做研究。时间是无监督DA就是利用合成数据学得模型再利用到真实环境中去,Render for CNN (Su et al., ICCV 2015)就是这样一个工作,如下图所示,他们提出在虚拟仿真图像训练模型,用于实际中估计物体姿态。上述从特征方面来实现domain adaptation,还有一个方面是从图像像素级方面来考虑实现,比较典型的一个工作就是Apple的第一篇AI论文,发表于几年的CVPR上。他们提出SimGAN,这里的输入为仿真图像,利用对抗网络学习来得到一个Refiner网络,从而使得生成图像既有仿真图像的标签数据,又有真实图像的纹理外观信息。

[ZZ] 多领域视觉数据的转换、关联与自适应学习的更多相关文章

  1. [SAP ABAP开发技术总结]数据输入输出转换、小数位/单位/货币格式化

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. linq查询数值为null的问题以及数据表的关联计算问题

    说明:下面实例都是我进行项目开发时的真实部分代码,毫无保留 一.数据表的关联计算 //把当前年度的分差计算出来,建立两个关联的数据表 try { using(TransactionScope scop ...

  3. ABP(现代ASP.NET样板开发框架)系列之13、ABP领域层——数据过滤器(Data filters)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之13.ABP领域层——数据过滤器(Data filters) ABP是“ASP.NET Boilerplate P ...

  4. OpenCV中IplImage图像格式与BYTE图像数据的转换

    最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...

  5. JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...

  6. 【python cookbook】【数据结构与算法】19.同时对数据做转换和换算

    问题:我们需要调用一个换算函数(例如sum().min().max()),但是首先需对数据做转换或者筛选处理 解决方案:非常优雅的方法---在函数参数中使用生成器表达式 例如: # 计算平方和 num ...

  7. 转载:JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    转载网址:http://blog.sina.com.cn/s/blog_821025b70100wh6v.html JSON与JAVA数据的转换(JSON 即 JavaScript Object Na ...

  8. 数据表转换成json(DatatableToJson)

    #region 转换Table为JSON数据 /// <summary> /// 转换Table为JSON数据 /// </summary> /// <param nam ...

  9. java中,字符串类型的时间数据怎样转换成date类型。

    将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...

随机推荐

  1. jmeter之服务器性能监测

    性能测试时,我们的关注点有两部分 1 服务本身:并发 响应时间 QPS 2 服务器的资源使用情况:cpu memory I/O disk等 JMeter的plugins插件可以实现对服务器资源使用情况 ...

  2. python单列模式

    单例模式:就是永远用一个对象的实例 初级版 #初级版 class Foo(object): instance=None def __init__(self): pass @classmethod # ...

  3. Linux 操作系统目录结构

    /  根目录 # ls /bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp  var bin - ...

  4. matlab绘图与可视化

    1.设置图形对象属性值 set(h,'属性名称','属性值') >> subplot(,,); h1=line([ ],[ ]); text(,0.5,'unchange'); subpl ...

  5. [转载] java多线程总结(二)

    转载自:http://www.cnblogs.com/lwbqqyumidi/p/3817517.html 作者:Windstep 四.Java多线程的阻塞状态与线程控制 上文已经提到Java阻塞的几 ...

  6. 实践作业4 Web测试(小组作业分配)

    经过小组内的讨论之后,我们小组的工作分配如下: 张赛军.闫昊:阶段一,软件评测: 林俊旭:阶段二,用户调研: 张嘉焰:阶段三,得出结论: 许林龙:阶段四,分析: 王奎:阶段五,每日记录,并汇总整理小组 ...

  7. linux 命令启动Oracle数据库

    首先使用oracle用户登录Linux,然后在shell命令行中执行下面的命令: 第一步:打开Oracle监听lsnrctl start 第二步:进入sqlplussqlplus /nologSQL& ...

  8. OpenStack源码分析 Neutron源码分析(一)-----------Restful API篇

    原文:https://blog.csdn.net/happyanger6/article/details/54586463 首先,先分析WSGI应用的实现. 由前面的文章http://blog.csd ...

  9. HTML入门标签学习

    1.标题:<h1></h1>.<h2></h2>.<h3></h3>.<h4></h4>.<h5& ...

  10. python初学之缓存清理:完全相同的代码与环境但是其中一个文件可以执行成功,一个执行不成功

    在使用python写接口测试脚本时,想要引入logging模块来在控制台输出当前执行进度日志,但是遇到了奇葩问题,困扰了一整个下午: 代码如下: __author__ = 'test'#!/usr/b ...