Detectron结构解析

Detectron是Facebook AI Research 的开源项目。主要是faster RCNN系列的大神们,将Mask RCNN,RetinaNet,Faster RCNN,RPN等算法集合到了一个框架下,方便研究人员使用。

科研人员除了科研能力,如果能具备优秀的工程能力,将是非常棒的。本文记录了detectron pytorch版本的代码结构笔记,一起来学习一下大神优美的工程架构。
detection pytorch link: https://github.com/roytseng-tw/Detectron.pytorch

Detectron:

主要包含以下五个文件夹。

1、configs:
2、data
3、lib
4、tools
5、Outputs
——————————————————————————————————————————————
下边继续介绍这些文件夹

configs

这个文件夹目录下全部存放的是模型训练的各种yaml配置文件,你想要选什么样的模型组合,可在这里挑选,并且可以修改其中的一些参数。
包含三个文件夹:baselines、getting_started、gn_baselines
一般选baselines里边的模型就行了。

tools

这个文件夹放一些自己添加的常用的工具脚本文件,比较重要的两个文件有train_net.py 和 test_net.py,这两个文件分别是训练和测试的初始加载文件。

Outputs

这个文件夹中保存的是训练的模型已经测试的结果
模型保存在 ckpt
测试结果在 test中,可视化结果在test中的vis里。

data

这是存放数据集的地方,可以按照VOC的形式存放。


Detectron结构解析_第1张图片
VOC形式 [2]

——————————————————————————————————————————————

注意,最最最关键的核心代码都在这里!

lib

lib 包含 datasets、core、model、modeling、nn、roi_data

下边继续逐个介绍这些文件夹以及里边的文件

1、datasets

dataset_catalog.py:跟所读取的数据相关的路径参数的配置代码。
roidb.py、json_dataset.py:读取数据构建数据结构roidb的代码。
voc_dataset_evaluator.py和voc_eval.py:测试与结果评估涉及的代码。

在目标检测类任务中, 有一个很重要的数据结构roidb, 它将作为基本的数据结构在数据队列中存在, Detection 的数据载入类 RoIDdataLoader 也是将该数据结构作为成员变量使用的。

Detectron结构解析_第2张图片
roidb [1]

2、core

这个文件夹中主要包含一下几个文件:
config.py: 配置一些超参数的地方。
test_engine.py:调用tools/test_net.py后就会调用到这个文件,然后去调用datasets 里边的 roidb.py、json_dataset.py读取数据构建roidb,然后再通过模型推断出预测的结果,最后进行结果的评估。
test.py: 测试的过程需要用到的一些函数封装好在这个文件中。

3、model

3.1、nms:非极大抑制算法,应用相当广泛,其主要目的是消除多余的框,找到最佳的物体检测位置。
3.2、roi_align: ROI Align 是在Mask-RCNN这篇论文里提出的一种区域特征聚集方式, 很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。实验显示,在检测测任务中将 ROI Pooling 替换为 ROI Align 可以提升检测模型的准确性 [3]。
3.3 roi_crop:传统的CNN限制了输入必须固定大小(比如AlexNet是224x224),所以需要进行裁剪,在实际使用中往往需要对原图片进行crop或者warp的操作 [4]。

crop:截取原图片的一个固定大小的patch
warp:将原图片的ROI缩放到一个固定大小的patch

crop和warp都无法保证在不失真的情况下将图片传入到CNN当中:

crop:物体可能会产生截断,尤其是长宽比大的图片.
warp:物体被拉伸,失去“原形”,尤其是长宽比大的图片

3.4 roi_pooling:为了解决 crop和warp带来的问题(截断、失去“原形”)而提出的。
3.5 utils: 里边就包含一个文件net_utils.py, 该文件中封装了一些跟网络本身有关的函数,比如权重初始化。

4、modeling

这个文件夹中存放的是一些网络结构的文件,比如resnet、fpn、fast_rcnn_heads等等,接下来我将一一介绍。

5、nn

5.1 modules: 包含(normalization.py 和 upsample.py)
5.2 parallel:用于并行计算的文件

6、roi_data

包含生成roi相关的文件。

7、utils

工具文件存放的文件夹

参考文献

1、https://hellozhaozheng.github.io/z_post/Caffe2-Detectron1-roidb%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/
2、https://blog.csdn.net/mr_health/article/details/80676799
3、https://blog.csdn.net/wfei101/article/details/79618567
4、https://blog.csdn.net/weixin_43872578/article/details/87897857

你可能感兴趣的:(Detectron结构解析)