一、目标检测网络的基本构成:
Backbone+Neck+Detection head
Backbone的目标是提取图像中的特征,但是仅仅提取特征是无法完成目标检测的任务的,需要后续的网络从这些提取到的特征中检测目标目标的位置和类别。后续的网络就被称为Detection head。随着技术的发展,为了充分利用好Backbone提取到的特征信息,以和最终的目标检测任务相关,很多结构可以被插在Backbone和Detection head中间,被称为Neck。
二、MMDet代码解读
MMdet是商汤科技和香港中文大学开源的一款基于Pytorch的深度学习目标检测工具箱。该工具箱支持很多检测框架,有了这个框架我们就可以站在前人的肩膀上(mogai)推陈出新。因为大部分企业或者实验室已经在服务器上安装好了框架,在这篇文章中不再赘述,直接快速上手。以下按数据流的顺序进行介绍
2.1dataset
./configs/__base__/datasets/coco_detection中的data_root就是数据路径,train_pipeline是用于图像增强函数的参数文件。
./mmdet/datasets/custom.py中的CustomDataset类完成数据初始化,方法__getitem__按照idx获取训练数据和注释
2.2dataloader
./code/mmdet/datasets/samplers 中的类GroupSampler通过迭代器将数据分batch输入到模型中,
2.3config--创建模型配置的字典
./code/configs 里的模型_base_是相关配置
_base_ = './lsnet_segm_r50_fpn_mstrain_2x_coco.py'
./code/configs/_base_/datasets/coco_detection.py
dataset_type = 'CocoDataset' #数据集目录
data_root = 'data/coco/' #数据集根目录
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) #输入图像初始化,减去均值mean并除以方差std,to_rgb表示将bgr转换为rgb
配置文件的内容回放在一个字典里_cfg_dict(./mmcv/utils/config.py中的@staticmethod def _file2dict实现),这个字典是config类的属性
def __setattr__(self, name, value):
if isinstance(value, dict):
value = ConfigDict(value)
self._cfg_dict.__setattr__(name, value)
cfg中type键的值就是采用backbone的类型,比如FasterCNN
2.4model
./code/mmcv/mmcv/ttils
def build_from_cfg(cfg, registry, default_args=None):
"""Build a module from config dict.
Args:
cfg (dict): Config dict. It should at least contain the key "type".
registry (:obj:`Registry`): The registry to search the type from.
default_args (dict, optional): Default initialization arguments.
Returns:
object: The constructed object.
"""
根据cfg中的type键的值找到registry中对应的类完成初始化
类的初始化在./code/mmdet/models/detectors中two_stage.py
class TwoStageDetector(BaseDetector):
"""Base class for two-stage detectors.
Two-stage detectors typically consisting of a region proposal network and a
task-specific regression head.
"""
2.5优化器
1)
2)