驱动自己的机器人

DJI RoboMaster EP 年初我打算花半年时间研究自动驾驶,以及计算机图形学,于是开始调研开发自动驾驶系统的硬件,最先考虑的是nvidia在2019年发布jetson nano平台时开放的jetbot,基本是一台玩具小车,配备3D打印车身,两个小轮子以及一块jetson nano developer kit,一个camera,官方项目地址,考虑搭建整个车子的硬件平台所需要的成本以及可玩性,我决定不考虑类似玩具方案的car robot,最后我瞄准了DJI robomaster EP,因为它开放了完整的SDK,并且整个机器人平台是用于教育比赛而设计的,可玩性非常丰富,自己也不需要过多的去考虑底层硬件的装配。这样我就可以借鉴jetbot的自动驾驶设计,将其移植到robomaster EP上,打造最原始的自动驾驶开发平台。 Coral Edge TPU As Robot Brain 经过一段时间的动手测试,我决定在robomaster EP上采用的硬件方案是raspberry pi 4 + google edge tpu,具体架构如下: 左边是自动驾驶会用到的一些工具,视觉加速芯片我使用的是google edge tpu,相比nvidia Jetson GPU,它的功耗更低,这样在做视觉运算时不会大量消耗机器人有限的电池电量。 右边是需要自己搭建的一个机器学习运维平台,从数据的收集,模型训练以及测试,最后模型部署,都是自动化的。

March 30, 2023

AI Is Not AI

OpenAI ChatGPT Reference DeepMind Reference InstructGPT Reference 最近看到推特上聊的最多的话题是ChatGPT,很多人对它赞不绝口。对于一个创作者而言将人工智能用于自己的创作流程中,能够快速实现作品的原型,这在商业领域当然是一件很好的事情。chatGPT可以给编剧增加灵感,给找问题的人提供解决思路,给翻译人员提供更精准的语言翻译帮助。那么ChatGPT算不算真正意义上的AI,也就是说它能否通过图灵测试。虽然我们不知道答案,但我们可以确定ChatGPT肯定收集了海量的互联网数据来进行模型训练,最后模型的参数也是惊人的巨大。 首先参考OpenAI官网,我们看下OpenAI模型训练的过程: 训练模型采用了Reinforcement Learning From Human Feedback,首先OpenAI从题词数据库里面抽取样本,标记者会解释该问题的预期答案,然后将样本和预期答案通过GPT-3.5模型进行监督学习(A模型),然后收集对比数据,通过人工的方式将问题得到的多个答案进行排序打分,以此训练奖励模型(B模型),最后输入新的词条到A模型,其输出进入B模型中得到奖励评分,采用PPO方法优化A模型的参数。 我门再来看下OpenAI的DALL-E 2,通过语言描述来生成照片级的图像,当然还有开源版本的Stable Diffusion v2,也是类似的功能。其中采用的机器学习模型是diffusion models,通过连接语言描述与图像之间的关系,从无到有生成一张符合描述的完整的高分辨率图像,这也许在2D图像处理和3D模型制作中给创作者提供很大的帮助。 受到DALL-E工具的启发,Baker Lab的研究人员使用diffusion models来生成新的蛋白质结构,A diffusion model for protein design,通过新的方法研究人员能够快速的组装出具有功能性的蛋白质结构,而在使用diffusion models之前需要通过数以万计的分子进行测试。从文本生成,到文本图像生成,再到蛋白质结构生成,这里面涵盖了通用的模型设计,那么这些模型能否被称之为通用AI,不谈论创造性,我们可以将chatGPT理解为狭义通用AI,因为它的目标就是模仿人类,给出的答案尽量接近人类,比如一个智能搜索引擎,一个开放式的智能数据库,那么能否通过图灵测试,我猜测是不可能。 有了这么多具有启发性的应用之后,我们想象建立一个DeepL-Ops领域,为了保证生产环境的稳定性,我们会有一个chaos agent一直在搞破坏,比如关闭集群的某些服务,极度消耗服务器的网络流量,假装破坏硬盘,之后如果系统还可以正常对外工作,那么这个系统就是可靠的,这项工作我们称之为混沌工程。这里会出现一个问题,工程师无法100%去列举出哪些问题会导致服务异常,需要不断的依靠实际经验去积累,这样我们也就引入了DeepL-Ops训练机制。系统中存在一个chaos agent和一个order agent,前者是搞破坏使得系统故障,后者是修复系统使得系统正常工作,我们设计了一个机器学习模型,当chaos agent搞破坏的时候,order agent去努力修复系统,同时chaos agent也在进化,尽可能的破坏系统让order agent无法修复,如果order agent无法修复系统,agent会根据环境给予的反馈调整order rules generator模型,如果order agent修复了系统,chaos agent会根据现有环境更新chaos rules generator模型。当该模型训练完成之后我们把order agent放到系统中,当系统出现故障时,我们将故障信息输入到order rules generator模型中,从而让order agent去修复系统问题。

December 7, 2022

故事与情感

July 30, 2022

My Web Content Platform

这是我目前使用的内容管理平台的架构,前端的两台google comput engine 用于连接全球互联网以及托管静态站点,后端的集群全部运行在自己托管的ARM64系统平台上,集群内部运行着Cloudflared隧道,当用户请求invisibleart时,请求会通过cloudflare edge network发送到隧道中,cloudflared会将请求发往目标地址wordpress engine,后端的数据库采用的是vitess mysql集群,前期使用过tidb,发现与wordpress存在兼容性问题,最后决定使用vitess,在备份,扩容,和灾难恢复中,vitess还是非常可靠的。

July 29, 2022

维塔数码的技术

记录 Weta workshop Weta Digital 最近我花了一个月的时间看完了weta digital && weta workshop的两本书,其中weta digital主要是从事计算机三维图像创作,而weta workshop主要是从事电影前期概念创作,像是生物以及人物的雕刻,武器道具的设计,场景的实际概念设计,这些都是由weta workshop来完成的,随后weta digital根据workshop的概念设计来制作CG人物和生物,并且让这些CG动起来,关于workshop我比较感兴趣的是他们的特效化妆以及精细的生物雕刻技术,而weta digital我们需要学习他们的全部技术,本文主要关注的就是digital部分,我已经将关注的技术点截图粘贴到本文中,因为每一个关键的技术点在时间以及成本上的突破就会给电影后期制作带来质的飞跃,我所指的突破是指该项技术能够以低成本来实现以前未能达到的高度。 第一部分,如何制作The Hobbit: The Desolation of smaug 主要介绍制作过程中的基本流程,首先是概念图设计,接下来就是建模,贴图,材质,光照,Matte Painting,然后动画制作,为了制作逼真的CG,艺术人员通过拍摄自然界的真实照片做为参考,在CG图像里面不断添加细节,从而达到真实的效果。在我看来这些技术都是非常关键的,没有精细的雕刻,是无法完成这些艺术品的。 第二部分,主要介绍影片中龙的塑造以及表演,也是最基本的影视制作流程,其中龙的表情动画采用了动作捕捉技术,建模,动画,特效,光照,每一步的细节都非常到位。 最后就是weta digital在数字图像方面的创新技术。因为自己也准备学习Houdini,节点式的制作流程,让我对Weta技术中的Massive,CityBot,Facial Animation,Deep Compositing,Mari,Tissue特别感兴趣。 Massive: 全称为Multiple Agent Simulation System in Virtual System,用来生成大场景的生物交互,比如成千上百万的军队士兵奔跑以及相互攻击,每一个士兵都由一个AI Agent进行代理控制行为,从而使得场景看上去是真实的,没有人工伪造的痕迹。 CityBot: 顾名思义就是生成城市三维模型。 Facial Animation: 面部表情捕捉技术。 Deep Compositing: 深度合成技术,在CG渲染输出时保存像素的深度信息,然后在合成阶段,这些深度信息会被用于视觉深度上的合成,可以类似的认为是一个2.5D的合成,像体积雾,直接采用深度合成,看上去将更加真实立体。 ...

May 23, 2022

Renderman 历史

创新艺术 提到Renderman,那么我们也就不得不提Pixar,对,就是这家制作动画电影的工作室。与其说Renderman的历史还不如讲讲Pixar的历史,正是因为Pixar工作室的艺术家需要在数字世界里面创造真实的影像才诞生了Renderman。我们来看下这家工作室的历史背景。 通过Pixar的发展历史可以看出科学与艺术在电影创作的世界里是相辅相成的,我们来了解下Renderman到底是什么工具。就像画画一样,画家通过不断的对周围事物的观察,在大脑中记忆自己所看到的物体的色彩,光影,然后依靠自己的双手将三维世界的物体呈现在两纬的画布上,Renderman就是这样一组工具,我们告诉他三维空间中都有哪些物体,光源在哪里,摄影机的位置和观察这个空间的角度是怎么样的,将这些数据输入到Renderman中,Renderman就会生成一张类似画家画完画后的两纬图像,Rendering在中文中解释为渲染,渲染一张图片当然还是不够的,我们要让观赏这幅画的人感觉画面是用真实的摄影机拍摄的,那么我们就需要在计算机的世界中去模拟现实世界的光影和色彩,这也是Renderman需要去实现的。告诉Renderman三维空间中有哪些物体,哪些光源,摄影机的位置,这个是由计算机建模来完成的,模型建立完成之后,我们可以输出兼容Renderman程序的场景描述文件,将这一描述文件输入到Renderman中,我们也就得到了具有真实质感的照片,Renderman其实就是对一系列外部接口的规定和实现,将Rendering从建模中抽离出来进行独立的开发,那么任何三维建模程序只要能够通过这些接口与Renderman进行通讯,都可以将场景描述输送到具有Renderman接口实现的渲染器中渲染图像。 Pixar每一部电影制作都会用到Pixar工作室实现的Renderman渲染器-PhotoRealistic RenderMan,1988年pixar开发了Renderman的初版本,经过30多年的发展,Renderman不断的在被Pixar的工程师和科学家们优化和改进。最近发布的24版本中PRMan可以处理能够想象到的最复杂的3D场景,能够同时使用CPU+GPU进行渲染的XPU技术,以及经过多部电影考验的着色技术,最重要的是他支持了开源的三维建模动画程序Blender。学习Renderman就如同像站在巨人的肩膀上一样,使得我们能够更充分更扎实的去了解计算机图形学。 文档翻译计划 早期使用Pixar Renderman,用户还需要学习编程技术,现在Renderman的使用更加人性化,但是相比于市面上流行的其他渲染器而言,Renderman还是缺少许多具体的使用文档和教程,尤其是中文领域。我目前已经在着手翻译Renderman的官方文档和Pixar的具体论文,借助DeepL的帮助翻译进度还是蛮快的。

February 25, 2022

CG319x EIZO

在2020年的时候我写过一篇博客 Renderman24 Will Support Blender,在文章的最后我记录了自己打算购买商业版本的Renderman。经过一年多的时间之后,我实现了自己的想法,为自己配置了图像工作站,购买了具有商业版权的Renderman,最重要的是我也为自己购置了一套EIZO CG319x显示器。准备这些的初衷主要是因为web3.0的崛起,我设想过一个人的自由职业,因为电影行业是通过非常庞大的群体来完成创作的,要让一个人独立完成一部真人电影或者动画长片,甚至短片,那是非常耗时的,因为有很多的技术以及艺术的绊脚石在你面前,你必须一点一滴的克服才能完成影片中的每一个细节。然后我就设想能否通过机器的算法来完成人物环境的设定,在计算机的世界中生成生命和环境,在常规的电影制作中那叫做建模和动画以及场景制作,这些技术都是由技术以及美术人员来完成创作的,计算机只是如实的向观众呈现这些创作。大胆想象如果计算机能够完成这些创作过程,比如动物的蹦跑,模型的材质,抠像,人类的行走,我们不再是通过画关键帧,调试材质,手动绿幕抠像,而是通过计算机对这个现实世界的学习来主动探索这些关键帧,实现对现实世界物体材质的模拟,对画面中人物的精确抠像,那么似乎一个人创作一部精彩的电影是没有问题的。当然这只是个设想,目前技术还达不到这样科幻的地步。 现在就来讲讲CG319x-4k HDR Monitor,它由EIZO公司生产和发行,在2021奥斯卡科学与技术的颁奖典礼上,EIZO获得了科学技术奖。有很多的电影动画以及视效公司在使用EIZO的CG显示器,包括ILM(工业光魔),Pixar,MPC FILM,DNEG(Dune 2021的视效团队)。EIZO官方介绍 Academy of Motion Picture Arts and Sciences,Oscars SCIENTIFIC & TECHNICAL AWARDS 2020。对于工具我的认知是尽量购买自己能力范围内最好的,并且也要考虑工具的保值程度,在购买CG319x的时候我也综合考虑了这两方面,使用好的工具将精力投入到学习和创作中,我觉得付出再多的价钱它也是值得的,因为它会给你带来双倍的回报。通过这款显示器,我希望自己能够做到的是不断地去观察周围的自然世界,然后将其精细的展现在数字世界中,就犹如画家通过手中的画笔来展现他所看到的世界,这也是我的目标。

February 16, 2022

ACES 色彩管理

参考文章 https://docs.blender.org/manual/en/latest/render/color_management.html https://rmanwiki.pixar.com/display/REN24/Color+Management https://www.arri.com/en/learn-help/learn-help-camera-system/camera-workflow/image-science/aces https://github.com/colour-science/OpenColorIO-Configs https://acescentral.com/knowledge-base-2/using-aces-reference-images/ https://opencolorio.readthedocs.io/en/latest/configurations/aces_1.0.3.html 聊聊Gamma修正(Gamma Correction) Table[x^2.2, {x, 0, 1, 0.1}] {0., 0.00630957, 0.0289912, 0.0707403, 0.133209, 0.217638, 0.325037, \ 0.456263, 0.612066, 0.79311, 1.} Table[x, {x, 0, 1, 0.1}] {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.} Table[x^(1/2.2), {x, 0, 1, 0.1}] {0., 0.351119, 0.481157, 0.578533, 0.659353, 0.72974, 0.792793, \ 0.850335, 0.903545, 0.953238, 1.} #^2.2 & /@ Table[x^(1/2.2), {x, 0, 1, 0.1}] {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.} 初步了解下gamma函数,从上述的表达式中可以看出,通过gamma函数2.2得到的变换,我们可以通过反gamma函数 1/2.2,将输入和输出保持在线性关系上。 ...

January 30, 2022

Matte Painting 电影里的魔术师

摘要 这是一篇2020年的文章,当时记录了文章的标题之后,内容就没有提笔写了,现在趁着放假的时间对Matte Painting来做一个详细的描述,Matte Painting是一个神奇的领域,在这个领域里我们创造自己脑海里面的奇幻世界。 本文主要介绍Matte Painting的历史以及Matte Painting的技术。 历史 维基百科Matte Painting 遮景绘画是对风景,布景,以及远景的绘画表现,通常可以使得电影创作者可以在电影中创造出在拍摄地点不存在的环境,将绘画的图像与实拍镜头结合起来,根据艺术家和技术人员的技能水平,在最好的情况下,整个效果是无缝的,镜头不存在穿帮,如果不使用遮景绘画则整个拍摄过程将是非常昂贵的,甚至是无法拍摄完成的。 根据电影画面的需求,为了拍摄导演脑海中的画面,Matte Painter需要移除原场景中无关的物体,绘画出符合电影创作需求的画面,上图中,为了添加原拍摄画面背景中天空和房屋的细节,通过遮罩Mask(黑色部分)将不需要的场景遮挡住,然后通过绘画将细节缝合到实拍的场景中,从而达到最终的影片效果。 第一个在电影中使用遮景绘画的是早期美国电影导演Norman Dawn,他通过玻璃上作画来创造实拍无法完成的场景。 在玻璃上绘画是一件苦差事,摄影机三脚架固定在离被拍摄场景的固定距离处,距离根据取景的构图来确定,离摄影机不远的地方放置一块玻璃板,相机镜头,胶片,和灯光的组合要产生足够的景深,以保持近景画和背景景观能够完美的聚焦。为了创造绘画本身,Matte Painter通过相机取景器观察并指导助手,助手在玻璃上标出真实景物和绘画区域的融合点,然后艺术家用铅笔在玻璃上画出场景,不断的通过取景器检查绘画和背景元素的结合情况,所需的图像被直接画在玻璃上,通常是用油画颜料,使用与背景景物完美融合的色调。在绘制图画时,艺术家必须判断在一天要拍摄的场景中,光和影是如何变化的。并且在绘画完成之前,摄影机和玻璃,其中的任何一个有移动,就会产生绘画元素和背景偏离。于是,Norman Dawn发明了另外一项技术original negative matte painting,原始底片遮景绘画。 这里只涉及到在拍摄现场只曝光画面中的实景部分,留下一部分未曝光的画面,以便在后面添加绘画元素。与玻璃绘画技法类似,这次不是在玻璃上绘画,而是在玻璃的适当区域画上不透明的黑色以产生遮罩Matte,防止摄影机在拍摄时这些区域被曝光,Matte的边缘是精心设计的,以便它们遵循场景中的自然边界。 拍摄完成的负片会被保存起来,然后在艺术家工作室会有另外一台摄影机充当投影机将拍摄画面的其中一帧影片画面投射到绘景师的画板上,由于之前添加了黑色的遮罩,Matte Painter 会将有画面的部分在画板上涂黑,绘景师可以以此为基础开始在未曝光的遮罩区域进行绘画创作,这样的好处是Matte Painter不再需要现场绘景,在拍摄完成之后再进行绘景工作,为Matte Painter提供了便利。在艺术家完成创作之后,当绘画与原始底片上的实景拍摄能够完美契合时,原始负片就会被装入摄影机,进行二次曝光拍摄,原来的黑色未曝光区域就会被画板上的画替代,真实场景的拍摄画面因为已经被黑色的画板区域阻挡不会再被曝光。通过遮挡的二次曝光也就有了一个完整的场景底片,最后冲洗完成,整个绘制场景和真实场景也就完美结合在一起了。同时这种绘制方式也存在着缺陷,因为需要对底片进行两次曝光,存在着毁坏原始底片的风险。 在1920年中期,Bi-pack contact matte printing是在原负面绘景的基础上做出的改进,首先是实景拍摄,这个时候不需要在使用玻璃画板了,然后取拍摄底片中的一帧做为投射画面将其投射到艺术家工作室的玻璃画板上,Matte Painter在玻璃上开始绘画,完成后的绘画玻璃板放在白色幕布和摄影机之间,用灯打亮白色幕布,摄影机内部装有两卷胶片,一卷是未曝光的新胶片,一卷是原始拍摄的底片,现在重新拍摄工作室内的Matte场景,由于玻璃画板处于暗处,欠曝光,所以最后最后对原始底片进行拷贝时,新胶片上的底片会除去绘景部分,这也就形成了原负片绘景中的黑色区域,最后再对上面一部得到的新拷贝底片进行二次曝光,这时原来的白色幕布换成黑色,打亮绘景玻璃板,熄灭黑色幕布的背景灯,这样就得到了最终绘景和实际拍摄的合成底片。 后来背投绘景技术也开始流行起来,它已经非常接近现代数字绘景技术,一台摄影机进行场景投射,一台摄影机用于拍摄最终的画面。将原始拍摄的场景底片洗印出来,然后装入投射摄影机,将实景画面投射到幕布上,然后在投射摄影机的另一方向上放置一台用于最终拍摄的摄影机,在贴近幕布拍摄摄影机的一侧放入绘画玻璃板,然后绘景师在玻璃板上作画,最后使用摄影机重新拍摄,最终就合成了绘景之后的画面。这一种技法比Bi-pack contact matte printing技法而言,没有再对原始底片进行二次处理,避免了底片损坏从而不得不重新拍摄场景的高昂代价。 当摄影机产生运动时,由于绘景师绘制的图像是基于2D的,运动的画面会带来透视的错误,为了产生正确的透视,绘景师会采用实体模型的方式来进行实景拍摄, Peter Ellenshaw - Matte Painter movie 数字世界 现在我们将进入数字世界,在数字的世界里我们的工具库是丰富多彩的,通过数字合成程序,我们可以立即查看合成画面的效果,创建遮罩,将大量的实景照片应用于场景绘制中,创建真实场景的光影和3D模型,种种的技巧使得传统的绘景技术被Digital Matte Painting 数字绘景所取代。 关于Digital Matte Painting的技法,有兴趣想要学习DMP的爱好者,我推荐五门课程用于学习和研究: Concept Art for Production CGMA Matte Painting Master Class 3D Matte Painting Tutorial ...

January 25, 2022