文章目录
项目背景
论文:https://arxiv.org/abs/1909.13226
源码:https://github.com/xieenze/PolarMask
mmdetection简介
1 MMdetection的主要特点:
- 模块化设计,将检测框架分解为不同的组件,通过将不同的组件组合起来可以轻易地构建出经典的检测框架;
- 支持多个框架,开箱即用,例如Faster RCNN、Mask RCNN、RetinaNet等
- 高效,所有的bbox和mask都在GPU上进行运算
2 组件的四种类型
- backone,通常是FCN网络,用于提取特征图,如ResNet
- neck,backbone和heads之间的部分,例如FPN,ASPP
- head,用于特定任务的部分,例如bbox预测和mask预测
- roi extractor,用于从特征图中提取特征部分,例如RoI Align
3 一些理解
使用基本组件建立模型
- 遵循一些基本检测流程(例如two-stage detectors),可以通过配置文件的方式轻松定制模型结构。也可以设计自己的backbone、neck、head、roi extractor等组件,用于定制自己的detector。具体的可以参见帮助文档。
- 实现一个新的组件,例如the path aggregation FPN结构pafpn.py
(1)在mmdet/models/necks/pafpn.py里编写PAFPN网络结构
(2)在mmdet/models/necks/init.py里from.pafpn import PAFPN,对组件进行注册引用
(3)修改config文件,将neck部分的FPN改成定制的PAFPN,这样这个便完成了FPN的个性化修改。
(4)其它部分组件的修改backbones,neck,heads与上面相同 - 写一个新的全新的detector,需要编写一个新的技术路线,继承BaseDetector,必须定义以下abstract method:
(1) extract_feat()
(2)forward_train()
(3)simple_test()
(4)aug_test()
具体的写法有需要的时候可以参考TwoStageDetector
PolarMask安装
安装script
# Create a conda virtual environment and activate it. Then install Cython.
conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab
conda install cython
# Install PyTorch stable
# eg:conda install pytorch torchvision cudatoolkit=9.2 -c pytorch
# Clone the mmdetection repository and install.
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
# install
pip install -r requirements.txt
python setup.py develop
# or "pip install -v -e ."
# go to the PolarMask root dir and install
cd PolarMask
python setup.py develop
# or "pip install -v -e ."
安装过程报错
- No module named 'Polygon‘:
pip install Polygon3 - cannot import name ‘get_dist_info’ from ‘mmcv.runner.utils’: PolarMask/mmdet/datasets/loader/sampler.py中from mmcv.runner.utils import get_dist_info变为from mmcv.runner import get_dist_info
PolarMask项目架构
项目构架图
key repository structure
├── config
│ ├── polarmask
│ │ ├── 4gpu # polarmask模型的配置文件,xxx.py
│ │ ├── 32gpu
├── demo
├── imgs
├── mmdet
│ ├── apis
│ ├── core
│ ├── datasets # model builder
│ │ ├── loader
│ │ ├── coco_seg.py # 将coco数据集转为polar representation的核心代码
│ │ ├── coco_seg_fast.py
│ ├── models
│ │ ├── anchor_heads
│ │ │ ├── polarmask_head.py
│ │ ├── detectors
│ │ │ ├── polarmask.py # polarmask的网络构架搭建
│ ├── ops
│ ├── utils
└── README.md