计算机图形学实验源码_计算机图形自动可微:MIT学神微分太极框架开源,论文被ICLR接收...
机器之心报道
参与:一鸣、杜伟
去年5月,机器之心报道了 MIT 华人学神胡渊鸣等开源的计算机图形库——太极。近日,这位作者联合其他研究者推出了自动微分版本的太极——微分太极。这一框架可以基于太极实现自动微分,在物理模拟优化方面有很高的性能和灵活性。这意味着太极从计算机图形学进入了机器学习的领域。
目前,一作胡渊鸣已在 GitHub 上开源了基于这一框架完成的 10个 物理模拟器,项目登上了 GitHub 热榜。而微分太极论文也已被 ICLR2020 接收。
项目地址:https://github.com/yuanming-hu/difftaichi
论文地址:https://arxiv.org/pdf/1910.00935.pdf
10 个不同的物理模拟器
微分太极框架极大了提升了可微物理模拟器的性能和生产力。例如,利用微分太极框架的可微弹性对象模拟器(ChainQueen)的速度比 TensorFlow 实现快了 188 倍;微分太极框架的运行速度与 CUDA 实现相当,但代码缩短了 4.2 倍。
大多数可微模拟器可以在 2 至 3 小时内实现。以下是其中一些模拟器的动态展示图:
可微 2D 弹性对象模拟器
左:梯度下降迭代步数 0;右:梯度下降迭代步数 80。
可微 3D 弹性对象模拟器
梯度下降迭代步数 40。
可微 3D 流体模拟器
梯度下降迭代步数 450。
可微高度场水模拟器
梯度下降迭代步数 180。
可微(对抗性)水渲染器
这种渲染器包含三个组件:可微水模拟、可微水渲染和可微卷积神经网络(CNN)。
可微水渲染器结构图。
实验结果表明,在经过水模拟和水渲染之后,VGG-16 网络框架将带有动态水纹的松鼠照片误识别为金鱼。
可微刚性物体模拟器
时间步长 2048,梯度下降迭代步数 20。
可微弹簧质点模拟器
时间步长 682,梯度下降迭代步数 20。
可微台球模拟器
微分太极还能模拟台球等其他包含多个物体的复杂场景。
左:梯度下降迭代步数 0;右:梯度下降迭代步数 100。
微分太极怎样实现自动微分
太极原本是用于计算机图形计算和模拟的,为什么要开发为微分框架呢?这是因为使用可微模拟器进行物理控制器优化,相比 model-free 的强化学习算法,可以提升 1 到 4 个量级的收敛速度。
微分太极是基于太极项目的,它能够使用源码转换的方式,对模拟步骤生成梯度。模拟程序由一个轻量的 tape 进行记录,并以降序方式返回核的梯度,实现端到端反向传播。
基本架构
图 1:(左)微分太极可以和神经网络控制器及物理模拟模块无缝结合,并向控制器或初始化转台参数更新梯度。模拟过程通常有 512 到 2048 个时间步,每个时间步达到 1000 次并行运算。(右)10 个基于微分太极构建的微分模拟器。
微分太极的主要目标是进行自动微分,即自动生成模拟器的梯度,而且对于传统的前向模拟器的代码改变保持最小。
为了保证性能和灵活性,研究者开发了这样的自动微分系统:在核内使用源码转换的方法进行微分,并使用轻量 tape 记录函数指针和属性,用于模拟微分。全局张量是计算梯度的检查点。
图 2:自动微分架构。(左)微分太极系统。白色部分为来自太极语言的重用架构,蓝色为微分程序的扩展部分。(右)Tape 记录了核的运行,在反向传播时以降序方式重放(replay)梯度核。
使用源码迁移进行局部自动微分
典型的太极核由多层循环和一个程序体组成。为了使后续的自动微分变得简单,研究者采用了两种代码迁移方式,分别为平整分支(flatten branching)和消除可变变量(eliminate mutable var),用于简化程序体:
图 3:程序体从左到右逐渐被简化(C++代码)。
使用 Tape 进行端到端反向传播的全局自动微分
在微分太极中,研究者构建了一个轻量级的 tape,用于核的执行,使得梯度核可以以降序的方式重放。Tape 很轻量,它不保存中间结果,而是在前向模拟中记录核的名称和输入变量。
在一个微分太极的核启动的时候,核的函数指针和参数会被添加到 tape 中。当进行梯度计算的时候,系统会顺着降序的 tape,将记录的参数输入梯度核中获得梯度。需要注意的是,微分太极的自动微分会根据输入的全局张量而非输入参数进行梯度计算。
举个例子,假定我们的目标是优化三个弹簧质点组成的几何图形,在模拟结束的时候需要使它们组成的面积为 0.2。损失函数可定义如下:
程序使用「ti.Tape」记录前向核的运行。它会自动返回这些核的梯度。刚开始的时候,三角形有着 [0.1, 0.1, 0.14] 的三边长,而优化后的长度是 [0.600, 0.600, 0.529]。这意味着三角形需要根据胡克定律从小到大进行形变。
上图中的代码表示了三角形的形变过程。左侧的代码类似于 PyTorch 或 TF2.0 的训练过程:设定迭代次数,在前向计算后计算损失,并更新梯度。通过梯度优化的方式,计算机图形的模拟会变得更快更精确。
论文一作胡渊鸣简介
胡渊鸣是 MIT 人工智能实验室(CSAIL)的博士生,师从 Fredo Durand 和 Bill Freeman 两位教授。
他从小就对计算机表现出极大的兴趣,因其在 2012 年全国高中学科奥赛(信息学)中的优异成绩而被保送至清华大学。
2017 年 7 月,胡同学作为优秀毕业生从清华大学姚班毕业。他在微软亚洲研究院跟随 Stephen Lin 博士实习时从事深度学习和计算机视觉相关工作。胡同学的本科论文主要研究的是使用强化学习和对抗学习的自动照片后期处理(发表在 SIGGRAPH 2018 大会上)。2018 年 11 月,胡同学在 Wojciech Matusik 教授的指导下完成其硕士论文。
- 本科论文链接:https://arxiv.org/abs/1709.09602
- 硕士论文链接:http://taichi.graphics/wp-content/uploads/2018/11/thesis_ChainQueen.pdf
胡渊鸣开发的一系列 GitHub 项目都获得了极大的关注,其中最著名的当属 Taichi 项目,Star 量至今已达 7800。
2019 年的项目贡献值为 4651。
计算机图形学实验源码_计算机图形自动可微:MIT学神微分太极框架开源,论文被ICLR接收...相关推荐
- echarts python源码_基于Echarts的微代码开发平台SmartChart, 免费开源使用
A platform that Connect Data to Echarts. 简介 SmartChart基于Echarts/Django的微代码开发平台,适用于任何WEB项目 简单, 敏捷, 高效 ...
- 文件管理系统源码_基于Spring Cloud微服务构建多平台功能完善小说弹幕网站源码分享...
致力于打造一个完整的可商用.可学习的小说门户平台,重新进行了数据库设计.代码重构和功能增强,提升了程序整体的可读性和性能,增加了很多商用特性. 是一个多平台(web.安卓app.微信小程序).功能完善 ...
- vertx源码_使用Vertx构建微服务
Vertx Vert.x is a tool-kit for building reactive applications on the JVM.(Vertx是运行在JVM上用来构建reactive ...
- PHP源码_运营服务器打包微盘,外汇盘,时间盘
介绍: 和之前发的没什么区别,卡的一批,唯一就是后台可以看到在线人数,这点挺人性化的,有喜欢的拿去研究,东西如下 安装教程: Linux+宝塔 NX或者阿帕奇+PHP7.0+MySQL5.6 伪静态选 ...
- 计算机图形学课程设计html源码,孔令德的计算机图形学实验及课程设计(VC++版)...
[实例简介] 计算机图形学实验及课程设计,是太原工业学院孔令德教授编写的关于计算机图形学这门课程相关的18个实验及5个课程设计.案例由浅入深,具有很强的操作性和实际意义. 本资源给出实验的ppt课件以 ...
- 赚多多V10自动抢单系统源码_派单连单管理新增设置订单佣金
收到用户反馈需要连单设置时需要单独设置佣金,于是针对派单连单管理这一块做了个调整,新增了设置佣金栏目. 功能说明:派单时有设置佣金会按照设置的佣金进行计算,设置佣金为单商品价格的百分比,比如设置价格为 ...
- 计算机图形动画处理实训报告,西安石油大学计算机图形学 实验报告.doc
文档介绍: 西安石油大学计算机图形学_实验报告实验报告 -计算机图形学实验大作业 课程名称计算机图形学 实验名称二维绘图系统与计算机动画 姓名 学号 专业班级 成绩 指导教师爨莹 实验报告 课程名称计 ...
- 计算机图形Opengl的实验报告,opengl计算机图形学实验报告之3D漫游世界.doc
opengl计算机图形学实验报告之3D漫游世界.doc 北师大珠海分校信息技术学院计算机图形学实验报告实验报告文件命名方式学号姓名_实验序号_实验名称.doc姓名学号1001010092专业计算机任课 ...
- 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc
计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...
最新文章
- android+邮箱删除邮件,在Android上删除烦人的语音邮件通知 | MOS86
- Gaussian Filter
- python 批量resize性能比较
- Oracle数据库之SQL基础(一)
- linux oracle swd.oui,centos7安装oracle11g报错,请问怎么解?
- uefi引导linux_使用UEFI双重引导Windows和Linux
- python大作业代码_大二期末python大作业有效代码不低于5000行是什么水平?
- Hive(Impala)测试数据生成与加载
- 过滤程序的html代码,值得收藏的html过滤代码
- android+3.1.2+imagebutton监听,android Button ImageButton 差别
- java script 延时_javascript 延时执行函数
- 遭遇scvhost.exe,qsetup.exe,dsound.dll,hnetcfg.dll,olepro32.dll等1
- 单相电能量计算机公式,电能的计算公式
- CH0805 防线 二分
- 无线网络摄像头服务器,无线摄像头云服务器
- 大恒相机图像采集 linux+python
- cytoscape插件下载_Cytoscape软件下载
- 7.24[C语言零基础 知识点总结]
- 三分类、五分类、CRP\SAA、六分类
- [20190415]ora-02049错误.txt