2017年10月31日星期二

知乎大V ---kaiser正在女装直播Python



via 集智 - 知乎专栏 http://ift.tt/2A3FtSs
RSS Feed

RSS7

IFTTT

旷视完成 C 轮 4.6 亿美金融资,再次刷新人工智能创业公司融资纪录

2017 年 10 月 31 日,中国人工智能创业公司旷视科技 Face++ 宣布正式完成 C 轮 4.6 亿美金融资,本轮由中国国有资本风险投资基金(简称「国风投」)领投,蚂蚁金服、富士康集团联合领投,这一数字也打破了国际范围内人工智能领域融资纪录。本轮融资由 C1、C2 两轮构成,同时引入包括中俄战略投资基金、阳光保险集团、SK 集团等新的重要投资者,腾达资本作为本轮融资独家财务顾问。

来源:科技官网


旷视科技宣布的 C 轮 4.6 亿美金融资,是继 5 月依图科技 3.8 亿 C 轮融资、 7 月商汤科技 4.1 亿 B 轮融资之后,又一笔计算机视觉领域创业公司的大额融资。在该轮融资前,成立于2011年的旷视科技,曾先后于2013年获得创新工场百万美元 A 轮投资;2015 年获得来自创新工场、启明创投的 B 轮融资;2016 年,获得建银国际、富士康集团的 B+ 融资。


作为中国最早一批投身人工智能的公司,旷视科技依托独创深度学习引擎 MegBrain 实现了人工智能技术工程化、产品化和产业化。其核心技术不仅代表中国入选 MIT TR 全球十大突破技术,在 2017 年 MS COCO、Places 两项世界顶级竞赛中击败 Google、微软、Facebook,成为第一个获得多项冠军的中国企业。


在产业应用方面,旷视科技专注金融安全、城市大脑、手机智能三大领域,已完成包括 「刷脸支付」、「城市之眼」在内的多个人工智能产品世界级首发。据介绍,完成本轮融资后,旷视科技将会进一步强化在金融安全、城市安防领域的投入,加快在城市综合大脑及手机智能领域的技术落地。截至目前,旷视科技已经与十余个省会级城市实现了智慧城市战略合作,并与国内多家一线手机厂商在智能化方面达成了深度合作。


旷视科技 CEO 印奇表示,在赋能机器之眼的技术愿景下,构建城市大脑是旷视人未来的重要社会使命。

]]> 原文: http://ift.tt/2gYDCtm
RSS Feed

机器知心

IFTTT

从一坨「便便」说起,大V亲测iPhone X为什么这么贵!

编译 | 微胖 Rik R 张震

作者 | Steven Levy

来源 | WIRED


如何炫耀本年度最受期待的产品?我手握 iPhone X 犯了难。作为世界上第一批拿着 iPhone X 上街的人,事实上当我从兜里掏出手机,轻扫一眼将它从沉睡中唤醒时,自然引发人们的许多好奇。是的,就是那款经历百万次升级后,让你对还是新款的 iPhone 8 丧失兴趣的手机。恭维一番闪亮的屏幕和苗条的边框后,人们或许会问,「这货有什么本事?」使用之后,我得找到一些对得起 1 千美元价格的好答案。


或许我可以夸一夸让人炫目的高分辨率屏幕,或者来几张照片,让你们看看如何使用前置摄像头下的艺术人像模式。或者展示一下如何慢慢掌握一套新手势,重新编程 Home 键消失后的肌肉运动记忆。


不过最终,我还是选择从一坨屎的动图开始。


没错!就是这坨让人起鸡皮疙瘩的标志性表情符号——「便便」。iPhone X 的 iMessage 带有 12 个动态表情符号,每个都和这坨屎一样调皮可爱。写完一条短信,就可以选择其中一个动态表情,然后录制一段音频或者视频,手机会提取出你的面部表情和声音,把它们添加到动态表情上,就像 Ellen DeGeneres 配音的小丑鱼 Dory 一样。虽然听起来有点无聊(至少新奇感消失后会有点),但也有点意思,这些动态表情确实利用了 iPhone X 的最前沿的一些技术进步,它们让这款手机与众不同:面部识别、独特的传感器、先进的摄像头以及驱动图形处理和机器学习的强劲芯片。现在这些技术体现在将你的人格(persona)融合到一张机器人的脸上:小鸡、外星人、熊猫... 或者一陀排泄物。但是,这仅仅是开始。




便便动态表情


我在上星期二就收到了这部 iPhone。苹果让我提前一探究竟的部分原因在于,我是第一代 iPhone 的预发布评论员之一。从那时起,iPhone 几乎改变了我们与技术的关系。考虑到这段历史,我们都觉得,了解一下新款 iPhone 带给我的印象一定会非常有趣,苹果坚信,该产品将延续这段传奇的旅程,成为下一个里程碑。当然,苹果对于公司所发布的每一款 iPhone 都称其为最佳。但对于这款周年纪念版——伴随着批评者们对公司创新能力的怀疑——-苹果的目标更加高远。蒂姆·库克称 iPhone X 为「智能手机的未来」。


然而,第一代 iPhone 是一只黑天鹅。我的 iPhone 初体验充满了挑战和喜悦之情,我想知道这样一部被精心设计过的袖珍计算机会如何执行这么多任务,包括打电话(如果 AT&T 愿意的话)。第一代 iPhone 甚至改变了行业的游戏规则,设置了一个其他公司难以望其项背的标杆。那么,iPhone X 如何能够达到更高的水准,从而超越苹果之前的版本呢?毕竟,它只是一部智能手机。这就是我开始思考的问题,也是我如此关注动态表情的原因。


从打开手机盒的那一刻起,iPhone X 会令你连声称赞。它最大的变化正与你面对面:屏幕。我喜欢 iPhone Plus 和谷歌的安卓手机 Pixel 2 XL 那样大的显示屏,但它们实在太大了,装在口袋里感觉很笨重,打个电话就像把煎锅贴在脸上。iPhone X 的大屏布局更为紧凑——类似电话亭里装了一个全息电影系统(Cinerama)。虽然该手机本身只比 iPhone 8 大一点,但它的屏幕尺寸与 iPhone 8 Plus 差不多。再加上「超级视网膜(Super Retina)」功能(苹果营销人员炮制的另一个巴纳姆式名),该屏幕将说服买家,你们掏空了钱包买 iPhone X 是值得的。我发现无论是在看电影《大病(The Big Sick)》还是流媒体直播的足球比赛,或只是刷一刷 Instagram,这款显示屏都非常引人注目、令人愉悦,其视觉体验相比于老款 iPhone 7 有了巨大的提升。


将屏幕覆盖到整个手机表面的设计会带来一系列的影响。一些传感器、相机镜头、麦克风和扬声器都需要被设置在手机正面;苹果将它们线性封装在了手机上端的黑色缺口内——类似于新款 iPhone 的 51 区(美国内华达州南部林肯郡一个机密区域,译注)。(阴谋论者注意到:当你截图时,该缺口就会消失!)这是一次美学上的倒退(乔布斯会怎么说?),但你得习惯它,就像看电影时被前排家伙的脑袋挡住一块一样,你最终会忽略掉分散在这上面的注意力。


这样做还有一个影响: iPhone 界面再没有空间留给 Home 键了,这个自初版以来便不可或缺的按键,它的突然缺失是苹果的大动作之一,你需要进行一段时间的再学习来适应它。但这未必是坏事:任何不添加新改动的升级几乎都被认为不太引人注目。另外,苹果讨厌按键。不管怎样,苹果现在都要我们通过向上滑动来到达主屏幕(这很容易);但如果要到达已打开的 app 窗口页面,那么刷和停这两个动作就稍微会有一点麻烦;我花了一段时间才掌握了关闭 app 的诀窍——在众多代表 app 的小图标中按住你所选的那一个,然后它会生成一个负号,你就可以点击关闭它了。


当我试图在 iPad 上使用这些手势时,我就知道自己已经完全掌握了它们。哎呀,我的手指不再触摸 Home 键了,而是可怜巴巴地向上刷着,结果当然什么也没有发生。现在当我把相机对准脸部,期待 iPad 自动解锁时,这个场景就比较尴尬了。


这是 iPhone X 的另一个重大改变,它原先的 Touch ID 指纹识别被更换成了 Face ID:在仿生芯片和神经引擎的几亿次操作下,你的脸部特征将生成一个相貌密码。这有用吗?用处很大。它在抵御入侵者方面似乎很可靠。我已经测试了几个人,均验证失败,尽管这个测试样本(punims)数量远远小于苹果官方所说的发现误报所需的百万级别样本。我甚至献上了自己的脸部照片:也不行。它如何处理我自己的真实面孔是另一回事。有些时候,尽管我的脸部图像很清晰,iPhone X 也认不出我。(苹果告诉我,也许是因为我没有进行 iPhone X 所认为的目光接触。否则每次我的脸一出现在摄像头的视野范围内,手机就会自动启动,我不会想这样的,对吗?)


最后,我想出了一个对策:在唤醒我的 iPhone 时,我将其看作是是电影《Taxi Driver》中 De Niro 的镜子。你是在对我说话吗?好吧,这里只有我一个人!然后我会看着屏幕上那个小小的锁图标是否解锁成功。或者,另一个检测识别成败的好方法就是注意锁屏上出现的信息:「你有一个通知」来自 Facebook、Gmail 或别的什么地方。当你接通了你的 iPhone X 时,那些信息的实际内容就会显示出来。(这个功能——直到手机被解锁,否则私密的消息一直处于不可见状态——以前是可选项,现在是默认项。)无论如何,一旦掌握了使用窍门,我发现自己不用假想 De Niro 也能自然进行解锁,虽然我仍然有点困惑,有时它会直接回到我离开的页面,有时又让我往上刷。我真的很喜欢 iPhone X 上的 Apple Pay——双击侧边按钮然后使用面部识别,这令交易步骤更加清晰明白。 




摄像头也同样做了重大的升级。我不是一个特别喜欢拍照的人,所以我打算将这一问题留给其他人,让他们决定,相较于那些声称自己手机拍照一流的公司,iPhone X 的摄像头是不是更胜一筹。不过我可以表明,我所拍的照片看起来极为漂亮,当我在世贸中心一号大厦 Backchannel 办公室进行连拍时,长焦镜头所扑捉到的画面比我以前的手机所拍的画面更加清晰。然后,我又尝试了一下自拍的人像模式,同样是加的出色。


拍照我不是很感兴趣,但我对电池续航却极为热衷,对苹果所声称的 iPhone X 多两个小时的续航能力(相较于 iPhone 7),我是推崇备至。虽说我们有时间进行科学的评估,不过从日常傍晚时分的低电量仍能坚持到晚上充电来说,也间接证实了这一说法。此外,iPhone X 采用的是无线充电板进行充电的,当然,谁也不会仅仅因为不想采用数据线进行充电,而换个手机,那这样就太划不来了。


在使用了 iPhone X 几天之后,我开始有了更为清晰的想法。这种科技的进步不再只是表面的,而是走向了更深的层次,一个「全屏」手机,只需看一眼就可解锁,物理按键和充电线全都不再需要。十年后,当 iPhone 20(XX?)出来后,我们已经朝着智能手机后时代迈进,而 iPhone X 可能就是走向未来的一个中间节点。这就是为什么说,iPhone X 目前并不仅仅只是一个伟大的升级,是一个引领数字时代的设备。Tim Cook 的言论让我难以忘怀,他说,iPhone X 绝不仅仅只是另一个更新迭代。



来自 Snapchat 的 iPhone X 测试版


毫无意外,新手机技术表现中,最让人印象深刻的当属增强现实,在真实物理世界上又多了一层虚拟世界。从那些让人出色的动态表情中,即可略窥一二——比如用作演示的那坨便便,以及最初几个使用新手机摄像头的 AR 应用,还有面向开发者的苹果 ARKit。(其中一些 app,没有采用面部识别,所以也可以应用于 iPhone 8)


有一个名为 The Machines 的游戏,可以将餐桌完全变成超级英雄竞技的战场。宜家推出的一款 app,可以让你将虚拟的家具摆放在房间里。Insight Heart 更是一个让人窒息的体验,它可以让你对一个虚拟的人型放大,观察这颗巨大,跳动着的鲜红 3D 心脏,你可以把它放在起居室里,就如同恐怖片中的亡命徒那样。这是我在手机上看到过最魔幻,最先进的应用。新推出的 Snapchat 采用 Face ID 技术,可在人脸上呈现恐怖的面具和绘有图案的织物,让动态表情看起来更加的惊悚,怪异。


尽管下一代具有变革性的技术绝不会仅仅停留在虚拟现实层面,不过,可能所有人都会记得,iPhone X 开辟了 app 的新浪潮,让我们离实现技术的真正隐藏更近了一步。内置的机器学习,面部识别,更高分辨率的摄像头会让一些在以前看起来无法实现的应用成为可能。持续可靠的面部认证打开了 app 进行个性化定制的大门(可能也会让一些隐私倡导人士大为惊恐)。甚至是我目前认为极无用处的无线充电,当充电板遍布每家餐厅和每个会议室的时候,也将产生巨大的变革作用。


请大家切记,第一代 iPhone 虽然很不错,但它并未开始改变世界,而当苹果允许第三方软件开发者利用其内部结构,如摄像头、GPS 和其它传感器时,这种改变的作用才真正开始显现。虽然程度不会很大,一些改变可能就发生在 iPhone X 上。那些花大价钱买设备的人可能在今天只能体验到的屏幕和电池寿命的优点。但是,iPhoneX 要真正体现出它的卓越之处,可能要等到未来我们真正弄明白了它的实际用处的时候。


文章来源:


]]> 原文: http://ift.tt/2zkpu5v
RSS Feed

机器知心

IFTTT

积极重返中国的谷歌,这次瞄准了AI入口

编译 | 项文虎 张震

作者 | Mark Bergen, David Ramli

来源 | Bloomberg


退出中国市场七年之后,谷歌正在积极重返大陆。


不过,谷歌这次争夺的并不是搜索引擎市场,而是人工智能的入口。分析人士指出,这家互联网巨头正在向中国的学者和科技公司推荐人工智能框架 TensorFlow,此举也是为了打通与中国这个全世界最大的互联网市场之间的联系。与此同时,谷歌母公司 Alphabet 正在招聘更多人员,并在中国公司中寻求潜在的投资机会。


「对于任何一家公司而言,中国都意味着巨大的机遇,因为它是迄今为止最大的统一市场。」前任谷歌大中华区总裁李开复说道,「此外,海量的互联网用户和他们产生的数据,都可以用来改进产品的体验,特别是与人工智能相关的产品。」


对于谷歌而言,在中国的活跃程度与盈利数额没有太大关系。由于特殊政策,中国的开发者不太能访问谷歌的 AI 工具及云服务。此外,谷歌还面临着激烈的本土竞争,例如国内的百度正在开发适用于智能音箱、自动驾驶汽车等产品的底层工具,而且受到了一定程度的欢迎。


不过,谷歌显然有兴趣在中国重启业务。在 2010 年,谷歌撤出了大陆的搜索等业务后,多次尝试通过各种渠道重返大陆。这一尝试包括了发展移动应用商店,但总体而言收效甚微。如今,中国已经成为全球最大的智能手机市场,但是运行安卓软件的手机都无法提供谷歌服务。


谷歌 CEO Pichai 在最近的一次采访中表示:「我们将在中国投入更多,会思考如何更有效地参与到中国市场中,但我还不知道明确的答案。」谷歌发言人对此不予置评。


除了 AI 开发框架之外,谷歌还重点关注 AI 产业链上普通开发者,试图通过培训等方式加深他们对谷歌产品的依赖。这有点类似做商业软件的初创公司在产品大规模应用之前先进行内部小规模的测试。一旦这些工具开始流行,其他公司就会接受并依赖这项技术,付费获取全套服务。


上个月在北京和上海举办的 TensorFlow 开发者大会上,几位美国的谷歌工程师做了至少三份详细的报告。据知情人士透露,其中两个特邀嘉宾以及出席者被要求不录音、不拍照,甚至不能在博客上提及此事。谷歌说,它将向全世界推广 TensorFlow,而不仅仅是中国市场。


这一策略也符合谷歌的「AI First」战略,此举也是为了在屏幕键入之外打造语音等人机交互的新入口。谷歌自 2015 年起开始提供免费的 TensorFlow 服务,这些工具已经受到开发者的欢迎。今年,谷歌的云服务开始提供一款为 TensorFlow 定制的硬件入口。




尽管谷歌云服务在中国并不可用,但毕竟中国的 TensorFlow 开发社区一直在保持高速的增长,而且中国政府已经把发展人工智能作为国家的首要任务。数十家中国公司在积极部署机器学习系统,升级金融服务、进行人脸识别、以及操控无人机。


位于加州的机器学习初创公司 Matroid,在今年三月举办了一场 TensorFlow 会议并邀请到了谷歌传奇工程师 Jeff Dean 前来演讲。「演讲的视频和 PPT 在数小时后就被翻译成中文,在中国的社交网络,比如微信上,广泛流传。」Matroid 的 CEO Reza Zadeh 回忆说。


10 月 24 日,中国开发者江骏参加了谷歌在上海举办的一场 TensorFlow 会议。他是外卖平台饿了么的一名高级工程师,饿了么估值高达 60 亿美元,由阿里巴巴集团持股。大部分饿了么的系统是用 TensorFlow 搭建的。由于无法使用谷歌云服务,江骏的团队修改了一些 TensorFlow 工具的底层代码,从而在饿了么的国内服务器上运行这些工具。


「在过去,谷歌很少在中国开展活动,因为他们知道面临着一些限制。」这位工程师说道,「因此,当谷歌在中国引入 TensorFlow 的时,我认为这是很纯粹的活动,因为它并不能带来很大的营收。」不过,即使谷歌云服务在大陆开放,它还面临着高性价比的阿里云等竞争对手。


「其实所有的开发者都在期待谷歌引入更多的 TensorFlow 技术和产品,它们的云解决方案很酷,而且工具十分方便。」他说。


在北京经营播客创业公司 CastBox 的王小雨说,TensorFlow 对公司来说是一个至关重要的工具。如果开发自己的工具,需要一个由 20 名机器学习专家组成的团队,但是她转向了 TensorFlow,仅仅聘请一名博士生就可以达到相同的效果。如今,她的应用下载量超过 800 万,公司估值超过 6000 万美元。


为了使用 TensorFlow,CastBox.FM 在美国设立了服务器,用于中国以外用户的数据储存。王小雨和同事随后将这些信息传送到中国进行分析。这样满足了政府新出台政策,要求国内用户数据只能储存在本国的规定。对于其它拥有众多中国用户的初创公司来说,这样使用 TensorFlow,手段不可谓不新奇,王小雨这样说道。


谈到 TensorFlow 的受欢迎度,香港科技大学计算机科学教授杨强说:「中国的用户倾向于使用最好的,有最多人支持的东西。」


随着谷歌对中国的兴趣愈发浓厚,公司开始了招兵买马的活动。最近,它在中国的几个大城市公开进行 AI 人才的招募。同时,公司也开始将更多的员工安排到这些地方。据两名知情人士透漏,近几个月,谷歌企业研发团队的成员和 Alphabet 旗下的私募股权投资公司 CapitalG 已经在与中国的人工智能公司进行会面。其中一个人表示,这种举动只是一种「信息的收集」,两个投资机构最近均未有进入某一融资的意图。由于谈起公司的内部事宜,他们均不愿公开姓名。2015 年,谷歌投资了一家中国初创公司 Mobvoi,这家公司由谷歌前工程师创办,旨在将人工智能赋能的聊天机器人应用于手机、汽车以及其他设备。


谷歌最近在中国的这些举措,也可能会像它一前的努力一样,付之东流。因为中国对谷歌年初一件极具轰动效应的事件反映并不积极。由 Alphabet 的人工智能研究实验室 DeepMind 开发的人工智能系统完胜来自中国的围棋世界冠军,这一事件让中国的一些高级官员备受震动,政府开始对这一技术提供资金的支持,意图在这一科技占据主导地位。


但这并没有阻挡谷歌的脚步。据知情人士表示,该公司曾向阿里巴巴和腾讯推荐使用 TensorFlow,旨在通过中国顶级的科技巨头推广该软件在中国的使用。


截止到目前,根据自有服务器和外部资源的统计,TensorFlow 的下载量超过 790 万次,让公司惊喜不已。据一位长期在中国工作的投资人士 Ricky Wong 表示,通过对最早 5000 位采用该工具的开发人员的位置进行分析,他发现,这些开发者位于北京的人数甚至要多于硅谷。


早期的兴趣帮助了谷歌在中国站稳脚跟,但百度也在去年推出了自己的人工智能工具包 PaddlePaddle。据熟知谷歌内部数据的人士透露,在开发者中,这一年百度这一工具的增长速度已超过了谷歌的工具。不过百度拒绝对此事进行评论。


对于中国的一些人工智能研究者来说,百度的成功反映了人们对本土产品的忠诚度和对依赖国外工具的谨慎态度,罗切斯特大学人工智能专家 Jiebo Liu 说,他一直在专门研究中国问题。「他们在原型上可能会使用 ensorFlow,」他说。「但如果他们想要将某种东西放在自己的产品里,他们会选择自己做开发。」


]]> 原文: http://ift.tt/2xDW39Z
RSS Feed

机器知心

IFTTT

不给糖就捣乱!万圣节终极问题:AI抢来的糖算谁的?

整理 | 邱陆陆


对一个胆子不如针尖大的人来说,万圣节简直是个反人类节日。而在如今这个「世界充满 AI」的时代里,连吓唬人这项事业都有一堆专门的 AI 代劳了:帮你化妆的,想服装主题的,甚至是代写鬼故事。受惊体质的笔者决定今晚出门前提前做好功课,摸清这些 AI 的套路。


人脸关键点检测:无成本的角色扮演


虽然万圣节在国内还不是圣诞节、七夕一样的现(买)象(买)级(买)节日,但其黑暗华丽的基调和以捣乱为宗旨的行为准则还是受到了广大爱玩儿人士的追捧。但是 …… 画恐怖妆终究是件费时费力的事情,在这个以朋友圈点赞为主要社交形式的时代,僵坐 3 小时化个妆不如打开手机 3 秒钟拍张照。


美图公司旗下美图秀秀、美颜相机、美妆相机等产品纷纷推出了万圣节主题滤镜,幽灵、小丑、骷髅新娘,花样层出不穷,就是不知道建国之后不得成精的规定是否适用于这群幺蛾子……



这类滤镜技术的实现,主要和计算机视觉中的人脸检测(face detection),尤其是人脸关键点检测(key-points detection)有关。通过对人脸中的眼睛、眉毛、鼻子、嘴唇和脸周轮廓的定位(localization),进行滤镜/贴纸覆盖和建模。美图的人脸识别技术由旷视科技(Face++)提供,根据旷视的官网信息,关键点数目最多可达 106 个。




自然语言生成:要不咱俩合作写个鬼故事?教 AI 吓唬人这件事,麻省理工媒体实验室(MIT Media Lab)帮了不少忙。他们去年推出的「噩梦制造机」,使用了风格迁移算法和图像生成算法,能帮用户生成风格奇诡黑暗的建筑图片和血呼啦的人脸恐怖照片。为了读者朋友的心理健康着想,我们就只放一组建筑图片作为例子了。



今年他们变本加厉,瞄准时下大火的自然语言生成,拿 Reddit 里有十年历史的「今夜无眠」板块里的恐怖故事接龙内容做训练数据,教会了人工智能 Shelley 写鬼故事。Shelley 的名字来自英国女作家 Mary Shelley,她是拜伦勋爵的好友,也是恐怖小说和科幻小说的开山之作《科学怪人》(Frankenstein)的作者。




Shelley 有自己的推特账号,每个小时她都利用一个关键词作为随机种子开始自己的写作,任何人都能用回复的形式把鬼故事接下去,最长三条推文,用 tag # 该你了 作为结尾,Shelley 就会接着写下去。写出来的故事还是有模有样的,起码看得出训练数据质量颇高,行文的恐怖氛围渲染得十足浓郁。



关键词生成:AI 说,今年的万圣节服装主题不如试试「性感南瓜海盗」、「鲨鱼牛」或者「鬼怪酸黄瓜」一位训练神经网络爱好者、博客作者 Janelle Shane,经常给各种神奇的东西起名字。最近,她公开了自己的万圣节作品:帮你确定万圣节着装风格的 AI。她向网友征集了超过 4500 个着装灵感,丢给了神经网络,得到了一些相当有「创意」的答案。



由于大家提供的数据里含有大量的「性感」,因此神经网络有样学样,提供了一大波「性感的 XX」,例如性感的大黄蜂、性感的台灯,还有性感的南瓜海盗……


也有一些听起来还不错的点子,例如下图这个被网友实现了的「自由女(神)龙」。




当然了,这里神经网络采用的手法基本是「随机组合」和「蒙一个」,然而能给出人类意想不到的大胆组合,也算是一种成功?


AI 这些个套路,各位看官学会了吗?当然了,作为一名机器人粉+懒癌晚期,我最想要的还是能遍历各家大门替我要糖吃的,AI 机器人。糖算谁的其实不重要,毕竟他们要来了糖,自己也不能吃对不对!


]]> 原文: http://ift.tt/2yZjuyd
RSS Feed

机器知心

IFTTT

2017年10月30日星期一

RUDP传输那些事儿


袁荣喜,学霸君资深架构师,16年的C程序员,Golang爱好者,好求甚解,善于构建高性能服务系统和系统性能调优,喜好解决系统的疑难杂症和debug技术。早年痴迷于P2P通信网络、TCP/IP通信协议栈和鉴权加密技术,曾基于P2P super node技术实现了视频实时传输系统。2015年加入学霸君,负责构建学霸君的智能路由实时音视频传输系统和网络,解决音视频通信的实时性的问题。专注于存储系统和并发编程,对paxos和raft分布式协议饶有兴趣。尤其喜欢数据库内核和存储引擎,坚持不懈对MySQL/innoDB和WiredTiger的实现和事务处理模型进行探究。热衷于开源,曾为开源社区提过些patch。业余时间喜欢写技术长文,喜欢唐诗。


最近和很多实时音视频领域的朋友交流中都有谈论到RUDP(Reliable UDP),这其实是个老生常谈的问题,RUDP在很多著名的项目上都有使用,例如google的QUIC和webRTC。在UDP之上做一层可靠,很多朋友认为这是很不靠谱的事情,也有朋友认为这是一个大杀器,可以解决实时领域里大部分问题。作为在教育公司来说,学霸君在很多实时场景下确实使用RUDP技术来解决我们的问题,不同场景我们采用的RUDP方式也不一样。先来看看学霸君哪些场景使用了RUDP:


1) 全局250毫秒延迟的实时1V1答疑,采用的是RUDP + 多点relay智能路由方案。

2) 500毫秒1080P视频连麦互动系统,采用的是RUDP + PROXY调度传输方案。

3) 6方实时同步书写系统,采用的是RUDP+redo log的可靠传输技术。

4) 弱网WIFI下Pad的720P同屏传输系统,采用的是RUDP +GCC实时流控技术。

5) 大型直播的P2P分发系统,通过RUDP + 多点并联relay技术节省了75%以上的分发带宽。


涉及到实时传输我们都会先考虑RUDP,RUDP应用在学霸君核心传输体系的各个方面,但不同的系统场景我们设计了不同的RUDP方式,所以基于那些激烈的讨论和我们使用的经验我扒一扒RUDP。其实在实时通信领域存在一个三角平衡关系:成本,质量,时延三者的制约关系(图1)

 

图1


也就是说投入的成本、获得的质量和通信的时延之间是一个三角制约(LEQ)关系,所以实时通信系统的设计者会在这三个制约条件下找到一个平衡点,TCP属于是通过增大延迟和传输成本来保证质量的通信方式,UDP是通过牺牲质量来保证时延和成本的通信方式,所以在一些特定场景下RUDP更容易找到这样的平衡点。RUDP是怎么去找这个平衡点的,就要先从RUDP的可靠概念和使用场景来分析。

可靠的概念

在实时通信过程中,不同的需求场景对可靠的需求是不一样的,我们在这里总体归纳为三类定义:


  • 尽力可靠:通信的接收方要求发送方的数据尽量完整到达,但业务本身的数据是可以允许缺失的。例如:音视频数据、幂等性状态数据。
  • 无序可靠:通信的接收方要求发送方的数据必须完整到达,但可以不管到达先后顺序。例如:文件传输、白板书写、图形实时绘制数据、日志型追加数据等。
  • 有序可靠:通信接收方要求发送方的数据必须按顺序完整到达。

RUDP是根据这三类需求和图1的三角制约关系来确定自己的通信模型和机制的,也就是找通信的平衡点。 

UDP为什么要可靠

说到这里可能很多人会说:干嘛那么麻烦,直接用TCP好了!确实很多人也都是这样做的,TCP是个基于公平性的可靠通信协议,在一些苛刻的网络条件下TCP要么不能提供正常的通信质量保证,要么成本过高。为什么要在UDP之上做可靠保证,究其原因就是在保证通信的时延和质量的条件下尽量降低成本,RUDP主要解决以下相关问题:

  • 端对端连通性问题:一般终端直接和终端通信都会涉及到NAT穿越,TCP在NAT穿越实现非常困难,相对来说UDP穿越NAT却简单很多,如果是端到端的可靠通信一般用RUDP方式来解决,场景有:端到端的文件传输、音视频传输、交互指令传输等等。
  • 弱网环境传输问题:在一些WIFI或者3G/4G移动网下,需要做低延迟可靠通信,如果用TCP通信延迟可能会非常大,这会影响用户体验。例如:实时的操作类网游通信、语音对话、多方白板书写等,这些场景可以采用特殊的RUDP方式来解决这类问题。
  • 带宽竞争问题:有时候客户端数据上传需要突破本身TCP公平性的限制来达到高速低延时和稳定,也就是说要用特殊的流控算法来压榨客户端上传带宽,例如:直播音视频推流,这类场景用RUDP来实现不仅能压榨带宽,也能更好的增加通信的稳定性,避免类似TCP的频繁断开重连。
  • 传输路径优化问题:在一些对延时要求很高的场景下,会用应用层relay的方式来做传输路由优化,也就是动态智能选路,这时双方采用RUDP方式来传输,中间的延迟进行relay选路优化延时。还有一类基于传输吞吐量的场景,例如:服务与服务之间数据分发、数据备份等,这类场景一般会采用多点并联relay来提高传输的速度,也是要建立在RUDP上的(这两点在后面着重来描述)。
  • 资源优化问题:某些场景为了避免TCP的三次握手和四次挥手的过程,会采用RUDP来优化资源的占用率和响应时间,提高系统的并发能,例如:QUIC.

不管哪类场景,都是要保证可靠性,也就是质量,那么在UDP之上怎么实现可靠呢?答案就是重传。

 

重传模式

IP协议在设计的时候就不是为了数据可靠到达而设计的,所以UDP要保证可靠,就依赖于重传,这也就是我们通常意义上的RUDP行为,在描述RUDP重传之前先来了解下RUDP基本框架,如图:

 

图2


RUDP在分为发送端和接收端,每一种RUDP在设计的时候会做不一样的选择和精简,概括起来就是图中的单元。RUDP的重传是发送端通过接收端ACK的丢包信息反馈来进行数据重传,发送端会根据场景来设计自己的重传方式,重传方式分为三类:定时重传,请求重传和FEC选择重传。

  • 定时重传

定时重传很好理解,就是发送端如果在发出数据包(T1)时刻一个RTO之后还未收到这个数据包的ACK消息,那么发送就重传这个数据包。这种方式依赖于接收端的ACK和RTO,容易产生误判,主要有两种情况:

  1. 对方收到了数据包,但是ACK发送途中丢失。
  2. ACK在途中,但是发送端的时间已经超过了一个RTO。

所以超时重传的方式主要集中在RTO的计算上,如果你的场景是一个对延迟敏感但对流量成本要求不高的场景,就可以将RTO的计算设计比较小,这样能尽最大可能保证你的延时足够小。例如:实时操作类网游、教育领域的书写同步,是典型的用expense换latency和Quality的场景,适合用于小带宽低延迟传输。如果是大带宽实时传输,定时重传对带宽的消耗是很大的,极端情况会用20%的重复重传率,所以在大带宽模式下一般会采用请求重传模式。

 

  • 请求重传

请求重传就是接收端在发送ACK的时候携带自己丢失报文的信息反馈,发送端接收到ACK信息时根据丢包反馈进行报文重传。如下图:

 

图3


这个反馈过程最关键的步骤就是回送ACK的时候应该携带哪些丢失报文的信息,因为UDP在网络传输过程中会乱序会抖动,接收端在通信的过程中要评估网络的jitter time,也就是rtt_var(RTT方差值),当发现丢包的时候记录一个时刻t1,当t1 + rtt_var < curr_t(当前时刻),我们就认为它丢失了,这个时候后续的ACK就需要携带这个丢包信息并更新丢包时刻t2,后续持续扫描丢包队列,如果他t2 + RTO

  • FEC选择重传

除了定时重传和请求重传模式以外,还有一种方式就是以FEC分组方式选择重传,FEC(Forward Error Correction)是一种前向纠错技术,一般是通过XOR类似的算法来实现,也有多层的EC算法和raptor涌泉码技术,其实是一个解方程的过程。应用到RUDP上示意图如下:

 

图4

在发送方发送报文的时候,会根据FEC方式把几个报文进行FEC分组,通过XOR的方式得到若干个冗余包,然后一起发往接收端,如果接收端发现丢包但能通过FEC分组算法还原,就不向发送端请求重传,如果分组内包是不能进行FEC恢复的,就请求想发送端请求原始的数据包。FEC分组方式适合解决要求延时敏感且随机丢包的传输场景,在一个带宽不是很充裕的传输条件下,FEC会增加多余的冗余包,可能会使得网络更加不好。FEC方式不仅可以配合请求重传模式,也可以配合定时重传模式。

 

  • RTT与RTO的计算

在上面介绍重传模式时多次提到RTT、RTO等时间度量阐述,RTT(Round Trip Time)即网络环路延时,环路延迟是通过发送的数据包和接收到的ACK包计算了,示意图如下:

 

图5

RTT = T2 - T1

这个计算方式只是计算了某一个报文时刻的RTT,但网络是会波动的,这难免会有噪声现象,所以在计算的过程中引入了加权平均收敛的方法(具体可以参考RFC793

SRTT = (α * SRTT) + (1-α)RTT

这样可以求得新逼近的SRTT,在公式总一般α=0.8,确定了SRTT,下一步就是计算RTT_VAR(方差),我们设RTT_VAR = |SRTT – RTT|

那么SRTT_VAR =(α * SRTT_VAR) + (1-α) RTT_VAR

这样可以得到RTT_VAR的值,但最终我们是需要去顶RTO,因为涉及到报文重传,RTO就是一个报文的重传周期,从网络的通信流程我们很容易知道,重传一个包以后,如果一个RTT+RTT_VAR之后的时间还没收到确定,那我们就可以再次重传,则可知:

RTO = SRTT + SRTT_VAR

但一般网络在严重抖动的情况下还是会有较大的重复率问题,所以:

RTO = β*(SRTT + RTT_VAR)

1.2 <β<2.0,可以根据不同的传输场景来选择β的值。

 

RUDP是通过重传来保证可靠的,重传在三角平衡关系中其实是用Expense和latency来换取Quality的行为,所以重传会引来两个问题,一个是延时,一个是重传的带宽,尤其是后者,如果控制不好会引来网络风暴,所以在发送端会设计一个窗口拥塞机制了避免并发带宽占用过高的问题。

 

窗口与拥塞控制

  • 窗口

RUDP需要一个收发的滑动窗口系统来配合对应的拥塞算法来做流量控制,有些RUDP需要严格的发送端和接收端的窗口对应,有些RUDP是不要收发窗口严格对应。如果涉及到可靠有序的RUDP,接收端就要做窗口就要做排序和缓冲,如果是无序可靠或者尽力可靠的场景,接收端一般就不做窗口缓冲,只做位置滑动。先来看收发窗口关系图:

 

图6


上图描述的是发送端从发送窗口中发了6个数据报文给接收端,接收端收到101,102,103,106时会先判断报文的连续性并滑动窗口开始位置到103,,然后每个包都回应ACK,发送端在接收到ACK的时候,会确认报文的连续性,并滑动窗口到103,发送端会再判断窗口的空余,然后填补新的发送数据,这就是整个窗口滑动的流程。这里值的一提的是在接收端收到106时的处理,如果是有序可靠,那么106不会通知上层业务进行处理,而是等待104,105。如果是尽力可靠和无序可靠场景,会将106通知给上层业务先进行处理。在收到ACK后,发送端的窗口要滑动多少是由自己的拥塞机制定的,也就是说窗口的滑动速度受拥塞机制控制,拥塞控制实现要么基于丢包率来实现,要么基于双方的通信时延来实现,下面来看几种典型的拥塞控制。

 

  • 经典拥塞算法

TCP经典拥塞算法分为四个部分:慢启动、拥塞避免、拥塞处理和快速恢复,这四个部分都是为了决定发送窗和发送速度而设计的,其实就是为了在当前网络条件下通过网络丢包来判断网络拥塞状态,从而确定比较适合的发送传输窗口。经典算法是建立在定时重传的基础上的,如果RUDP采用这种算法来做拥塞控制,一般的场景是为了保证有序可靠传输的同时又兼顾网络传输的公平性原则。先逐个来解释下这几部分

慢启动(slow start)

当连接链路刚刚建立后,不可能一开始将cwnd设置的很大,这样容易造成大量重传,经典拥塞里面会在开始将cwnd = 1,让后根据通信过程的丢包来逐步扩大cwnd来适应当前的网络状态,直到达到慢启动的门限阈值(ssthresh),步骤如下:

1) 初始化设置cwnd = 1,并开始传输数据

2) 收到回馈的ACK,会将cwnd 加1

3) 当一个发送端一个RTT后且未发现有丢包重传,就会将cwnd = cwnd * 2.

4) 当cwnd >= ssthresh或发生丢包重传时慢启动结束,进入拥塞避免状态。

拥塞避免

当通信连接结束慢启动后,有可能还未到网络传输速度的上线,这个时候需要进一步通过一个缓慢的调节过程来进行适配。一般是一个RTT后如果未发现丢包,就是将cwnd = cwnd + 1。一但发现丢包和超时重传,就进入拥塞处理状态。

拥塞处理

拥塞处理在TCP里面实现很暴力,如果发生丢包重传,直接将cwnd = cwnd / 2,然后进入快速恢复状态。

快速恢复

快速恢复是通过确认丢包只发生在窗口一个位置的包上来确定是否进行快速恢复,如图6中描述,如果只是104发生了丢失,而105,106是收到了的,那么ACK总是会将ack的base = 103,如果连续3次收到base为103的ACK,就进行快速恢复,也就是将并立即重传104,而后如果收到新的ACK且base > 103,

将cwnd = cwnd + 1,并进入拥塞避免状态。

经典拥塞控制是基于丢包检测和定时重传模式来设计的,在三角平衡关系中是一个典型的以Latency换取Quality的案例,但由于其公平性设计避免了过高的Expense,也就会让这种传输方式很难压榨网络带宽,很难保证网络的大吞吐量和小时延。

 

  • BRR拥塞算法

对于经典拥塞算法的延迟和带宽压榨问题google设计了基于发送端延迟和带宽评估的BBR拥塞控制算法。这种拥塞算法致力于解决两个问题:

1. 在一定丢包率网络传输链路上充分利用带宽

2. 降低网络传输中的buffer延迟

BBR的主要策略是就是周期性通过ACK和NACK返回来评估链路的min_rtt和max_bandwidth。最大吞吐量(cwnd)的大小就是:

cwnd = max_bandwidth / min_rtt

传输模型如下:

 

图7

BBR整个拥塞控制是一个探测带宽和Pacing rate的状态,有是个状态:

Startup:启动状态(相当于慢启动),增益参数为max_gain  = 2.85

DRAIN:满负荷传输状态

PROBE_BW:带宽评估状态,通过一个较小的BBR增益参数来递增(1.25)或者递减(0.75).

PROBE_RTT:延迟评估状态,通过维持一个最小发送窗口(4个MSS)进行的RTT采样。

那么这几种状态是怎么且来回切换的呢?以下是QUIC中BBR大致的步骤如下:

1) 初始化连接时会将设置一个初始的cwnd = 8, 并将状态设置Startup

2) 在Startup下发送数据,根据ACK数据的采样周期性判断是否可以增加带宽,如果可以,将cwnd = cwnd *max_gain。如果时间周期数超过了预设的启动周期时间或者发生了丢包,进行DRAIN状态

3) 在DRAIN状态下,如果flight_size(发送出去但还未确认的数据大小) >cwnd,继续保证DRAIN状态,如果flight_size

4) 在PROBE_BW状态下,如果未发生丢包且flight_size cwnd,将cwnd = cwnd * 1.25,如果发生丢包,cwnd = cwnd * .075

5) 在Startup/DRAIN/PROBE_BW三个状态中,如果持续10秒钟的通信中没有出现RTT <= min_rtt,就会进入到PROBE_RTT状态,并将cwnd = 4 *MSS

6) 在PROBE_RTT状态,会在收到ACK返回的时候持续判断flight_size >= cwnd并且无丢包,将本次统计的最小RTT作为min_rtt,进入Startup状态。

BBR是通过以上几个步骤来周期性计算cwnd,也就是网络最大吞吐量和最小延迟,然后通过pacing rate来确定这一时刻发送端的码率,最终达到拥塞控制的目的。BBR适合在随机丢包且网络稳定的情况下做拥塞,如果在网络信号极不稳定的WIFI或者4G上,容易出现网络泛洪和预测不准的问题,BBR在多连接公平性上也存在小RTT的连接比大RTT的连接更吃带宽的情况,容易造成大RTT的连接速度过慢的情况。BBR拥塞算法在三角平衡关系中是采用Expense换取latency和Quality的案例。

 

  • webRTC gcc

说到音视频传输就必然会想到webRTC系统,在webRTC中对于视频传输也实现了一个拥塞控制算法(gcc),webRTC的gcc是一个基于发送端丢包率和接收端延迟带宽统计的拥塞控制,而且是一个尽力可靠的传输算法,在传输的过程中如果一个报文重发太多次后会直接丢弃,这符合视频传输的场景,借用weizhenwei同学一张图来看个究竟:

 

图8

gcc的发送端会根据丢包率和一个对照表来pacing rate,当loss < 2%时,会加大传输带宽,当loss >=2% &&loss <10%,会保持当前码率,当loss >=10%,会认为传输过载,进行调小传输带宽.

gcc的接收端是根据数据到达的延迟方差和大小进行KalmanFilter进行带宽逼近收敛,具体的细节不介绍了,请查看http://ift.tt/2gFYhQL

这里值得一说的是gcc引入接收端对带宽进行KalmanFilter评估是一个非常新颖的拥塞控制思路,如果实现一个尽力可靠的RUDP传输系统不失为是一个很好的参考。但这种算法也有个缺陷,就是在网络间歇性丢包情况下,gcc可能收敛的速度比较慢,在一定程度上有可能会造成REMB很难反馈给发送端,容易出现发送端流控失效。gcc在三角平衡关系算一个以Quality和Expense换取latency的案例。

 

  • 弱窗口拥塞机制

其实在很多场景是不用拥塞控制或者只要很弱的拥塞控制即可,例如:师生双方书写同步、实时游戏,因为本身的传输的数据量不大,只要保证足够小的延时和可靠性就行,一般会采用固定窗口大小来进行流控,我们在系统中一般采用一个cwnd =32这样的窗口来做流控,ACK确认也是通过整个接收窗口数据状态反馈给发送方,简单直接,也很容易适应弱网环境。

 

传输路径

RUDP除了优化连接、压榨带宽、适应弱网环境等以外,它也继承了UDP天然的动态性,可以在中间应用层链路上做传输优化,一般分为多点串联优化和多点并联优化。我们具体来说一说。

  • 多点串联relay

在实时通信中一些对业务场景对延迟非常敏感,例如:实时语音、同步书写、实时互动、直播连麦等,如果单纯的服务中转或者P2P通信,很难无法满足其需求,尤其是在物理距离很大的情况下。在解决这个问题上SKYPE率先提出全球RTN(实时多点传输网络),其实就是在通信双方之间通过几个relay节点来动态智能选路,这种传输方式很适合RUDP,我们只要在通信双方构建一个RUDP通道,中间链路只是一个无状态的relay cache集合,relay与relay之间进行路由探测和选路,以此来做到链路的高可用和实时性。如下图:

 

图9

通过多点relay来保证rudp进行传输优化,这类场景在三角平衡关系里是典型的用expense来换取latency的案例。

 

  • 多点并联relay

在服务与服务进行媒体数据传输或者分发过程中,需要保证传输路径高可用和提高带宽并发,这类使用场景也会使用传输双方构建一个RUDP通道,中间通过多relay节点的并联来解决,如下图所示:

 

图10


这种模型需要在发送端设计一个多点路由表探测机制,以此来判断各个路径同时发送数据的比例和可以用性,这个模型除了链路备份和增大传输并发带宽外,还有个辅助的功能,如果是流媒体分发系统,我们一般会用BGP来做中转,如果节点与节点之间可以直连,这样还可以减少对BGP带宽的占用,以此来减少成本问题。

 

后记

到这里RUDP的介绍也就结束了,说了些细节和场景相关的事,也算是个入门级的科普文章。RUDP的概念从提出到现在也差不多有20年了,很多从业人员这希望通过一套完善的方案来设计一个通用的RUDP,我个人觉得这不太可能,就算设计出来了,估计和现在TCP差不多,这样做的意义不大。RUDP的价值在于根据不同的传输场景进行不同的技术选型,可能选择宽松的拥塞方式、也可能选择特定的重传模式,但不管怎么选,都是基于Expense(成本)、Latency(时延)、Quality(质量)三者之间来权衡,通过结合场景和权衡三角平衡关系RUDP或许能帮助开发者找到一个比较好的方案。


]]> 原文: http://ift.tt/2igC4Yl
RSS Feed

机器知心

IFTTT

JavaScript 之父联手近万名开发者集体讨伐 Oracle:给 JavaScript 一条活路吧!- InfoQ 每周精要848期

「每周精要」 NO. 848 2024/09/21 头条 HEADLINE JavaScript 之父联手近万名开发者集体讨伐 Oracle:给 JavaScript 一条活路吧! 精选 SELECTED C++ 发布革命性提案 "借鉴"Rust...