Skip to content

Commit

Permalink
update: mmdetection
Browse files Browse the repository at this point in the history
  • Loading branch information
ming71 committed Sep 21, 2019
1 parent 3001551 commit d9d0315
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 6 deletions.
2 changes: 1 addition & 1 deletion ch08_目标检测/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

更新日志:**

2019.9.20(明奇):新增DOTA数据集、目标检测的训练tricks、数据增强方法
2019.9.20(明奇):新增DOTA数据集、目标检测的训练tricks、数据增强方法、CBNet、DetNet

2019.01.05(陈方杰):新增8.3节One-Stage检测算法:M2Det

Expand Down
109 changes: 105 additions & 4 deletions ch08_目标检测/第八章_目标检测.md
Original file line number Diff line number Diff line change
Expand Up @@ -354,11 +354,12 @@ RoI Align的思路很简单:取消量化操作,使用双线性内插的方

![](img/ch8/Mask R-CNN-04.png)


### 8.2.7 DetNet(贡献者:北京理工大学--明奇)

1. **Motivation**
&emsp;&emsp;这个论文的insight不错。作者在related works观察总结到,很多backbone的提出都是用于挑战ImageNet分类任务后被应用到检测上来,因此鲜有单独<u>针对检测任务设计的backbone</u>。
DetNet是发表在ECCV2018的论文,比较新,出发点是现有的检测任务backbone都是从分类任务衍生而来的,因此作者想针对检测专用的backbone做一些讨论和研究而设计了DetNet,思路比较新奇。

1. **Introduction**
&emsp;&emsp;很多backbone的提出都是用于挑战ImageNet分类任务后被应用到检测上来,而鲜有单独<u>针对检测任务设计的backbone</u>。

&emsp;&emsp;**检测和分类有明显的区别**:(1)不仅需要分类,还需要精确的定位 (2)最近的检测器都是基于类似FPN结构,在分类网络基础上加额外多尺度特征进行检测,应对不同尺度变化的目标。这两点又是相互补充,共同协助网络完成分类到检测任务的转变。例如分类任务是检测的一环所以必不可少,但是传统分类采用的最高级特征定位细节不够,因此很多最近网络设法用类似FPN的结构去处理尺度变化的问题,就将分类较好地过渡到检测任务上了。

Expand Down Expand Up @@ -423,6 +424,58 @@ RoI Align的思路很简单:取消量化操作,使用双线性内插的方
![](img/ch8/DetNet-8.png)


### 8.2.8 CBNet
本部分介绍一篇在COCO数据集达到最高单模型性能——mAP 53.3的网络,论文于2019.9.3发布在ArXiv,全名是*CBNet: A Novel Composite Backbone Network Architecture for Object Detection*

1. **Introduction**

&emsp;&emsp;名义上是单模型,实际是多模型的特征融合,只是和真正的多模型策略略有不同。作者的起点是,设计新的模型往往需要在ImageNet上进行预训练,比较麻烦。因而提出的Composite Backbone Network (CBNet),采用经典网络的多重组合的方式构建网络,一方面可以提取到更有效的特征,另一方面也能够直接用现成的预训练参数(如ResNet,ResNeXt等)比较简单高效。

2. **Proposed method**
![](img/ch8/CBNet-1.png)
2.1 **Architecture of CBNet**
![](img/ch8/CBNet-2.png)

&emsp;&emsp;如上图,模型中采用K个(K>1)相同的结构进行紧密联结。其中两个相同backbone的叫Dual-Backbone (DB),三个叫Triple- Backbone (TB);L代表backbone的stage数目,这里统一设置为L=5。其中,和前任工作不同的地方在于,这里将不同的stage信息进行复用回传,以便获取更好的特征(为什么work不好说)。

2.2 **Other possible composite styles**
![](img/ch8/CBNet-3.png)

&emsp;&emsp;相关工作的其他类似结构,大同小异。要么是前面backbone的stage往后传播,要么是往前一个传播,每个都有一篇论文,应该都会给出不同的解释;第四个结构不太一样,是类似densnet的结构,但是密集连接+多backbone assemble的内存消耗不出意外会非常大。但是脱离这些体系来看,多backbone的结构类似多模型的assemble,和单模型有点不公平。



3. **Experiment**


* **result**
![](img/ch8/CBNet-4.png)

COCO数据集上的结果。看来提升还是有的。但是也能看出,大趋势上,三阶级联效果不如两阶的提升大,也是这部分的特征提升空间有限的缘故,到底哪部分在work不好说。下图的研究就更说明这一点了,斜率逐渐减小。


* **Comparisons of different composite styles**
![](img/ch8/CBNet-5.png)

他的级联网络相比,作者的阐述点只落脚于特征的利用情况,但是这个东西本身就很玄乎,不好说到底怎么算利用得好。硬要说这种做法的解释性,大概就是将backbone方向的后面高级语义特征传播回前面进行加强,相当于横向的FPN传播。


* **Number of backbones in CBNet**
![](img/ch8/CBNet-6.png)

速度慢是必然的,FPN+ResNeXt为8fps,加上两个backboen后为5.5FPS;如果减去backbone的前两个stage,可以节省部分参数达到6.9FPS,而精度下降不大(整体速度太低,这个实验意义不大)

* **Sharing weights for CBNet**
![](img/ch8/CBNet-7.png)
*
从中可以看出其实权重是否share区别不大, 不到一个点的降幅,参数量减少。


* **Effectiveness of basic feature enhancement by CBNet**
![](img/ch8/CBNet-8.png)

从中可以看出激活响应效果更好,确实是能够提取到更为有效的特征,对物体的响应更加敏感。


## 8.3 One Stage目标检测算法

Expand Down Expand Up @@ -1355,6 +1408,54 @@ Anno-Mage:一个利用深度学习模型半自动图像标注工具,预训
​ 当然还有一些数据标注公司,可能包含更多标注功能,例如对三维目标检测的标注(3D Bounding box Labelling),激光雷达点云的标注(LIDAR 3D Point Cloud Labeling)等。





## 8.8 目标检测工具和框架
各种不同的算法虽然部分官方会有公布代码,或者github上有人复现,但是囿于安装环境不一,实现的框架(pytorch、C++、Caffee、tensorflow、MXNet等)不同,每次更换算法都需要重新安装环境,并且代码之间的迁移性差,十分不方便。所以为了方便将不同的算法统一在一个代码库中,不同的大厂都提出了自己的解决方案。如facebook的Detectron、商汤科技的mmdetection、SimpleDet等。其中Detectron最早,所以用户量最大,其次是国内近段时间崛起的mmdetection,下面介绍该目标检测工具箱。


1. **Introduction**
MMdetection的特点:
* 模块化设计:将不同网络的部分进行切割,模块之间具有很高的复用性和独立性(十分便利,可以任意组合)
* 高效的内存使用
* SOTA

2. **Support Frameworks**
* 单阶段检测器
SSD、RetinaNet、FCOS、FSAF

* 两阶段检测器
Faster R-CNN、R-FCN、Mask R-CNN、Mask Scoring R-CNN、Grid R-CNN

* 多阶段检测器
Cascade R-CNN、Hybrid Task Cascade

* 通用模块和方法
soft-NMS、DCN、OHEN、Train from Scratch 、M2Det 、GN 、HRNet 、Libra R-CNN

3. **Architecture**

模型表征:划分为以下几个模块:
Backbone(ResNet等)、Neck(FPN)、DenseHead(AnchorHead)、RoIExtractor、RoIHead(BBoxHead/MaskHead)
结构图如下:
![](./img/ch8/mmdetection.png)

4. **Notice**
* 1x代表12epoch的COCO训练,2x类似推导
* 由于batch-size一般比较小(1/2这样的量级),所以大多数地方默认冻结BN层。可以使用GN代替。

5. **参考链接**
mmdetection代码高度模块化,十分好用和便利,更详细的文档直接参见官方文档:
https://github.com/open-mmlab/mmdetection

注释版的mmdetection代码(更新至v1.0.0):https://github.com/ming71/mmdetection-annotated

使用方法简介:
安装记录(可能过时,以官方文档为准):https://ming71.github.io/mmdetection-memo.html
使用方法(截止更新日期,如果过时以官方为准):https://ming71.github.io/mmdetection-instruction.html


## TODO

- [ ] 目标检测基础知识:mAP、IoU和NMS等
Expand Down Expand Up @@ -1403,4 +1504,4 @@ https://blog.csdn.net/hw5226349/article/details/78987385

[13] Liu S, Huang D. Receptive field block net for accurate and fast object detection[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 385-400.

[14] Zhao Q, Sheng T, Wang Y, et al. M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network[J]. arXiv preprint arXiv:1811.04533, 2018.
[14] Zhao Q, Sheng T, Wang Y, et al. M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network[J]. arXiv preprint arXiv:1811.04533, 2018.
1 change: 0 additions & 1 deletion ch09_图像分割/第九章_图像分割.md
Original file line number Diff line number Diff line change
Expand Up @@ -866,7 +866,6 @@ PQ的度量可以分解成SQ和RQ,SQ反映了语义分割的像素级IoU性能
<br>
<br>
<hr />

TODO

- [ ] 图像分割数据集标注工具
Expand Down

0 comments on commit d9d0315

Please sign in to comment.