机器视觉领域的核心问题之一就是目标检测(Object Detection),它的任务是找出图像当中所有感兴趣的目标(物体),确定其位置和大小。
作为经典的目标检测框架Faster R-CNN,虽然是2015年的论文,但是它至今仍然是许多目标检测算法的基础,这在飞速发展的深度学习领域十分难得。而在Faster R-CNN的基础上改进的Mask R-CNN在2018年被提出,并斩获了ICCV2017年的最佳论文。Mask R-CNN可以应用到人体姿势识别,并且在实例分割、目标检测、人体关键点检测三个任务都取得了很好的效果。
因此,一些深度学习框架如百度PaddlePaddle开源了用于目标检测的RCNN模型,从而可以快速构建满足各种场景的应用,包括但不仅限于安防监控、医学图像识别、交通车辆检测、信号灯识别、食品检测等等。
目标检测(Object Detection)与实例分割(Instance Segmentation)
目标检测的任务就是确定图像当中是否有感兴趣的目标存在,接着对感兴趣的目标进行精准定位。当下非常火热的无人驾驶汽车,就非常依赖目标检测和识别,这需要非常高的检测精度和定位精度。
目前,用于目标检测的方法通常属于基于机器学习的方法或基于深度学习的方法。 对于机器学习方法,首先使用SIFT、HOG等方法定义特征,然后使用支持向量机(SVM)、Adaboost等技术进行分类。 对于深度学习方法,深度学习技术能够在没有专门定义特征的情况下进行端到端目标检测,并且通常基于卷积神经网络(CNN)。但是传统的目标检测方法有如下几个问题:光线变化较快时,算法效果不好;缓慢运动和背景颜色一致时不能提取出特征像素点;时间复杂度高;抗噪性能差。
因此,基于深度学习的目标检测方法得到了广泛应用,该框架包含有Faster R-CNN,Yolo,Mask R-CNN等,图1和图2分别显示的是基于PaddlePaddle深度学习框架训练的Faster R-CNN和Mask R-CNN模型对图片中的物体进行目标检测。
从图1中可以看出,目标检测主要是检测一张图片中有哪些目标,并且使用方框表示出来,方框中包含的信息有目标所属类别。图2与图1的最大区别在于,图2除了把每一个物体的方框标注出来,并且把每个方框中像素所属的类别也标记了出来。
图1 基于paddlepaddle训练的Faster R-CNN模型预测结果
图2 基于paddlepaddle训练的Mask R-CNN模型预测结果
从R-CNN到Mask R-CNN
Mask R-CNN是承继于Faster R-CNN,Mask R-CNN只是在Faster R-CNN上面增加了一个Mask Prediction Branch(Mask预测分支),并且在ROI Pooling的基础之上提出了ROI Align。所以要想理解Mask R-CNN,就要先熟悉Faster R-CNN。同样的,Faster R-CNN是承继于Fast R-CNN,而Fast R-CNN又承继于R-CNN,因此,为了能让大家更好的理解基于CNN的目标检测方法,我们从R-CNN开始切入,一直介绍到Mask R-CNN。
R-CNN
区域卷积神经网络(Regions with CNN features)使用深度模型来解决目标检测。
R-CNN的操作步骤
R-CNN优缺点分析
Fast R-CNN
R-CNN 的主要性能瓶颈在于需要对每个提议区域(region proposal)独立的抽取特征,这会造成区域会有大量重叠,独立的特征抽取导致了大量的重复计算。因此,Fast R-CNN 对 R-CNN 的一个主要改进在于首先对整个图像进行特征抽取,然后再选取提议区域,从而减少重复计算。
Fast R-CNN 的操作步骤
Fast R-CNN优缺点分析
Faster R-CNN
Faster R-CNN 对 Fast R-CNN 做了进一步改进,它将 Fast R-CNN 中的选择性搜索替换成区域提议网络(region proposal network)。RPN 以锚框(anchors)为起始点,通过一个小神经网络来选择区域提议。
Faster R-CNN整体网络可以分为4个主要内容:
Faster R-CNN优缺点分析
Mask R-CNN
Faster R-CNN 在物体检测中已达到非常好的性能,Mask R-CNN在此基础上更进一步:得到像素级别的检测结果。 对每一个目标物体,不仅给出其边界框,并且对边界框内的各个像素是否属于该物体进行标记。Mask R-CNN同样为两阶段框架,第一阶段扫描图像生成候选框;第二阶段根据候选框得到分类结果,边界框,同时在原有Faster R-CNN模型基础上添加分割分支,得到掩码结果,实现了掩码和类别预测关系的解藕。
图3 Mask R-CNN网络结构泛化图
Mask R-CNN的创新点
图4展示了Mask R-CNN在像素级别的目标检测结果:
图4 Mask R-CNN:像素级别的目标检测