: :其他软件 2020-07-30 22:11:21
我最喜欢的计算机视觉和深入学习的概念之一是目标检测。建立一个模型的能力,可以通过图像,告诉我什么样的物体存在!
当人类看到一幅图像时,我们在几秒钟内就能识别出感兴趣的物体。机器不是这样的。因此,目标检测是一个在图像中定位目标实例的计算机视觉问题。
好消息是,对象检测应用程序比以往任何时候都更容易开发。目前的方法侧重于端到端的管道,这大大提高了性能,也有助于开发实时用例。
目录
一种通用的目标检测框架
什么是API?为什么我们需要一个API?
TensorFlow对象检测API
一种通用的目标检测框架
通常,我们在构建对象检测框架时遵循三个步骤:
首先,使用深度学习模型或算法在图像中生成一组的边界框(即对象定位)
接下来,为每个边界框提取视觉特征。它们将根据视觉特征进行评估,并确定框中是否存在以及存在哪些对象
在最后的后处理步骤中,重叠的框合并为一个边界框(即非最大抑制)
就这样,你已经准备好了你的第一个目标检测框架!
什么是API?为什么我们需要一个API?
API代表应用程序编程接口。API为开发人员提供了一组通用操作,这样他们就不必从头开始编写代码。
想想一个类似于餐馆菜单的API,它提供了一个菜品列表以及每种菜品的描述。当我们指定要吃什么菜时,餐厅会为我们提供成品菜。我们不知道餐厅是如何准备食物的,我们也不需要。
从某种意义上说,api是很好的节省时间的工具。在许多情况下,它们也为用户提供了便利。
因此在本文中,我们将介绍为目标检测任务开发的TensorFlow API。
TensorFlow对象检测API
TensorFlow对象检测API是一个框架,用于创建一个深度学习网络来解决对象检测问题。
在他们的框架中已经有了预训练的模型,他们称之为Model Zoo。这包括在COCO数据集、KITTI数据集和Open Images数据集上训练的预训练模型的集合。
它们对于在新数据集上进行训练时也很有用,可以用来初始化。下表描述了预训练模型中使用的各种体系结构:
MobileNet-SSD
SSD架构是一个单卷积网络,它学习和预测框的位置,并在一次通过中对这些位置进行分类。因此,SSD可以进行端到端的训练。SSD网络由基本架构(本例中为MobileNet)和几个卷积层组成:
SSD操作特征图以检测边界框的位置。请记住,特征图的大小为Df * Df * M。对于每个特征图位置,将预测k个边界框。每个边界框都包含以下信息:
边界框的4个角的偏移位置(cx、cy、w、h)
对应类的概率(c1,c2,…cp)
SSD并不预测盒子的形状,而只是预测盒子的位置。k个边界框各自具有预定的形状。这些形状是在实际训练之前设置的。例如,在上图中,有4个框,表示k=4。
MobileNet-SSD 损失函数
通过最后一组匹配的框,我们可以这样计算损失:
L = 1/N (L class + L box)
这里,N是匹配框的总数。"L class"是用于分类的softmax损失,“L box”是表示匹配框错误的L1平滑损失。L1平滑损失是L1损失的一种修正,它对异常值更具鲁棒性。如果N为0,则损失也设置为0。
MobileNet
MobileNet模型是基于一种可分解卷积操作的可分离深度卷积。它们将一个标准卷积分解为一个深度卷积和一个称为点卷积的1×1卷积。
对于MobileNets,深度卷积对每个输入通道应用单个滤波器。然后,逐点卷积应用1×1卷积来合并深度卷积的输出。
一个标准的卷积方法,它既能滤波,又能一步将输入合并成一组新的输出。深度可分离卷积将其分为两层,一层用于滤波,另一层用于合并。这种分解有显著减少计算和模型大小的效果。