我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:刘伯温论坛 > 发散束卷积法 >

经典目标检测方法Faster R-CNN和Mask R-CNN基于PaddlePaddle深度

归档日期:06-18       文本归类:发散束卷积法      文章编辑:爱尚语录

  机器视觉领域的核心问题之一就是目标检测(object detection),它的任务是找出图像当中所有感兴趣的目标(物体),确定其位置和大小。作为经典的目标检测框架Faster R-CNN,虽然是2015年的论文,但是它至今仍然是许多目标检测算法的基础,这在飞速发展的深度学习领域十分难得。而在Faster R-CNN的基础上改进的Mask R-CNN在2018年被提出,并斩获了ICCV2017年的最佳论文。Mask R-CNN可以应用到人体姿势识别,并且在实例分割、目标检测、人体关键点检测三个任务都取得了很好的效果。因此,百度深度学习框架PaddlePaddle开源了用于目标检测的RCNN模型,从而可以快速构建强大的应用,满足各种场景的应用,包括但不仅限于安防监控、医学图像识别、交通车辆检测、信号灯识别、食品检测等等。

  机器视觉领域的核心问题之一就是目标检测 (object detection),它的任务是找出图像当中所有感兴趣的目标 (物体),确定其位置和大小。作为经典的目标检测框架 Faster R-CNN,虽然是 2015 年的论文,但是它至今仍然是许多目标检测算法的基础,这在飞速发展的深度学习领域十分难得。而在 Faster R-CNN 的基础上改进的 Mask R-CNN 在 2018 年被提出,并斩获了 ICCV2017 年的最佳论文。Mask R-CNN 可以应用到人体姿势识别,并且在实例分割、目标检测、人体关键点检测三个任务都取得了很好的效果。因此,百度深度学习框架 PaddlePaddle 开源了用于目标检测的 RCNN 模型,从而可以快速构建强大的应用,满足各种场景的应用,包括但不仅限于安防监控、医学图像识别、交通车辆检测、信号灯识别、食品检测等等。

  目标检测的任务就是确定图像当中是否有感兴趣的目标存在,接着对感兴趣的目标进行精准定位。当下非常火热的无人驾驶汽车,就非常依赖目标检测和识别,这需要非常高的检测精度和定位精度。目前,用于目标检测的方法通常属于基于机器学习的方法或基于深度学习的方法。对于机器学习方法,首先使用 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 除了把每一个物体的方框标注出来,并且把每个方框中像素所属的类别也标记了出来。

  Selective search(选择性搜索):首先对每一张输入图像使用选择性搜索来选取多个高质量的提议区域 (region proposal),大约提取 2000 个左右的提议区域;

  Resize(图像尺寸调整):接着对每一个提议区域,将其缩放 (warp) 成卷积神经网络需要的输入尺寸 (277*277);

  特征抽取:选取一个预先训练好的卷积神经网络,去掉最后的输出层来作为特征抽取模块;

  SVM(类别预测):将每一个提议区域提出的 CNN 特征输入到支持向量机 (SVM) 来进行物体类别分类。注:这里第 i 个 SVM 用来预测样本是否属于第 i 类;

  Bounding Box Regression(边框预测):对于支持向量机分好类的提议区域做边框回归,训练一个线性回归模型来预测真实边界框,校正原来的建议窗口,生成预测窗口坐标。

  优点:R-CNN 对之前物体识别算法的主要改进是使用了预先训练好的卷积神经网络来抽取特征,有效的提升了识别精度。

  缺点:速度慢。对一张图像我们可能选出上千个兴趣区域,这样导致每张图像需要对卷积网络做上千次的前向计算。

  R-CNN 的主要性能瓶颈在于需要对每个提议区域 (region proposal) 独立的抽取特征,这会造成区域会有大量重叠,独立的特征抽取导致了大量的重复计算。因此,Fast R-CNN 对 R-CNN 的一个主要改进在于首先对整个图像进行特征抽取,然后再选取提议区域,从而减少重复计算。

  把提议区域映射到卷积神经网络的最后一层卷积 (feature map) 上;

  Softmax:在物体分类时,Fast R-CNN 不再使用多个 SVM,而是像之前图像分类那样使用 Softmax 回归来进行多类预测。

  基础卷积层 (CNN):作为一种卷积神经网络目标检测方法,Faster R-CNN 首先使用一组基础的卷积网络提取图像的特征图。特征图被后续 RPN 层和全连接层共享。本示例采用 ResNet-50 作为基础卷积层。

  区域生成网络 (RPN):RPN 网络用于生成候选区域 (proposals)。该层通过一组固定的尺寸和比例得到一组锚点 (anchors), 通过 softmax 判断锚点属于前景或者背景,再利用区域回归修正锚点从而获得精确的候选区域。

  RoI Pooling:该层收集输入的特征图和候选区域,将候选区域映射到特征图中并池化为统一大小的区域特征图,送入全连接层判定目标类别, 该层可选用 RoIPool 和 RoIAlign 两种方式,在 config.py 中设置 roi_func。

  检测层:利用区域特征图计算候选区域的类别,同时再次通过区域回归获得检测框最终的精确位置。

  优点:RPN 通过标注来学习预测跟真实边界框更相近的提议区域,从而减小提议区域的数量同时保证最终模型的预测精度。

  Faster R-CNN 在物体检测中已达到非常好的性能,Mask R-CNN 在此基础上更进一步:得到像素级别的检测结果。对每一个目标物体,不仅给出其边界框,并且对边界框内的各个像素是否属于该物体进行标记。Mask R-CNN 同样为两阶段框架,第一阶段扫描图像生成候选框;第二阶段根据候选框得到分类结果,边界框,同时在原有 Faster R-CNN 模型基础上添加分割分支,得到掩码结果,实现了掩码和类别预测关系的解藕。

  解决特征图与原始图像上的 RoI 不对准问题:在 Faster R-CNN 中,没有设计网络的输入和输出的像素级别的对齐机制 (pixel to pixel)。为了解决特征不对准的问题,文章作者提出了 RoIAlign 层来解决这个问题,它能准确的保存空间位置,进而提高 mask 的准确率。

  掩模表示 (mask representation):有别于类别,框回归,这几个的输出都可以是一个向量,但是 mask 必须要保持一定的空间结构信息,因此作者采用全连接层 (FCN) 对每一个 RoI 中预测一个 m*m 的掩模。

  数据准备:在 MS-COCO 数据集上进行训练,可以通过脚本来直接下载数据集:

  下载预训练模型: 本示例提供 Resnet-50 预训练模型,该模性转换自 Caffe,并对批标准化层 (Batch Normalization Layer) 进行参数融合。采用如下命令下载预训练模型。

  通过初始化 pretrained_model 加载预训练模型。同时在参数微调时也采用该设置加载已训练模型。请在训练前确认预训练模型下载与加载正确,否则训练过程中损失可能会出现 NAN。

  数据读取器定义在 reader.py 中。所有图像将短边等比例缩放至 scales,若长边大于 max_size, 则再次将长边等比例缩放至 max_size。在训练阶段,对图像采用水平翻转。支持将同一个 batch 内的图像 padding 为相同尺寸。

  权重衰减系数为 0.0001,前 500 轮学习率从 0.00333 线 乘子进行学习率衰减,最大训练 180000 轮。同时我们也提供了 2x 模型,该模型采用更多的迭代轮数进行训练,训练 360000 轮,学习率在 240000,320000 轮衰减,其他参数不变,训练最大轮数和学习率策略可以在 config.py 中对 max_iter 和 lr_steps 进行设置。

  基础卷积层中,affine_layers 参数不更新,res2 层参数不更新。

  模型评估是指对训练完毕的模型评估各类性能指标。本示例采用 COCO 官方评估。eval_coco_map.py 是评估模块的主要执行程序,调用示例如下:

  模型推断可以获取图像中的物体及其对应的类别,infer.py 是主要执行程序,调用示例如下:

  公司地址:北京市朝阳区酒仙桥路4号751 D·Park正东集团院内 C8座105室 极客公园

本文链接:http://19721112.com/fasanshujuanjifa/473.html