【平价数据】SimGAN:活用合成数据和无监督数据

2023-12-01 21:48

本文主要是介绍【平价数据】SimGAN:活用合成数据和无监督数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Shrivastava, Ashish, et al. “Learning from simulated and unsupervised images through adversarial training.” IEEE Conference on Computer Vision and Pattern Recognition.2017

概述

本文是Apple在机器学习领域的首秀,同时也是CVPR 2017的两篇Best Paper之一。

在使用深度学习结局实际问题时,我们常常遇到以下的局面:

类别品质标记数量
监督数据真实
无监督数据真实
合成数据不真实

本文举了两个例子:视线方向识别和手势识别。

  • 两种问题的标定都十分困难,使得监督数据昂贵而稀少。
  • 可以用CG模型合成数据。这些数据的视线方向和手关节位置已知,但画面不够真实。

本文利用GAN思想,通过无监督数据提升合成数据的质量,同时不改变合成数据的标记。之后使用优化过的合成数据训练模型。

方法

系统框架

类似GAN网络,本文系统中包含两个核心模块

  • 改善器 R R R:输入合成数据,输出改善结果。
  • 鉴别器 D D D:判断输入是真实数据还是经过改善的合成数据。

这里写图片描述

注意,训练的最终目的是生成改善后的合成数据。而不是改善器或者鉴别器本身。

优化

相关的代价有三种

  • 代价1:鉴别器识别改善图像的错误率。
  • 代价2:鉴别器识别真实图像的错误率。
  • 代价3:改善图像和原始图像的逐像素差

其中,代价3保证改善图像和原始图像的类标相同。例如,保证手势姿态不变,保证视线方向不变。除了直接比较像素,还可以提取图像特征之后在做差。

在每一轮迭代中:

  • 最大化代价1,最小化代价3,优化改善器 R R R的参数。共执行 K r K_r Kr次SGD。
  • 最小化代价1,最小化代价2,优化鉴别器 D D D的参数。共执行 K d K_d Kd次SGD。

经过若干次迭代得到的改善器 R R R,可以将合成样本加工成具有以下两个性质的样本:

  • 品质和真实图像难以分辨
  • 保持合成样本原有类标不变

改进:局部损失

问题

随着迭代进展,鉴别器 D D D可能过分利用某些错误的全局特征进行分类,进而使得改善图像出现不自然的artifact。

举例:真实图像中可能只包含几个固定视线方向的样本,但合成图像的视线方向则均匀而连续。于是鉴别器“剑走偏锋”地以视线方向作为真假样本的判别标准。1

解决

本文在训练鉴别器 D D D时,将图像分割成 w × h w\times h w×h的小块分别输入;在利用 D D D进行分类时,以各个小块的分类结果只和作为该图像的结果。
除了避免全局信息引入artifact之外,这种方法还能够增加训练样本的数量。

改进:历史信息

问题

随着每一次迭代,改善器 R R R输出的图像是逐步变化的。相应地,鉴别器能够有效辨识的图像也集中在最近的改善器输出中。这导致两个问题:

  • 对抗训练不收敛2
  • 改善器 R R R会重新引入之前出现过、但已经被鉴别器 D D D忘记的artifact

解决

本文设置一个buffer来储存迭代中生成的改善图像。

  • 在每个大小为 b b b的mini-batch中,有一半数据来源于这个buffer,另一半来源于当前改善器 R R R的输出。
  • 完成迭代后,用当前改善器的输出替换 b / 2 b/2 b/2个buffer中的样本。

实验

视线方向估计

数据

真实数据:214K的MPIIGaze数据库
合成数据:1.2M使用UnityEyes生成图像,使用单一渲染环境

由于合成图像和真是图像在颜色上差别较大,在计算代价3时使用RGB三通道平均值之差代替逐像素差。

由于视线方向估计是在灰度图上进行,使用灰度代价即可。

结果

改善图像(中)能够保持原始图像(左)的视线方向,同时其品质接近真实图像(右),即使真人也难以分辨。
这里写图片描述

使用改善图像训练的分类器,效果大大超出使用原始合成图像训练的分类器。
这里写图片描述
与state of the art相比,错误率也有明显降低。
这里写图片描述

手势识别

数据

真实数据:NYU hand pose。70K训练,8K测试。未标定。裁剪缩放为224×224深度图像。
合成数据:数量未提及。包含14个关节标定结果。

结果

改善数据能够逼真模拟真实数据中的噪声。
这里写图片描述

使用改善数据训练的分类器指标具有明显优势。
这里写图片描述


  1. 原文未详述,此处为个人理解。 ↩︎

  2. 原因未详述 ↩︎

这篇关于【平价数据】SimGAN:活用合成数据和无监督数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/442816

相关文章

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名