背景

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

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

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

  • 它是一款主流成熟框架,文档资源丰富,论坛和社区活跃,开发者众多。
  • TensorFlow 有一款工具 Object Detection API [1],里面实现了很多经典的物体检测和分割模型,利用它开发新模型很方便。
  • TensorFlow 模型易于产品落地, TensorFlow Lite 让移动端部署变得方便快捷。

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

数据采集

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

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

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

数据增强

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

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

网络设计

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

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

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

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

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

图五:模型效果演示.gif

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

模型移植

最后,训练完成后模型被保存为 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 视觉推理扫地机器人。

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

来源:https://mp.weixin.qq.com/s?__biz=MzU1OTMyNDcxMQ==&mid=2247485811&idx=1&sn=7dd99c8b08a5bf6383b119f1b48e1219&chksm=fc18423bcb6fcb2d7ff4c70ee24cd4f49267a1ba7a69f05b054b586f48068c4d99488eaf0275&scene=123#wechat_redirect

最后修改:2019 年 12 月 15 日
文章有用,请随意赞赏