微信号:Google_Developers

介绍:谷歌官方公众号,这里有:Develop ( Android 等各种谷歌开发技术)、Engage (利用 Google Play 进行产品经营和优化) 和 Earn (利用 AdMob 进行产品营利和变现).

科沃斯机器人:AI 扫地机携手 TensorFlow 共探室内场景

2019-04-10 14:17 Google

文 / 鲍亮、曹麒,科沃斯机器人智能控制中心



背景

科沃斯作为国内家用机器人领导者,一直致力于为用户打造美好生活,让用户耗费更少的时间进行清洁工作。以扫地机器人行业为例,目前技术虽然已经相对成熟,但在某些情况下表现依然会让人诟病,比如推着鞋子到处跑,被电线、抹布等低矮物体卡死,因此在扫地机清扫前用户需先进行 “预清扫”(人工把鞋子、抹布归位,收拾好电线等),而我们则希望 通过视觉识别并规避这些障碍物,把人从 “预清扫” 中解放出来,提高用户体验


我们的识别目标物主要是充电座、垃圾桶、鞋子、柔性布类、地毯等,在开发过程中遇到了以下几个难点:数据缺乏、室内环境复杂、目标物形态各异而且柔性目标与小目标居多、家用量产芯片算力受限,这导致了很难用传统的机器视觉方法靠提特征来进行鲁棒地检测,因此决定采用深度神经网络。


团队基于 TensorFlow 开发了一款物体检测模型,目前有很多种深度学习框架,选择 TensorFlow 的原因如下:

  1. 它是一款主流成熟框架,文档资源丰富,论坛和社区活跃,开发者众多。

  2. TensorFlow 有一款工具 Object Detection API [1],里面实现了很多经典的物体检测和分割模型,利用它开发新模型很方便。

  3. TensorFlow 模型易于产品落地, TensorFlow Lite 让移动端部署变得方便快捷。


本文将大致介绍模型的开发过程,以及如何将模型应用到扫地机中。



数据采集

大量有效数据是进行深度学习最宝贵的资源。由于扫地机在地面工作,视角独特,很难从网上找到可用的公开数据集,因此我们首先人工采集了大量扫地机视角的家庭环境数据。不同时间地点采集的数据各不相同。比如,白天可以采集到阳光斜射造成的过曝、逆光等数据,而晚上则暗光图像更多,另外随着地理位置变化家庭环境的布置也差异很大。


图一:各个种类的数据分布


上图展示了数据分布情况,鞋子占了很大一部分,这也是目前识别精度比较高的类别。



数据增强

模型开发中数据增强非常重要,比如适当调整图像 Hue 值可以模拟各种颜色的地板、地毯等,让数据集成倍增加。 在 Object Detection API 中, 有一个 python 文件 [2] ,已经实现了很多数据增强方法,也可以根据需求自己实现新方法,还有一个对应的 protobuf 文件 [3] 定义了每种方法的超参数。为了调试方便团队开发了一款可视化工具,可以选择不同的数据增强函数,调整超参数并预览效果。


图二:数据增强可视化工具



网络设计

在物体检测任务中,无论是单阶段还是多阶段检测器,锚点框设计出现在了很多架构中。在开发过程中,我们依据不同物体的像素尺寸及其在 Feature Map 上的大小,按照有效感受野原则,设计了轻量级的特征提取网络及检测分支,利用多层 Feature Map 来检测不同尺度的物体。其中,为不同的类别定制化设计了特定的锚点框以匹配更多的正样本,从而保证了数据能够被充分有效训练。在锚点框的设计上,目前有很多方案来优化锚点框的尺寸和比例,YOLO 论文 [4] 运用了聚类的方法,我们选择用遗传算法 [5] 。优化后,不仅保证了每个锚点框匹配的平均正样本更多,而且锚点框的数量减少为原来的三分之一。图三、图四展示了锚点框优化前后平均每个框匹配到各类别物体的数量,优化前的锚点框在小目标(scale<50)和大目标(scale>250)的匹配数量非常少,而优化后小目标和大目标的匹配数量有明显的提升。


图三:锚点框优化前的平均匹配数量

图四:锚点框优化后的平均匹配数量

在 Loss 函数的设计上,参照 Focal Loss [6] 对不同的锚点框进行加权,相比原版只对 easy/hard example 进行加权,我们还加入了位置加权,让模型更关注学习近距离目标的特征,保证近距离目标的识别精度。


整个网络的设计和模型的训练都利用 Object Detection API 框架完成。训练完毕后,经过测试证明锚点框的设计对检测任务起到了非常关键的作用。另外,为了提高小目标的召回率,我们将后面的 Feature map 与前面 Feature map 进行了特征融合,模型精度又提高了 2%。


图五:模型效果演示


图六:模型不识别高于地面一定程度的物体



模型移植

最后,训练完成后模型被保存为 pb 格式,为了导入到扫地机中,需要利用 TensorFlow Lite 库进行模型转化。TensorFlow Lite 库主要是针对 CPU 端加速计算的(最新版已支持移动端 GPU),相比于 TensorFlow 它有三个优势:

  • 轻量级。TF Lite 能够生成很小的链接库,这对于嵌入式产品有着致命的诱惑力

  • 可硬件加速。有些手机可以通过 NNAPI( Android Neural Networks API )进行硬件加速

  • 依赖库少,跨平台方便,模型可以进一步精简


参照官方指导,将 pb 模型分解为前处理、中间部分、后处理三块,前处理主要负责图片的预处理包括尺寸归一化等,中间部分主要是 CNN 相关的操作,后处理则负责检测结果的输出优化包括 NMS 等。对于中间部分,先利用 TensorFlow Lite 转化为 Lite 格式,这样整个模型就可以利用 Lite 库在芯片 CPU 上进行推理加速了,然后我们尝试利用上了芯片上闲置的小型 GPU,用 OpenCL 将部分运算移植到 GPU 上进行,推理速度又提高了 30%,这样终于可以满足扫地机场景的最低延时要求了。后处理中,对于不同种类的目标物,设置不同的 NMS IoU 阈值,比如电线类的 IoU 阈值设计得大一点,以提高电线类的输出框个数,进一步提高召回率。


识别到目标后,再经过单目测算距离,扫地机就可以聪明地躲开这些障碍物了。慢慢的,一个家庭智能小伙伴诞生了。



总结

本文以物体检测为例,介绍了科沃斯如何利用 TensorFlow、Object Detection API 以及 TensorFlow Lite 来开发行业内首款 AI 视觉推理扫地机器人。


后续,我们会继续探究人工智能在家用机器人中的运用,不断将新的技术点应用到产品中,让我们的用户尽情享受科技带来的便利。


科技,让生活更美好~



参考文献

[1] https://github.com/tensorflow/models/tree/master/research/object_detection

[2] https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py (accessed at 19th Mar 2019)

[3] https://github.com/tensorflow/models/blob/master/research/object_detection/protos/preprocessor.proto (accessed at 19th Mar 2019)

[4] Redmon J., (2016), YOLO9000: Better, Faster, Stronger

[5] Sastry K., Goldberg D. and Kendall G., (n.d.), GENETIC ALGORITHMS

[6] Tsung-Yi Lin, Priya Goyal, Ross Girshick, Kaiming He, Piotr Dollár,Focal Loss for Dense Object Detection



更多 AI 相关阅读:



 
谷歌开发者 更多文章 Gboard 基于 RNN 的手写识别 Coral — 我们的本地 AI 开发平台! Women Techmakers 系列活动重磅来袭 创作、连接与成长: Google 的游戏成功蓝图 Android Q Beta 2 已上线!我们来看看都做了哪些更新
猜您喜欢 用人唯才,成就梦想--传智播客面向残疾人公开招聘 《暗时间》-刘未鹏 【沙龙干货分享】你要知道的N个Android适配问题 有一种理科生的烦恼,禅师不懂得! Android CustomView