前言:让我惊艳的几个库:

  1. ultralytics的yolov3,在一众yolov3的pytorch版本实现算法中脱颖而出,收到开发人员的欢迎,比别的库明显好的点在于,与darknet相似度达到极高的水平,支持自定义cfg文件的加载,简直完美。
  2. michuanhaohao的reid-strong-baseline, 这个库很严谨的将代码划分为几个部分,每个部分只做一小部分的工作,其中使用到了ignite, pytorch的一个高阶抽象库,感觉在遇到问题的时候比较难去debug。
  3. open-mmlab的mmdetection, 这个库不仅开源,还有一个技术报告,感觉写的实在太好了。现在一搜索mmdetection全都是配置,运行相关的,这用你讲解么,人家readme上写的很详细,感觉关键还是在于他设计以及整合所有目标检测,分割的框架,这个才是关键。

这篇博客记录一下读mmdetection技术报告的关键内容以及翻译。

来源:MMDetection: Open MMLab Detection Toolbox and Benchmark

1. 简介

mmdetection是一个目标检测工具箱,包含了很多单阶段,多阶段检测和目标分割的算法。该开源库内容上包括训练,测试,模型权重下载等。mmdetection包含了使用不同方法实现的基线,可以用来作为已有算法的复现。

mmdetection主要特征有:

  • 模块化设计,将检测或者分割任务分解成几个模块,通过模块的组合即可完成相应的任务。
  • 开箱即用,实现了多种目标检测和分割算法,易于配置和使用。
  • 效率很高,相比其他几个benchmark(Detectron, markrcnn-benchmark, SimpleDet), mmdetection对GPU的占用要低一点。
  • SOTA, 达到了目前最先进的水平。

mmdetection中还涉及了分享他们对训练目标检测器的一些体验和实践(感谢open-mmlab)

2. 支持的算法

  • Single-stage Methods:

    • SSD, RetinaNet, GHM, FCOS, FSAF

    • 没有YOLO官方解释是说YOLOv3源码不是主流的backbone,也没有基于主流的深度学习框架,pipline与其他方法不太相同。

      Maybe some historical reasons. YOLO is firstly implemented with neither mainstream backbones or mainstream DL frameworks, and the pipeline is different from other methods, so it is not as popular as SSD or Faster R-CNN and their variants.

  • Two-stage Methods:
    • Fast R-CNN, Faster R-CNN, R-FCN, Mask R-CNN, Grid R-CNN
    • Mask Scoring R-CNN, Double Head R-CNN
  • Multi-stage Methods:

    • Cascade R-CNN, Hybird Task Cascade
  • 通用的模块和方法:
    • Mixed Precision Trainning, fp16的意思就是floating point
    • Soft NMS, OHEM, DCN, DCNv2, Train from Scratch
    • StratchDet, M2Det, GCNet, Generalized Attention
    • SyncBN, Group Normalization, Weight Standardization
    • HRNet, Guided Anchoring, Libra R-CNN

以上的算法以及涉及到的文章原论文中都有链接,大部分的文章都有必要读一下,理解一下其中的精髓,即便不实现,也要看看。

3. 框架与架构

这部分主要讲的是整个库设计的框架,进行模块化,抽象程度比较高。如果不知道这个框架,感觉直接读源码还是有点吃力的。

在mmdetection中,将所有的检测器进行抽象成以下几个类(class):

  1. backbone: 骨干网络,用于从图片中提取特征
  2. Nect: (脖子很形象)用于连接backbone和head, 主要是对backbone提取得到的feature map进行修正或者组合,常见的就是FPN(FPN中核心就是多维度特征组合的方法, 将三个尺度得到的feature map进行组合)
  3. DenseHead(AnchorHead/AnchorFreeHead): 对特征图的密集位置进行操作(dense location),包括:AnchorHead, AnchorFreeHead。
  4. ROIExtractor: 从单个或者多个feature map中提取ROI, 最经典的是RoIPooling
  5. RoIHead (BBoxHead/MaskHead): 将ROI提取得到的feature作为输入, 进行基于任务的预测,如:预测坐标和类别,bbox预测与回归,mask预测。

示意图如下:

  • 单阶段检测器

    主要看SSD, RetinaNet, YOLO等思想,端到端的解决方案。

    以YOLOv3为例:(mmdetection没有实现yolo,具体实现可以看一下ultralytics的yolov3)

    • Backbone是darknet53。
    • Nect是YOLOv3进行的特征融合操作,将当前层与浅层特征进行融合。
    • DenseHead就是YOLO层,输入为Nect融合特征后得到的特征,输入就是回归的bbox以及类别
  • 两阶段检测器

    经典例子是Faster R-CNN, 这里附上一个cascade R-CNN论文中的图示。(最左侧就是Faster R-CNN)

    R-CNN细节讲解博客:http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

    • conv : 代表backbone, 进行特征提取操作。
    • H0, C0, B0 组成的整体: 代表DenseHead,对特征图的密集位置进行操作
    • H1, C1, B1组成的整体就是ROIHead
    • pool: 功能上就是ROIExtractor, 从单个或者多个feature map中提取ROI
  • 总结一下,每个部分大概做啥:

    模块 功能/作用
    Backbone 提取图片特征
    Neck 将提取得到的特征进行融合或者直接用提取的特征
    DenseHead 类似RPN,也类似yololayer, 从特征图中得到框的信息,类的信息
    ROIExtractor 结合DenseHead提出的框以及Neck得到的特征进行特征提取
    RoIHead 将从ROIExtractor中提取得到的内容进行任务的预测

    ## 4. 训练pipline

技术报告中提出了一个可供目标检测,图像分类,语义分割使用的训练pipline。为了让这个pipline更加灵活和简单,首先定义了一个最小的训练流程,然后提供了挂钩机制(hooking mechanism),可以将上图右侧的一些功能加载到基础训练流程中。挂载到几个时间点上:

  • before run

  • before train epoch
  • before train iter
  • after train iter
  • after train epoch
  • before val epoch
  • after val epoch
  • before val iter
  • after val iter

这就是基础架构


还有一系列实验结果在论文中,在model zoo中也可以找到:https://github.com/open-mmlab/mmdetection/blob/master/docs/MODEL_ZOO.md

6. 相关链接

model zoo: https://github.com/open-mmlab/mmdetection/blob/master/docs/MODEL_ZOO.md

github库地址:https://github.com/open-mmlab/mmdetection

安装:https://github.com/open-mmlab/mmdetection/blob/master/docs/INSTALL.md

常用命令:https://github.com/open-mmlab/mmdetection/blob/master/docs/GETTING_STARTED.md

目标检测框架mmdetection入门:https://zhuanlan.zhihu.com/c_1159526395804725248

商汤开源的mmdetection技术报告的更多相关文章

  1. 旷视向左、商汤向右,AI一哥之名将落谁家

    编辑 | 于斌 出品 | 于见(mpyujian) AI风口历经多年洗礼之后,真正意义上的AI第一股终于要来了. 相比于聚焦在语音识别技术上的科大讯飞.立足互联网产业的百度.发力人形机器人领域的优必选 ...

  2. Java开源生鲜电商平台-系统架构与技术选型(源码可下载)

    Java开源生鲜电商平台-系统架构与技术选型(源码可下载) 1.  硬件环境 公司服务器 2.   软件环境 2.1  操作系统 Linux CentOS 6.8系列 2.2 反向代理/web服务器 ...

  3. 商汤科技汤晓鸥:其实不存在AI行业,唯一存在的是“AI+“行业

    https://mp.weixin.qq.com/s/bU-TFh8lBAF5L0JrWEGgUQ 9 月 17 日,2018 世界人工智能大会在上海召开,在上午主论坛大会上,商汤科技联合创始人汤晓鸥 ...

  4. TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台

    本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...

  5. 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区

    以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区 以正确的方式开源 Python 项目 英文原文:Open Sourcing a Python Project the Right ...

  6. rsync技术报告(翻译)

    本篇为rsync官方推荐技术报告rsync technical report的翻译,主要内容是Rsync的算法原理以及rsync实现这些原理的方法.翻译过程中,在某些不易理解的地方加上了译者本人的注释 ...

  7. 开源大数据技术专场(下午):Databircks、Intel、阿里、梨视频的技术实践

    摘要: 本论坛第一次聚集阿里Hadoop.Spark.Hbase.Jtorm各领域的技术专家,讲述Hadoop生态的过去现在未来及阿里在Hadoop大生态领域的实践与探索. 开源大数据技术专场下午场在 ...

  8. 开源大数据技术专场(上午):Spark、HBase、JStorm应用与实践

    16日上午9点,2016云栖大会“开源大数据技术专场” (全天)在阿里云技术专家封神的主持下开启.通过封神了解到,在上午的专场中,阿里云高级技术专家无谓.阿里云技术专家封神.阿里巴巴中间件技术部高级技 ...

  9. 技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构

    技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构 最近几周Paloalto Networks的研究人员注意到,APT组织Wekby对美国的部分秘密机构展开了一次攻击 ...

随机推荐

  1. php 3.2 生成压缩文件,并下载

    public function zip_download() { $array = array( 'http://local.qki.com/site_upload/erweima/20190826/ ...

  2. jenkins-不能启动

    FROM centos RUN docker run -tdi --privileged centos init ADD jdk-8u171-linux-x64.tar.gz /usr/local A ...

  3. 14、OpenCV实现图像的空间滤波——图像锐化及边缘检测

    1.图像锐化理论基础 1.锐化的概念 图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反.而且从算子可以看出来,平滑是基于对图像领域的加 ...

  4. 获取本机IP地址[JavaScript / Node.js]

    --web客户端JavaScript <body onload="checkCookie()"></body> function getYourIP(){ ...

  5. ASP.NET CORE(C#)与Spring Boot MVC(JAVA)

    干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结   目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方 ...

  6. solr查询返回有中括号【可用】

    看图 解决方法: 两个core名称一样就对了 有些版本的solr就是schema.xml文件 这个方法好像不行,再找找看,先记录一下 2019-06-29 改完上面后要重启加载一下core 先看一下

  7. stl 自定义排序与删除重复元素

    转: STL—vector删除重复元素 STL提供了很多实用的算法,这里主要讲解sort和unique算法. 删除重复元素,首先将vector排序. sort( vecSrc.begin(), vec ...

  8. 对比JPA 和Hibernate 和 Mybatis的区别

    1.JPA.Hibernate.Mybatis简单了解 1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现. 2.Hibernate:目前最流行的ORM框架,设计灵巧,文档丰富 ...

  9. Python--递归函数实现:多维嵌套字典数据无限遍历

    原创:多层嵌套字典无限遍历,实现当value值以特殊字符$开头,并且等于某项值时,用随机函数替换该参数 """处理前的字典{'patient': {'avatarPic' ...

  10. Python爬虫刷回复

    最近闲的无聊,就想着去看看爬虫,顺着爬虫顺利的做到了模拟登录.刷帖子等等,这里简要说一下. 使用Python2.7写的爬虫,对某论坛做模拟登陆和刷帖子.回复等等,由于之前是没有接触过爬虫,这次之后感觉 ...