CV之DL之Cascade R-CNN:Cascade R-CNN的简介、安装、使用方法之详细攻略

259 篇文章 237 订阅

CV之DL之Cascade R-CNN:Cascade R-CNN的简介、安装、使用方法之详细攻略

目录

相关论文

《Cascade R-CNN: Delving into High Quality Object Detection》翻译与解读

Abstract

Cascade R-CNN的简介

1、更新

2、基准测试

MS-COCO (Train/Test: train2017/val2017, shorter size: 800 for FPN and 600 for the others)

PASCAL VOC 2007 (Train/Test: 2007+2012trainval/2007test, shorter size: 600)

Cascade R-CNN的安装

1、要求

2、安装

3、数据集

(1)、MS-COCO

(2)、PASCAL VOC

4、训练Cascade-RCNN

5、预训练模型

6、测试/评估演示

Cascade R-CNN的使用方法


相关论文

《Cascade R-CNN: Delving into High Quality Object Detection》翻译与解读

地址

论文地址:https://arxiv.org/abs/1712.00726

时间

2017年12月3日

作者

Zhaowei Cai, Nuno Vasconcelos

总结

本文提出了一种多阶段对象检测架构Cascade R-CNN,致力于高质量的对象检测

背景痛点:对象检测通常需要设定交并比(IoU)阈值来定义正负样本。但是单个检测器仅优化于一个IoU水平,难以同时处理不同IoU水平的样本。

>> 训练时,随着IoU阈值的增高,正样本数量呈指数下降,容易过拟合。

>> 推理时,检测器优化的IoU水平与输入假设的IoU水平不匹配,影响检测效果。

解决方案:文章提出Cascade R-CNN多阶段检测框架。它由一个RPN检测阶段和多个检测头组成,检测头依次增加IoU阈值从而对近假正例越来越选择性。

核心特点

>> 采用级联边界框回归,用多个专门的回归器替代单个回归器,精细地改进假设。

>> 级联结构同时应用于训练和推理,消除训练推理分布不匹配问题。

>> 各阶段检测器针对不同IoU水平采样得到的样本进行优化,解决高IoU训练样本不足的问题。

优势

>> 实验结果显示,简单实现的Cascade R-CNN在COCO benchmark上超过所有单模型检测器,大幅提升高IoU评估指标,并且对不同基线框架都有一定提升。

总之,Cascade R-CNN通过多阶段学习的方法,很好解决了对象检测模型在不同IoU水平优化 ability 和测试样本质量匹配上的问题,提升了检测质量。

Abstract

In object detection, an intersection over union (IoU) threshold is required to define positives and negatives. An object detector, trained with low IoU threshold, e.g. 0.5, usually produces noisy detections. However, detection performance tends to degrade with increasing the IoU thresholds. Two main factors are responsible for this: 1) overfitting during training, due to exponentially vanishing positive samples, and 2) inference-time mismatch between the IoUs for which the detector is optimal and those of the input hypotheses. A multi-stage object detection architecture, the Cascade R-CNN, is proposed to address these problems. It consists of a sequence of detectors trained with increasing IoU thresholds, to be sequentially more selective against close false positives. The detectors are trained stage by stage, leveraging the observation that the output of a detector is a good distribution for training the next higher quality detector. The resampling of progressively improved hypotheses guarantees that all detectors have a positive set of examples of equivalent size, reducing the overfitting problem. The same cascade procedure is applied at inference, enabling a closer match between the hypotheses and the detector quality of each stage. A simple implementation of the Cascade R-CNN is shown to surpass all single-model object detectors on the challenging COCO dataset. Experiments also show that the Cascade R-CNN is widely applicable across detector architectures, achieving consistent gains independently of the baseline detector strength. The code will be made available at this https URL.

在目标检测中,需要设置一个交并比(IoU)阈值来定义正负样本。使用低IoU阈值(例如0.5)训练的目标检测器通常会产生嘈杂的检测结果。然而,随着IoU阈值的增加,检测性能往往会下降。这主要是由两个因素引起的:

1)在训练过程中由于正样本指数级减少导致的过拟合,以及

2)推断时目标检测器的IoU最优值与输入假设的IoU之间存在不匹配。为了解决这些问题,提出了一种多阶段目标检测架构——Cascade R-CNN。它由一系列使用逐渐增加的IoU阈值训练的检测器组成,以对近距离的假阳性逐渐更为选择性。这些检测器逐阶段训练,利用了一个观察:一个检测器的输出是训练下一个更高质量检测器的良好分布逐步改进假设的重新采样确保所有检测器具有相等大小的正例集,从而减少了过拟合问题。相同的级联过程也应用于推断,使得每个阶段的假设与检测器质量更为匹配。Cascade R-CNN的简单实现在具有挑战性的COCO数据集上胜过所有单一模型的目标检测器。实验证明,Cascade R-CNN在各种检测器架构上都具有广泛的适用性,能够在不考虑基线检测器强度的情况下实现一致的性能提升。代码将在以下https网址上提供。

Cascade R-CNN的简介

cascade-rcnn库实现了多个流行的目标检测算法,包括Faster R-CNN、R-FCN、FPN以及最近提出的Cascade R-CNN,用于MS-COCO和PASCAL VOC数据集。可以选择多种骨干网络,包括AlexNet、VGG-Net和ResNet。它是用C++编写的,并由Caffe深度学习工具包提供支持。

Cascade R-CNN是流行的两阶段R-CNN目标检测框架多阶段扩展。其目标是获得高质量的目标检测,可以有效地拒绝近似的假阳性。它由一系列检测器组成,这些检测器在端到端训练中具有逐渐增加的IoU阈值,以逐渐更有选择性地拒绝近似的假阳性。前一阶段检测器的输出被传递到后一阶段检测器,并且检测结果将逐阶段改善。这个思想可以应用于任何基于两阶段R-CNN框架的检测器,包括Faster R-CNN、R-FCN、FPN、Mask R-CNN等,而且可靠的增益独立于基线强度。在没有任何训练或推断的花里胡哨的情况下,ResNet-101骨干网络上的基本Cascade R-CNN在FPN检测器上实现了MS-COCO数据集上的最先进结果。

GitHub地址GitHub - zhaoweicai/cascade-rcnn: Caffe implementation of multiple popular object detection frameworks

1、更新

在Detectron中重新实现了Cascade R-CNN,详见Detectron-Cascade-RCNN。对所有测试模型都有非常一致的改进,与基线强度无关。

还建议使用基于PyTorch的第三方实现mmdetection和基于TensorFlow的tensorpack。

2、基准测试

我们在下面的表格中对MS-COCO和PASCAL VOC数据集上的多个检测器模型进行基准测试。

MS-COCO (Train/Test: train2017/val2017, shorter size: 800 for FPN and 600 for the others)

model#GPUsbslritertrain timetest timeAPAP50AP75
VGG-RPN-baseline    24  3e-3100k12.5 hr0.075s23.643.923.0
VGG-RPN-Cascade    24  3e-3100k15.5 hr0.115s27.044.227.7
Res50-RFCN-baseline    41  3e-3280k19 hr0.07s27.048.726.9
Res50-RFCN-Cascade    41  3e-3280k22.5 hr0.075s31.149.832.8
Res101-RFCN-baseline    41  3e-3280k29 hr0.075s30.352.230.8
Res101-RFCN-Cascade    41  3e-3280k30.5 hr0.085s33.352.035.2
Res50-FPN-baseline    81  5e-3280k32 hr0.095s36.558.639.2
Res50-FPN-Cascade    81  5e-3280k36 hr0.115s40.359.443.7
Res101-FPN-baseline    81  5e-3280k37 hr0.115s38.560.641.7
Res101-FPN-Cascade    81  5e-3280k46 hr0.14s42.761.646.6

PASCAL VOC 2007 (Train/Test: 2007+2012trainval/2007test, shorter size: 600)

model#GPUsbslritertrain timeAPAP50AP75
Alex-RPN-baseline    24  1e-345k2.5 hr29.463.223.7
Alex-RPN-Cascade    24  1e-345k3 hr38.966.540.5
VGG-RPN-baseline    24  1e-345k6 hr42.976.444.1
VGG-RPN-Cascade    24  1e-345k7.5 hr51.279.156.3
Res50-RFCN-baseline    22  2e-390k8 hr44.877.546.8
Res50-RFCN-Cascade    22  2e-390k9 hr51.878.557.1
Res101-RFCN-baseline    22  2e-390k10.5 hr49.479.853.2
Res101-RFCN-Cascade    22  2e-390k12 hr54.279.659.2

注意:在上述表格中,所有模型都已至少运行了两次并获得了相近的结果。训练相对稳定。RPN指的是Faster R-CNN。PASCAL VOC的注释已转换为COCO格式,并使用COCO API进行评估。结果与官方VOC评估不同。如果要比较出版物中的VOC结果,请使用官方VOC代码进行评估。

Cascade R-CNN的安装

1、要求

需要NVIDIA GPU和cuDNN以获得快速速度。目前已经测试了CUDA 8.0和cuDNN 6.0.20。其他版本也应该能够工作。

需要Caffe MATLAB包装器来运行检测/评估演示。

2、安装

克隆Cascade-RCNN存储库

克隆Cascade-RCNN存储库,我们将其称为您克隆Cascade-RCNN的目录为CASCADE_ROOT

git clone GitHub - zhaoweicai/cascade-rcnn: Caffe implementation of multiple popular object detection frameworks

构建Cascade-RCNN

cd $CASCADE_ROOT/

遵循此处的Caffe安装说明:

http://caffe.berkeleyvision.org/installation.html

如果您熟悉Caffe并且已经安装了所有要求,并且您的Makefile.config已设置好,那么只需执行:

make all -j 16

如果要运行Cascade-RCNN检测/评估演示,请同时构建MATLAB包装器

make matcaffe

3、数据集

如果您已经有一个COCO/VOC的副本,但组织形式不如下面的那么有条理,您可以简单地创建符号链接,使其具有相同的目录结构。

(1)、MS-COCO

在所有MS-COCO实验中,我们使用train2017进行训练,并使用val2017(也称为minival)进行验证。请按照MS-COCO网站下载图像/注释,并设置COCO API。

coco
|_ images
  |_ train2017
  |  |_ <im-1-name>.jpg
  |  |_ ...
  |  |_ <im-N-name>.jpg
  |_ val2017
  |_ ...
|_ annotations
   |_ instances_train2017.json
   |_ instances_val2017.json
   |_ ...
|_ MatlabAPI

假设您本地的COCO数据集副本位于/your/path/to/coco,确保它具有以下目录结构:

(2)、PASCAL VOC

在所有PASCAL VOC实验中,我们使用VOC2007+VOC2012 trainval进行训练,并使用VOC2007 test进行验证。请按照PASCAL VOC网站下载图像/注释,并设置VOCdevkit。

VOCdevkit
|_ VOC2007
  |_ JPEGImages
  |  |_ <000001>.jpg
  |  |_ ...
  |  |_ <009963>.jpg
  |_ Annotations
  |  |_ <000001>.xml
  |  |_ ...
  |  |_ <009963>.xml
  |_ ...
|_ VOC2012
  |_ JPEGImages
  |  |_ <2007_000027>.jpg
  |  |_ ...
  |  |_ <2012_004331>.jpg
  |_ Annotations
  |  |_ <2007_000027>.xml
  |  |_ ...
  |  |_ <2012_004331>.xml
  |_ ...
|_ VOCcode

假设您本地的VOCdevkit副本位于/your/path/to/VOCdevkit,确保它具有以下目录结构:

4、训练Cascade-RCNN

获取训练数据

获取训练数据

cd $CASCADE_ROOT/data/

sh get_coco_data.sh

这将下载实验所需的窗口文件。您还可以使用$CASCADE_ROOT/data/coco/下提供的MATLAB脚本coco_window_file.m生成自己的窗口文件。

下载在ImageNet上预训练的模型

下载在ImageNet上预训练的模型。对于AlexNet和VGG-Net,FC层被修剪,每个FC层保留2048个单位。此外,两个FC层在Cascade R-CNN训练中复制了三次。对于ResNet,BatchNorm层被合并到Scale层中,并在训练期间冻结,这是常见的做法。

cd $CASCADE_ROOT/models/

sh fetch_vggnet.sh

多个shell脚本

为不同的基线检测器提供了多个shell脚本来训练Cascade-RCNN,如我们的论文中所描述的那样。在每个模型文件夹下,您需要将train.prototxt和test.prototxt中的数据层的root_folder更改为您的COCO路径。之后,您可以开始训练自己的Cascade-RCNN模型。以vgg-12s-600-rpn-cascade为例。

cd $CASCADE_ROOT/examples/coco/vgg-12s-600-rpn-cascade/

sh train_detection.sh

将在训练过程中生成日志文件。总体训练时间取决于模型和数据集的复杂性。如果要快速检查训练是否正常工作,请尝试在VOC数据集上使用轻量级的AlexNet模型。

注意

注意:偶尔,Res101-FPN-Cascade的训练会出现内存不足的情况。只需从最新的solverstate继续训练。

5、预训练模型

我们仅提供用于COCO数据集的Res50-FPN-baseline、Res50-FPN-Cascade和Res101-FPN-Cascade模型,以及用于VOC数据集的Res101-RFCN-Cascade模型。

下载预训练模型

cd $CASCADE_ROOT/examples/coco/
​​​​​​​sh fetch_cascadercnn_models.sh

预训练模型产生的结果与我们论文中描述的完全相同。

6、测试/评估演示

一旦预训练或自己训练的模型可用,您可以使用MATLAB脚本run_cascadercnn_coco.m来获取检测和评估结果。在演示脚本中设置正确的数据集路径并选择您感兴趣的模型进行测试。默认设置是针对预训练模型的。最终的检测结果将保存在$CASCADE_ROOT/examples/coco/detections/下,评估结果将保存在模型文件夹下。

您还可以在每个模型文件夹下运行shell脚本test_coco_detection.sh进行评估,但这与官方评估不完全相同。发表时,请使用MATLAB脚本。

Cascade R-CNN的使用方法

更新中……

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值