一、前言

商汤和港中文联合开源了 mmdetection—基于 PyTorch 的开源目标检测工具包。
工具包支持 Mask RCNN 等多种流行的检测框架,读者可在 PyTorch 环境下测试不同的预训练模型及训练新的检测分割模型。
项目地址:https://github.com/open-mmlab/mmdetection

mmdetection 目标检测工具包

mmdetection 的主要特征可以总结为以下几个方面:

  • 模块化设计:你可以通过连接不同组件轻松构建自定义目标检测框架。
  • 支持多个框架,开箱即用:该工具包直接支持多种流行的检测框架,如 Faster RCNN、Mask RCNN、RetinaNet 等。
  • 高效:所有基础边界框和掩码运算都在 GPU 上运行。不同模型的训练速度大约比 FAIR 的 Detectron 快 5% ~ 20%。
  • 当前最优:这是 MMDet 团队的代码库,该团队赢得了 2018 COCO 检测挑战赛的冠军。
open-mmlab 项目
├─── mmcv    计算机视觉基础库
|    ├── deep learning framework 工具函数(IO/Image/Video )
|    └── PyTorch 训练工具
└─── mmdetection 

其实 mmdetection 很多算法的实现都依赖于 mmcv 库。
第一个版本中实现了 RPN、Fast R-CNN、Faster R-CNN、Mask R-CNN,近期还计划放出 RetinaNet 和 Cascade R-CNN。

先简单与 Detectron 的对比

  • performance 稍高
  • 训练速度稍快
  • 所需显存稍小

performance:由于 PyTorch 官方 model zoo 里面的 ResNet 结构和 Detectron 所用的 ResNet 有细微差别(mmdetection 中可以通过 backbone 的 style 参数指定),导致模型收敛速度不一样,所以我们用两种结构都跑了实验,一般来说在 1x 的 lr schedule 下 Detectron 的会高,但 2x 的结果 PyTorch 的结构会比较高。

速度方面 :Mask R-CNN 差距比较大,其余的很小。采用相同的 setting,Detectron 每个 iteration 需要 0.89s,而 mmdetection 只需要 0.69s。Fast R-CNN 比较例外,比 Detectron 的速度稍慢。另外在我们的服务器上跑 Detectron 会比官方 report 的速度慢 20% 左右,猜测是 FB 的 Big Basin 服务器性能比我们好?

显存方面优势比较明显:会小 30% 左右。但这个和框架有关,不完全是 codebase 优化的功劳。一个让我们比较意外的结果是现在的 codebase 版本跑 ResNet-50 的 Mask R-CNN,每张卡(12 G)可以放 4 张图,比我们比赛时候小了不少。

  1. 性能
    开发者报告了使用使用 caffe-style 和 pytorch-style ResNet 骨干网络的结果,前者的权重来自 Detectron 中 MODEL ZOO 的预训练模型,后者的权重来自官方 model zoo。

  1. 训练速度
    训练速度的单位是 s/iter,数值越低代表速度越高


3. 推断测试
推断速度的单位是 fps (img/s),数值越高代表效果越好。

二、测试与训练

mmdetection 需要以下环境
Linux (tested on Ubuntu 16.04 and CentOS 7.2)
Python 3.4+
PyTorch 0.4.1 and torchvision
Cython
mmcv
windows环境下 Anaconda | python==3.6.6 直接安装

测试和保存运行示例

测试和保存结果:python tools/test.py <CONFIG_FILE> <CHECKPOINT_FILE> --gpus <GPU_NUM> --out <OUT_FILE>
要想执行测试后的评估,你需要添加 --eval <EVAL_TYPES>。支持类型包括:

proposal_fast:使用 mmdetection 的代码求 proposal 的召回率。
proposal: 使用 COCO 提供的官方代码求 proposal 的召回率。
bbox:     使用 COCO 提供的官方代码求 box AP 值。
segm:     使用 COCO 提供的官方代码求 mask AP 值。
keypoints:使用 COCO 提供的官方代码求 keypoint AP 值。

例如,估计使用 8 个 GPU 的 Mask R-CNN,并将结果保存为 results.pkl:

python tools/test.py configs/mask_rcnn_r50_fpn_1x.py \
<CHECKPOINT_FILE> --gpus 8 --out results.pkl --eval bbox segm

在测试过程中可视化结果同样很方便,只需添加一个参数 --show:

python tools/test.py <CONFIG_FILE> <CHECKPOINT_FILE> --show

测试图像

import mmcv
from mmcv.runner import load_checkpoint
from mmdet.models import build_detector
from mmdet.apis import inference_detector, show_result# 导入模型参数
cfg = mmcv.Config.fromfile('configs/faster_rcnn_r50_fpn_1x.py')
cfg.model.pretrained = None# 构建化模型和加载检查点卡
model = build_detector(cfg.model, test_cfg=cfg.test_cfg)
_ = load_checkpoint(model, 'https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection\/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth')# 测试单张图片
img = mmcv.imread('test.jpg')
result = inference_detector(model, img, cfg)
show_result(img, result)# 测试(多张)图片列表
imgs = ['test1.jpg', 'test2.jpg']
for i, result in enumerate(inference_detector(model, imgs, cfg, device='cuda:0')):print(i, imgs[i])show_result(imgs[i], result)

训练模型
mmdetection 使用 MMDistributedDataParallel 和 MMDataParallel 分别实现分布式训练和非分布式训练。

开发者建议在单个机器上也要使用分布式训练,因为它速度更快,而非分布式训练可以用于 debug 或其他目的。

  • 分布式训练
    mmdetection 潜在支持多种 launch 方法,如 PyTorch 的内置 launch utility、 slurm 和 MPI。
    开发者使用 PyTorch 内置的 launch utility 提供训练脚本:
    ./tools/dist_train.sh <CONFIG_FILE> <GPU_NUM> [optional arguments]
    支持的参数有:
    --validate:训练过程中每 k(默认值为 1)个 epoch 执行估计。
    --work_dir <WORK_DIR>:如果指定,配置文件中的路径将被重写。
  • 非分布式训练
    python tools/train.py <CONFIG_FILE> --gpus <GPU_NUM> --work_dir <WORK_DIR> --validate

PyTorch—计算机视觉目标检测 mmdetection相关推荐

  1. 计算机视觉目标检测的框架与过程

    计算机视觉目标检测的框架与过程 FROM:http://blog.csdn.net/zouxy09/article/details/7928771 个人接触机器视觉的时间不长,对于机器学习在目标检测的 ...

  2. 目标检测如何计算召回率_计算机视觉目标检测的框架与过程

    计算机视觉 个人接触机器视觉的时间不长,对于机器学习在目标检测的大体的框架和过程有了一个初步的了解,不知道对不对,如有错误,请各位大牛不吝指点. 目标的检测大体框架: 计算机视觉 目标检测分为以下几个 ...

  3. 深度理解目标检测(MMdetection)-HOOK机制

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|计算机视觉联盟 最近做了一段时间的目标检测,不得不说检测这 ...

  4. 收藏 | 详解目标检测(MMdetection)-Runner

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨却道@知乎 来源丨https://zhuanlan.zhihu.com/p/268571921 编辑丨极 ...

  5. 哇塞,可以使用PyTorch实现目标检测与跟踪,这不有趣多了

    引言 在昨天的文章中,我们介绍了如何在PyTorch中使用您自己的图像来训练图像分类器,然后使用它来进行图像识别.本文将展示如何使用预训练的分类器检测图像中的多个对象,并在视频中跟踪它们. 图像中的目 ...

  6. 计算机视觉-目标检测(一):从 R-CNN 到 Faster R-CNN

    文章目录 1. 概要 2. 区域卷积卷积神经网络R-CNN 2.1 模型结构 2.2 Selective Search 2.3 warp 2.4 R-CNN训练 2.5 R-CNN推理 2.6 R-C ...

  7. 使用PyTorch实现目标检测与跟踪

    欢迎关注 "小白玩转Python",发现更多 "有趣" 引言 在昨天的文章中,我们介绍了如何在PyTorch中使用您自己的图像来训练图像分类器,然后使用它来进行 ...

  8. 【计算机视觉 | 目标检测】CORA: Adapting CLIP for Open-Vocabulary Detection with Region Prompting and Anchor

    基于区域提示和锚点预匹配的开放词汇检测. CORA 在目标检测任务中提出了一种新的 CLIP 预训练模型适配方法,主要包括 Region Prompting 和 Anchor Pre-Matching ...

  9. CVPR2020最全整理:分方向论文下载,Github源码、论文解读等[计算机视觉][目标检测]

    CVPR2020在2月24日公布了所有接受论文ID,相关报道:1470篇!CVPR2020结果出炉,你中了吗?(附部分论文链接/开源代码/解读).自论文ID公布以来,许多开发者都分享了自己的优秀工作. ...

最新文章

  1. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
  2. webpack 热替换和热重载
  3. java 队列_用Java实现队列
  4. Linux C 的风格
  5. 程序设计和c语言ppt,程序设计和C语言.ppt
  6. Z.ExtensionMethods 一个强大的开源扩展库
  7. golang 日志分析_容器日志采集利器:Filebeat深度剖析与实践
  8. 如何下载防盗链的歌曲?
  9. 计算机网络之传输层:7、TCP拥塞控制
  10. easyui datagrid 列中的checkbox 动态绑定
  11. 小球碰撞(面向对象)
  12. 用摄动法证明fibs的一个公式(变形)
  13. python如何连接sql_python连接SQL数据库
  14. Hybrid App 开发快速指南
  15. pdman 创建表同步数据库_PDMan-2.0 正式发布:用心开源,免费的国产数据库建模工具PowerDesigner...
  16. 硬件测试必需的5个流程,每一个步骤都不能少!
  17. 在线翻译PDF文件用什么方法
  18. 攻略 | 教你拿下梦寐以求的Offer(多资源)
  19. 校验字符串是否是汉语拼音
  20. 面试过程中如何介绍自己?最大优缺点?加班?薪资?

热门文章

  1. 基于PHP开发的云平台网络课堂教学学习互动平台设计
  2. html文件太大,怎样压缩文件(文件太大怎么办)
  3. Swift语言入门学习
  4. 【Activiti】PersistenceException,MySQLSyntaxErrorException,order by RES.ID_ asc LIMIT 1 OFFSET 0
  5. 【汇正财经】股票上市交易的费用都有哪些?
  6. 如何制作一个高转化的广告落地页(文末有福利)
  7. Acrel-3000电能管理系统保证企业生产人员的生命安全,提高生产人员的工作效率
  8. JavaScript数组方法大全(分为会不会改变原数组)
  9. 【Linux】内核驱动篇九--设备模型
  10. BZOJ 3876 AHOI2014 支线剧情 费用流