detectron框架初探

Detectron是Facebook AI研究院(FAIR)于2018年初公开的目标检测平台,包含了大量业内最具代表性的目标检测、图像分割、关键点检测算法。该框架主要基于python和caffe2实现,部分底层代码由c++实现,另外部分算法如group normal(GN)则是基于pytorch框架。由于本人平时的工作主要与目标检测相关,后面主要一起学习下detectron框架下的一系列目标检测算法及源码。本文为第一篇博客,主要介绍下detectron的安装以及目录结构、主要算法,后续文章会深入研讨下源码、算法细节、及本人学习过程中的一些心得。

1.detectron框架的安装及详细信息

        detectron框架目前只支持linux系统以及NVIDIA GPU硬件,在安装detectron之前需具备的环境为python2,caffe2及相关的依赖库、cuda等。另外,如果用coco数据集形式的数据,还需安装coco API。废话不多说,以下为各组件安装地址。

cuda下载地址:https://developer.nvidia.com/cuda-downloads

cuda安装教程:https://blog.csdn.net/sinat_24143931/article/details/78690059

caffe2安装地址:https://caffe2.ai/docs/getting-started.html?platform=windows&configuration=compile

detectron安装地址:https://github.com/facebookresearch/Detectron/blob/master/INSTALL.md

coco API安装地址:https://github.com/cocodataset/cocoapi

了解更详细更全面的信息可参考detectron官方的github:https://github.c om/facebookresearch/Detectron

        安装的过程会可能会遇到各种问题,大家根据报错的提示信息在github或google上搜索,一般都能解决。少数仍然解决不了的,可以在Facebookresearch/Detectron的github官网提问。

2. detectron目录结构

        正确安装detectron后,在detectron目录下一般会有如下几个比较重要的目录:configs、detectron(lib)、tools。

        其中configs目录下全部存放的是模型训练的各种yaml配置文件。在detectron框架中进行训练及测试时,不同的配置文件决定了不同的算法模型结构及训练、测试参数。官方给出了大量的示例yaml配置,这些配置在公开数据集上跑出的效果优异。一般,我们可以针对自己实际情况进行修改。

        tools目录下主要存放detectron中的一些拓展功能脚本,如train_net.py为训练过程的启动文件,test_net.py为测试过程的启动文件,infer_simple.py允许根据yaml配置文件及训练好的模型对图片进行推断,pickle_caffe_blobs.py文件可以根据caffe的模型文件及caffe的网络定义prototxt文件将caffe的模型转换为满足detectron格式要求的.pkl文件。

        detectron(lib)目录为整个工程的核心目录,其子目录有core、datasets、modeling、opt、roi_data、tests、utils。core目录中主要有config.py文件及生成rpn的rpn_generator.py及部分测试核心代码(test.py,test_engine.py,test_retinanet.py),对于入门者大致研究明白包含所有配置参数的config.py文件对于学习detectron已十分难得。datasets目录顾名思义主要就是存放数据集以及与数据集读取、定义相关的文件。这里主要支持coco数据集,在datasets/data/coco目录下,一般分Annotations以及coco_train/coco_val/coco_test几个文件目录。Annotations存放json格式的训练/验证/测试数据的图片名、ground truth、图片高宽等信息,而coco_train/coco_val/coco_test中存放相应图片。modeling目录下主要存放模型定义的组成脚本,如model_builder.py主要定义了算法的基本形式,这里主要有三种faster_rcnn、rfcn以及retinanet。FPN.py、resnet.py、vgg16.py、vgg_cnn_M_1024.py等文件定义了检测算法中特征提取网络部分,我们也可以根据需要自己添加或修改特征提取网络部分。fast_rcnn_heads.py 、mask_rcnn_heads.py 、retinanet_head.py、rfcn_heads.py定义了各种头部。roi_data目录中的文件主要定义detectron中数据的加载及处理细节,其中loader.py定义了数据加载方式,minibatch.py定义数据进入网络前的增强及过滤方式,我们也可以根据需要修改源码加入想要的图片预处理。utils目录下文件包含较广泛,lr_policy.py定义了训练中的优化策略,net.py主要定义了以权重文件初始化网络及在各gpu中broadcast各层网络参数、及从内存中将权重文件保存到硬盘的细节。detectron(lib)目录下还有其他比较重要的文件,部分文件笔者尚未完全弄明白,这里就不做讲解了。

3.detectron中包含的主要算法

        开源框架detectron中包含的目标检测相关的算法有不同特征提取网络及头部的二阶段检测算法faster rcnn、一阶段检测算法中性能比较不错的retinate,以及rpn网络 ,其中在detectron/modeling下又包含VGG16、VGG_CNN_1024、Resnet50、Resnet101、ResXnet系列、FPN等。此外,框架中还引用了一些其他提升性能的算法如Batch Normal 、Group Normal 、warm up策略、多尺度训练/测试、数据增广、focal loss、soft NMS、boundingbox voting等。比较遗憾的是,并没有包含SSD以及YOLO算法。另外,由于是基于深度学习框架caffe2,一些比较好的基于tensorflow及pytorch的算法也不易植入detectron中。不过对于一般目标检测项目而言,如果能用detectron做一些实际任务已经足够了。

第一次写博客,希望通过这种方式对自己的学习做下整理和记录,也希望能与同行多多交流进步。写的比较仓促,部分地方没有特别仔细推敲,大体是根据之前了解的情况记录下来的。如果有错误的地方,请大家多多指教。

你可能感兴趣的:(detectron框架初探)