作者|陈雷单位:中国移动智能家居运营中心实验室简介无论是在车水马龙中寻找不法分子,还是刷脸进出小区门禁,生活中的点点滴滴都离不开物件检测技术的支持。物体检测任务旨在判断图像中是否包含给定类别(如人、车、猫、杯子等)的物体实例,如果存在则返回其空间位置和范围。第01部分对象检测简介图1显示了一个典型的对象检测场景。近年来,深度学习技术由于能够使计算模型从数据中获得极其复杂、抽象的特征表示,从而在目标检测任务的发展中带来了突破。根据检测过程的不同,目前流行的检测算法可分为两阶段法和单阶段法。以R-CNN、SPP-Net、OHEM等为代表的两阶段模型将检测任务分为两部分。第一个模型用于提取目标区域,第二个模型用于目标分类和目标定位的进一步细化。这种识别方法比较慢,但检测精度很高。单阶段方法(YOLO、SSD等)通过直接预测图像的物体边界来识别物品,具有模型架构相对简单、运算速度快等优点。图1.从获取的图像中提取区域并识别对象类型。第02部分基于Android的对象检测和推理。现有的面向企业用户的目标检测解决方案,大多依赖于本地或云端的高性能GPU,为模型参数训练和推理提供支持。由于隐私安全需求和成本需求的多重考虑,基于移动设备或IOT设备的离线推理应用需求方兴未艾。由于家庭接入终端等边缘设备在存储和计算能力方面的计算资源非常有限,谷歌针对这一市场发布了轻量级、快速、跨平台的机器学习框架TensorFlowLite(TFLite)。作为TensorFlow的一部分,TFLite支持Android、iOS、嵌入式Linux和MCU等多种平台。对开发者非常友好,大大加速了设备端机器学习(ODML)的开发。图2描述了使用TFLite在移动端部署目标检测模型的过程,下面简单介绍。图2典型的TFLite应用开发流程1.模型选择和训练:这个过程与传统的机器学习过程是一致的。开发者选择Keras或TensorFlow支持库来构建能够处理实际任务的模型,并根据训练/测试数据集对模型参数进行优化和分析。以物体检测任务为例,在计算机上训练一个模型来识别车辆类型,每种车辆需要数千张训练图片和数小时甚至数天的训练时间。本文使用MobileNet-SSD算法演示了目标检测的模型训练过程。该算法是一种轻量级的移动端深度学习模型。与原始SSD算法相比,MobileNet-SSD将SSD方法中涉及的一些标准卷积计算替换为深度卷积和逐点卷积的结合。形成的MoblieNet卷积层减少了计算量,同时具有相似的性能。从图3可以看出,如果将K*K大小的标准卷积核换成MobileNet卷积,模型的计算复杂度会降低到前者。图3标准卷积与MobileNet提出的depthwiseseparableconvolution的计算过程对比2.使用converter转换模型:将庞大的计算过程迁移到移动端所需的时间和成本是难以想象的。因此,TFLite继承步骤1中已经在大量相关数据上训练的模型的权重设置来完成类似的任务,需要使用TFLite转换器来完成。由于原始模型在转换过程中被压缩,用户可以选择通过权衡模型的执行速度来控制文件大小。常用的TFLite转换过程主要涉及以下三个方法:tf.lite.TFLiteConverter.from_keras_model(),将实例化的Keras模型转换为TFlite平面缓冲文件(.tflite)tf.lite.TFLiteConverter.from_saved_model(),转换TensorFlow中存储的模型文件是一个tflite文件tf.lite.TFLiteConverter.from_concrete_functions()。将特定函数转换为tflite文件的实际转换过程非常简单。下面以TensorFlow的savedModel文件为例进行转换:#SampleCode:exp_dir='xxdir/1'tf.saved_model.save(tf_model,exp_dir)converter=lite.TFLiteConverter.from_saved_model(exp_dir)tflite_model=converter.convert()3.使用TFLite解释器进行模型推理:将模型迁移到相应的边缘设备上后,TFLite解释器(TensorFlowInterpreter)使用设备的CPU/GPU来执行模型。在某些支持的Android设备中,神经网络API也可用于加速推理过程。基于导入的tflite文件,方便使用解释器加载模型,让用户运行输出推理结果。//示例代码:Interpreter.OptionstfLite_options=newInterpreter.Options();tfLite_options.setNumThreads(Num_of_Threads);解释器tfLite=newInterpreter(tfLite_Model_File,tfLite_Options);如果用户想要对目标图像进行分类,只需要从摄像头中获取Image,并根据已有的Interpeter实例调用run方法或runForMultipleInputsOutputs方法(针对图像组),传入图像数据(组)和输出标签数组作为参数,返回值为每个物体的图像分类概率,实际结果如图4所示。图4Android端使用TFLite实现的目标检测应用Part03其他目标检测方法中除了MobileNet-SSD算法外,还有很多目标检测方法可供选择。我们将在本节中简要介绍它们。R-CNN:R-CNN于2014年提出,该模型采用选择性搜索的方法从待检测图像中提取候选图像,然后将候选区域转换为统一大小;然后使用卷积神经网络计算每个区域的特征;最后通过全连接层并使用SVM方法对特征进行分类并输出多目标检测结果。SPP-Net:该方法提出使用空间金字塔池化层对任意大小的候选图像进行变换,并将信息馈送到全连接层以提取固定长度的特征向量。SPP-Net可以从各种分辨率的图像中获取信息,具有更强的泛化性能,但固定的卷积层限制了网络的精度。FastR-CNN:该模型直接对整幅图像进行卷积计算,以加快训练速度并节省缓存特征的时间,减少为每个候选区域提取特征带来的重复计算。此外,FastR-CNN通过联合训练分类器和边界提取器来改进损失函数并优化模型性能。Part04总结与展望作为图像理解和计算机视觉的基石,目标检测方法是解决复杂计算机视觉任务的基础,在图像分割、场景理解、目标跟踪、自动字幕、活动识别等领域得到广泛应用。应用。目前,随着消费电子行业的发展,自动驾驶、无人机避障、智能视频监控等场景在日常生活中越来越普遍,而这些技术的实现需要低时延、高精度作为支撑的目标检测方法,也对计算机视觉和嵌入式技术相关的从业者提出了更高的挑战。
