摘要
在9月21日结束的Google开发者大会上,闲鱼团队作为Google的合作伙伴参加了此次会议,不仅在Flutter方面与谷歌以及国内开发者进行了深度交流,同时闲鱼技术开发专家陈永新作为本次大会的演讲嘉宾,分享了闲鱼基于TensorFlow Lite的端计算应用实践。在闲鱼的展台上还展示了闲鱼基于TensorFlow的黑科技:UI2Code,吸引了络绎不绝的开发者前来围观。
TensorFlow 趋势
TensorFlow自2015年发布以来,已经成为世界上使用最广泛的机器学习框架,满足了广大的用户和用例需求。在此期间,TensorFlow随着计算硬件、机器学习研究和商业部署的快速发展而得到进步。
为了反映这些快速变化,本次的谷歌开发者大会介绍了TensorFlow和lite的一些新特性,重点关注易用性。以下是TensorFlow的新特性:
1.Eager execution,动态图机制,允许直接执行图,将更方便调试。
也将会是未来TensorFlow 2.0版本的默认开启选项。它将用户对编程模型的期望与TensorFlow更好地结合起来,并且使TensorFlow更易于学习和应用。
2.通过交换格式的标准化和API的一致性,支持更多平台和语言,并改善这些组件之间的兼容性和奇偶性。
3.将删除已弃用的API并减少重复数量,避免给用户造成混淆。
4.TensorFlow Lite转换工具添加post-training模型量化(post-training quantization)。
对于相关的机器学习模型,这可以实现最多4倍的压缩和3倍的执行速度提升。此外,模型主要由卷积层组成,执行速度提高10-50%的同时减少了内存和计算需求,预计大多数模型的功耗也会降低。
5.TensorFlow Lite从contribute目录移动到主目录,正式加入TensorFlow主工程。
TensorFlow Lite在闲鱼客户端上的应用
闲鱼客户端如何应用TensorFlow Lite
闲鱼自研了一个基于TensorFlow Lite的框架,主要对三方面进行了定制:拓展性、安全性和动态化。
1.拓展性:在拓展性方面利用TensorFlow Lite的自定义OP,将我们所需的一些数据预处理等作为一个自定义OP,整合到同一个模型,这样可以一个业务就是一个模型,能够做到业务之间保持独立。
- 安全性:通过自定义的加密头等方式,将模型进行加密,在客户端运行该模型时,动态解析出原始模型,做到数据不落盘,最大程度保证了数据安全。
- 动态化:通过服务端动态下发模型和OP的方式,实现了线上更新模型和算法,极大地方便了灰度测试、算法升级等需求。
应用一:视频封面
在视频封面这个案例中,利用TensorFlow Lite,可以将原先传统算法做的事,在端上用用AI模型来完成。传统基于规则的做法,选取视频封面的时候,是由算法同学设计一个基础算法,同时再处理各种Case,最终选取一张封面。对于遗漏忘处理的情况,则需要发版更新算法,维护成本太高。
而使用AI模型,则可以通过动态下发模型和OP的方式随时灰度和升级。
应用二:视频指纹
在这个案例中,展示了一种对 TensorFlow Lite 较“另类”的用法:将它当做一个计算框架。TensorFlow Lite 本身就是一种计算流程的框架,因此,可以利用它支持自定义OP的特性,将我们算法的各个环节作为一个个自定义OP,然后利用模型将这些计算环节“串联”起来,这样,整个TensorFlow Lite就俨然成为了一个天然的端计算框架。这样既可以对单个计算环节(自定义OP)做更新,还能随时调整整个计算流程(即调整模型)。
应用三:智能租房
最后这个案例是比较传统的TensorFlow Lite的用法,使用了较流行的SSD模型,在租房环节,通过自能识别图片中的家具(冰箱、电视等),以此自动地给用户发布的房屋打上标签,不仅简化了用户操作,还丰富了商品信息,为后台数据搜索推荐等提供了更有效的信息。
TensorFlow 在闲鱼工程效率上的应用
UI2Code
关于UI2Code的介绍,可以参考前面的一篇文章《Google开发者大会将揭晓哪些黑科技》。
该项目展示的是从一张图片,直接生成UI代码的过程。该图片可以是设计师的视觉产出,也可以是手机上随便打开一个软件然后截图得到。
这里针对大家关心最多的几个问题做一下说明:
1.“UI2Code”和微软刚刚开源的“Sketch2Code”有什么区别
Sketc2Code 关注的是如何快速的将设计师的灵感,变成“近似”的UI代码,可以理解成是给设计师用的创作工具,生成的代码也并不是为了直接作为线上代码使用。
而我们的 UI2Code 关注的是1比1像素级别的“精确”还原,目的是为了节省开发人员重复机械的视觉还原工作,将没有创造性的重复性工作交给机器,这样开发人员就可以去关注更重要的逻辑性问题。它生成的UI代码是“接近”生产可用的,开发人员只要做一些数据绑定或者细微的调整即可。
2.“UI2Code”是如何使用TensorFlow的?
实际上该项目是一个复杂的工作流程,在流程的某些节点上,我们使用TensorFlow来完成深度学习任务。比如,由于输入是一张纯图片,并无其它任何信息,因此,需要用深度学习来“理解”图片内容,包括哪些是文本,哪些是图片等等。
3.你们这个有对外提供服务吗?是否有开源计划?
目前该工具还只是闲鱼内部使用(实际上我们的团队已经用它有一段时间了,上线了多个导购页面),下半年会开始考虑开源计划。由于该工具里面有部分我们自有业务的东西,同时公司有严格的开源审核和披露的流程,因此还需要一段时间,大家可以关注我们的公众号:闲鱼技术,到时候有了进一步的消息会第一时间在上面公布。
结语
本次大会闲鱼作为Google的合作伙伴,与广大开发者分享和交流了闲鱼在Flutter和TensorFlow等方向上的实践,我们希望同广大开发者一起,在技术的道路上,不断探索创新,用技术推动业务。
本文作者:闲鱼技术
阅读原文
本文为云栖社区原创内容,未经允许不得转载。