资讯详情

「记录」MMDetection入门篇

OpenMMLab通过深度学习,是一个高级库OpenMMLab 软件栈可以看出,低层仍然使用 Pytorch,因此用户并不是在学一个全新的库,而是更加高级,更加方便的Pytorch库,OpenMMLab它能给用户带来更高的效率,使用户只关注核心算法,而不必在配置文件上浪费更多的时间

MMdet 主要由 4 部分组成,datasets、models、core 和 apis 另外,MMCV 是面向整个 OpenMMLab 所有开源库均为通用类和工具类,方便下游各类 codebase 复用

backbone

mmdet/models/backbones

__all__ = [ 'RegNet', 'ResNet', 'ResNetV1d', 'ResNeXt', 'SSDVGG', 'HRNet', 'Res2Net',       'HourglassNet', 'DetectoRS_ResNet', 'DetectoRS_ResNeXt', 'Darknet',       'ResNeSt', 'TridentResNet' ] 

通过 MMCV 你可以通过注册机制 dict 任何注册类别的形式配置都非常方便灵活。

# 骨架预训练权重路径 pretrained='torchvision://resnet50',  backbone=dict(     type='ResNet', # 骨架类名,以下参数是该类的初始参数     depth=50,     num_stages=4,     out_indices=(0, 1, 2, 3),     frozen_stages=1,     norm_cfg=dict(type='BN', requires_grad=True),      norm_eval=True,     style='pytorch'), 

neck

neck 可以认为是 backbone 和 head 主要负责连接层 backbone 高效融合和增强特性,可以整合和增强输入的单尺度或多尺度特性。 mmdet/models/necks

__all__ = [     'FPN', 'BFP', 'ChannelMapper', 'HRFPN', 'NASFPN', 'FPN_CARAFE', 'PAFPN',
    'NASFCOS_FPN', 'RFP', 'YOLOV3Neck'
]

最常用的应该是 FPN,一个典型用法是:

neck=dict(
    type='FPN',
    in_channels=[256, 512, 1024, 2048], # 骨架多尺度特征图输出通道
    out_channels=256, # 增强后通道输出
    num_outs=5), # 输出num_outs个多尺度特征图

head

目标检测算法输出一般包括分类和框坐标回归两个分支,不同算法 head 模块复杂程度不一样,灵活度比较高。在网络构建方面,理解目标检测算法主要是要理解 head 模块。

MMDetection 中 head 模块又划分为 two-stage 所需的 RoIHead 和 one-stage 所需的 DenseHead,

  • 所有的 one-stage 算法的 head 模块都在mmdet/models/dense_heads中
  • 而 two-stage 算法还包括额外的mmdet/models/roi_heads

几乎每个算法都包括一个独立的 head

# dense_heads:
__all__ = [
    'AnchorFreeHead', 'AnchorHead', 'GuidedAnchorHead', 'FeatureAdaption',
    'RPNHead', 'GARPNHead', 'RetinaHead', 'RetinaSepBNHead', 'GARetinaHead',
    'SSDHead', 'FCOSHead', 'RepPointsHead', 'FoveaHead',
    'FreeAnchorRetinaHead', 'ATSSHead', 'FSAFHead', 'NASFCOSHead',
    'PISARetinaHead', 'PISASSDHead', 'GFLHead', 'CornerHead', 'YOLACTHead',
    'YOLACTSegmHead', 'YOLACTProtonet', 'YOLOV3Head', 'PAAHead',
    'SABLRetinaHead', 'CentripetalHead', 'VFNetHead', 'TransformerHead'
]

需要注意的是:two-stage 或者 mutli-stage 算法,会额外包括一个区域提取器 roi extractor,用于将不同大小的 RoI 特征图统一成相同大小。

虽然 head 部分的网络构建比较简单,但是由于正负样本属性定义、正负样本采样和 bbox 编解码模块都在 head 模块中进行组合调用,故 MMDetection 中最复杂的模块就是 head。

下载配置文件

建议在 Conda环境中,在Pycharm中好像不能用,暂时还不知道是什么原因造成的

# 安装 mim
pip install openmim


mim search mmdet --model "mask r-cnn"
mim download mmdet --config "mask_rcnn_r50_fpn_2x_coco" --dest .

--dest . 中间有空格

运行测试模型

from mmdet.apis import init_detector, inference_detector, train_detector, show_result_pyplot
from mmdet.datasets import build_dataset
from mmcv import Config

import mmcv
import os.path as osp
import multiprocessing


if __name__ == '__main__':

    multiprocessing.freeze_support()

    config_file = 'solo_r50_fpn_3x_coco.py'
    checkpoint_file = 'solo_r50_fpn_3x_coco_20210901_012353-11d224d7.pth'

    model = init_detector(config_file, checkpoint_file, device='cuda:0')
    # print(model)

    cfg = Config.fromfile(config_file)

    dataset = [build_dataset(cfg.data.train)]
    mmcv.mkdir_or_exist(osp.abspath('./work_dir_sum'))
    train_detector(model, dataset, cfg, distributed=False, validate=False)


    # 推理演示图像
    result = inference_detector(model, '81.jpg')
    show_result_pyplot(model,'81.jpg', result)

标签: 贴片二极管bfp

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台