maskrcnn是什么(fastrcnn)

有什么目标分割模型资源推荐?

近日,Facebook AI Research 开源了 Faster R-CNN 和 Mask R-CNN 的 PyTorch 1.0 实现基准:MaskRCNN-Benchmark。相比 Detectron 和 mmdetection,MaskRCNN-Benchmark 的性能相当,并拥有更快的训练速度和更低的 GPU 内存占用。

项目地址:https://github.com/facebookresearch/maskrcnn-benchmark

maskrcnn是什么(fastrcnn)

MaskRCNN-Benchmark 目标检测示例。

Detectron 和 mmdetection

Detectron 是 Facebook AI Research 实现顶尖目标检测算法(包括 Mask R-CNN)的软件系统。该系统是基于 Python 和深度学习框架 Caffe 2 而构建的。Detectron 目前包含以下目标检测算法的实现:Mask R-CNN 、RetinaNet、Faster R-CNN、RPN、Fast R-CNN、R-FCN。

mmdetection 是商汤和港中文近日联合开源的基于 PyTorch 的开源目标检测工具包。该工具包支持 Mask R-CNN 等多种流行的检测框架,读者可在 PyTorch 环境下测试不同的预训练模型及训练新的检测分割模型。和 Detectron 对比,mmdetection 的性能稍高、训练速度稍快、所需显存稍小。

mmdetection 第一个版本中实现了 RPN、Fast R-CNN、Faster R-CNN、Mask R-CNN,近期还计划放出 RetinaNet 和 Cascade R-CNN。但更重要的是,基于 PyTorch 和基于 Caffe2 的 code 相比,易用性是有代差的。成功安装 Detectron 的时间,大概可以装好一打的 mmdetection。

MaskRCNN-Benchmark 项目亮点:

PyTorch 1.0:相当或者超越 Detectron 准确率的 RPN、Faster R-CNN、Mask R-CNN 实现;

非常快:训练速度是 Detectron 的两倍,是 mmdection 的 1.3 倍。

节省内存:在训练过程中使用的 GPU 内存比 mmdetection 少大约 500MB;

使用多 GPU 训练和推理;

批量化推理:可以在每 GPU 每批量上使用多张图像进行推理;

支持 CPU 推理:可以在推理时间内于 CPU 上运行。

提供几乎所有参考 Mask R-CNN 和 Faster R-CNN 配置的预训练模型,具有 1x 的 schedule。

MaskRCNN-Benchmark Model Zoo 基线模型性能数据

地址:https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/MODEL_ZOO.md

硬件

8 NVIDIA V100 GPUs

软件:

PyTorch version: 1.0.0a0+dd2c487

CUDA 9.2

CUDNN 7.1

NCCL 2.2.13-1

端到端 Mask R-CNN 和 Faster R-CNN 基线模型

所有的基线模型都使用了和 Detectron 相同的实验设置,检测模型权重使用 Caffe2 中的 ImageNet 权重初始化,这和 Detectron 是一样的。预训练模型通过下表中的 model id 链接获取。

和 Detectron、mmdetection 的性能对比

训练速度

下表中的数据单位是秒/迭代,越低越好。(mmdetection 中备注的硬件和 maskrcnn_benchmark 是不同的)

训练内存(越低越好)

推理准确率(越高越好)

Webcam 和 Jupyter notebook demo

该项目提供了一个简单的 webcam demo,展示如何使用 maskrcnn_benchmark 进行推理:

cd demo# by default, it runs on the GPU# for best results, use min-image-size 800python webcam.py –min-image-size 800# can also run it on the CPUpython webcam.py –min-image-size 300 MODEL.DEVICE cpu# or change the model that you want to usepython webcam.py –config-file ../configs/caffe2/e2e_mask_rcnn_R_101_FPN_1x_caffe2.py –min-image-size 300 MODEL.DEVICE cpu# in order to see the probability heatmaps, pass –show-mask-heatmapspython webcam.py –min-image-size 300 –show-mask-heatmaps MODEL.DEVICE cpu

安装

教程地址:https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/INSTALL.md

安装要求:

PyTorch 1.0 的每日测试版本,安装说明:https://pytorch.org/get-started/locally/

torchvision

cocoapi

yacs

(可选)OpenCV(用于 webcam demo)

# maskrnn_benchmark and coco api dependenciespip install ninja yacs cython# follow PyTorch installation in https://pytorch.org/get-started/locally/# we give the instructions for CUDA 9.0conda install pytorch-nightly -c pytorch# install torchvisioncd ~/githubgit clone git@github.com:pytorch/vision.gitcd visionpython setup.py install# install pycocotoolscd ~/githubgit clone git@github.com:cocodataset/cocoapi.gitcd cocoapi/PythonAPIpython setup.py build_ext install# install PyTorch Detectioncd ~/githubgit clone git@github.com:facebookresearch/maskrcnn-benchmark.gitcd maskrcnn-benchmark# the following will install the lib with# symbolic links, so that you can modify# the files if you want and won’t need to# re-build itpython setup.py build develop

通过几行代码进行推理

该项目提供了一个 helper 类来简化编写使用预训练模型进行推理的流程,只要在 demo 文件夹下运行以下代码:

from maskrcnn_benchmark.config import cfgfrom predictor import COCODemoconfig_file = “../configs/caffe2/e2e_mask_rcnn_R_50_FPN_1x_caffe2.yaml”# update the config options with the config filecfg.merge_from_file(config_file)# manual override some optionscfg.merge_from_list([“MODEL.DEVICE”, “cpu”])coco_demo = COCODemo( cfg, min_image_size=800, confidence_threshold=0.7,)# load image and then run predictionimage = …predictions = coco_demo.run_on_opencv_image(image)

在 COCO 数据集上执行训练

为了运行以下示例,你首先需要安装 maskrcnn_benchmark。你还需要下载 COCO 数据集,推荐按以下方式符号链接 COCO 数据集的路径到 datasets/。我们使用来自 Detectron 的 GitHub 的 minival 和 valminusminival 集合。

# symlink the coco datasetcd ~/github/maskrcnn-benchmarkmkdir -p datasets/cocoln -s /path_to_coco_dataset/annotations datasets/coco/annotationsln -s /path_to_coco_dataset/train2014 datasets/coco/train2014ln -s /path_to_coco_dataset/test2014 datasets/coco/test2014ln -s /path_to_coco_dataset/val2014 datasets/coco/val2014

你也可以配置你自己的到数据集的路径。为此,你需要让 maskrcnn_benchmark/config/paths_catalog.py 指向你的数据集保存的位置。你也可以创建一个新的 paths_catalog.py 文件,其实现了相同的两个类,并在训练过程中将它作为一个配置参数 PATHS_CATALOG 传递。

单 GPU 训练

python /path_to_maskrnn_benchmark/tools/train_net.py –config-file “/path/to/config/file.yaml”

多 GPU 训练

该项目使用内部的 torch.distributed.launch 以启动多 GPU 训练。这个来自 PyTorch 的效用函数可以产生我们想要使用 GPU 数目的 Python 进程,并且每个 Python 进程只需要使用一个 GPU。

export NGPUS=8python -m torch.distributed.launch –nproc_per_node=$NGPUS /path_to_maskrcnn_benchmark/tools/train_net.py —

添加你自己的数据集

该项目添加了对 COCO 类型数据集的支持,为在新数据集上训练添加支持可以通过以下方法实现:

from maskrcnn_benchmark.structures.bounding_box import BoxListclass MyDataset(object): def __init__(self, …): # as you would do normallydef __getitem__(self, idx): # load the image as a PIL Image image = …# load the bounding boxes as a list of list of boxes# in this case, for illustrative purposes, we use# x1, y1, x2, y2 order. boxes = [[0, 0, 10, 10], [10, 20, 50, 50]] # and labels labels = torch.tensor([10, 20]) # create a BoxList from the boxes boxlist = Boxlist(boxes, size=image.size, mode=”xyxy”) # add the labels to the boxlist boxlist.add_field(“labels”, labels) if self.transforms: image, boxlist = self.transforms(image, boxlist) # return the image, the boxlist and the idx in your datasetreturn image, boxlist, idx def get_img_info(self, idx): # get img_height and img_width. This is used if# we want to split the batches according to the asp

就这样。你可以添加额外的字段到 boxlist,例如 segmentation masks(使用 structures.segmentation_mask.SegmentationMask),或甚至是你自己的实例类型。如果想了解 COCO 数据集实现的完整过程,可以查看:https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/maskrcnn_benchmark/data/datasets/coco.py

rpn分析法?

1.所谓rpn分析法是一个全卷积网络,以任意大小的图像作为输入,输出一系列候选框以及每个候选框对应的分数值,这个分数值用于衡量候选框框中目标的概率。

rpn分析法第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Search,是比较传统的方法,而且比较耗时。

所以作者提出rpn分析法,专门用来提取候选框,一方面RPN耗时少,另一方面rpn分析法可以很容易结合到Fast RCNN中,称为一个整体。

深度学习中,有哪些常见的目标检测模型?

深度学习时代,目标检测领域涌现了大量的算法,发展历程如下:

RCNN Family:RCNN是目标检测领域的一项杰出成果,它证明了使用深度神经网络的有效性,现在发展了一个庞大Family。例如:Faster RCNN、Mask RCNN等SSD & YOLO Family:与两阶段方法(如RCNN Family)相比,这些模型跳过了region proposal(区域建议)阶段,直接从特征映射中提取检测结果。因此,单级模型速度更快,适合算力有限的device。Anchor Free:2019年,Anchor Free的方法大爆发,并且取得了不错的成果。Anchor Free,其实可以看做是Single Anchor,每个object只有一个 anchor,对这个anchor进行类别分类、box和offset回归。不过有些anchor free的方法没有做offset,从这点来看,这些算法关注的是本身,而不是single anchor。Anyway,AnchorFree还是避免了anchor method中繁琐的anchor decoded操作。DeTr:NLP领域工作者都知道,2018年transformer带来了多大的影响。transformer取得了不错的效果,基本上取代之前的model。CV看起来不像是transformer的领域,但仍然取得了不错的成绩,并解决了目前目标检测无法解决的问题。所以,重要性不言而喻。用一个词来形容DeTr:Elegant。因为再也无需设计anchor,添加NMS后处理等等。

发表评论

登录后才能评论