3.1 TensorFlow Object Detection API框架简介
虽然在计算机视觉领域,能完成通用目标检测(Generic Object Detection)的算法有很多,但是在一张图片内准确识别并定位多个不同的物体,仍然是一个巨大的挑战。在主流的机器视觉算法软件包中(如OpenCV ),识别并定位物体的常用算法是模板匹配(Pattern/Template Match),但这种算法仅仅适用于识别与模板几乎完全一样的物体,泛化能力(Generalization ability)基本为零。例如,若识别狗的模板只建了一张金毛猎犬的正面照,那么拉布拉多犬就无法识别为“狗”,或者用金毛猎犬的侧面照输入,也无法识别为“狗”。
深度学习技术很好地解决了物体识别能力泛化的问题,通过在大量已标注的样本数据上进行训练,可以得到识别精度很高、泛化能力很强的模型。这样,无论是输入一张金毛猎犬的正面照还是侧面照,或者是输入一张拉布拉多犬,模型都能准确地识别为“狗”。
用深度学习技术解决目标检测问题可以分为两个重要的工作:
第一是设计、实现、训练和验证模型,这个工作可以称为深度学习模型研发,这对于刚入门的工程师来说,还是非常有挑战的:
● 挑战一是模型如何设计。
● 挑战二是模型如何编程实现。
● 挑战三是如何收集足够的数据来训练并验证模型是否如预期。
所以,从头开始设计、实现、训练和验证模型,是一个需要深度学习算法人才支撑,且极其耗时耗力的工作。
第二是根据实际项目的要求,基于预训练模型做迁移学习,这个工作可以称为深度学习模型应用,这对刚入门的工程师来说,完全可以快速掌握。
以Jonathan Huang为首的团队基于TensorFlow机器学习平台发布了用于多目标检测的TensorFlow Object Detection API框架[6],以及在COCO数据集、Kitti数据集和Open Images数据集等数据集上训练好的模型,免除了深度学习模型研发的工作,让工程师可以直接在预训练模型上做迁移学习。
TensorFlow Object Detection API框架一发布,就立即受到工业界欢迎。其优点在于:
● 使用起来足够简单,没有任何深度学习理论基础的人,可以在半天之内学会如何使用,并应用到自己的项目中去。
● 对训练数据的数量要求不高,基本上100~150张/类的数据就可以获得比较好的效果了。
上述优点非常符合中小企业和个人开发者对深度学习的“迁移学习+小算力+小数据”的期望,如图3-1所示。
图3-1 中小企业对深度学习的期望