【平价数据】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

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

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

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