您的位置首页  科技生活  行业

Q新闻丨Google发布新的图像压缩技术最高可节省75%带宽;Java 9引入了

  • 来源:互联网
  • |
  • 2017-02-08
  • |
  • 0 条评论
  • |
  • |
  • T小字 T大字

  编辑|小智

  本周要闻:Google发布新的图像压缩技术,最高可节省75%带宽;Java9引入了aot编译方式,能够将class文件直接编译成可执行二进制文件;人工智能将如何帮助软件团队?

  Google发布新的图像压缩技术,最高可节省75%带宽

  在社交网络上,每天都有难以计数的图片被人们分享、存储。但有一个现实的问题是,大量的照片由于网络限制被人为压缩降低了画质。

  而Apple在2010年的iPhone4S推出了“视网膜”的概念后,各大手机商也推出了2K的手机,显示器也逐步走向了4K。但是高清显示一直缺乏内容,成了该行业发展的痛点。因为超分辨率技术受成本、硬件限制,未能广为普及。将低分辨率图片转化为高清版本,并可在多种设备上查看和分享,成了市场巨大的需求。

  如今,Google为了解决这一痛点,发布了黑科技,让人们看到了希望。

  Google发布RAISR技术

  不久前,Google刚刚发布了一种名为RAISR(RapidandAccurateSuperImageResolution,意为“快速、精确的超级图像分辨率技术”)的图像压缩技术,旨在保存宝贵的数据,而不牺牲照片质量;并在带宽受限的移动设备上提供清晰锐利的图像。

  

  iOS端早有集成

  早在2016年12月,Google在自家的iOS应用MotionStills就已经集成了RAISR技术,这其实才是RAISR的首次亮相。彼时,RAISR来改善视频的分辨率,可以自动锐化用户导出的每段视频。

  不过,目前尚不清楚具体何时会在iOS移动设备上为用户访问Google+时提供RAISR技术。Nack表示,Google将在未来几周内普及到iOS领域上。

  下一个应用会是?

  如果用户不想仅仅在Google+中使用RAISR,还得等一段时间。Google计划在未来几个月内将RAISR逐步部署到更多的应用,比如GooglePhotos。

  RAISR实现原理:机器学习、无混叠效应

  Google的这项黑技术利用了机器学习,它的效果能达到甚至超过现在的超分辨率解决方案,同时速度提升10~100倍,还能够在普通的移动设备上运行。Google还声称,他们的技术能够避免在重建低分辨率图像中产生混叠效应(aliasingartifacts)。

  在“填充”图片时,传统的升采样技术是通过周围已有的像素值计算需要添加的新像素值。这些方法速度很快,但它们并不是在放大图像中显示生动的细节的最好方法。如下所示图片,左图是原始图片,右图是经升采样处理后的图片,看起来很模糊,远不能称之为画质提升。

  RAISR与它们不同之处在于,它采用了机器学习,用一对低品质和高分辨率图片进行训练的系统,因此它知道如何重建应用于低分辨率图片中的每个像素的过滤器,生成媲美原始图片的细节。RAISR选择最佳方式来增强低分辨率照片中的每个“像素邻域”,以创建更多的分辨率。

  换句话说,RAISR使用它从其他照片中学到的东西,以便有根据地猜测每个丢失像素区域中的高分辨率版本应该是什么样子。

  Google表示:“当这些过滤器应用于较低分辨率的图像时,它们会重现出相当于原始分辨率的细节,这大幅优于现行、双三(Bicubic)、兰索斯(Lancos)的解析方式。”

  左边为Bicubic处理的图片,右边为RAISR处理的图片。

  此外,RAISR可以消除照片中的混叠效应,如莫尔条纹(Moirepatterns)和锯齿,恢复照片的原始结构。

  如下图,左边是低分辨率的原始图片,3和5都有很明显的莫尔条纹,这就是混叠效应;右图是用RAISR算法恢复的图像。

  左图为原始图像,右图为RAISR消除莫尔条纹的图片

  Google声称,这种技术在未来,除了放大手机上的图片,还可以在低分辨率和超高清捕捉、存储、传输图像,使用更少的移动网络数据和存储空间,而且不会产生肉眼能观察到的画质降低。

  本文编译:刘志勇

  Java9引入AOT编译方式

  Java9引入了aot编译方式,能够将class文件直接编译成可执行二进制文件。目前Java9的earlyaccess版本已经提供了编译工具,让我们来看看它的功能吧。

  注意:按照JEP295描述,目前版本的AOT,仅支持64位Linux操作系统。

  jaotc使用

  首先需要下载最新的Java9(JDK),本文编写时,最新版本是Build152。下载好的JDK只需要解压即可使用,特别注意使用前设置好PATH和JAVA_HOME两个环境变量,避免和机器上已经安装的JDK混淆。笔者安装到了$HOME/bin/jdk-9,并设置了:

  exportPATH=~/bin/jdk-9/bin:$PATHexportJAVA_HOME=~/bin/jdk-9

  需要使用jaotc,首先需要有个测试类,首先从HelloWorld开始:

  代码非常简单,但是在执行jaotc之前,还需要将其编译成class文件,直接使用javac即可:

  $javacHelloWorld.java

  执行成功之后,会生成HelloWorld.class文件。此时直接使用java命令,已经可以正常运行这个类:

  $javaHelloWorldHelloWorld!

  这时,就可以基于这个class文件,通过jaotc命令将其编译成二进制文件了。

  ng.UnsatisfiedLinkError:/home/babydragon/bin/jdk-9/lib/libjelfshim.so:libelf.so.1:无法打开共享对象文件:没有那个文件或目录的错误,

  是因为jaotc需要依赖libelf动态链接库来创建elf文件(最终生成的libHelloWorld.so文件是一个静态链接的elf文件)。笔者使用的是Gentoo系统,需要安装dev-libs/elfutils包,以提供libelf.so这个动态连接库。安装之后可以通过ldd命令进行确认:

  前面通过jaotc命令成功生成了libHelloWorld.so。虽然命令里面参照JEP295的示例将生成的文件后缀设置成了so,但如果使用ldd命令查看,会发现它其实是一个静态链接库:

  $lddlibHelloWorld.sostaticallylinked

  通过nm命令,可以看见代码段中的函数入口:

  最后,需要执行时需要通过参数-XX:AOTLibrary参数指定需要加载的经过aot预编译好的共享库文件:

  注意:虽然已经将整个HelloWorld类都通过jaotc编译成共享库文件,运行时仍然需要依赖原有的HelloWorld.class文件。

  此时执行的输出,和之前不使用AOT的输出完全相同。

  来把大的——将java.base模块编译成AOT库

  JEP295中已经说明,在Java9初始发布的时候,只保证java.base模块可以被编译成AOT库。

  继续参照JEP295,创建java.base-list.txt文件,内容主要是排除一些编译有问题的方法,具体内容参照原文。

  然后执行命令:

  完成之后,就可以使用AOT版本的java.base模块:

  同样,针对AOT,jvm也新增了参数打印哪些方法是通过加载AOT预编译库执行。

  输出可以和不使用java.base的AOT进行比较,发现不使用java.base的AOT库,只能会加载libHelloWorld.so中对应的方法。

  AOT可能带来的好处,是JVM加载这些已经预编译成二进制库之后,可以直接调用,而无需再将其运行时编译成二进制码。理论上,AOT的方式,可以减少JIT带来的预热时间,减少Java应用长期给人带来的“第一次运行慢”感觉。

  不过,本文使用的HelloWorld过于简单,无法通过对比得出AOT是否可以减少JVM初始化时间。笔者尝试对一个小型springboot应用进行AOT化,但是springboot框架本身无法在Java9中运行。同时直接对spring-core的jar包执行jaotc也因为各种依赖问题而失败。

  经过各种尝试,目前Java9的AOT功能还处于很初步的阶段:

  期待Java9正式发布的时候,能够对AOT有更好的支持。

  本文作者:金灵杰

  人工智能将如何帮助软件团队

  在未来5-10年内你的工作仍然是你自己在做,还是一个机器人在帮你做?

  随着人工智能(以下简称AI)能力越来越大并被广泛利用,知识工作者开始问自己这个问题。Atlassian的创始人和首席执行官MikeCannonBrookes说过,AI将对团队生产力的未来发挥重大作用。现在,让我们来看看是为什么。

  AI的突飞猛进

  美国美林(MerrillLynch)银行预测,在未来的十年里将会有9万亿美元的AI业务会影响知识性工作。麦肯锡(McKinsey)全球研究所说,AI正以“3000次工业革命影响”的速度在推动着社会的转型。CBInsights分析显示AI公司的投入资金正在逐年增长。总体趋势和现实结果表明,AI和机器人不能再被当成空谈而忽略。

  我们不应该惧怕AI,它带给我们的机会是去拥抱它的潜力,让我们的组织拥有全新的运作方式,使我们能够在更高价值的活动中应用自己的知识。

  了解AI业务

  我们有两个基本的途径来了解AI的世界:通用人工智能(GeneralAI或AGI)和狭义人工智能(NarrowAI)。狭义AI指的是利用机器来智能地解决具体问题,而通用AI是指一台或一组机器拥有人类完整的认知能力。与科幻电影描绘不同的是,通用AI还有很长的路要走。

  通用AI面临的挑战

  通用AI的主要挑战是,我们并不完全了解什么是意识。当代哲学家们的思想已经超越了笛卡尔的身心观,认识到意识是由我们的大脑所产生。但是,像神经科学家或其他一些人一样,我们仍然不理解它是什么,更不用说如何创造它了。

  我们没有硬件,但是:未来学家RayKurtzweil预测说模拟人类智慧所需要的硬件在2020年就能以合适的价格出现。

  我们没有软件,但是:AlphaGo在复杂的游戏中获得胜利,这件事令人印象深刻,还有的计算机对语言的理解比人类还准确,听起来都棒极了,而这些只是在复杂难题里需要解决的一些小碎片而已。

  举个例子,OpenWorm项目已经开始模拟像蠕虫一样简单的生物。尽管对蠕虫的了解(蠕虫模拟)逐渐深入,但还是存在很多问题,比如怎样创造它,而造出来的蠕虫智力很有限。所以还需要很多研究时间,直到最后不得不考虑AI的奇点是否出现,或者像终结者(Terminator)粉丝一样担心天网(Skynet)问题。

  狭义AI

  另一方面,狭义AI已经对我们带来了冲击,并且迅速蔓延到很多领域。多年来它一直在影响我们的日常生活,比如股票购买得到一些建议,或者亚马逊上被推荐一本书。狭义AI一直给我们提供有价值的东西,它通过大而结构化的数据集来解决那些有明确的结果或规则的问题,现在AI的发展已经超越了这些领域。

  AI、机器人、团队和管理

  机器人和AI辅助并参与团队活动的可能性越来越大,背后的关键驱动力是:

  数据是可访问的

  软件的构造过程中,会产生开发任务、程序问题、日志、源代码、测试结果等等很多信息,所有数据会存放在系统的某些地方。利用API、插件、基于云的方式,可以让系统间的这些数据访问越来越方便。

  数据杂乱

  团队使用的数据是杂乱的,这不是任何人的错,这是由工作的性质所决定。当一个团队在运转时(总是这样的),由于时间限制和发布压力,很难找到时间来清理数据。但是因为非结构化数据处理能力的进步,如今这些不一定是个问题了。

  数据足够大

  相对于亚马逊、脸谱、Google庞大的数据集,大多数团队的数据量是非常小的。一个团队通常只有几十或几百个任务,较大一点的甚至有几千个任务,但从统计意义上来说,还是很小。而小规模数据集上的算法优化,使得狭义AI能为团队带来有意义的结果。

  团队过程标准化

  世界各地的、不同组织的大多数团队,它们的工作过程和方法在本质上是相似的。普遍存在的敏捷软件开发团队就是这方面的一个例子。狭义AI的含义是,对很多人而言它容易使用并且更有价值。通过标准化,意味着有机会将跨组织的数据合并成更大的数据集。

  生产力提高降低误差

  算法不断在发展,虽然仍然存在误差。但是通过成本的降低、速度的提高、或者理解的深入,发展所带来的好处都要大于那些缺陷、误差以及一些聊天机器人目前在狭义AI上的烦恼。

  结论

  AI能有助于团队发展,这样团队效率会更高,他们会做出更好的决策,能够专注于更高价值的活动。所以不要害怕机器人,让它们成为你日常工作的一部分,来完成更多的事情。

  本文翻译已获授权,原文链接:

  搜狐不良信息举报邮箱:

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186
友荐云推荐