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做一些实际任务已经足够了。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,735评论 0 10
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,837评论 0 5
  • 一不小心,又到了5-12,真是天不遂人愿啊,年年怕过5-12,年年躲不过5-12! 干护理工作好多年了,自以为是一...
    世涂花开阅读 182评论 0 2
  • win7系统下:在cmd下执行:at 23:00 /every:M,T,W,Th,F,S,Su shutdo...
    星星之火666阅读 1,315评论 0 0