目前计算机视觉(CV,computer vision)与自然语言处理(NLP,Natural Language Process)及语音识别(Speech Recognition)并列为人工智能的三大热点方向。

而计算机视觉又有四个基本任务(各个说法不一,比如有些地方说到对象检测、对象追踪、对象分割等),及图像分类、对象定位及检测、语义分割和实例分割。

a)图像分类:一张图像中是否包含某种物体

图片多目标检测与分割 目标检测和图像分割_图片多目标检测与分割


b)物体检测识别:若细分该任务可得到两个子任务,即目标检测,与目标识别,首先检测是视觉感知得第一步,它尽可能搜索出图像中某一块存在目标(形状、位置)。而目标识别类似于图像分类,用于判决当前找到得图像块得目标具体是什么类别。

c)语义分割:按对象得内容进行图像得分割,分割的依据是内容,即对象类别。

d)实例分割:按对象个体进行分割,分割的依据是单个目标。

图片多目标检测与分割 目标检测和图像分割_搜索_02


传统的计算机视觉问题的解决思路:图像-预处理-人工特征提取-分类。大部分研究集中在人工特征的构造和分类算法是哪个,涌现很多杰出工作。但存在的问题是人工设计的特征,因此存在适用性不强,或者说泛化能力弱,一类特征可能针对某类问题比较好,其他问题效果甚微。

而目前主流的深度学习解决思路:通过深度学习算法,进行端到端的解决,即输入图像到输出任务结果进行一步完成。但是其实内部还是分步(stages)的,通常是图像-特征提取网络-分类、回归。这里特征提取网络即各种深度神经网络结构,针对这一算法的研究很多,比如说各层的设计细节(激活函数,损失函数,网络结构)、可视化等,为了能够提取更强壮有效的特征,研究者考虑各种问题,如尺度不变性问题(通常用于解决小目标的检测,如特征金字塔网络Feature Pyramid Network,FPN),整个网络其实是分作两类的,前N个层为第一部分,用于特征的提取,输入的图片,输出的是特征图,这与传统的人工特征提取本质上没有太大区别,只是提取特征的算法变成了神经网络算法。而网络的后K层是作为第二部分,完成具体的分类或者回归任务,任务的输入时前一部分得到的特征图,输出是任务的结果。所以后一部分是可以替代的,例如使用其他机器学习算法SVM替代。

我们在对计算机视觉进行研究的时候,要考虑清楚是做算法的研究(通常深度学习就是研究神经网络算法,如何让它特征提取更强大、分类更准确、速度更快,从网络结构、loss function、activation function等入手,需要更强大的数学理论),还是解决某个具体的问题(用已有的优秀的神经网络算法,侧重于研究解决问题的框架,当然很多时候需要对已有的算法做些微调)。前者更偏向于理论,后者往往以工程为依托。

针对你的任务,如何设计网络?当面对实际任务时,如果目标是解决该任务而不是发明新算法,那么不要试图自己设计全新的网络结构,也不要试图从零复现现有的网络结构。找已经公开的实现和预训练模型进行微调。去掉最后一个全连接层和对应softmax,加上对应任务的全连接层和softmax,再固定住前面的层,只训练加的部分。如果训练数据比较多,那么可以多微调几层,甚至微调所有层。

目标检测的算法

目标检测的基本思路:定位(localization)+检测(detection)

多任务学习,带有两个输出分支。一个分支用于做图像分类,及全连接层+softmax判断目标类别,和单纯图像分类区别在于这里还要另外加一个“背景”类别。另一个分支用于判断目标位置,即完成回归任务输出四个数字标记包围盒位置(例如中心点横纵坐标和包围盒长宽),该分支输出结果只有在分类分支判断不为“背景”时才使用。

Region Poposal

在深度学习火爆的今天,各种文章都会谈及bounding boxes(候选边界框)的生成与筛选策略。那么候选框是如何产生,又是如何进行筛选的?其实物体候选框获取当前主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中的物体具有局部区域相似性(颜色、纹理)。目标识别与图像分割技术的发展进一步推动有效提取图像中信息。滑窗法作为一种经典的物体检测方法,个人认为不同大小的窗口在图像上进行滑动时候,进行卷积运算后的结果与已经训练好的分类器判别存在物体的概率。选择性搜索(selective search)是主要运用图像分割技术来进行物体检测。滑动窗口——为什么要有候选区域?既然目标是在图像中的某一区域,那么最直接的方法就是滑窗法(sliding window approach),就是遍历图像的所有区域,用不同大小的窗口在整个图像上滑动,那么就会产生所有的矩形区域,然后再后续排查,思路很简单,但是开销巨大。

滑窗法的物体检测流程图如下图:

图片多目标检测与分割 目标检测和图像分割_图像分类_03


通过滑窗法可以很清晰理解其主要思路——首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大抑制(Non-Maximum Suppression,NMS)的方法进行筛选。最终经过NMS帅选后获得检测到的物体。

滑窗法的缺点——滑窗法易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且涉及窗口大小时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,不推荐使用滑窗法。

RP——候选区域生成算法,通常基于图像的颜色、纹理、面积、位置等合并相似的像素,最终可以得到一系列的候选矩阵区域。这些算法,如selective search和edgeboxes,通常只需要几秒的CPU时间,而且,一个典型的候选区域数目是2k,相比于用滑动窗把图像所有区域都滑动一遍,基于候选区域的方法十分高效。另一方面,这些候选区域生成算法的查准率(precision)一般,但是查全率(recall)通常比较高,这使得我们不容易遗漏图像中的目标。

图片多目标检测与分割 目标检测和图像分割_搜索_04


滑窗法类似于穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的。自然而然想到只对图像中最有可能包含物体的区域进行搜索以此来提高计算效率。选择搜索方法是当下最为熟知的图像bounding boxes提取算法。具体过程是:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes候选边界框。首先,对于输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。

选择搜索优点:计算效率优于滑窗法;由于采用子区域合并策略,所以可以包含各种大小的疑似物体框;合并区域相似的指标多样性,提高了检测物体的概率。