苹果首篇AI论文 SimGANs 代码及详解

2024-01-20 03:20

本文主要是介绍苹果首篇AI论文 SimGANs 代码及详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Michael Dietz,Waya.ai创始人
原文:SimGANs - a game changer in unsupervised learning, self driving cars, and more
译者:王安阳 上海交通大学研究生在读
责编:王艺,CSDN记者,专注人工智能。寻求报道及投稿请请联系wangyi@csdn.net。同时运营CSDN AI相关微信群,「面向AI从业者及研究员做深入讨论与交流,分享业内领先案例」,欢迎加微信Qunnie-Yi申请入群。(请备注姓名+公司+职位,以快速审核通过)

编者按

本文为苹果最新AI论文SimGANs写就,作为GANs的变种,SimGANs一经提出便引发众议。本文分析论文思想及代码,并就将SimGANs应用于基于无监督学习的自主驾驶为例进行探讨。文中多连接,推荐您一一打开,会有惊喜。

译文

苹果公司在2016年年尾发布了其首篇AI论文《通过对抗训练从模拟的和无监督的图像中学习》(Learning from Simulated and Unsupervised Images through Adversarial Training)。该文使用了如今最炙手可热的深度学习“对抗训练”方法,提出了一个所谓“模拟+无监督学习”(simulated + unsupervised learning)的方法,可以使用合成的和未标记的数据训练先进的神经网络。文章一经登出,便广受关注。

图片描述

本文将分析为什么说SimGAN方法有着巨大的潜力,并把它应用于一个有趣的问题——自动驾驶。

我们将参考SimGAN的一个实现,以及除了waya.ai(译者注:作者为Waya.ai的创始人)之外我最喜欢的公司——Comma.ai,来进行讲解。(译者注:Comma.ai是一家致力于自动驾驶技术研发的科技公司)

若您需要了解GAN,请点击这里。

论文思想简介


苹果这篇论文背后的核心思想是,标记的数据通常是稀缺和昂贵的。然而,标记数据可以通过强大的引擎(如Unity)或其他方法进行合成。问题是,合成的和真实的数据之间存在差距,这导致用合成数据进行训练的网络不能很好地推广到真实世界。

“模拟+无监督学习”一文认为,使用真实的,非必需有标记的数据集,可以跨越这一差距。生成网络(generator)可以通过“对抗训练”来学习精炼(refine)合成数据,使得它更接近于真实数据集的分布,同时保持合成数据的标注(即,它的标签保持有效)。

以下链接是要解释的概念的相关代码。使用精炼网络(refiner)改进合成数据,可以:

  1. 通过自正则化损失项使精确和合成数据之间的差异最小化来保留标注。
  2. 使合成数据看起来是真实的(GAN的标准概念)。

精炼网络(refiner)将合成数据样本作为输入,输出相同维度的改进数据样本。判别网络(discriminator)将数据样本作为输入,并将其分类为改进的或真实的。

在苹果所发“模拟+无监督学习”一文中,GAN架构和培训过程是标准的,但是建议两种简单和直观的方法来提高应用于GAN的生成数据的质量。

  1. 在当前的GAN架构中,判别网络仅对最新产生的数据进行训练。这导致其忘记先前生成的数据的特征,并且意味着生成网络可以重新引入旧的特征以欺骗判别网络。生成的数据就是生成的数据,判别网络应该总能将其正确识别。设置一个先前生成的数据的历史缓冲器,就可以用来自当前生成网络的数据以及来自过去的生成网络的数据共同训练该判别网络。

  2. 在当前GAN架构中,判别网络通过全局分析输入数据将数据分类。这意味着生成网络可以通过在生成的数据中局部作假来欺骗判别网络。真实数据的任何局部数据块都应该看起来是真实的,因此鉴别器应该将数据分成局部块并且将每个块分类为真实的或生成的,将这些局部对抗损耗平均化以获得更平衡的全局对抗损失。

将SimGANs应用于基于无监督学习的自主驾驶


想象你是Comma.AI的一员,有大量的由Dash收集的真实的未标记的驾驶数据。虽然你当前的标记数据的方法很棒,但你只有少量的有标记数据。使用SimGAN,你可以训练一个改进神经网络来改进侠盗飞车的数据(开发者使用侠盗飞车游戏模拟真实车辆行驶),使数据看起来像是来自你的真实数据集,同时保留标注。现在,你可以在这个几乎无限精细标记的数据集上训练你的生产模型,并使用少量的真实标记数据集作为验证。

我没有参加任何自动驾驶的课程,但我知道他们使用侠盗飞车和模拟环境来训练他们的模型。有了这样的技术,他们的软件可以更接近现实世界。SimGAN在现实世界中似乎有许多可能的应用,自主驾驶只是我选择使用的一个有趣的例子。


【CSDN_AI】面向AI从业者及研究员做深入讨论与交流,分享业内领先案例

扫码关注CSDN AI公众号 「人工智能头条」

图片描述

这篇关于苹果首篇AI论文 SimGANs 代码及详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

详解python pycharm与cmd中制表符不一样

《详解pythonpycharm与cmd中制表符不一样》本文主要介绍了pythonpycharm与cmd中制表符不一样,这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽... 这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽度不同导致的。在PyChar

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va